--- /srv/rebuilderd/tmp/rebuilderd4lbPQe/inputs/storebackup_3.5.2-1_all.deb +++ /srv/rebuilderd/tmp/rebuilderd4lbPQe/out/storebackup_3.5.2-1_all.deb ├── file list │ @@ -1,3 +1,3 @@ │ -rw-r--r-- 0 0 0 4 2025-08-27 10:21:58.000000 debian-binary │ --rw-r--r-- 0 0 0 3476 2025-08-27 10:21:58.000000 control.tar.xz │ --rw-r--r-- 0 0 0 1728352 2025-08-27 10:21:58.000000 data.tar.xz │ +-rw-r--r-- 0 0 0 3388 2025-08-27 10:21:58.000000 control.tar.xz │ +-rw-r--r-- 0 0 0 1728328 2025-08-27 10:21:58.000000 data.tar.xz ├── control.tar.xz │ ├── control.tar │ │ ├── file list │ │ │ @@ -1,7 +1,7 @@ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./ │ │ │ -rw-r--r-- 0 root (0) root (0) 28 2025-08-27 10:21:58.000000 ./conffiles │ │ │ -rw-r--r-- 0 root (0) root (0) 897 2025-08-27 10:21:58.000000 ./control │ │ │ --rw-r--r-- 0 root (0) root (0) 5897 2025-08-27 10:21:58.000000 ./md5sums │ │ │ +-rw-r--r-- 0 root (0) root (0) 4802 2025-08-27 10:21:58.000000 ./md5sums │ │ │ -rwxr-xr-x 0 root (0) root (0) 1849 2025-08-27 10:21:58.000000 ./postinst │ │ │ -rwxr-xr-x 0 root (0) root (0) 445 2025-08-27 10:21:58.000000 ./postrm │ │ │ -rwxr-xr-x 0 root (0) root (0) 270 2025-08-27 10:21:58.000000 ./prerm │ │ ├── ./control │ │ │ @@ -1,12 +1,12 @@ │ │ │ Package: storebackup │ │ │ Version: 3.5.2-1 │ │ │ Architecture: all │ │ │ Maintainer: Debian QA Group │ │ │ -Installed-Size: 3132 │ │ │ +Installed-Size: 2555 │ │ │ Depends: bzip2, perl:any │ │ │ Recommends: libio-compress-bzip2-perl │ │ │ Section: utils │ │ │ Priority: optional │ │ │ Homepage: https://savannah.nongnu.org/projects/storebackup │ │ │ Description: fancy compressing managing checksumming deduplicating hard-linking cp -ua │ │ │ Copies directory hierarchies recursively into another location, │ │ ├── ./md5sums │ │ │ ├── ./md5sums │ │ │ │┄ Files differ │ │ │ ├── line order │ │ │ │ @@ -1,25 +1,7 @@ │ │ │ │ -usr/bin/linkToDirs │ │ │ │ -usr/bin/llt │ │ │ │ -usr/bin/multiTail │ │ │ │ -usr/bin/storeBackup │ │ │ │ -usr/bin/storeBackupCheckBackup │ │ │ │ -usr/bin/storeBackupCheckSource │ │ │ │ -usr/bin/storeBackupConvertBackup │ │ │ │ -usr/bin/storeBackupDel │ │ │ │ -usr/bin/storeBackupMergeIsolatedBackup │ │ │ │ -usr/bin/storeBackupMount │ │ │ │ -usr/bin/storeBackupRecover │ │ │ │ -usr/bin/storeBackupReplicationWizard │ │ │ │ -usr/bin/storeBackupSearch │ │ │ │ -usr/bin/storeBackupSetupIsolatedMode │ │ │ │ -usr/bin/storeBackupUpdateBackup │ │ │ │ -usr/bin/storeBackupVersions │ │ │ │ -usr/bin/storeBackup_du │ │ │ │ -usr/bin/storeBackupls │ │ │ │ usr/lib/systemd/system/storebackup.service │ │ │ │ usr/lib/systemd/system/storebackup.timer │ │ │ │ usr/share/doc-base/storebackup.storebackup │ │ │ │ usr/share/doc/storebackup/README.1ST │ │ │ │ usr/share/doc/storebackup/README.Debian │ │ │ │ usr/share/doc/storebackup/_ATTENTION_ │ │ │ │ usr/share/doc/storebackup/changelog.Debian.gz ├── data.tar.xz │ ├── data.tar │ │ ├── file list │ │ │ @@ -1,32 +1,14 @@ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/cron.daily/ │ │ │ -rwxr-xr-x 0 root (0) root (0) 743 2025-08-27 10:21:58.000000 ./etc/cron.daily/storebackup │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./etc/storebackup.d/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/ │ │ │ --rwxr-xr-x 0 root (0) root (0) 26929 2025-08-27 10:21:58.000000 ./usr/bin/linkToDirs │ │ │ --rwxr-xr-x 0 root (0) root (0) 6981 2025-08-27 10:21:58.000000 ./usr/bin/llt │ │ │ --rwxr-xr-x 0 root (0) root (0) 9962 2025-08-27 10:21:58.000000 ./usr/bin/multiTail │ │ │ --rwxr-xr-x 0 root (0) root (0) 261644 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup │ │ │ --rwxr-xr-x 0 root (0) root (0) 33901 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckBackup │ │ │ --rwxr-xr-x 0 root (0) root (0) 13298 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckSource │ │ │ --rwxr-xr-x 0 root (0) root (0) 10817 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupConvertBackup │ │ │ --rwxr-xr-x 0 root (0) root (0) 21147 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupDel │ │ │ --rwxr-xr-x 0 root (0) root (0) 14455 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMergeIsolatedBackup │ │ │ --rwxr-xr-x 0 root (0) root (0) 23772 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMount │ │ │ --rwxr-xr-x 0 root (0) root (0) 27250 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupRecover │ │ │ --rwxr-xr-x 0 root (0) root (0) 19463 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupReplicationWizard │ │ │ --rwxr-xr-x 0 root (0) root (0) 17932 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSearch │ │ │ --rwxr-xr-x 0 root (0) root (0) 16806 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSetupIsolatedMode │ │ │ --rwxr-xr-x 0 root (0) root (0) 59496 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupUpdateBackup │ │ │ --rwxr-xr-x 0 root (0) root (0) 17311 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupVersions │ │ │ --rwxr-xr-x 0 root (0) root (0) 6689 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup_du │ │ │ --rwxr-xr-x 0 root (0) root (0) 11302 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupls │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/systemd/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/ │ │ │ -rw-r--r-- 0 root (0) root (0) 818 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/storebackup.service │ │ │ -rw-r--r-- 0 root (0) root (0) 157 2025-08-27 10:21:58.000000 ./usr/lib/systemd/system/storebackup.timer │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/share/ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/share/doc/ │ │ │ @@ -94,7 +76,25 @@ │ │ │ -rwxr-xr-x 0 root (0) root (0) 4812 2025-08-27 10:21:58.000000 ./usr/share/storebackup/lib/stbuLog.pl │ │ │ -rwxr-xr-x 0 root (0) root (0) 2679 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/stbuMd5Exec.pl │ │ │ -rwxr-xr-x 0 root (0) root (0) 1666 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/stbuMd5cp.pl │ │ │ -rw-r--r-- 0 root (0) root (0) 3045 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/storeBackupGlob.pl │ │ │ -rw-r--r-- 0 root (0) root (0) 161450 2022-04-20 09:13:40.000000 ./usr/share/storebackup/lib/storeBackupLib.pl │ │ │ -rw-r--r-- 0 root (0) root (0) 3716 2022-03-20 07:30:45.000000 ./usr/share/storebackup/lib/tail.pl │ │ │ -rw-r--r-- 0 root (0) root (0) 1511 2022-04-15 08:24:53.000000 ./usr/share/storebackup/lib/version.pl │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/linkToDirs -> ../share/storebackup/bin/linkToDirs │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/llt -> ../share/storebackup/bin/llt │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/multiTail -> ../share/storebackup/bin/multiTail │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup -> ../share/storebackup/bin/storeBackup │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckBackup -> ../share/storebackup/bin/storeBackupCheckBackup │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupCheckSource -> ../share/storebackup/bin/storeBackupCheckSource │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupConvertBackup -> ../share/storebackup/bin/storeBackupConvertBackup │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupDel -> ../share/storebackup/bin/storeBackupDel │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMergeIsolatedBackup -> ../share/storebackup/bin/storeBackupMergeIsolatedBackup │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupMount -> ../share/storebackup/bin/storeBackupMount │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupRecover -> ../share/storebackup/bin/storeBackupRecover │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupReplicationWizard -> ../share/storebackup/bin/storeBackupReplicationWizard │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSearch -> ../share/storebackup/bin/storeBackupSearch │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupSetupIsolatedMode -> ../share/storebackup/bin/storeBackupSetupIsolatedMode │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupUpdateBackup -> ../share/storebackup/bin/storeBackupUpdateBackup │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupVersions -> ../share/storebackup/bin/storeBackupVersions │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackup_du -> ../share/storebackup/bin/storeBackup_du │ │ │ +lrwxrwxrwx 0 root (0) root (0) 0 2025-08-27 10:21:58.000000 ./usr/bin/storeBackupls -> ../share/storebackup/bin/storeBackupls │ │ ├── ./usr/bin/linkToDirs │ │ │ @@ -1,1684 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...use │ │ │ -00000300: 504f 5349 583b 0a75 7365 2073 7472 6963 POSIX;.use stric │ │ │ -00000310: 743b 0a75 7365 2077 6172 6e69 6e67 733b t;.use warnings; │ │ │ -00000320: 0a0a 7573 6520 4663 6e74 6c20 7177 284f ..use Fcntl qw(O │ │ │ -00000330: 5f52 4457 5220 4f5f 4352 4541 5429 3b0a _RDWR O_CREAT);. │ │ │ -00000340: 7573 6520 504f 5349 583b 0a0a 246d 6169 use POSIX;..$mai │ │ │ -00000350: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ -00000360: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ -00000370: 7573 6520 4442 5f46 696c 653b 2020 2020 use DB_File; │ │ │ -00000380: 2020 2020 2020 2023 2042 6572 6b65 6c65 # Berkele │ │ │ -00000390: 7920 4442 0a0a 0a73 7562 206c 6962 5061 y DB...sub libPa │ │ │ -000003a0: 7468 0a7b 0a20 2020 206d 7920 2466 696c th.{. my $fil │ │ │ -000003b0: 6520 3d20 7368 6966 743b 0a0a 2020 2020 e = shift;.. │ │ │ -000003c0: 6d79 2024 6469 723b 0a0a 2020 2020 2320 my $dir;.. # │ │ │ -000003d0: 4661 6c6c 7320 4461 7465 6920 7365 6c62 Falls Datei selb │ │ │ -000003e0: 7374 2065 696e 2073 796d 6c69 6e6b 2069 st ein symlink i │ │ │ -000003f0: 7374 2c20 736f 6c61 6e67 6520 666f 6c67 st, solange folg │ │ │ -00000400: 656e 2c20 6269 7320 6175 6667 656c c3b6 en, bis aufgel.. │ │ │ -00000410: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f │ │ │ -00000420: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil │ │ │ -00000430: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{. │ │ │ -00000440: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = │ │ │ -00000450: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file); │ │ │ -00000460: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst │ │ │ -00000470: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n │ │ │ -00000480: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e "/").. {... │ │ │ -00000490: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\/] │ │ │ -000004a0: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. │ │ │ -000004b0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. │ │ │ -000004c0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li │ │ │ -000004d0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}... │ │ │ -000004e0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = │ │ │ -000004f0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ -00000500: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = " │ │ │ -00000510: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file";. }. │ │ │ -00000520: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p │ │ │ -00000530: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR "<$f │ │ │ -00000540: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex │ │ │ -00000550: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\n";..exit 1 │ │ │ -00000560: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di │ │ │ -00000570: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= "/../lib"; │ │ │ -00000580: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad │ │ │ -00000590: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth │ │ │ -000005a0: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old │ │ │ -000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005c0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old │ │ │ -000005d0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd │ │ │ -000005e0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {.. │ │ │ -000005f0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b │ │ │ -00000600: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $ │ │ │ -00000610: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $ │ │ │ -00000620: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return │ │ │ -00000630: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir( │ │ │ -00000640: 2224 6162 7344 6972 2466 696c 6522 2929 "$absDir$file")) │ │ │ -00000650: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -00000660: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -00000670: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR "<$dir> doe │ │ │ -00000680: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000690: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\n";. }.} │ │ │ -000006a0: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi │ │ │ -000006b0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name │ │ │ -000006c0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r │ │ │ -000006d0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam │ │ │ -000006e0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name │ │ │ -000006f0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\//); # n │ │ │ -00000700: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat │ │ │ -00000710: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my ( │ │ │ -00000720: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $ │ │ │ -00000730: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\/ │ │ │ -00000740: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di │ │ │ -00000750: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir │ │ │ -00000760: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); │ │ │ -00000770: 2020 2020 2020 2020 2020 2023 2067 696c # gil │ │ │ -00000780: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f │ │ │ -00000790: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu │ │ │ -000007a0: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file) │ │ │ -000007b0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p │ │ │ -000007c0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath( │ │ │ -000007d0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN │ │ │ -000007e0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, "$req";...req │ │ │ -000007f0: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku │ │ │ -00000800: 704c 6962 2e70 6c27 3b0a 7265 7175 6972 pLib.pl';.requir │ │ │ -00000810: 6520 2763 6865 636b 5061 7261 6d32 2e70 e 'checkParam2.p │ │ │ -00000820: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che │ │ │ -00000830: 636b 4f62 6a50 6172 2e70 6c27 3b0a 7265 ckObjPar.pl';.re │ │ │ -00000840: 7175 6972 6520 2770 724c 6f67 2e70 6c27 quire 'prLog.pl' │ │ │ -00000850: 3b0a 7265 7175 6972 6520 2776 6572 7369 ;.require 'versi │ │ │ -00000860: 6f6e 2e70 6c27 3b0a 7265 7175 6972 6520 on.pl';.require │ │ │ -00000870: 2766 696c 6544 6972 2e70 6c27 3b0a 7265 'fileDir.pl';.re │ │ │ -00000880: 7175 6972 6520 2764 6174 6554 6f6f 6c73 quire 'dateTools │ │ │ -00000890: 2e70 6c27 3b0a 0a6d 7920 2474 6d70 6469 .pl';..my $tmpdi │ │ │ -000008a0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; │ │ │ -000008b0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau │ │ │ -000008c0: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir │ │ │ -000008d0: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR' │ │ │ -000008e0: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN │ │ │ -000008f0: 567b 2754 4d50 4449 5227 7d3b 0a0a 0a0a V{'TMPDIR'};.... │ │ │ -00000900: 2320 6c69 6e6b 546f 4469 7273 2e70 6c20 # linkToDirs.pl │ │ │ -00000910: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK │ │ │ -00000920: 5550 5645 5253 494f 4e0a 0a3d 6865 6164 UPVERSION..=head │ │ │ -00000930: 3120 4e41 4d45 0a0a 6c69 6e6b 546f 4469 1 NAME..linkToDi │ │ │ -00000940: 7273 2e70 6c20 2d20 6861 7264 206c 696e rs.pl - hard lin │ │ │ -00000950: 6b73 2066 696c 6573 2069 6e20 6469 7265 ks files in dire │ │ │ -00000960: 6374 6f72 6965 7320 7769 7468 206f 7468 ctories with oth │ │ │ -00000970: 6572 730a 0a3d 6865 6164 3120 5359 4e4f ers..=head1 SYNO │ │ │ -00000980: 5053 4953 0a0a 096c 696e 6b54 6f44 6972 PSIS...linkToDir │ │ │ -00000990: 732e 706c 205b 2d2d 6c69 6e6b 5769 7468 s.pl [--linkWith │ │ │ -000009a0: 2063 6f70 7942 6163 6b75 7044 6972 5d20 copyBackupDir] │ │ │ -000009b0: 5b2d 2d6c 696e 6b57 6974 6820 2e2e 2e5d [--linkWith ...] │ │ │ -000009c0: 0a09 0920 2020 2020 202d 2d74 6172 6765 ... --targe │ │ │ -000009d0: 7444 6972 2074 6172 6765 7446 6f72 536f tDir targetForSo │ │ │ -000009e0: 7572 6365 4469 720a 0909 2020 2020 2020 urceDir... │ │ │ -000009f0: 5b2d 2d70 726f 6772 6573 7352 6570 6f72 [--progressRepor │ │ │ -00000a00: 7420 6e75 6d62 6572 5b2c 7469 6d65 6672 t number[,timefr │ │ │ -00000a10: 616d 655d 5d20 0a09 0920 2020 2020 2020 ame]] ... │ │ │ -00000a20: 5b2d 2d70 7269 6e74 4465 7074 685d 205b [--printDepth] [ │ │ │ -00000a30: 2d2d 646f 6e74 4c69 6e6b 5379 6d6c 696e --dontLinkSymlin │ │ │ -00000a40: 6b73 5d0a 0909 2020 2020 2020 5b2d 2d69 ks]... [--i │ │ │ -00000a50: 676e 6f72 6545 7272 6f72 735d 205b 2d2d gnoreErrors] [-- │ │ │ -00000a60: 7361 7665 5241 4d5d 205b 2d54 2074 6d70 saveRAM] [-T tmp │ │ │ -00000a70: 6469 725d 0a09 0920 2020 2020 205b 2d2d dir]... [-- │ │ │ -00000a80: 6372 6561 7465 5370 6172 7365 4669 6c65 createSparseFile │ │ │ -00000a90: 7320 5b2d 2d62 6c6f 636b 5369 7a65 5d5d s [--blockSize]] │ │ │ -00000aa0: 0a09 0920 2020 2020 205b 2d2d 6d61 7848 ... [--maxH │ │ │ -00000ab0: 6172 644c 696e 6b73 5d0a 0909 2020 2020 ardLinks]... │ │ │ -00000ac0: 2020 736f 7572 6365 4469 7220 2e2e 2e0a sourceDir .... │ │ │ -00000ad0: 0a3d 6865 6164 3120 4445 5343 5249 5054 .=head1 DESCRIPT │ │ │ -00000ae0: 494f 4e0a 0a4d 616b 6520 6120 6465 2d64 ION..Make a de-d │ │ │ -00000af0: 7570 6c69 6361 7465 6420 636f 7079 206f uplicated copy o │ │ │ -00000b00: 6620 6669 6c65 7320 696e 206f 6e65 2064 f files in one d │ │ │ -00000b10: 6972 6563 746f 7279 2074 6f20 616e 6f74 irectory to anot │ │ │ -00000b20: 6865 7220 6c6f 6361 7469 6f6e 2e20 0a55 her location. .U │ │ │ -00000b30: 7469 6c69 7a65 7320 6861 7264 206c 696e tilizes hard lin │ │ │ -00000b40: 6b73 2074 6f20 7468 6520 6675 6c6c 2065 ks to the full e │ │ │ -00000b50: 7874 656e 7420 706f 7373 6962 6c65 2074 xtent possible t │ │ │ -00000b60: 6f20 6176 6f69 6420 7761 7374 696e 6720 o avoid wasting │ │ │ -00000b70: 7374 6f72 6167 650a 7370 6163 652e 0a0a storage.space... │ │ │ -00000b80: 5573 6167 6520 6e6f 7465 3a20 7768 6572 Usage note: wher │ │ │ -00000b90: 6561 7320 6d61 6e79 2066 696c 6520 636f eas many file co │ │ │ -00000ba0: 7079 2075 7469 6c69 7469 6573 2068 6176 py utilities hav │ │ │ -00000bb0: 6520 6a75 7374 2074 776f 2070 7269 6d61 e just two prima │ │ │ -00000bc0: 7279 2070 6172 616d 6574 6572 730a 2874 ry parameters.(t │ │ │ -00000bd0: 6865 2073 6f75 7263 6520 616e 6420 6465 he source and de │ │ │ -00000be0: 7374 696e 6174 696f 6e29 2c20 6c69 6e6b stination), link │ │ │ -00000bf0: 546f 4469 7273 2e70 6c20 616c 6c6f 7773 ToDirs.pl allows │ │ │ -00000c00: 2074 6872 6565 2070 7269 6d61 7279 2070 three primary p │ │ │ -00000c10: 6172 616d 6574 6572 733a 0a20 2020 202a arameters:. * │ │ │ -00000c20: 2073 6f75 7263 6520 2873 6f75 7263 6544 source (sourceD │ │ │ -00000c30: 6972 290a 2020 2020 2a20 6465 7374 696e ir). * destin │ │ │ -00000c40: 6174 696f 6e20 2874 6172 6765 7444 6972 ation (targetDir │ │ │ -00000c50: 290a 2020 2020 2a20 616e 6420 6120 7265 ). * and a re │ │ │ -00000c60: 6665 7265 6e63 6520 6c6f 6361 7469 6f6e ference location │ │ │ -00000c70: 2028 6c69 6e6b 5769 7468 205b 6f70 7469 (linkWith [opti │ │ │ -00000c80: 6f6e 616c 5d29 0a54 6865 2072 6566 6572 onal]).The refer │ │ │ -00000c90: 656e 6365 206c 6f63 6174 696f 6e20 6973 ence location is │ │ │ -00000ca0: 2074 6865 2070 6c61 6365 2074 6f20 6c6f the place to lo │ │ │ -00000cb0: 6f6b 2066 6f72 2065 7869 7374 696e 6720 ok for existing │ │ │ -00000cc0: 636f 6e74 656e 7420 7768 6963 680a 6361 content which.ca │ │ │ -00000cd0: 6e20 6265 2068 6172 6420 6c69 6e6b 6564 n be hard linked │ │ │ -00000ce0: 2074 6f2e 2046 696c 6573 2077 6974 6820 to. Files with │ │ │ -00000cf0: 7468 6520 7361 6d65 2063 6f6e 7465 6e74 the same content │ │ │ -00000d00: 7320 696e 2073 6f75 7263 6544 6972 2061 s in sourceDir a │ │ │ -00000d10: 7265 2068 6172 640a 6c69 6e6b 6564 2061 re hard.linked a │ │ │ -00000d20: 6c77 6179 7320 696e 2074 6172 6765 7444 lways in targetD │ │ │ -00000d30: 6972 2e0a 0a3d 6865 6164 3120 4f50 5449 ir...=head1 OPTI │ │ │ -00000d40: 4f4e 530a 0a3d 6f76 6572 2038 0a0a 3d69 ONS..=over 8..=i │ │ │ -00000d50: 7465 6d20 423c 2d2d 6c69 6e6b 5769 7468 tem B<--linkWith │ │ │ -00000d60: 3e2c 2042 3c2d 773e 0a0a 2020 2020 6c69 >, B<-w>.. li │ │ │ -00000d70: 6e6b 5769 7468 2074 6172 6765 743b 2074 nkWith target; t │ │ │ -00000d80: 6865 2062 6163 6b75 7073 2077 6865 7265 he backups where │ │ │ -00000d90: 206f 7468 6572 2062 6163 6b75 7073 2068 other backups h │ │ │ -00000da0: 6176 6520 746f 2062 650a 2020 2020 6c69 ave to be. li │ │ │ -00000db0: 6e6b 6564 2074 6f20 7573 6520 7468 6973 nked to use this │ │ │ -00000dc0: 2070 6172 616d 6574 6572 206d 756c 7469 parameter multi │ │ │ -00000dd0: 706c 6520 7469 6d65 7320 666f 7220 6d75 ple times for mu │ │ │ -00000de0: 6c74 6970 6c65 0a20 2020 2064 6972 6563 ltiple. direc │ │ │ -00000df0: 746f 7269 6573 0a20 2020 2069 6620 796f tories. if yo │ │ │ -00000e00: 7520 646f 206e 6f74 2075 7365 2074 6869 u do not use thi │ │ │ -00000e10: 7320 6f70 7469 6f6e 2c20 7468 6520 7072 s option, the pr │ │ │ -00000e20: 6f67 7261 6d20 7769 6c6c 206a 7573 7420 ogram will just │ │ │ -00000e30: 636f 7079 2061 6e64 0a20 2020 206c 696e copy and. lin │ │ │ -00000e40: 6b20 2773 6f75 7263 6544 6972 270a 0a3d k 'sourceDir'..= │ │ │ -00000e50: 6974 656d 2042 3c2d 2d74 6172 6765 7444 item B<--targetD │ │ │ -00000e60: 6972 3e2c 2042 3c2d 743e 0a0a 2020 2020 ir>, B<-t>.. │ │ │ -00000e70: 7061 7468 2873 2920 746f 2064 6972 6563 path(s) to direc │ │ │ -00000e80: 746f 7279 2077 6865 7265 2062 6163 6b75 tory where backu │ │ │ -00000e90: 7073 2073 7065 6369 6669 6564 2062 790a ps specified by. │ │ │ -00000ea0: 2020 2020 2d2d 736f 7572 6365 4469 7220 --sourceDir │ │ │ -00000eb0: 7368 6f75 6c64 2062 6520 706c 6163 6564 should be placed │ │ │ -00000ec0: 0a0a 3d69 7465 6d20 423c 2d2d 7072 6f67 ..=item B<--prog │ │ │ -00000ed0: 7265 7373 5265 706f 7274 3e2c 2042 3c2d ressReport>, B<- │ │ │ -00000ee0: 503e 0a0a 2020 2020 7072 696e 7420 7072 P>.. print pr │ │ │ -00000ef0: 6f67 7265 7373 2072 6570 6f72 7420 6166 ogress report af │ │ │ -00000f00: 7465 7220 6561 6368 2027 6e75 6d62 6572 ter each 'number │ │ │ -00000f10: 2720 6669 6c65 730a 2020 2020 6164 6469 ' files. addi │ │ │ -00000f20: 7469 6f6e 616c 2079 6f75 206d 6179 2061 tional you may a │ │ │ -00000f30: 6464 2061 2074 696d 6520 6672 616d 6520 dd a time frame │ │ │ -00000f40: 6166 7465 7220 7768 6963 6820 6120 6d65 after which a me │ │ │ -00000f50: 7373 6167 6520 6973 0a20 2020 2070 7269 ssage is. pri │ │ │ -00000f60: 6e74 6564 0a20 2020 2069 6620 796f 7520 nted. if you │ │ │ -00000f70: 7761 6e74 2074 6f20 7072 696e 7420 6120 want to print a │ │ │ -00000f80: 7265 706f 7274 2065 6163 6820 3130 3030 report each 1000 │ │ │ -00000f90: 2066 696c 6573 2061 6e64 2061 6674 6572 files and after │ │ │ -00000fa0: 0a20 2020 206f 6e65 206d 696e 7574 6520 . one minute │ │ │ -00000fb0: 616e 6420 3130 2073 6563 6f6e 6473 2c20 and 10 seconds, │ │ │ -00000fc0: 7573 653a 202d 5020 3130 3030 2c31 6d31 use: -P 1000,1m1 │ │ │ -00000fd0: 3073 0a0a 3d69 7465 6d20 423c 2d2d 7072 0s..=item B<--pr │ │ │ -00000fe0: 696e 7444 6570 7468 3e2c 2042 3c2d 443e intDepth>, B<-D> │ │ │ -00000ff0: 0a0a 2020 2020 7072 696e 7420 6465 7074 .. print dept │ │ │ -00001000: 6820 6f66 2061 6374 7561 6c20 7265 6164 h of actual read │ │ │ -00001010: 2064 6972 6563 746f 7279 2064 7572 696e directory durin │ │ │ -00001020: 6720 6261 636b 7570 0a0a 3d69 7465 6d20 g backup..=item │ │ │ -00001030: 423c 2d2d 646f 6e74 4c69 6e6b 5379 6d6c B<--dontLinkSyml │ │ │ -00001040: 696e 6b73 3e0a 0a20 2020 2064 6f20 6e6f inks>.. do no │ │ │ -00001050: 7420 6861 7264 206c 696e 6b20 6964 656e t hard link iden │ │ │ -00001060: 7469 6361 6c20 7379 6d62 6f6c 6963 206c tical symbolic l │ │ │ -00001070: 696e 6b73 0a0a 3d69 7465 6d20 423c 2d2d inks..=item B<-- │ │ │ -00001080: 6967 6e6f 7265 4572 726f 7273 3e2c 2042 ignoreErrors>, B │ │ │ -00001090: 3c2d 693e 0a0a 2020 2020 6966 2073 6574 <-i>.. if set │ │ │ -000010a0: 2c20 646f 6e27 7420 7374 6f70 2069 6e20 , don't stop in │ │ │ -000010b0: 6361 7365 206f 6620 6572 726f 7273 2077 case of errors w │ │ │ -000010c0: 6865 6e20 636f 7079 696e 670a 0a3d 6974 hen copying..=it │ │ │ -000010d0: 656d 2042 3c2d 2d73 6176 6552 414d 3e0a em B<--saveRAM>. │ │ │ -000010e0: 0a20 2020 2077 7269 7465 2074 656d 706f . write tempo │ │ │ -000010f0: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i │ │ │ -00001100: 6e20 2d2d 746d 7064 6972 0a20 2020 2075 n --tmpdir. u │ │ │ -00001110: 7365 2074 6869 7320 6966 2079 6f75 2064 se this if you d │ │ │ -00001120: 6f20 6e6f 7420 6861 7665 2065 6e6f 7567 o not have enoug │ │ │ -00001130: 6820 5241 4d0a 0a3d 6974 656d 2042 3c2d h RAM..=item B<- │ │ │ -00001140: 2d74 6d70 6469 723e 2c20 423c 2d54 3e0a -tmpdir>, B<-T>. │ │ │ -00001150: 0a20 2020 2064 6972 6563 746f 7279 2066 . directory f │ │ │ -00001160: 6f72 2074 656d 706f 7261 7279 2066 696c or temporary fil │ │ │ -00001170: 6573 2c20 6465 6661 756c 7420 6973 203c es, default is < │ │ │ -00001180: 2f74 6d70 3e0a 0a3d 6974 656d 2042 3c2d /tmp>..=item B<- │ │ │ -00001190: 2d63 7265 6174 6553 7061 7273 6546 696c -createSparseFil │ │ │ -000011a0: 6573 3e2c 2042 3c2d 733e 0a0a 2020 2020 es>, B<-s>.. │ │ │ -000011b0: 6966 2061 2066 696c 6520 6973 2069 6e64 if a file is ind │ │ │ -000011c0: 6963 6174 6564 2061 7320 6120 7370 6172 icated as a spar │ │ │ -000011d0: 7365 2066 696c 6520 616e 6420 7468 6174 se file and that │ │ │ -000011e0: 2066 696c 6520 6861 7320 746f 2062 650a file has to be. │ │ │ -000011f0: 2020 2020 636f 7069 6564 2c20 7468 656e copied, then │ │ │ -00001200: 2065 7874 6572 6e61 6c20 7072 6f67 7261 external progra │ │ │ -00001210: 6d20 2763 7027 2069 7320 6361 6c6c 6564 m 'cp' is called │ │ │ -00001220: 2074 6f20 636f 7079 2074 6861 7420 6669 to copy that fi │ │ │ -00001230: 6c65 0a20 2020 2028 676e 7563 7020 2f20 le. (gnucp / │ │ │ -00001240: 6c69 6e75 7820 646f 6573 2073 6f6d 6520 linux does some │ │ │ -00001250: 696e 7370 6563 7469 6f6e 2061 626f 7574 inspection about │ │ │ -00001260: 2073 7061 7273 6520 6669 6c65 732c 2069 sparse files, i │ │ │ -00001270: 6620 796f 7572 0a20 2020 204f 5320 7265 f your. OS re │ │ │ -00001280: 6c61 7465 6420 7665 7273 696f 6e20 6f66 lated version of │ │ │ -00001290: 2063 7020 646f 6573 206e 6f74 2073 7570 cp does not sup │ │ │ -000012a0: 706f 7274 2074 6869 7320 6675 6e63 7469 port this functi │ │ │ -000012b0: 6f6e 616c 6974 792c 0a20 2020 2074 6865 onality,. the │ │ │ -000012c0: 6e20 7468 6973 206f 7074 696f 6e20 7769 n this option wi │ │ │ -000012d0: 6c6c 206e 6f74 2077 6f72 6b20 666f 7220 ll not work for │ │ │ -000012e0: 796f 7529 0a0a 3d69 7465 6d20 423c 2d2d you)..=item B<-- │ │ │ -000012f0: 626c 6f63 6b53 697a 653e 0a0a 2020 2020 blockSize>.. │ │ │ -00001300: 626c 6f63 6b20 7369 7a65 2075 7365 6420 block size used │ │ │ -00001310: 746f 2063 6865 636b 2069 6620 6120 6669 to check if a fi │ │ │ -00001320: 6c65 2069 7320 2f20 6d61 7920 6265 2061 le is / may be a │ │ │ -00001330: 2073 7061 7273 6520 6669 6c65 0a20 2020 sparse file. │ │ │ -00001340: 2064 6566 6175 6c74 2069 7320 3531 3220 default is 512 │ │ │ -00001350: 6279 7465 7320 2877 6869 6368 2073 686f bytes (which sho │ │ │ -00001360: 756c 6420 6265 2066 696e 6520 666f 7220 uld be fine for │ │ │ -00001370: 6d6f 7374 2066 696c 6520 7379 7374 656d most file system │ │ │ -00001380: 7329 0a20 2020 200a 3d69 7465 6d20 423c s). .=item B< │ │ │ -00001390: 736f 7572 6365 4469 723e 0a0a 2020 2020 sourceDir>.. │ │ │ -000013a0: 7061 7468 2873 2920 746f 2064 6972 6563 path(s) to direc │ │ │ -000013b0: 746f 7269 6573 2077 6869 6368 2068 6176 tories which hav │ │ │ -000013c0: 6520 746f 2062 6520 6c69 6e6b 6564 2074 e to be linked t │ │ │ -000013d0: 6f20 6f74 6865 7220 6261 636b 7570 730a o other backups. │ │ │ -000013e0: 2020 2020 7573 6520 7468 6973 2070 6172 use this par │ │ │ -000013f0: 616d 6574 6572 206d 756c 7469 706c 6520 ameter multiple │ │ │ -00001400: 7469 6d65 7320 666f 7220 6d75 6c74 6970 times for multip │ │ │ -00001410: 6c65 2064 6972 6563 746f 7269 6573 0a0a le directories.. │ │ │ -00001420: 3d69 7465 6d20 423c 2d2d 6d61 7848 6172 =item B<--maxHar │ │ │ -00001430: 644c 696e 6b73 3e0a 0a20 2020 206d 6178 dLinks>.. max │ │ │ -00001440: 696d 756d 206e 756d 6265 7220 6f66 2068 imum number of h │ │ │ -00001450: 6172 6420 6c69 6e6b 7320 746f 2075 7365 ard links to use │ │ │ -00001460: 0a20 2020 207a 6572 6f20 2864 6566 6175 . zero (defau │ │ │ -00001470: 6c74 2920 6d65 616e 7320 6c69 6d69 7420 lt) means limit │ │ │ -00001480: 6465 7065 6e64 7320 6f6e 2066 696c 6520 depends on file │ │ │ -00001490: 7379 7374 656d 2075 7365 6420 6f6e 6c79 system used only │ │ │ -000014a0: 0a0a 3d62 6163 6b0a 0a3d 6865 6164 3120 ..=back..=head1 │ │ │ -000014b0: 434f 5059 5249 4748 540a 0a43 6f70 7972 COPYRIGHT..Copyr │ │ │ -000014c0: 6967 6874 2028 6329 2032 3031 322d 3230 ight (c) 2012-20 │ │ │ -000014d0: 3232 2062 7920 4865 696e 7a2d 4a6f 7365 22 by Heinz-Jose │ │ │ -000014e0: 6620 436c 6165 7320 2873 6565 2052 4541 f Claes (see REA │ │ │ -000014f0: 444d 4529 2e0a 5075 626c 6973 6865 6420 DME)..Published │ │ │ -00001500: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge │ │ │ -00001510: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ -00001520: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l │ │ │ -00001530: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c │ │ │ -00001540: 7574 0a0a 0a6d 7920 2448 656c 7020 3d20 ut...my $Help = │ │ │ -00001550: 263a 3a67 6574 506f 6432 5465 7874 2824 &::getPod2Text($ │ │ │ -00001560: 3029 3b0a 0a26 7072 696e 7456 6572 7369 0);..&printVersi │ │ │ -00001570: 6f6e 285c 4041 5247 562c 2027 2d56 272c on(\@ARGV, '-V', │ │ │ -00001580: 2027 2d2d 7665 7273 696f 6e27 293b 0a0a '--version');.. │ │ │ -00001590: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. │ │ │ -000015a0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n │ │ │ -000015b0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists' │ │ │ -000015c0: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... │ │ │ -000015d0: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt │ │ │ -000015e0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000015f0: 203d 3e20 276c 696e 6b57 6974 6827 2c0a => 'linkWith',. │ │ │ -00001600: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001610: 7469 6f6e 2720 3d3e 2027 2d77 272c 0a09 tion' => '-w',.. │ │ │ -00001620: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00001630: 6173 2720 3d3e 2027 2d2d 6c69 6e6b 5769 as' => '--linkWi │ │ │ -00001640: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ -00001650: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes', │ │ │ -00001660: 0a09 0909 0909 2020 2020 272d 6d75 6c74 ...... '-mult │ │ │ -00001670: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'), │ │ │ -00001680: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001690: 2827 2d6e 616d 6527 203d 3e20 2774 6172 ('-name' => 'tar │ │ │ -000016a0: 6765 7444 6972 272c 0a09 0909 0909 2020 getDir',...... │ │ │ -000016b0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -000016c0: 3e20 272d 7427 2c0a 0909 0909 0920 2020 > '-t',...... │ │ │ -000016d0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -000016e0: 272d 2d74 6172 6765 7444 6972 272c 0a09 '--targetDir',.. │ │ │ -000016f0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00001700: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ -00001710: 2020 2020 272d 6d75 7374 5f62 6527 203d '-must_be' = │ │ │ -00001720: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ -00001730: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00001740: 2720 3d3e 2027 7072 6f67 7265 7373 5265 ' => 'progressRe │ │ │ -00001750: 706f 7274 272c 0a09 0909 0909 2020 2020 port',...... │ │ │ -00001760: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001770: 272d 2d70 726f 6772 6573 7352 6570 6f72 '--progressRepor │ │ │ -00001780: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ -00001790: 6c5f 616c 6961 7327 203d 3e20 272d 5027 l_alias' => '-P' │ │ │ -000017a0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -000017b0: 6b65 7927 203d 3e20 2770 726f 6772 6573 key' => 'progres │ │ │ -000017c0: 7352 6570 6f72 7427 2c0a 0909 0909 0920 sReport',...... │ │ │ -000017d0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -000017e0: 2030 292c 0a09 0909 094f 7074 696f 6e2d 0),.....Option- │ │ │ -000017f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00001800: 2770 7269 6e74 4465 7074 6827 2c0a 0909 'printDepth',... │ │ │ -00001810: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001820: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7444 on' => '--printD │ │ │ -00001830: 6570 7468 272c 0a09 0909 0909 2020 2020 epth',...... │ │ │ -00001840: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001850: 2d44 272c 0a09 0909 0909 2020 2020 272d -D',...... '- │ │ │ -00001860: 6366 5f6b 6579 2720 3d3e 2027 7072 696e cf_key' => 'prin │ │ │ -00001870: 7444 6570 7468 272c 0a09 0909 0909 2020 tDepth',...... │ │ │ -00001880: 2020 272d 6366 5f6e 6f4f 7074 5365 7427 '-cf_noOptSet' │ │ │ -00001890: 203d 3e20 5b27 7965 7327 2c20 276e 6f27 => ['yes', 'no' │ │ │ -000018a0: 5d29 2c0a 0909 0909 4f70 7469 6f6e 2d3e ]),.....Option-> │ │ │ -000018b0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -000018c0: 646f 6e74 4c69 6e6b 5379 6d6c 696e 6b73 dontLinkSymlinks │ │ │ -000018d0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -000018e0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d64 _option' => '--d │ │ │ -000018f0: 6f6e 744c 696e 6b53 796d 6c69 6e6b 7327 ontLinkSymlinks' │ │ │ -00001900: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -00001910: 6577 2827 2d6e 616d 6527 203d 3e20 2769 ew('-name' => 'i │ │ │ -00001920: 676e 6f72 6545 7272 6f72 7327 2c0a 0909 gnoreErrors',... │ │ │ -00001930: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001940: 6f6e 2720 3d3e 2027 2d69 272c 0a09 0909 on' => '-i',.... │ │ │ -00001950: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -00001960: 2720 3d3e 2027 2d2d 6967 6e6f 7265 4572 ' => '--ignoreEr │ │ │ -00001970: 726f 7273 2729 2c0a 0909 0909 4f70 7469 rors'),.....Opti │ │ │ -00001980: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001990: 3d3e 2027 7361 7665 5241 4d27 2c0a 0909 => 'saveRAM',... │ │ │ -000019a0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -000019b0: 6f6e 2720 3d3e 2027 2d2d 7361 7665 5241 on' => '--saveRA │ │ │ -000019c0: 4d27 292c 0a09 0909 094f 7074 696f 6e2d M'),.....Option- │ │ │ -000019d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -000019e0: 2763 7265 6174 6553 7061 7273 6546 696c 'createSparseFil │ │ │ -000019f0: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ -00001a00: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001a10: 2d63 7265 6174 6553 7061 7273 6546 696c -createSparseFil │ │ │ -00001a20: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ -00001a30: 636c 5f61 6c69 6173 2720 3d3e 2027 2d73 cl_alias' => '-s │ │ │ -00001a40: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00001a50: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001a60: 626c 6f63 6b53 697a 6527 2c0a 0909 0909 blockSize',..... │ │ │ -00001a70: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00001a80: 2720 3d3e 2027 2d2d 626c 6f63 6b53 697a ' => '--blockSiz │ │ │ -00001a90: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d │ │ │ -00001aa0: 6566 6175 6c74 2720 3d3e 2035 3132 2c0a efault' => 512,. │ │ │ -00001ab0: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ -00001ac0: 6966 2720 3d3e 2027 5b63 7265 6174 6553 if' => '[createS │ │ │ -00001ad0: 7061 7273 6546 696c 6573 5d27 2c0a 0909 parseFiles]',... │ │ │ -00001ae0: 0909 0920 2020 2027 2d70 6174 7465 726e ... '-pattern │ │ │ -00001af0: 2720 3d3e 2027 5c41 5c64 2b5c 5a27 292c ' => '\A\d+\Z'), │ │ │ -00001b00: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001b10: 2827 2d6e 616d 6527 203d 3e20 2774 6d70 ('-name' => 'tmp │ │ │ -00001b20: 6469 7227 2c0a 0909 0909 0920 2020 2027 dir',...... ' │ │ │ -00001b30: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001b40: 2d54 272c 0a09 0909 0909 2020 2020 272d -T',...... '- │ │ │ -00001b50: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001b60: 746d 7064 6972 272c 0a09 0909 0909 2020 tmpdir',...... │ │ │ -00001b70: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => │ │ │ -00001b80: 2474 6d70 6469 7229 2c0a 0909 0909 4f70 $tmpdir),.....Op │ │ │ -00001b90: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00001ba0: 2720 3d3e 2027 6d61 7848 6172 644c 696e ' => 'maxHardLin │ │ │ -00001bb0: 6b73 272c 0a09 0909 0909 2020 2020 272d ks',...... '- │ │ │ -00001bc0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001bd0: 2d6d 6178 4861 7264 4c69 6e6b 7327 2c0a -maxHardLinks',. │ │ │ -00001be0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ -00001bf0: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... │ │ │ -00001c00: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' => │ │ │ -00001c10: 2027 5c41 5c64 2b5c 5a27 290a 0909 0909 '\A\d+\Z')..... │ │ │ -00001c20: 5d29 3b0a 0a24 4368 6563 6b50 6172 2d3e ]);..$CheckPar-> │ │ │ -00001c30: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' => │ │ │ -00001c40: 205c 4041 5247 562c 0a20 2020 2020 2020 \@ARGV,. │ │ │ -00001c50: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help │ │ │ -00001c60: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. │ │ │ -00001c70: 2020 2020 2020 2020 2020 2020 293b 0a0a );.. │ │ │ -00001c80: 6d79 2024 6c69 6e6b 5769 7468 203d 2024 my $linkWith = $ │ │ │ -00001c90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001ca0: 5769 7468 5061 7228 276c 696e 6b57 6974 WithPar('linkWit │ │ │ -00001cb0: 6827 293b 0a40 246c 696e 6b57 6974 6820 h');.@$linkWith │ │ │ -00001cc0: 3d20 2829 2075 6e6c 6573 7320 246c 696e = () unless $lin │ │ │ -00001cd0: 6b57 6974 683b 0a6d 7920 2474 6172 6765 kWith;.my $targe │ │ │ -00001ce0: 7444 6972 203d 2024 4368 6563 6b50 6172 tDir = $CheckPar │ │ │ -00001cf0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00001d00: 2774 6172 6765 7444 6972 2729 3b0a 6d79 'targetDir');.my │ │ │ -00001d10: 2024 7072 6f67 7265 7373 5265 706f 7274 $progressReport │ │ │ -00001d20: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00001d30: 744f 7074 5769 7468 5061 7228 2770 726f tOptWithPar('pro │ │ │ -00001d40: 6772 6573 7352 6570 6f72 7427 293b 0a6d gressReport');.m │ │ │ -00001d50: 7920 2470 7269 6e74 4465 7074 6820 3d20 y $printDepth = │ │ │ -00001d60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001d70: 7457 6974 686f 7574 5061 7228 2770 7269 tWithoutPar('pri │ │ │ -00001d80: 6e74 4465 7074 6827 293b 0a24 7072 696e ntDepth');.$prin │ │ │ -00001d90: 7444 6570 7468 203d 2024 7072 696e 7444 tDepth = $printD │ │ │ -00001da0: 6570 7468 203f 2027 7965 7327 203a 2027 epth ? 'yes' : ' │ │ │ -00001db0: 6e6f 273b 0a6d 7920 2464 6f6e 744c 696e no';.my $dontLin │ │ │ -00001dc0: 6b53 796d 6c69 6e6b 7320 3d20 2443 6865 kSymlinks = $Che │ │ │ -00001dd0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00001de0: 686f 7574 5061 7228 2764 6f6e 744c 696e houtPar('dontLin │ │ │ -00001df0: 6b53 796d 6c69 6e6b 7327 293b 0a6d 7920 kSymlinks');.my │ │ │ -00001e00: 2469 676e 6f72 6545 7272 6f72 7320 3d20 $ignoreErrors = │ │ │ -00001e10: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001e20: 7457 6974 686f 7574 5061 7228 2769 676e tWithoutPar('ign │ │ │ -00001e30: 6f72 6545 7272 6f72 7327 293b 0a6d 7920 oreErrors');.my │ │ │ -00001e40: 2840 736f 7572 6365 4469 7229 203d 2024 (@sourceDir) = $ │ │ │ -00001e50: 4368 6563 6b50 6172 2d3e 6765 744c 6973 CheckPar->getLis │ │ │ -00001e60: 7450 6172 2829 3b0a 6d79 2024 7361 7665 tPar();.my $save │ │ │ -00001e70: 5241 4d20 3d20 2443 6865 636b 5061 722d RAM = $CheckPar- │ │ │ -00001e80: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00001e90: 7228 2773 6176 6552 414d 2729 3b0a 6d79 r('saveRAM');.my │ │ │ -00001ea0: 2024 6372 6561 7465 5370 6172 7365 4669 $createSparseFi │ │ │ -00001eb0: 6c65 7320 3d20 2443 6865 636b 5061 722d les = $CheckPar- │ │ │ -00001ec0: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00001ed0: 7228 2763 7265 6174 6553 7061 7273 6546 r('createSparseF │ │ │ -00001ee0: 696c 6573 2729 3b0a 6d79 2024 626c 6f63 iles');.my $bloc │ │ │ -00001ef0: 6b53 697a 6520 3d20 2443 6865 636b 5061 kSize = $CheckPa │ │ │ -00001f00: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00001f10: 2827 626c 6f63 6b53 697a 6527 293b 0a6d ('blockSize');.m │ │ │ -00001f20: 7920 246d 6178 4861 7264 4c69 6e6b 7320 y $maxHardLinks │ │ │ -00001f30: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001f40: 4f70 7457 6974 6850 6172 2827 6d61 7848 OptWithPar('maxH │ │ │ -00001f50: 6172 644c 696e 6b73 2729 3b0a 2474 6d70 ardLinks');.$tmp │ │ │ -00001f60: 6469 7220 3d20 2443 6865 636b 5061 722d dir = $CheckPar- │ │ │ -00001f70: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00001f80: 746d 7064 6972 2729 3b0a 0a69 6620 286e tmpdir');..if (n │ │ │ -00001f90: 6f74 2024 7461 7267 6574 4469 7220 6f72 ot $targetDir or │ │ │ -00001fa0: 206e 6f74 2040 736f 7572 6365 4469 7229 not @sourceDir) │ │ │ -00001fb0: 0a7b 0a20 2020 2070 7269 6e74 2022 2448 .{. print "$H │ │ │ -00001fc0: 656c 7022 3b0a 2020 2020 6578 6974 2030 elp";. exit 0 │ │ │ -00001fd0: 3b0a 7d0a 0a6d 7920 2470 724c 6f67 3b0a ;.}..my $prLog;. │ │ │ -00001fe0: 6d79 2028 2470 724c 6f67 4b69 6e64 2920 my ($prLogKind) │ │ │ -00001ff0: 3d20 5b27 413a 4245 4749 4e27 2c0a 0909 = ['A:BEGIN',... │ │ │ -00002000: 2020 2027 5a3a 454e 4427 2c0a 0909 2020 'Z:END',... │ │ │ -00002010: 2027 493a 494e 464f 272c 0a09 0920 2020 'I:INFO',... │ │ │ -00002020: 2756 3a56 4552 5349 4f4e 272c 0a09 0920 'V:VERSION',... │ │ │ -00002030: 2020 2757 3a57 4152 4e49 4e47 272c 0a09 'W:WARNING',.. │ │ │ -00002040: 0920 2020 2745 3a45 5252 4f52 272c 0a09 . 'E:ERROR',.. │ │ │ -00002050: 0920 2020 2753 3a53 5441 5449 5354 4943 . 'S:STATISTIC │ │ │ -00002060: 272c 0a09 0920 2020 2750 3a50 524f 4752 ',... 'P:PROGR │ │ │ -00002070: 4553 5327 5d3b 0a24 7072 4c6f 6720 3d20 ESS'];.$prLog = │ │ │ -00002080: 7072 696e 744c 6f67 2d3e 6e65 7728 272d printLog->new('- │ │ │ -00002090: 6b69 6e64 2720 3d3e 2024 7072 4c6f 674b kind' => $prLogK │ │ │ -000020a0: 696e 642c 0a09 0920 2020 2020 2020 272d ind,... '- │ │ │ -000020b0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd │ │ │ -000020c0: 6972 293b 0a0a 2320 6368 6563 6b20 7072 ir);..# check pr │ │ │ -000020d0: 6f67 7265 7373 5265 706f 7274 2073 6574 ogressReport set │ │ │ -000020e0: 7469 6e67 730a 6d79 2024 7072 6f67 7265 tings.my $progre │ │ │ -000020f0: 7373 4465 6c74 6154 696d 6520 3d20 303b ssDeltaTime = 0; │ │ │ -00002100: 0a69 6620 2824 7072 6f67 7265 7373 5265 .if ($progressRe │ │ │ -00002110: 706f 7274 290a 7b0a 2020 2020 6d79 2028 port).{. my ( │ │ │ -00002120: 2463 6f75 6e74 2c20 2474 293b 0a20 2020 $count, $t);. │ │ │ -00002130: 2069 6620 2824 7072 6f67 7265 7373 5265 if ($progressRe │ │ │ -00002140: 706f 7274 203d 7e20 2f2c 2f29 0a20 2020 port =~ /,/). │ │ │ -00002150: 207b 0a09 2824 636f 756e 742c 2024 7429 {..($count, $t) │ │ │ -00002160: 203d 2024 7072 6f67 7265 7373 5265 706f = $progressRepo │ │ │ -00002170: 7274 203d 7e20 2f5c 4128 2e2a 3f29 2c28 rt =~ /\A(.*?),( │ │ │ -00002180: 2e2a 295c 5a2f 3b0a 0924 7072 4c6f 672d .*)\Z/;..$prLog- │ │ │ -00002190: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000021a0: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -000021b0: 2d73 7472 2720 3d3e 205b 2277 726f 6e67 -str' => ["wrong │ │ │ -000021c0: 2066 6f72 6d61 7420 666f 7220 6f70 7469 format for opti │ │ │ -000021d0: 6f6e 2070 726f 6772 6573 7352 6570 6f72 on progressRepor │ │ │ -000021e0: 7420 2220 2e0a 0909 0909 2022 7469 6d65 t " ...... "time │ │ │ -000021f0: 2070 6572 696f 6420 3c24 743e 225d 2c0a period <$t>"],. │ │ │ -00002200: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ -00002210: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles │ │ │ -00002220: 7320 2664 6174 6554 6f6f 6c73 3a3a 6368 s &dateTools::ch │ │ │ -00002230: 6563 6b53 7472 2827 2d73 7472 2720 3d3e eckStr('-str' => │ │ │ -00002240: 2024 7429 3b0a 0924 7072 6f67 7265 7373 $t);..$progress │ │ │ -00002250: 4465 6c74 6154 696d 6520 3d20 2664 6174 DeltaTime = &dat │ │ │ -00002260: 6554 6f6f 6c73 3a3a 7374 7254 6f53 6563 eTools::strToSec │ │ │ -00002270: 2827 2d73 7472 2720 3d3e 2024 7429 3b0a ('-str' => $t);. │ │ │ -00002280: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. │ │ │ -00002290: 2020 207b 0a09 2463 6f75 6e74 203d 2024 {..$count = $ │ │ │ -000022a0: 7072 6f67 7265 7373 5265 706f 7274 3b0a progressReport;. │ │ │ -000022b0: 2020 2020 7d0a 2020 2020 2470 724c 6f67 }. $prLog │ │ │ -000022c0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000022d0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ -000022e0: 7227 203d 3e20 5b22 636f 756e 7465 7220 r' => ["counter │ │ │ -000022f0: 3c24 636f 756e 743e 2066 6f72 2070 726f <$count> for pro │ │ │ -00002300: 6772 6573 7320 7265 706f 7274 2022 202e gress report " . │ │ │ -00002310: 0a09 0909 2020 2020 2022 6d75 7374 2062 .... "must b │ │ │ -00002320: 6520 6120 706f 7369 7469 7665 2069 6e74 e a positive int │ │ │ -00002330: 6567 6572 225d 2c0a 0909 2020 272d 6578 eger"],... '-ex │ │ │ -00002340: 6974 2720 3d3e 2031 290a 0975 6e6c 6573 it' => 1)..unles │ │ │ -00002350: 7320 2463 6f75 6e74 203d 7e20 2f5c 415c s $count =~ /\A\ │ │ │ -00002360: 642b 5c5a 2f3b 0a20 2020 2024 7072 6f67 d+\Z/;. $prog │ │ │ -00002370: 7265 7373 5265 706f 7274 203d 2024 636f ressReport = $co │ │ │ -00002380: 756e 743b 0a7d 0a23 7072 696e 7420 2270 unt;.}.#print "p │ │ │ -00002390: 726f 6772 6573 7352 6570 6f72 743d 3c24 rogressReport=<$ │ │ │ -000023a0: 7072 6f67 7265 7373 5265 706f 7274 3e2c progressReport>, │ │ │ -000023b0: 2070 726f 6772 6573 7344 656c 7461 5469 progressDeltaTi │ │ │ -000023c0: 6d65 3d3c 2470 726f 6772 6573 7344 656c me=<$progressDel │ │ │ -000023d0: 7461 5469 6d65 3e5c 6e22 3b0a 0a6d 7920 taTime>\n";..my │ │ │ -000023e0: 2840 6c74 2920 3d20 2840 246c 696e 6b57 (@lt) = (@$linkW │ │ │ -000023f0: 6974 6829 3b0a 6d79 2028 406c 6229 203d ith);.my (@lb) = │ │ │ -00002400: 2028 4073 6f75 7263 6544 6972 293b 0a6d (@sourceDir);.m │ │ │ -00002410: 7920 246c 7473 203d 2024 7461 7267 6574 y $lts = $target │ │ │ -00002420: 4469 723b 0a69 6620 2840 6c74 290a 7b0a Dir;.if (@lt).{. │ │ │ -00002430: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00002440: 7428 272d 6b69 6e64 2720 3d3e 2027 4127 t('-kind' => 'A' │ │ │ -00002450: 2c0a 0909 2020 272d 7374 7227 203d 3e0a ,... '-str' =>. │ │ │ -00002460: 0909 2020 5b22 636f 7079 2f6c 696e 6b20 .. ["copy/link │ │ │ -00002470: 3c22 202e 206a 6f69 6e28 273e 3c27 2c20 <" . join('><', │ │ │ -00002480: 406c 6229 202e 2022 3e20 746f 203c 2220 @lb) . "> to <" │ │ │ -00002490: 2e0a 0909 2020 206a 6f69 6e28 273e 3c27 .... join('><' │ │ │ -000024a0: 2c20 406c 7429 202e 2022 3e20 746f 203c , @lt) . "> to < │ │ │ -000024b0: 246c 7473 3e22 5d29 3b0a 7d0a 656c 7365 $lts>"]);.}.else │ │ │ -000024c0: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p │ │ │ -000024d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -000024e0: 2741 272c 0a09 0920 2027 2d73 7472 2720 'A',... '-str' │ │ │ -000024f0: 3d3e 0a09 0920 205b 2263 6f70 792f 6c69 =>... ["copy/li │ │ │ -00002500: 6e6b 203c 2220 2e20 6a6f 696e 2827 3e3c nk <" . join('>< │ │ │ -00002510: 272c 2040 6c62 2920 2e0a 0909 2020 2022 ', @lb) .... " │ │ │ -00002520: 3e20 746f 203c 246c 7473 3e22 5d29 3b0a > to <$lts>"]);. │ │ │ -00002530: 7d0a 2470 724c 6f67 2d3e 7072 696e 7428 }.$prLog->print( │ │ │ -00002540: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',. │ │ │ -00002550: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00002560: 205b 226c 696e 6b54 6f44 6972 732e 706c ["linkToDirs.pl │ │ │ -00002570: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA │ │ │ -00002580: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION"]);. │ │ │ -00002590: 0a23 206d 616b 6520 7061 7468 7320 6162 .# make paths ab │ │ │ -000025a0: 736f 6c75 7465 0a6d 7920 2469 3b0a 666f solute.my $i;.fo │ │ │ -000025b0: 7220 2824 6920 3d20 3020 3b20 2469 203c r ($i = 0 ; $i < │ │ │ -000025c0: 2040 246c 696e 6b57 6974 6820 3b20 2469 @$linkWith ; $i │ │ │ -000025d0: 2b2b 290a 7b0a 2020 2020 6d79 2024 7020 ++).{. my $p │ │ │ -000025e0: 3d20 2424 6c69 6e6b 5769 7468 5b24 695d = $$linkWith[$i] │ │ │ -000025f0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ -00002600: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00002610: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' = │ │ │ -00002620: 3e20 5b22 2d2d 6c69 6e6b 5769 7468 2070 > ["--linkWith p │ │ │ -00002630: 6174 6820 3c24 703e 206e 6f74 2061 6363 ath <$p> not acc │ │ │ -00002640: 6573 7369 626c 6522 5d2c 0a09 0920 2027 essible"],... ' │ │ │ -00002650: 2d65 7869 7427 203d 3e20 3129 0a09 756e -exit' => 1)..un │ │ │ -00002660: 6c65 7373 202d 6520 2470 3b0a 2020 2020 less -e $p;. │ │ │ -00002670: 2424 6c69 6e6b 5769 7468 5b24 695d 203d $$linkWith[$i] = │ │ │ -00002680: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath │ │ │ -00002690: 2824 7029 3b0a 7d0a 666f 7220 2824 6920 ($p);.}.for ($i │ │ │ -000026a0: 3d20 3020 3b20 2469 203c 2040 736f 7572 = 0 ; $i < @sour │ │ │ -000026b0: 6365 4469 7220 3b20 2469 2b2b 290a 7b0a ceDir ; $i++).{. │ │ │ -000026c0: 2020 2020 6d79 2024 7020 3d20 2473 6f75 my $p = $sou │ │ │ -000026d0: 7263 6544 6972 5b24 695d 3b0a 2020 2020 rceDir[$i];. │ │ │ -000026e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -000026f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00002700: 2020 272d 7374 7227 203d 3e20 5b22 736f '-str' => ["so │ │ │ -00002710: 7572 6365 4469 7220 7061 7468 203c 2470 urceDir path <$p │ │ │ -00002720: 3e20 6e6f 7420 6163 6365 7373 6962 6c65 > not accessible │ │ │ -00002730: 225d 2c0a 0909 2020 272d 6578 6974 2720 "],... '-exit' │ │ │ -00002740: 3d3e 2031 290a 0975 6e6c 6573 7320 2d65 => 1)..unless -e │ │ │ -00002750: 2024 703b 0a20 2020 2024 736f 7572 6365 $p;. $source │ │ │ -00002760: 4469 725b 2469 5d20 3d20 263a 3a61 6273 Dir[$i] = &::abs │ │ │ -00002770: 6f6c 7574 6550 6174 6828 2470 293b 0a7d olutePath($p);.} │ │ │ -00002780: 0a23 2072 656d 6f76 6520 646f 7562 6c69 .# remove doubli │ │ │ -00002790: 6361 7465 7320 2869 6620 616e 7929 0a6d cates (if any).m │ │ │ -000027a0: 7920 2840 746d 7029 203d 2073 6f72 7420 y (@tmp) = sort │ │ │ -000027b0: 4024 6c69 6e6b 5769 7468 3b0a 4024 6c69 @$linkWith;.@$li │ │ │ -000027c0: 6e6b 5769 7468 203d 2028 293b 0a66 6f72 nkWith = ();.for │ │ │ -000027d0: 2028 2469 203d 2030 203b 2024 6920 3c20 ($i = 0 ; $i < │ │ │ -000027e0: 4074 6d70 203b 2024 692b 2b29 0a7b 0a20 @tmp ; $i++).{. │ │ │ -000027f0: 2020 2070 7573 6820 4024 6c69 6e6b 5769 push @$linkWi │ │ │ -00002800: 7468 2c20 2474 6d70 5b24 695d 0a09 6966 th, $tmp[$i]..if │ │ │ -00002810: 2024 6920 3d3d 2030 206f 7220 2474 6d70 $i == 0 or $tmp │ │ │ -00002820: 5b24 695d 206e 6520 2474 6d70 5b24 692d [$i] ne $tmp[$i- │ │ │ -00002830: 315d 3b0a 7d0a 2840 746d 7029 203d 2040 1];.}.(@tmp) = @ │ │ │ -00002840: 736f 7572 6365 4469 723b 0a40 736f 7572 sourceDir;.@sour │ │ │ -00002850: 6365 4469 7220 3d20 2829 3b0a 666f 7220 ceDir = ();.for │ │ │ -00002860: 2824 6920 3d20 3020 3b20 2469 203c 2040 ($i = 0 ; $i < @ │ │ │ -00002870: 746d 7020 3b20 2469 2b2b 290a 7b0a 2020 tmp ; $i++).{. │ │ │ -00002880: 2020 7075 7368 2040 736f 7572 6365 4469 push @sourceDi │ │ │ -00002890: 722c 2024 746d 705b 2469 5d0a 0969 6620 r, $tmp[$i]..if │ │ │ -000028a0: 2469 203d 3d20 3020 6f72 2024 746d 705b $i == 0 or $tmp[ │ │ │ -000028b0: 2469 5d20 6e65 2024 746d 705b 2469 2d31 $i] ne $tmp[$i-1 │ │ │ -000028c0: 5d3b 0a7d 0a0a 0a23 2067 656e 6572 616c ];.}...# general │ │ │ -000028d0: 2063 6865 636b 730a 6d79 2024 6578 6974 checks.my $exit │ │ │ -000028e0: 203d 2030 3b0a 7b0a 2020 2020 6d79 2028 = 0;.{. my ( │ │ │ -000028f0: 2464 6576 5429 203d 2028 7374 6174 2824 $devT) = (stat($ │ │ │ -00002900: 7461 7267 6574 4469 7229 295b 305d 3b0a targetDir))[0];. │ │ │ -00002910: 2020 2020 666f 7265 6163 6820 6d79 2024 foreach my $ │ │ │ -00002920: 6420 2840 246c 696e 6b57 6974 6829 0a20 d (@$linkWith). │ │ │ -00002930: 2020 207b 0a09 756e 6c65 7373 2028 2d65 {..unless (-e │ │ │ -00002940: 2024 6429 0a09 7b0a 0920 2020 2024 7072 $d)..{.. $pr │ │ │ -00002950: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00002960: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ -00002970: 272d 7374 7227 203d 3e20 5b22 3c24 643e '-str' => ["<$d> │ │ │ -00002980: 2064 6f65 7320 6e6f 7420 6578 6973 7422 does not exist" │ │ │ -00002990: 5d29 3b0a 0920 2020 2024 6578 6974 203d ]);.. $exit = │ │ │ -000029a0: 2031 3b0a 097d 0a09 6966 2028 2d6c 2024 1;..}..if (-l $ │ │ │ -000029b0: 6420 616e 6420 6e6f 7420 2d64 2024 6429 d and not -d $d) │ │ │ -000029c0: 2020 2023 2069 7320 6e6f 7420 6120 6469 # is not a di │ │ │ -000029d0: 7265 6374 6f72 790a 097b 0a09 2020 2020 rectory..{.. │ │ │ -000029e0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -000029f0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00002a00: 0920 2027 2d73 7472 2720 3d3e 205b 223c . '-str' => ["< │ │ │ -00002a10: 2464 3e20 6973 206e 6f74 2061 2064 6972 $d> is not a dir │ │ │ -00002a20: 6563 746f 7279 225d 293b 0a09 2020 2020 ectory"]);.. │ │ │ -00002a30: 2465 7869 7420 3d20 313b 0a09 7d0a 2009 $exit = 1;..}. . │ │ │ -00002a40: 6d79 2028 2464 6576 2920 3d20 2873 7461 my ($dev) = (sta │ │ │ -00002a50: 7428 2464 2929 5b30 5d3b 0a09 6966 2028 t($d))[0];..if ( │ │ │ -00002a60: 2464 6576 206e 6520 2464 6576 5429 0a09 $dev ne $devT).. │ │ │ -00002a70: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p │ │ │ -00002a80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002a90: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str' │ │ │ -00002aa0: 203d 3e0a 0909 0920 205b 2264 6972 6563 =>.... ["direc │ │ │ -00002ab0: 746f 7279 203c 2464 3e20 6973 206e 6f74 tory <$d> is not │ │ │ -00002ac0: 206f 6e20 7468 6520 2220 2e0a 0909 0920 on the " ..... │ │ │ -00002ad0: 2020 2273 616d 6520 6465 7669 6365 2061 "same device a │ │ │ -00002ae0: 7320 3c24 7461 7267 6574 4469 723e 202d s <$targetDir> - │ │ │ -00002af0: 2022 202e 0a09 0909 2020 2273 6574 7469 " ..... "setti │ │ │ -00002b00: 6e67 2068 6172 6420 6c69 6e6b 7320 6973 ng hard links is │ │ │ -00002b10: 206e 6f74 2070 6f73 7369 626c 6522 5d29 not possible"]) │ │ │ -00002b20: 3b0a 0920 2020 2024 6578 6974 203d 2031 ;.. $exit = 1 │ │ │ -00002b30: 3b0a 097d 0a09 6966 2028 2474 6d70 6469 ;..}..if ($tmpdi │ │ │ -00002b40: 7229 0a09 7b0a 0920 2020 2075 6e6c 6573 r)..{.. unles │ │ │ -00002b50: 7320 282d 6420 2474 6d70 6469 7220 616e s (-d $tmpdir an │ │ │ -00002b60: 6420 2d77 2024 746d 7064 6972 290a 0920 d -w $tmpdir).. │ │ │ -00002b70: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ -00002b80: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002b90: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -00002ba0: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ -00002bb0: 205b 2264 6972 6563 746f 7279 203c 2474 ["directory <$t │ │ │ -00002bc0: 6d70 6469 723e 2069 7320 6e6f 7420 6163 mpdir> is not ac │ │ │ -00002bd0: 6365 7373 6962 6c65 225d 293b 0a09 0924 cessible"]);...$ │ │ │ -00002be0: 6578 6974 203d 2031 3b0a 0920 2020 207d exit = 1;.. } │ │ │ -00002bf0: 0a09 7d0a 2020 207d 0a7d 0a66 6f72 6561 ..}. }.}.forea │ │ │ -00002c00: 6368 206d 7920 2464 2028 4073 6f75 7263 ch my $d (@sourc │ │ │ -00002c10: 6544 6972 290a 7b0a 2020 2020 756e 6c65 eDir).{. unle │ │ │ -00002c20: 7373 2028 2d64 2024 6429 0a20 2020 207b ss (-d $d). { │ │ │ -00002c30: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00002c40: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00002c50: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00002c60: 3e0a 0909 2020 2020 2020 5b22 3c24 643e >... ["<$d> │ │ │ -00002c70: 2069 7320 6e6f 7420 6120 6469 7265 6374 is not a direct │ │ │ -00002c80: 6f72 7922 5d29 3b0a 0924 6578 6974 203d ory"]);..$exit = │ │ │ -00002c90: 2031 3b0a 2020 2020 7d0a 2020 2020 6966 1;. }. if │ │ │ -00002ca0: 2028 282d 6c20 2464 2061 6e64 206e 6f74 ((-l $d and not │ │ │ -00002cb0: 202d 6420 2464 2929 2020 2023 2069 7320 -d $d)) # is │ │ │ -00002cc0: 6e6f 7420 6120 6469 7265 6374 6f72 790a not a directory. │ │ │ -00002cd0: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -00002ce0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002cf0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -00002d00: 7472 2720 3d3e 205b 223c 2464 3e20 6973 tr' => ["<$d> is │ │ │ -00002d10: 206e 6f74 2061 2064 6972 6563 746f 7279 not a directory │ │ │ -00002d20: 225d 293b 0a09 2465 7869 7420 3d20 313b "]);..$exit = 1; │ │ │ -00002d30: 0a20 2020 207d 0a23 7072 696e 7420 222d . }.#print "- │ │ │ -00002d40: 2d2d 2d24 642d 2d2d 2d24 6578 6974 5c6e ---$d----$exit\n │ │ │ -00002d50: 223b 0a7d 0a75 6e6c 6573 7320 282d 6420 ";.}.unless (-d │ │ │ -00002d60: 2474 6172 6765 7444 6972 290a 7b0a 2020 $targetDir).{. │ │ │ -00002d70: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00002d80: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00002d90: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -00002da0: 3c24 7461 7267 6574 4469 723e 2064 6f65 <$targetDir> doe │ │ │ -00002db0: 7320 6e6f 7420 6578 6973 7422 5d29 3b0a s not exist"]);. │ │ │ -00002dc0: 2020 2020 2465 7869 7420 3d20 313b 0a7d $exit = 1;.} │ │ │ -00002dd0: 0a69 6620 282d 6c20 2474 6172 6765 7444 .if (-l $targetD │ │ │ -00002de0: 6972 2061 6e64 206e 6f74 202d 6420 2474 ir and not -d $t │ │ │ -00002df0: 6172 6765 7444 6972 2920 2020 2320 6973 argetDir) # is │ │ │ -00002e00: 206e 6f74 2061 2064 6972 6563 746f 7279 not a directory │ │ │ -00002e10: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p │ │ │ -00002e20: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002e30: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ -00002e40: 3d3e 205b 223c 2474 6172 6765 7444 6972 => ["<$targetDir │ │ │ -00002e50: 3e20 6973 206e 6f74 2061 2064 6972 6563 > is not a direc │ │ │ -00002e60: 746f 7279 225d 293b 0a20 2020 2024 6578 tory"]);. $ex │ │ │ -00002e70: 6974 203d 2031 3b0a 7d0a 666f 7265 6163 it = 1;.}.foreac │ │ │ -00002e80: 6820 6d79 2024 6420 2840 736f 7572 6365 h my $d (@source │ │ │ -00002e90: 4469 7229 0a7b 0a20 2020 206d 7920 2824 Dir).{. my ($ │ │ │ -00002ea0: 6469 722c 2024 6261 7365 4469 7229 203d dir, $baseDir) = │ │ │ -00002eb0: 2026 3a3a 7370 6c69 7446 696c 6544 6972 &::splitFileDir │ │ │ -00002ec0: 2824 6429 3b0a 2020 2020 6966 2028 2d64 ($d);. if (-d │ │ │ -00002ed0: 2022 2474 6172 6765 7444 6972 2f24 6261 "$targetDir/$ba │ │ │ -00002ee0: 7365 4469 7222 290a 2020 2020 7b0a 0924 seDir"). {..$ │ │ │ -00002ef0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002f00: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00002f10: 2020 2020 2027 2d73 7472 2720 3d3e 0a09 '-str' =>.. │ │ │ -00002f20: 0920 2020 2020 205b 2264 6972 6563 746f . ["directo │ │ │ -00002f30: 7279 203c 2474 6172 6765 7444 6972 2f24 ry <$targetDir/$ │ │ │ -00002f40: 6261 7365 4469 723e 2061 6c72 6561 6479 baseDir> already │ │ │ -00002f50: 2065 7869 7374 7322 5d29 3b0a 0924 6578 exists"]);..$ex │ │ │ -00002f60: 6974 203d 2031 2075 6e6c 6573 7320 2469 it = 1 unless $i │ │ │ -00002f70: 676e 6f72 6545 7272 6f72 733b 0a20 2020 gnoreErrors;. │ │ │ -00002f80: 207d 2020 2020 0a7d 0a65 7869 7420 2465 } .}.exit $e │ │ │ -00002f90: 7869 7420 6966 2024 6578 6974 3b0a 0a23 xit if $exit;..# │ │ │ -00002fa0: 2066 696c 6520 666f 7220 7374 6f72 696e file for storin │ │ │ -00002fb0: 6720 7065 726d 6973 7369 6f6e 7320 6f66 g permissions of │ │ │ -00002fc0: 2064 6972 6563 746f 7269 6573 0a6d 7920 directories.my │ │ │ -00002fd0: 2474 6d70 4469 7246 696c 6520 3d20 263a $tmpDirFile = &: │ │ │ -00002fe0: 3a75 6e69 7146 696c 654e 616d 6528 2224 :uniqFileName("$ │ │ │ -00002ff0: 746d 7064 6972 2f6c 696e 6b54 6f2e 2229 tmpdir/linkTo.") │ │ │ -00003000: 3b0a 6c6f 6361 6c20 2a44 4952 4649 4c45 ;.local *DIRFILE │ │ │ -00003010: 3b0a 6f70 656e 2844 4952 4649 4c45 2c20 ;.open(DIRFILE, │ │ │ -00003020: 273e 272c 2024 746d 7044 6972 4669 6c65 '>', $tmpDirFile │ │ │ -00003030: 2920 6f72 0a20 2020 2024 7072 4c6f 672d ) or. $prLog- │ │ │ -00003040: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003050: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ -00003060: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => ["cannot op │ │ │ -00003070: 656e 203c 2474 6d70 4469 7246 696c 653e en <$tmpDirFile> │ │ │ -00003080: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting"],... │ │ │ -00003090: 2027 2d61 6464 2720 3d3e 205b 5f5f 4649 '-add' => [__FI │ │ │ -000030a0: 4c45 5f5f 2c20 5f5f 4c49 4e45 5f5f 5d2c LE__, __LINE__], │ │ │ -000030b0: 0a09 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -000030c0: 3129 3b0a 6368 6d6f 6420 3036 3030 2c20 1);.chmod 0600, │ │ │ -000030d0: 2474 6d70 4469 7246 696c 653b 0a0a 0a6d $tmpDirFile;...m │ │ │ -000030e0: 7920 2469 6e64 6578 4469 7220 3d20 696e y $indexDir = in │ │ │ -000030f0: 6465 7844 6972 2d3e 6e65 7728 293b 0a0a dexDir->new();.. │ │ │ -00003100: 6d79 2028 2569 6e6f 6465 326d 6435 2c20 my (%inode2md5, │ │ │ -00003110: 256d 6435 3266 696c 6529 3b0a 6d79 2024 %md52file);.my $ │ │ │ -00003120: 696e 6f64 6532 6d64 3546 696c 6520 3d20 inode2md5File = │ │ │ -00003130: 263a 3a75 6e69 7146 696c 654e 616d 6528 &::uniqFileName( │ │ │ -00003140: 2224 746d 7064 6972 2f6c 696e 6b54 6f2d "$tmpdir/linkTo- │ │ │ -00003150: 696e 6f64 6532 6d64 352e 2229 3b0a 6d79 inode2md5.");.my │ │ │ -00003160: 2024 6d64 3532 6669 6c65 4669 6c65 203d $md52fileFile = │ │ │ -00003170: 2026 3a3a 756e 6971 4669 6c65 4e61 6d65 &::uniqFileName │ │ │ -00003180: 2822 2474 6d70 6469 722f 6c69 6e6b 546f ("$tmpdir/linkTo │ │ │ -00003190: 2d6d 6435 3266 696c 652e 2229 3b0a 6966 -md52file.");.if │ │ │ -000031a0: 2028 2473 6176 6552 414d 290a 7b0a 2020 ($saveRAM).{. │ │ │ -000031b0: 2020 6462 6d6f 7065 6e28 2569 6e6f 6465 dbmopen(%inode │ │ │ -000031c0: 326d 6435 2c20 2469 6e6f 6465 326d 6435 2md5, $inode2md5 │ │ │ -000031d0: 4669 6c65 2c20 3036 3030 293b 0a20 2020 File, 0600);. │ │ │ -000031e0: 2064 626d 6f70 656e 2825 6d64 3532 6669 dbmopen(%md52fi │ │ │ -000031f0: 6c65 2c20 246d 6435 3266 696c 6546 696c le, $md52fileFil │ │ │ -00003200: 652c 2030 3630 3029 3b0a 7d0a 6d79 2024 e, 0600);.}.my $ │ │ │ -00003210: 7374 6174 203d 2053 7461 7469 7374 6963 stat = Statistic │ │ │ -00003220: 2d3e 6e65 7728 272d 7072 4c6f 6727 203d ->new('-prLog' = │ │ │ -00003230: 3e20 2470 724c 6f67 2c0a 0909 0920 2027 > $prLog,.... ' │ │ │ -00003240: 2d70 726f 6772 6573 7352 6570 6f72 7427 -progressReport' │ │ │ -00003250: 203d 3e20 2470 726f 6772 6573 7352 6570 => $progressRep │ │ │ -00003260: 6f72 742c 0a09 0909 2020 272d 7072 6f67 ort,.... '-prog │ │ │ -00003270: 7265 7373 4465 6c74 6154 696d 6527 203d ressDeltaTime' = │ │ │ -00003280: 3e20 2470 726f 6772 6573 7344 656c 7461 > $progressDelta │ │ │ -00003290: 5469 6d65 293b 0a0a 0a23 0a23 2072 6561 Time);...#.# rea │ │ │ -000032a0: 6420 616c 6c20 6c69 6e6b 5769 7468 2064 d all linkWith d │ │ │ -000032b0: 6972 6563 746f 7265 730a 230a 6d79 2024 irectores.#.my $ │ │ │ -000032c0: 7272 6420 3d20 7265 6375 7273 6976 6552 rrd = recursiveR │ │ │ -000032d0: 6561 6444 6972 2d3e 6e65 7728 272d 6469 eadDir->new('-di │ │ │ -000032e0: 7273 2720 3d3e 2024 6c69 6e6b 5769 7468 rs' => $linkWith │ │ │ -000032f0: 2c0a 0909 0909 272d 7072 696e 7444 6570 ,.....'-printDep │ │ │ -00003300: 7468 2720 3d3e 2024 7072 696e 7444 6570 th' => $printDep │ │ │ -00003310: 7468 2c0a 0909 0909 272d 7072 696e 7444 th,.....'-printD │ │ │ -00003320: 6570 7468 5072 6c6f 674b 696e 6427 203d epthPrlogKind' = │ │ │ -00003330: 3e20 2750 272c 0a09 0909 0927 2d70 724c > 'P',.....'-prL │ │ │ -00003340: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ -00003350: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00003360: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. │ │ │ -00003370: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00003380: 2273 7461 7274 2072 6561 6469 6e67 206c "start reading l │ │ │ -00003390: 696e 6b57 6974 6820 6469 7273 203c 2220 inkWith dirs <" │ │ │ -000033a0: 2e0a 0909 0920 6a6f 696e 2827 3e20 3c27 ..... join('> <' │ │ │ -000033b0: 2c20 4024 6c69 6e6b 5769 7468 2920 2e20 , @$linkWith) . │ │ │ -000033c0: 273e 275d 290a 2020 2020 6966 2040 246c '>']). if @$l │ │ │ -000033d0: 696e 6b57 6974 683b 0a6d 7920 2824 662c inkWith;.my ($f, │ │ │ -000033e0: 2024 7429 3b0a 7768 696c 6520 2828 2466 $t);.while (($f │ │ │ -000033f0: 2c20 2474 2920 3d20 2472 7264 2d3e 6e65 , $t) = $rrd->ne │ │ │ -00003400: 7874 2829 290a 7b0a 2370 7269 6e74 2022 xt()).{.#print " │ │ │ -00003410: 2474 202d 3e20 2466 5c6e 223b 0a0a 2020 $t -> $f\n";.. │ │ │ -00003420: 2020 6966 2028 2474 2065 7120 2766 2729 if ($t eq 'f') │ │ │ -00003430: 2020 2020 2023 206e 6f72 6d61 6c20 6669 # normal fi │ │ │ -00003440: 6c65 0a20 2020 207b 0a09 2473 7461 742d le. {..$stat- │ │ │ -00003450: 3e69 6e63 7252 6561 6428 293b 0a0a 096d >incrRead();...m │ │ │ -00003460: 7920 2824 6465 762c 2024 696e 6f64 652c y ($dev, $inode, │ │ │ -00003470: 2024 6d6f 6465 2c20 2475 6964 2c20 2467 $mode, $uid, $g │ │ │ -00003480: 6964 2c20 2473 697a 652c 2024 6174 696d id, $size, $atim │ │ │ -00003490: 652c 0a09 2020 2020 246d 7469 6d65 2c20 e,.. $mtime, │ │ │ -000034a0: 2463 7469 6d65 2920 3d20 2873 7461 7428 $ctime) = (stat( │ │ │ -000034b0: 2466 2929 5b30 2c31 2c32 2c34 2c35 2c37 $f))[0,1,2,4,5,7 │ │ │ -000034c0: 2c38 2c39 2c31 305d 3b0a 096d 7920 2464 ,8,9,10];..my $d │ │ │ -000034d0: 6576 496e 6f64 6520 3d20 2224 6465 762d evInode = "$dev- │ │ │ -000034e0: 2469 6e6f 6465 223b 0a0a 096e 6578 7420 $inode";...next │ │ │ -000034f0: 6966 2065 7869 7374 7320 2469 6e6f 6465 if exists $inode │ │ │ -00003500: 326d 6435 7b24 6465 7649 6e6f 6465 7d3b 2md5{$devInode}; │ │ │ -00003510: 2020 2320 616c 7265 6164 7920 7265 6164 # already read │ │ │ -00003520: 0a0a 096d 7920 246d 6435 203d 2026 3a3a ...my $md5 = &:: │ │ │ -00003530: 6361 6c63 4d44 3528 2466 2c20 2470 724c calcMD5($f, $prL │ │ │ -00003540: 6f67 293b 0a09 756e 6c65 7373 2028 246d og);..unless ($m │ │ │ -00003550: 6435 290a 097b 0a09 2020 2020 2470 724c d5)..{.. $prL │ │ │ -00003560: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00003570: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -00003580: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -00003590: 636f 756c 6420 6e6f 7420 6361 6c63 756c could not calcul │ │ │ -000035a0: 6174 6520 6d64 3520 7375 6d20 6f66 203c ate md5 sum of < │ │ │ -000035b0: 2466 3e2c 2073 6b69 7070 696e 6722 5d29 $f>, skipping"]) │ │ │ -000035c0: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}. │ │ │ -000035d0: 0924 7374 6174 2d3e 696e 6372 4d64 3528 .$stat->incrMd5( │ │ │ -000035e0: 293b 0a09 6d79 2024 6d64 3573 697a 6520 );..my $md5size │ │ │ -000035f0: 3d20 2224 6d64 352d 2473 697a 6522 3b0a = "$md5-$size";. │ │ │ -00003600: 0924 696e 6f64 6532 6d64 357b 2464 6576 .$inode2md5{$dev │ │ │ -00003610: 496e 6f64 657d 203d 2024 6d64 3573 697a Inode} = $md5siz │ │ │ -00003620: 653b 0a0a 096d 7920 2824 6662 6173 652c e;...my ($fbase, │ │ │ -00003630: 2024 666e 616d 652c 2024 696e 6465 7829 $fname, $index) │ │ │ -00003640: 203d 2024 696e 6465 7844 6972 2d3e 6e65 = $indexDir->ne │ │ │ -00003650: 7746 696c 6528 2466 293b 0a09 246d 6435 wFile($f);..$md5 │ │ │ -00003660: 3266 696c 657b 246d 6435 7369 7a65 7d20 2file{$md5size} │ │ │ -00003670: 3d20 2224 696e 6465 782f 2466 6e61 6d65 = "$index/$fname │ │ │ -00003680: 223b 0a23 7072 696e 7420 225c 7424 6662 ";.#print "\t$fb │ │ │ -00003690: 6173 652c 2024 666e 616d 652c 2024 696e ase, $fname, $in │ │ │ -000036a0: 6465 7820 2824 6d64 3573 697a 6529 5c6e dex ($md5size)\n │ │ │ -000036b0: 223b 0a20 2020 207d 0a20 2020 2065 6c73 ";. }. els │ │ │ -000036c0: 6966 2028 2474 2065 7120 276c 2729 2020 if ($t eq 'l') │ │ │ -000036d0: 2020 2023 2073 796d 626f 6c69 6320 6c69 # symbolic li │ │ │ -000036e0: 6e6b 0a20 2020 207b 0a09 2473 7461 742d nk. {..$stat- │ │ │ -000036f0: 3e69 6e63 7252 6561 6428 293b 0a09 0a09 >incrRead();.... │ │ │ -00003700: 6d79 2028 2464 6576 2c20 2469 6e6f 6465 my ($dev, $inode │ │ │ -00003710: 2c20 246d 6f64 652c 2024 7569 642c 2024 , $mode, $uid, $ │ │ │ -00003720: 6769 642c 2024 7369 7a65 2c20 2461 7469 gid, $size, $ati │ │ │ -00003730: 6d65 2c0a 0920 2020 2024 6d74 696d 652c me,.. $mtime, │ │ │ -00003740: 2024 6374 696d 6529 203d 2028 6c73 7461 $ctime) = (lsta │ │ │ -00003750: 7428 2466 2929 5b30 2c31 2c32 2c34 2c35 t($f))[0,1,2,4,5 │ │ │ -00003760: 2c37 2c38 2c39 2c31 305d 3b0a 096d 7920 ,7,8,9,10];..my │ │ │ -00003770: 2464 6576 496e 6f64 6520 3d20 2224 6465 $devInode = "$de │ │ │ -00003780: 762d 2469 6e6f 6465 223b 0a0a 096e 6578 v-$inode";...nex │ │ │ -00003790: 7420 6966 2065 7869 7374 7320 2469 6e6f t if exists $ino │ │ │ -000037a0: 6465 326d 6435 7b24 6465 7649 6e6f 6465 de2md5{$devInode │ │ │ -000037b0: 7d3b 2020 2320 616c 7265 6164 7920 7265 }; # already re │ │ │ -000037c0: 6164 0a0a 096d 7920 246d 6435 203d 2026 ad...my $md5 = & │ │ │ -000037d0: 3a3a 7265 6164 5379 6d4c 696e 6b43 616c ::readSymLinkCal │ │ │ -000037e0: 634d 6435 2824 662c 2024 7072 4c6f 6729 cMd5($f, $prLog) │ │ │ -000037f0: 3b0a 0975 6e6c 6573 7320 2824 6d64 3529 ;..unless ($md5) │ │ │ -00003800: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog- │ │ │ -00003810: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003820: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ -00003830: 7227 203d 3e0a 0909 0920 205b 2263 6f75 r' =>.... ["cou │ │ │ -00003840: 6c64 206e 6f74 2063 616c 6375 6c61 7465 ld not calculate │ │ │ -00003850: 206d 6435 2073 756d 206f 6620 7379 6d6c md5 sum of syml │ │ │ -00003860: 696e 6b20 3c24 663e 2c22 202e 0a09 0909 ink <$f>," ..... │ │ │ -00003870: 2020 2022 2073 6b69 7070 696e 6722 5d29 " skipping"]) │ │ │ -00003880: 3b0a 0920 2020 206e 6578 743b 0a09 7d0a ;.. next;..}. │ │ │ -00003890: 0924 7374 6174 2d3e 696e 6372 4d64 3528 .$stat->incrMd5( │ │ │ -000038a0: 293b 0a09 6d79 2024 6d64 3573 697a 6520 );..my $md5size │ │ │ -000038b0: 3d20 224c 2d24 6d64 352d 2473 697a 6522 = "L-$md5-$size" │ │ │ -000038c0: 3b0a 0924 696e 6f64 6532 6d64 357b 2464 ;..$inode2md5{$d │ │ │ -000038d0: 6576 496e 6f64 657d 203d 2024 6d64 3573 evInode} = $md5s │ │ │ -000038e0: 697a 653b 0a0a 096d 7920 2824 6662 6173 ize;...my ($fbas │ │ │ -000038f0: 652c 2024 666e 616d 652c 2024 696e 6465 e, $fname, $inde │ │ │ -00003900: 7829 203d 2024 696e 6465 7844 6972 2d3e x) = $indexDir-> │ │ │ -00003910: 6e65 7746 696c 6528 2466 293b 0a09 246d newFile($f);..$m │ │ │ -00003920: 6435 3266 696c 657b 246d 6435 7369 7a65 d52file{$md5size │ │ │ -00003930: 7d20 3d20 2224 696e 6465 782f 2466 6e61 } = "$index/$fna │ │ │ -00003940: 6d65 223b 0a23 7072 696e 7420 225c 7453 me";.#print "\tS │ │ │ -00003950: 796d 6c69 6e6b 3a20 2466 6261 7365 2c20 ymlink: $fbase, │ │ │ -00003960: 2466 6e61 6d65 2c20 2469 6e64 6578 2028 $fname, $index ( │ │ │ -00003970: 246d 6435 7369 7a65 295c 6e22 3b0a 2020 $md5size)\n";. │ │ │ -00003980: 2020 7d0a 7d0a 2370 7269 6e74 2022 2d2d }.}.#print "-- │ │ │ -00003990: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ---------------- │ │ │ -000039a0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ---------------- │ │ │ -000039b0: 2d2d 2d2d 2d2d 2d2d 5c6e 223b 0a0a 2474 --------\n";..$t │ │ │ -000039c0: 6172 6765 7444 6972 203d 2026 3a3a 6162 argetDir = &::ab │ │ │ -000039d0: 736f 6c75 7465 5061 7468 2824 7461 7267 solutePath($targ │ │ │ -000039e0: 6574 4469 7229 3b0a 0a23 0a23 2063 6f70 etDir);..#.# cop │ │ │ -000039f0: 7920 2f20 6c69 6e6b 2040 736f 7572 6365 y / link @source │ │ │ -00003a00: 4469 720a 230a 2470 724c 6f67 2d3e 7072 Dir.#.$prLog->pr │ │ │ -00003a10: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00003a20: 4927 2c0a 0920 2020 2020 2027 2d73 7472 I',.. '-str │ │ │ -00003a30: 2720 3d3e 205b 2273 7461 7274 2063 6f70 ' => ["start cop │ │ │ -00003a40: 7969 6e67 203c 2220 2e20 6a6f 696e 2827 ying <" . join(' │ │ │ -00003a50: 3e20 3c27 2c20 4073 6f75 7263 6544 6972 > <', @sourceDir │ │ │ -00003a60: 2920 2e20 273e 275d 293b 0a66 6f72 6561 ) . '>']);.forea │ │ │ -00003a70: 6368 206d 7920 2464 2028 4073 6f75 7263 ch my $d (@sourc │ │ │ -00003a80: 6544 6972 290a 7b0a 2370 7269 6e74 2022 eDir).{.#print " │ │ │ -00003a90: 2d2d 2d24 642d 2d2d 5c6e 223b 0a20 2020 ---$d---\n";. │ │ │ -00003aa0: 206d 7920 2824 6469 722c 2024 6261 7365 my ($dir, $base │ │ │ -00003ab0: 4469 7229 203d 2026 3a3a 7370 6c69 7446 Dir) = &::splitF │ │ │ -00003ac0: 696c 6544 6972 2824 6429 3b0a 0a20 2020 ileDir($d);.. │ │ │ -00003ad0: 207b 0a09 6d79 2028 246d 6f64 652c 2024 {..my ($mode, $ │ │ │ -00003ae0: 7569 642c 2024 6769 642c 2024 6174 696d uid, $gid, $atim │ │ │ -00003af0: 652c 2024 6d74 696d 6529 203d 2028 7374 e, $mtime) = (st │ │ │ -00003b00: 6174 2824 6429 295b 322c 342c 352c 382c at($d))[2,4,5,8, │ │ │ -00003b10: 395d 3b0a 0a09 756e 6c65 7373 2028 6d6b 9];...unless (mk │ │ │ -00003b20: 6469 7220 2224 7461 7267 6574 4469 722f dir "$targetDir/ │ │ │ -00003b30: 2462 6173 6544 6972 222c 2024 6d6f 6465 $baseDir", $mode │ │ │ -00003b40: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog │ │ │ -00003b50: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00003b60: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ -00003b70: 7472 2720 3d3e 0a09 0909 2020 5b22 6361 tr' =>.... ["ca │ │ │ -00003b80: 6e6e 6f74 2063 7265 6174 6520 6469 7265 nnot create dire │ │ │ -00003b90: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi │ │ │ -00003ba0: 722f 2462 6173 6544 6972 3e22 5d29 3b0a r/$baseDir>"]);. │ │ │ -00003bb0: 0920 2020 2065 7869 7420 3120 756e 6c65 . exit 1 unle │ │ │ -00003bc0: 7373 2024 6967 6e6f 7265 4572 726f 7273 ss $ignoreErrors │ │ │ -00003bd0: 3b0a 097d 0a0a 0963 686f 776e 2024 7569 ;..}...chown $ui │ │ │ -00003be0: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, "$targe │ │ │ -00003bf0: 7444 6972 2f24 6261 7365 4469 7222 3b0a tDir/$baseDir";. │ │ │ -00003c00: 2309 7574 696d 6520 2461 7469 6d65 2c20 #.utime $atime, │ │ │ -00003c10: 246d 7469 6d65 2c20 2224 7461 7267 6574 $mtime, "$target │ │ │ -00003c20: 4469 722f 2462 6173 6544 6972 223b 0a09 Dir/$baseDir";.. │ │ │ -00003c30: 6d79 2024 7772 203d 2022 2474 6172 6765 my $wr = "$targe │ │ │ -00003c40: 7444 6972 2f24 6261 7365 4469 7222 3b0a tDir/$baseDir";. │ │ │ -00003c50: 0924 7772 203d 7e20 732f 5c6e 2f5c 302f .$wr =~ s/\n/\0/ │ │ │ -00003c60: 6f67 3b0a 0970 7269 6e74 2044 4952 4649 og;..print DIRFI │ │ │ -00003c70: 4c45 2022 2461 7469 6d65 2024 6d74 696d LE "$atime $mtim │ │ │ -00003c80: 6520 246d 6f64 6520 2477 725c 6e22 3b0a e $mode $wr\n";. │ │ │ -00003c90: 0924 7374 6174 2d3e 696e 6372 4469 7228 .$stat->incrDir( │ │ │ -00003ca0: 293b 0a20 2020 207d 0a0a 2020 2020 2472 );. }.. $r │ │ │ -00003cb0: 7264 203d 2072 6563 7572 7369 7665 5265 rd = recursiveRe │ │ │ -00003cc0: 6164 4469 722d 3e6e 6577 2827 2d64 6972 adDir->new('-dir │ │ │ -00003cd0: 7327 203d 3e20 5b24 645d 2c0a 0909 0909 s' => [$d],..... │ │ │ -00003ce0: 2027 2d70 7269 6e74 4465 7074 6827 203d '-printDepth' = │ │ │ -00003cf0: 3e20 2470 7269 6e74 4465 7074 682c 0a09 > $printDepth,.. │ │ │ -00003d00: 0909 0920 272d 7072 696e 7444 6570 7468 ... '-printDepth │ │ │ -00003d10: 5072 6c6f 674b 696e 6427 203d 3e20 2750 PrlogKind' => 'P │ │ │ -00003d20: 272c 0a09 0909 0920 272d 7072 4c6f 6727 ',..... '-prLog' │ │ │ -00003d30: 203d 3e20 2470 724c 6f67 293b 0a20 2020 => $prLog);. │ │ │ -00003d40: 2077 6869 6c65 2028 2824 662c 2024 7429 while (($f, $t) │ │ │ -00003d50: 203d 2024 7272 642d 3e6e 6578 7428 2929 = $rrd->next()) │ │ │ -00003d60: 0a20 2020 207b 0a09 6d79 2024 7265 6c50 . {..my $relP │ │ │ -00003d70: 6174 6820 3d20 263a 3a73 7562 7374 7261 ath = &::substra │ │ │ -00003d80: 6374 5061 7468 2824 662c 2024 6429 3b0a ctPath($f, $d);. │ │ │ -00003d90: 096d 7920 2466 6e65 7720 3d20 2224 7461 .my $fnew = "$ta │ │ │ -00003da0: 7267 6574 4469 722f 2462 6173 6544 6972 rgetDir/$baseDir │ │ │ -00003db0: 2f24 7265 6c50 6174 6822 3b0a 2370 7269 /$relPath";.#pri │ │ │ -00003dc0: 6e74 2022 2474 202d 3e20 2466 202d 3e20 nt "$t -> $f -> │ │ │ -00003dd0: 2466 6e65 775c 6e22 3b0a 0a09 6d79 2024 $fnew\n";...my $ │ │ │ -00003de0: 6c69 6e6b 5379 6d6c 696e 6b73 203d 2031 linkSymlinks = 1 │ │ │ -00003df0: 3b0a 0924 6c69 6e6b 5379 6d6c 696e 6b73 ;..$linkSymlinks │ │ │ -00003e00: 203d 2030 0a09 2020 2020 6966 2028 2474 = 0.. if ($t │ │ │ -00003e10: 2065 7120 276c 2720 616e 6420 2464 6f6e eq 'l' and $don │ │ │ -00003e20: 744c 696e 6b53 796d 6c69 6e6b 7329 3b0a tLinkSymlinks);. │ │ │ -00003e30: 2370 7269 6e74 2022 6c69 6e6b 5379 6d6c #print "linkSyml │ │ │ -00003e40: 696e 6b73 203d 2024 6c69 6e6b 5379 6d6c inks = $linkSyml │ │ │ -00003e50: 696e 6b73 5c6e 223b 0a0a 0969 6620 2824 inks\n";...if ($ │ │ │ -00003e60: 7420 6571 2027 6427 2920 2020 2020 2020 t eq 'd') │ │ │ -00003e70: 2320 6469 7265 6374 6f72 790a 097b 0a09 # directory..{.. │ │ │ -00003e80: 2020 2020 6d79 2028 246d 6f64 652c 2024 my ($mode, $ │ │ │ -00003e90: 7569 642c 2024 6769 642c 2024 6174 696d uid, $gid, $atim │ │ │ -00003ea0: 652c 2024 6d74 696d 6529 203d 0a09 0928 e, $mtime) =...( │ │ │ -00003eb0: 7374 6174 2824 6629 295b 322c 342c 352c stat($f))[2,4,5, │ │ │ -00003ec0: 382c 395d 3b0a 0920 2020 2075 6e6c 6573 8,9];.. unles │ │ │ -00003ed0: 7320 286d 6b64 6972 2024 666e 6577 290a s (mkdir $fnew). │ │ │ -00003ee0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog- │ │ │ -00003ef0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003f00: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... │ │ │ -00003f10: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... │ │ │ -00003f20: 2020 205b 2263 616e 6e6f 7420 6372 6561 ["cannot crea │ │ │ -00003f30: 7465 2064 6972 6563 746f 7279 203c 2466 te directory <$f │ │ │ -00003f40: 6e65 773e 225d 293b 0a09 0965 7869 7420 new>"]);...exit │ │ │ -00003f50: 3120 756e 6c65 7373 2024 6967 6e6f 7265 1 unless $ignore │ │ │ -00003f60: 4572 726f 7273 3b0a 0920 2020 207d 0a09 Errors;.. }.. │ │ │ -00003f70: 2020 2020 6368 6f77 6e20 2475 6964 2c20 chown $uid, │ │ │ -00003f80: 2467 6964 2c20 2224 666e 6577 223b 0a09 $gid, "$fnew";.. │ │ │ -00003f90: 2020 2020 6d79 2024 7772 203d 2024 666e my $wr = $fn │ │ │ -00003fa0: 6577 3b0a 0920 2020 2024 7772 203d 7e20 ew;.. $wr =~ │ │ │ -00003fb0: 732f 5c6e 2f5c 302f 6f67 3b0a 0920 2020 s/\n/\0/og;.. │ │ │ -00003fc0: 2070 7269 6e74 2044 4952 4649 4c45 2022 print DIRFILE " │ │ │ -00003fd0: 2461 7469 6d65 2024 6d74 696d 6520 246d $atime $mtime $m │ │ │ -00003fe0: 6f64 6520 2477 725c 6e22 3b0a 0920 2020 ode $wr\n";.. │ │ │ -00003ff0: 2024 7374 6174 2d3e 696e 6372 4469 7228 $stat->incrDir( │ │ │ -00004000: 293b 0a09 7d0a 0965 6c73 6966 2028 2474 );..}..elsif ($t │ │ │ -00004010: 2065 7120 2766 2720 6f72 2024 7420 6571 eq 'f' or $t eq │ │ │ -00004020: 2027 6c27 2920 2023 206e 6f72 6d61 6c20 'l') # normal │ │ │ -00004030: 6669 6c65 206f 7220 7379 6d6c 696e 6b0a file or symlink. │ │ │ -00004040: 097b 0a09 2020 2020 6d79 2028 2464 6576 .{.. my ($dev │ │ │ -00004050: 2c20 2469 6e6f 6465 2c20 246d 6f64 652c , $inode, $mode, │ │ │ -00004060: 2024 7569 642c 2024 6769 642c 2024 7369 $uid, $gid, $si │ │ │ -00004070: 7a65 2c20 2461 7469 6d65 2c0a 0909 246d ze, $atime,...$m │ │ │ -00004080: 7469 6d65 2c20 2463 7469 6d65 2c20 2462 time, $ctime, $b │ │ │ -00004090: 6c6f 636b 7329 3b0a 0920 2020 2069 6620 locks);.. if │ │ │ -000040a0: 2824 7420 6571 2027 6627 290a 0920 2020 ($t eq 'f').. │ │ │ -000040b0: 207b 0a09 0928 2464 6576 2c20 2469 6e6f {...($dev, $ino │ │ │ -000040c0: 6465 2c20 246d 6f64 652c 2024 7569 642c de, $mode, $uid, │ │ │ -000040d0: 2024 6769 642c 2024 7369 7a65 2c20 2461 $gid, $size, $a │ │ │ -000040e0: 7469 6d65 2c0a 0909 246d 7469 6d65 2c20 time,...$mtime, │ │ │ -000040f0: 2463 7469 6d65 2c20 2462 6c6f 636b 7329 $ctime, $blocks) │ │ │ -00004100: 203d 2028 7374 6174 2824 6629 295b 302c = (stat($f))[0, │ │ │ -00004110: 312c 322c 342c 352c 372c 382c 392c 3130 1,2,4,5,7,8,9,10 │ │ │ -00004120: 2c31 325d 3b0a 0920 2020 207d 0a09 2020 ,12];.. }.. │ │ │ -00004130: 2020 656c 7369 6620 2824 7420 6571 2027 elsif ($t eq ' │ │ │ -00004140: 6c27 290a 0920 2020 207b 0a09 0928 2464 l').. {...($d │ │ │ -00004150: 6576 2c20 2469 6e6f 6465 2c20 246d 6f64 ev, $inode, $mod │ │ │ -00004160: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $ │ │ │ -00004170: 7369 7a65 2c20 2461 7469 6d65 2c0a 0909 size, $atime,... │ │ │ -00004180: 246d 7469 6d65 2c20 2463 7469 6d65 2920 $mtime, $ctime) │ │ │ -00004190: 3d20 286c 7374 6174 2824 6629 295b 302c = (lstat($f))[0, │ │ │ -000041a0: 312c 322c 342c 352c 372c 382c 392c 3130 1,2,4,5,7,8,9,10 │ │ │ -000041b0: 5d3b 0a09 2020 2020 7d0a 0a09 2020 2020 ];.. }... │ │ │ -000041c0: 6d79 2024 6465 7649 6e6f 6465 203d 2022 my $devInode = " │ │ │ -000041d0: 2464 6576 2d24 696e 6f64 6522 3b0a 0a09 $dev-$inode";... │ │ │ -000041e0: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $ │ │ │ -000041f0: 696e 6f64 6532 6d64 357b 2464 6576 496e inode2md5{$devIn │ │ │ -00004200: 6f64 657d 2920 2023 2068 6172 6420 6c69 ode}) # hard li │ │ │ -00004210: 6e6b 2061 6c72 6561 6479 2072 6561 640a nk already read. │ │ │ -00004220: 0920 2020 207b 0a09 096d 7920 246d 6435 . {...my $md5 │ │ │ -00004230: 7369 7a65 203d 2024 696e 6f64 6532 6d64 size = $inode2md │ │ │ -00004240: 357b 2464 6576 496e 6f64 657d 3b0a 0909 5{$devInode};... │ │ │ -00004250: 0a09 096d 7920 2469 4669 6c65 203d 2024 ...my $iFile = $ │ │ │ -00004260: 6d64 3532 6669 6c65 7b24 6d64 3573 697a md52file{$md5siz │ │ │ -00004270: 657d 3b0a 0a09 096d 7920 2466 6f75 6e64 e};....my $found │ │ │ -00004280: 4669 6c65 203d 2024 696e 6465 7844 6972 File = $indexDir │ │ │ -00004290: 2d3e 7265 706c 6163 6549 6e64 6578 2824 ->replaceIndex($ │ │ │ -000042a0: 6946 696c 6529 3b0a 0a23 7072 696e 7420 iFile);..#print │ │ │ -000042b0: 225c 746c 696e 6b20 2831 2920 2466 6f75 "\tlink (1) $fou │ │ │ -000042c0: 6e64 4669 6c65 203d 3e20 2466 6e65 775c ndFile => $fnew\ │ │ │ -000042d0: 6e22 3b0a 0a0a 0920 2020 206d 7920 2468 n";.... my $h │ │ │ -000042e0: 6c20 3d20 2d31 3b0a 0920 2020 2069 6620 l = -1;.. if │ │ │ -000042f0: 2824 6d61 7848 6172 644c 696e 6b73 203e ($maxHardLinks > │ │ │ -00004300: 2030 290a 0920 2020 207b 0a09 0924 686c 0).. {...$hl │ │ │ -00004310: 203d 2028 7374 6174 2824 666f 756e 6446 = (stat($foundF │ │ │ -00004320: 696c 6529 295b 335d 3b0a 0909 6966 2028 ile))[3];...if ( │ │ │ -00004330: 2474 2065 7120 276c 2729 2020 2023 2073 $t eq 'l') # s │ │ │ -00004340: 796d 6c69 6e6b 0a09 097b 0a09 0920 2020 ymlink...{... │ │ │ -00004350: 2024 686c 203d 2028 6c73 7461 7428 2466 $hl = (lstat($f │ │ │ -00004360: 6f75 6e64 4669 6c65 2929 5b33 5d3b 0a09 oundFile))[3];.. │ │ │ -00004370: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{... │ │ │ -00004380: 2020 2020 2468 6c20 3d20 2873 7461 7428 $hl = (stat( │ │ │ -00004390: 2466 6f75 6e64 4669 6c65 2929 5b33 5d3b $foundFile))[3]; │ │ │ -000043a0: 0a09 097d 0a23 7072 696e 7420 2224 666f ...}.#print "$fo │ │ │ -000043b0: 756e 6446 696c 653a 2024 686c 2068 6172 undFile: $hl har │ │ │ -000043c0: 646c 696e 6b73 2028 246d 6178 4861 7264 dlinks ($maxHard │ │ │ -000043d0: 4c69 6e6b 7329 5c6e 223b 0a09 2020 2020 Links)\n";.. │ │ │ -000043e0: 7d0a 0920 2020 2069 6620 2824 686c 203c }.. if ($hl < │ │ │ -000043f0: 2024 6d61 7848 6172 644c 696e 6b73 2061 $maxHardLinks a │ │ │ -00004400: 6e64 206e 6f74 0a09 0928 246c 696e 6b53 nd not...($linkS │ │ │ -00004410: 796d 6c69 6e6b 7320 616e 6420 6c69 6e6b ymlinks and link │ │ │ -00004420: 2024 666f 756e 6446 696c 652c 2024 666e $foundFile, $fn │ │ │ -00004430: 6577 2929 0a23 0909 756e 6c65 7373 2028 ew)).#..unless ( │ │ │ -00004440: 246c 696e 6b53 796d 6c69 6e6b 7320 616e $linkSymlinks an │ │ │ -00004450: 6420 6c69 6e6b 2024 666f 756e 6446 696c d link $foundFil │ │ │ -00004460: 652c 2024 666e 6577 290a 0a0a 0909 7b0a e, $fnew).....{. │ │ │ -00004470: 2370 7269 6e74 2022 5c74 5c74 2121 2163 #print "\t\t!!!c │ │ │ -00004480: 6f70 7920 2466 203d 3e24 666e 6577 5c6e opy $f =>$fnew\n │ │ │ -00004490: 223b 0a09 0920 2020 206d 7920 2824 6662 ";... my ($fb │ │ │ -000044a0: 6173 652c 2024 666e 616d 652c 2024 696e ase, $fname, $in │ │ │ -000044b0: 6465 7829 203d 2024 696e 6465 7844 6972 dex) = $indexDir │ │ │ -000044c0: 2d3e 6e65 7746 696c 6528 2466 6e65 7729 ->newFile($fnew) │ │ │ -000044d0: 3b0a 0909 2020 2020 246d 6435 3266 696c ;... $md52fil │ │ │ -000044e0: 657b 246d 6435 7369 7a65 7d20 3d20 2224 e{$md5size} = "$ │ │ │ -000044f0: 696e 6465 782f 2466 6e61 6d65 223b 0a0a index/$fname";.. │ │ │ -00004500: 0909 2020 2020 6966 2028 2474 2065 7120 .. if ($t eq │ │ │ -00004510: 2766 2729 0a09 0920 2020 207b 0a23 0909 'f')... {.#.. │ │ │ -00004520: 0975 6e6c 6573 7320 2826 3a3a 636f 7079 .unless (&::copy │ │ │ -00004530: 4669 6c65 2824 662c 2024 666e 6577 2c20 File($f, $fnew, │ │ │ -00004540: 2470 724c 6f67 2929 0a09 0909 756e 6c65 $prLog))....unle │ │ │ -00004550: 7373 2028 263a 3a63 6865 636b 5370 6172 ss (&::checkSpar │ │ │ -00004560: 7365 416e 6443 6f70 7946 696c 6573 280a seAndCopyFiles(. │ │ │ -00004570: 0909 0909 2020 2020 2020 2024 662c 2024 .... $f, $ │ │ │ -00004580: 666e 6577 2c20 2470 724c 6f67 2c20 2473 fnew, $prLog, $s │ │ │ -00004590: 697a 652c 0a09 0909 0920 2020 2020 2020 ize,..... │ │ │ -000045a0: 2462 6c6f 636b 732c 2024 6372 6561 7465 $blocks, $create │ │ │ -000045b0: 5370 6172 7365 4669 6c65 732c 0a09 0909 SparseFiles,.... │ │ │ -000045c0: 0920 2020 2020 2020 2462 6c6f 636b 5369 . $blockSi │ │ │ -000045d0: 7a65 2c20 2474 6d70 6469 7229 290a 0909 ze, $tmpdir))... │ │ │ -000045e0: 097b 0a09 0909 2020 2020 2470 724c 6f67 .{.... $prLog │ │ │ -000045f0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00004600: 3d3e 2027 4527 2c0a 0909 0909 0920 2027 => 'E',...... ' │ │ │ -00004610: 2d73 7472 2720 3d3e 0a09 0909 0909 2020 -str' =>...... │ │ │ -00004620: 5b22 6361 6e6e 6f74 2063 6f70 7920 3c24 ["cannot copy <$ │ │ │ -00004630: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to " ....... │ │ │ -00004640: 2020 223c 2466 6e65 773e 225d 293b 0a09 "<$fnew>"]);.. │ │ │ -00004650: 0909 2020 2020 6578 6974 2031 2075 6e6c .. exit 1 unl │ │ │ -00004660: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError │ │ │ -00004670: 733b 0a09 0909 7d0a 0909 2020 2020 7d0a s;....}... }. │ │ │ -00004680: 0909 2020 2020 656c 7369 6620 2824 7420 .. elsif ($t │ │ │ -00004690: 6571 2027 6c27 290a 0909 2020 2020 7b0a eq 'l')... {. │ │ │ -000046a0: 0909 0975 6e6c 6573 7320 2826 3a3a 636f ...unless (&::co │ │ │ -000046b0: 7079 5379 6d4c 696e 6b28 2466 2c20 2466 pySymLink($f, $f │ │ │ -000046c0: 6e65 7729 290a 0909 097b 0a09 0909 2020 new))....{.... │ │ │ -000046d0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -000046e0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -000046f0: 0909 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ -00004700: 0a09 0909 0909 2020 5b22 6361 6e6e 6f74 ...... ["cannot │ │ │ -00004710: 2063 6f70 7920 7379 6d6c 696e 6b20 3c24 copy symlink <$ │ │ │ -00004720: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to " ....... │ │ │ -00004730: 2020 223c 2466 6e65 773e 225d 293b 0a09 "<$fnew>"]);.. │ │ │ -00004740: 0909 2020 2020 6578 6974 2031 2075 6e6c .. exit 1 unl │ │ │ -00004750: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError │ │ │ -00004760: 733b 0a09 0909 7d0a 0909 2020 2020 7d0a s;....}... }. │ │ │ -00004770: 0909 2020 2020 2473 7461 742d 3e69 6e63 .. $stat->inc │ │ │ -00004780: 7243 6f70 7928 293b 0a09 097d 0a09 0965 rCopy();...}...e │ │ │ -00004790: 6c73 650a 0909 7b0a 0909 2020 2020 2473 lse...{... $s │ │ │ -000047a0: 7461 742d 3e69 6e63 724c 696e 6b28 293b tat->incrLink(); │ │ │ -000047b0: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. │ │ │ -000047c0: 2065 6c73 6520 2020 2020 2320 6361 6e6e else # cann │ │ │ -000047d0: 6f74 2066 696e 6420 7361 6d65 2068 6172 ot find same har │ │ │ -000047e0: 6420 6c69 6e6b 0a09 2020 2020 7b0a 0909 d link.. {... │ │ │ -000047f0: 6d79 2024 6d64 3573 697a 653b 0a09 0969 my $md5size;...i │ │ │ -00004800: 6620 2824 7420 6571 2027 6627 290a 0909 f ($t eq 'f')... │ │ │ -00004810: 7b0a 0909 2020 2020 6d79 2024 6d64 3520 {... my $md5 │ │ │ -00004820: 3d20 263a 3a63 616c 634d 4435 2824 662c = &::calcMD5($f, │ │ │ -00004830: 2024 7072 4c6f 6729 3b0a 0909 2020 2020 $prLog);... │ │ │ -00004840: 756e 6c65 7373 2028 246d 6435 290a 0909 unless ($md5)... │ │ │ -00004850: 2020 2020 7b0a 0909 0924 7072 4c6f 672d {....$prLog- │ │ │ -00004860: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00004870: 3e20 2745 272c 0a09 0909 0920 2020 2020 > 'E',..... │ │ │ -00004880: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ -00004890: 2020 2020 205b 2263 6f75 6c64 206e 6f74 ["could not │ │ │ -000048a0: 2063 616c 6375 6c61 7465 206d 6435 2073 calculate md5 s │ │ │ -000048b0: 756d 206f 6620 3c24 663e 2c20 736b 6970 um of <$f>, skip │ │ │ -000048c0: 7069 6e67 225d 293b 0a09 0909 6e65 7874 ping"]);....next │ │ │ -000048d0: 3b0a 0909 2020 2020 7d0a 0909 2020 2020 ;... }... │ │ │ -000048e0: 246d 6435 7369 7a65 203d 2022 246d 6435 $md5size = "$md5 │ │ │ -000048f0: 2d24 7369 7a65 223b 0a09 097d 0a09 0965 -$size";...}...e │ │ │ -00004900: 6c73 6966 2028 2474 2065 7120 276c 2729 lsif ($t eq 'l') │ │ │ -00004910: 0a09 097b 0a09 0920 2020 206d 7920 246d ...{... my $m │ │ │ -00004920: 6435 203d 2026 3a3a 7265 6164 5379 6d4c d5 = &::readSymL │ │ │ -00004930: 696e 6b43 616c 634d 6435 2824 662c 2024 inkCalcMd5($f, $ │ │ │ -00004940: 7072 4c6f 6729 3b0a 0909 2020 2020 756e prLog);... un │ │ │ -00004950: 6c65 7373 2028 246d 6435 290a 0909 2020 less ($md5)... │ │ │ -00004960: 2020 7b0a 0909 0924 7072 4c6f 672d 3e70 {....$prLog->p │ │ │ -00004970: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00004980: 2745 272c 0a09 0909 0920 2020 2020 2027 'E',..... ' │ │ │ -00004990: 2d73 7472 2720 3d3e 0a09 0909 0920 2020 -str' =>..... │ │ │ -000049a0: 2020 205b 2263 6f75 6c64 206e 6f74 2063 ["could not c │ │ │ -000049b0: 616c 6375 6c61 7465 206d 6435 2073 756d alculate md5 sum │ │ │ -000049c0: 206f 6620 7379 6d6c 696e 6b20 3c24 663e of symlink <$f> │ │ │ -000049d0: 2c22 202e 0a09 0909 0920 2020 2020 2020 ," ...... │ │ │ -000049e0: 2220 736b 6970 7069 6e67 225d 293b 0a09 " skipping"]);.. │ │ │ -000049f0: 0909 6e65 7874 3b0a 0909 2020 2020 7d0a ..next;... }. │ │ │ -00004a00: 0909 2020 2020 246d 6435 7369 7a65 203d .. $md5size = │ │ │ -00004a10: 2022 4c2d 246d 6435 2d24 7369 7a65 223b "L-$md5-$size"; │ │ │ -00004a20: 0a09 097d 0a0a 0909 2473 7461 742d 3e69 ...}....$stat->i │ │ │ -00004a30: 6e63 724d 6435 2829 3b0a 0909 2469 6e6f ncrMd5();...$ino │ │ │ -00004a40: 6465 326d 6435 7b24 6465 7649 6e6f 6465 de2md5{$devInode │ │ │ -00004a50: 7d20 3d20 246d 6435 7369 7a65 3b0a 0a09 } = $md5size;... │ │ │ -00004a60: 0969 6620 2865 7869 7374 7320 246d 6435 .if (exists $md5 │ │ │ -00004a70: 3266 696c 657b 246d 6435 7369 7a65 7d29 2file{$md5size}) │ │ │ -00004a80: 2020 2023 2066 6f75 6e64 2073 616d 6520 # found same │ │ │ -00004a90: 6669 6c65 0a09 097b 0a09 0920 2020 206d file...{... m │ │ │ -00004aa0: 7920 2469 4669 6c65 203d 2024 6d64 3532 y $iFile = $md52 │ │ │ -00004ab0: 6669 6c65 7b24 6d64 3573 697a 657d 3b0a file{$md5size};. │ │ │ -00004ac0: 0909 2020 2020 6d79 2024 666f 756e 6446 .. my $foundF │ │ │ -00004ad0: 696c 6520 3d20 2469 6e64 6578 4469 722d ile = $indexDir- │ │ │ -00004ae0: 3e72 6570 6c61 6365 496e 6465 7828 2469 >replaceIndex($i │ │ │ -00004af0: 4669 6c65 293b 0a0a 2370 7269 6e74 2022 File);..#print " │ │ │ -00004b00: 5c74 6c69 6e6b 2028 3229 2024 666f 756e \tlink (2) $foun │ │ │ -00004b10: 6446 696c 6520 3d3e 2024 666e 6577 5c6e dFile => $fnew\n │ │ │ -00004b20: 223b 0a0a 0a09 2020 2020 6d79 2024 686c ";.... my $hl │ │ │ -00004b30: 203d 202d 313b 0a09 2020 2020 6966 2028 = -1;.. if ( │ │ │ -00004b40: 246d 6178 4861 7264 4c69 6e6b 7320 3e20 $maxHardLinks > │ │ │ -00004b50: 3029 0a09 2020 2020 7b0a 0909 6966 2028 0).. {...if ( │ │ │ -00004b60: 2474 2065 7120 276c 2729 2020 2023 2073 $t eq 'l') # s │ │ │ -00004b70: 796d 6c69 6e6b 0a09 097b 0a09 0920 2020 ymlink...{... │ │ │ -00004b80: 2024 686c 203d 2028 6c73 7461 7428 2466 $hl = (lstat($f │ │ │ -00004b90: 6f75 6e64 4669 6c65 2929 5b33 5d3b 0a09 oundFile))[3];.. │ │ │ -00004ba0: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{... │ │ │ -00004bb0: 2020 2020 2468 6c20 3d20 2873 7461 7428 $hl = (stat( │ │ │ -00004bc0: 2466 6f75 6e64 4669 6c65 2929 5b33 5d3b $foundFile))[3]; │ │ │ -00004bd0: 0a09 097d 0a23 7072 696e 7420 2224 666f ...}.#print "$fo │ │ │ -00004be0: 756e 6446 696c 653a 2024 686c 2068 6172 undFile: $hl har │ │ │ -00004bf0: 646c 696e 6b73 2028 246d 6178 4861 7264 dlinks ($maxHard │ │ │ -00004c00: 4c69 6e6b 7329 5c6e 223b 0a09 2020 2020 Links)\n";.. │ │ │ -00004c10: 7d0a 0920 2020 2069 6620 2824 686c 203c }.. if ($hl < │ │ │ -00004c20: 2024 6d61 7848 6172 644c 696e 6b73 2061 $maxHardLinks a │ │ │ -00004c30: 6e64 206e 6f74 0a09 0928 246c 696e 6b53 nd not...($linkS │ │ │ -00004c40: 796d 6c69 6e6b 7320 616e 6420 6c69 6e6b ymlinks and link │ │ │ -00004c50: 2024 666f 756e 6446 696c 652c 2024 666e $foundFile, $fn │ │ │ -00004c60: 6577 2929 0a23 0909 756e 6c65 7373 2028 ew)).#..unless ( │ │ │ -00004c70: 246c 696e 6b53 796d 6c69 6e6b 7320 616e $linkSymlinks an │ │ │ -00004c80: 6420 6c69 6e6b 2024 666f 756e 6446 696c d link $foundFil │ │ │ -00004c90: 652c 2024 666e 6577 290a 0a0a 0909 2020 e, $fnew)..... │ │ │ -00004ca0: 2020 7b0a 2370 7269 6e74 2022 5c74 5c74 {.#print "\t\t │ │ │ -00004cb0: 2121 2163 6f70 7920 2466 203d 3e24 666e !!!copy $f =>$fn │ │ │ -00004cc0: 6577 5c6e 223b 0a09 0909 6d79 2028 2466 ew\n";....my ($f │ │ │ -00004cd0: 6261 7365 2c20 2466 6e61 6d65 2c20 2469 base, $fname, $i │ │ │ -00004ce0: 6e64 6578 2920 3d20 2469 6e64 6578 4469 ndex) = $indexDi │ │ │ -00004cf0: 722d 3e6e 6577 4669 6c65 2824 666e 6577 r->newFile($fnew │ │ │ -00004d00: 293b 0a09 0909 246d 6435 3266 696c 657b );....$md52file{ │ │ │ -00004d10: 246d 6435 7369 7a65 7d20 3d20 2224 696e $md5size} = "$in │ │ │ -00004d20: 6465 782f 2466 6e61 6d65 223b 0a0a 0909 dex/$fname";.... │ │ │ -00004d30: 0969 6620 2824 7420 6571 2027 6627 290a .if ($t eq 'f'). │ │ │ -00004d40: 0909 097b 0a23 0909 0920 2020 2075 6e6c ...{.#... unl │ │ │ -00004d50: 6573 7320 2826 3a3a 636f 7079 4669 6c65 ess (&::copyFile │ │ │ -00004d60: 2824 662c 2024 666e 6577 2c20 2470 724c ($f, $fnew, $prL │ │ │ -00004d70: 6f67 2929 0a09 0909 2020 2020 756e 6c65 og)).... unle │ │ │ -00004d80: 7373 2028 263a 3a63 6865 636b 5370 6172 ss (&::checkSpar │ │ │ -00004d90: 7365 416e 6443 6f70 7946 696c 6573 280a seAndCopyFiles(. │ │ │ -00004da0: 0909 0909 0920 2020 2466 2c20 2466 6e65 ..... $f, $fne │ │ │ -00004db0: 772c 2024 7072 4c6f 672c 2024 7369 7a65 w, $prLog, $size │ │ │ -00004dc0: 2c0a 0909 0909 0920 2020 2462 6c6f 636b ,...... $block │ │ │ -00004dd0: 732c 2024 6372 6561 7465 5370 6172 7365 s, $createSparse │ │ │ -00004de0: 4669 6c65 732c 0a09 0909 0909 2020 2024 Files,...... $ │ │ │ -00004df0: 626c 6f63 6b53 697a 652c 2024 746d 7064 blockSize, $tmpd │ │ │ -00004e00: 6972 2929 0a09 0909 2020 2020 7b0a 0909 ir)).... {... │ │ │ -00004e10: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00004e20: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00004e30: 0909 0909 0920 2020 2020 2027 2d73 7472 ..... '-str │ │ │ -00004e40: 2720 3d3e 0a09 0909 0909 2020 2020 2020 ' =>...... │ │ │ -00004e50: 5b22 6361 6e6e 6f74 2063 6f70 7920 3c24 ["cannot copy <$ │ │ │ -00004e60: 663e 2074 6f20 2220 2e0a 0909 0909 0920 f> to " ....... │ │ │ -00004e70: 2020 2020 2020 223c 2466 6e65 773e 225d "<$fnew>"] │ │ │ -00004e80: 293b 0a09 0909 0965 7869 7420 3120 756e );.....exit 1 un │ │ │ -00004e90: 6c65 7373 2024 6967 6e6f 7265 4572 726f less $ignoreErro │ │ │ -00004ea0: 7273 3b0a 0909 0920 2020 207d 0a09 0909 rs;.... }.... │ │ │ -00004eb0: 7d0a 0909 0965 6c73 6966 2028 2474 2065 }....elsif ($t e │ │ │ -00004ec0: 7120 276c 2729 0a09 0909 7b0a 0909 0920 q 'l')....{.... │ │ │ -00004ed0: 2020 2075 6e6c 6573 7320 2826 3a3a 636f unless (&::co │ │ │ -00004ee0: 7079 5379 6d4c 696e 6b28 2466 2c20 2466 pySymLink($f, $f │ │ │ -00004ef0: 6e65 7729 290a 0909 0920 2020 207b 0a09 new)).... {.. │ │ │ -00004f00: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00004f10: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00004f20: 0a09 0909 0909 2020 2020 2020 272d 7374 ...... '-st │ │ │ -00004f30: 7227 203d 3e0a 0909 0909 0920 2020 2020 r' =>...... │ │ │ -00004f40: 205b 2263 616e 6e6f 7420 636f 7079 2073 ["cannot copy s │ │ │ -00004f50: 796d 6c69 6e6b 203c 2466 3e20 746f 2022 ymlink <$f> to " │ │ │ -00004f60: 202e 0a09 0909 0909 2020 2020 2020 2022 ....... " │ │ │ -00004f70: 3c24 666e 6577 3e22 5d29 3b0a 0909 0909 <$fnew>"]);..... │ │ │ -00004f80: 6578 6974 2031 2075 6e6c 6573 7320 2469 exit 1 unless $i │ │ │ -00004f90: 676e 6f72 6545 7272 6f72 733b 0a09 0909 gnoreErrors;.... │ │ │ -00004fa0: 2020 2020 7d0a 0909 097d 0a09 0909 2473 }....}....$s │ │ │ -00004fb0: 7461 742d 3e69 6e63 7243 6f70 7928 293b tat->incrCopy(); │ │ │ -00004fc0: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e │ │ │ -00004fd0: 6c73 650a 0909 2020 2020 7b0a 0909 0924 lse... {....$ │ │ │ -00004fe0: 7374 6174 2d3e 696e 6372 4c69 6e6b 2829 stat->incrLink() │ │ │ -00004ff0: 3b0a 0909 2020 2020 7d0a 0909 7d0a 0909 ;... }...}... │ │ │ -00005000: 656c 7365 2020 2020 2320 6e65 7720 6669 else # new fi │ │ │ -00005010: 6c65 0a09 097b 0a09 0920 2020 206d 7920 le...{... my │ │ │ -00005020: 2824 6662 6173 652c 2024 666e 616d 652c ($fbase, $fname, │ │ │ -00005030: 2024 696e 6465 7829 203d 2024 696e 6465 $index) = $inde │ │ │ -00005040: 7844 6972 2d3e 6e65 7746 696c 6528 2466 xDir->newFile($f │ │ │ -00005050: 6e65 7729 3b0a 0909 2020 2020 246d 6435 new);... $md5 │ │ │ -00005060: 3266 696c 657b 246d 6435 7369 7a65 7d20 2file{$md5size} │ │ │ -00005070: 3d20 2224 696e 6465 782f 2466 6e61 6d65 = "$index/$fname │ │ │ -00005080: 223b 0a0a 2370 7269 6e74 2022 5c74 636f ";..#print "\tco │ │ │ -00005090: 7079 2024 6620 3d3e 2466 6e65 775c 6e22 py $f =>$fnew\n" │ │ │ -000050a0: 3b0a 0909 2020 2020 6966 2028 2474 2065 ;... if ($t e │ │ │ -000050b0: 7120 2766 2729 0a09 0920 2020 207b 0a23 q 'f')... {.# │ │ │ -000050c0: 0909 0975 6e6c 6573 7320 2826 3a3a 636f ...unless (&::co │ │ │ -000050d0: 7079 4669 6c65 2824 662c 2024 666e 6577 pyFile($f, $fnew │ │ │ -000050e0: 2c20 2470 724c 6f67 2929 0a09 0909 756e , $prLog))....un │ │ │ -000050f0: 6c65 7373 2028 263a 3a63 6865 636b 5370 less (&::checkSp │ │ │ -00005100: 6172 7365 416e 6443 6f70 7946 696c 6573 arseAndCopyFiles │ │ │ -00005110: 280a 0909 0909 2020 2020 2020 2024 662c (..... $f, │ │ │ -00005120: 2024 666e 6577 2c20 2470 724c 6f67 2c20 $fnew, $prLog, │ │ │ -00005130: 2473 697a 652c 0a09 0909 0920 2020 2020 $size,..... │ │ │ -00005140: 2020 2462 6c6f 636b 732c 2024 6372 6561 $blocks, $crea │ │ │ -00005150: 7465 5370 6172 7365 4669 6c65 732c 0a09 teSparseFiles,.. │ │ │ -00005160: 0909 0920 2020 2020 2020 2462 6c6f 636b ... $block │ │ │ -00005170: 5369 7a65 2c20 2474 6d70 6469 7229 290a Size, $tmpdir)). │ │ │ -00005180: 0909 097b 0a09 0909 2020 2020 2470 724c ...{.... $prL │ │ │ -00005190: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000051a0: 2720 3d3e 2027 4527 2c0a 0909 0909 0920 ' => 'E',...... │ │ │ -000051b0: 2027 2d73 7472 2720 3d3e 0a09 0909 0909 '-str' =>...... │ │ │ -000051c0: 2020 5b22 6361 6e6e 6f74 2063 6f70 7920 ["cannot copy │ │ │ -000051d0: 3c24 663e 2074 6f20 2220 2e0a 0909 0909 <$f> to " ...... │ │ │ -000051e0: 0920 2020 223c 2466 6e65 773e 225d 293b . "<$fnew>"]); │ │ │ -000051f0: 0a09 0909 0965 7869 7420 3120 756e 6c65 .....exit 1 unle │ │ │ -00005200: 7373 2024 6967 6e6f 7265 4572 726f 7273 ss $ignoreErrors │ │ │ -00005210: 3b0a 0909 0920 2020 207d 0a09 0920 2020 ;.... }... │ │ │ -00005220: 207d 0a09 0920 2020 2065 6c73 6966 2028 }... elsif ( │ │ │ -00005230: 2474 2065 7120 276c 2729 0a09 0920 2020 $t eq 'l')... │ │ │ -00005240: 207b 0a09 0909 756e 6c65 7373 2028 263a {....unless (&: │ │ │ -00005250: 3a63 6f70 7953 796d 4c69 6e6b 2824 662c :copySymLink($f, │ │ │ -00005260: 2024 666e 6577 2929 0a09 0909 7b0a 0909 $fnew))....{... │ │ │ -00005270: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00005280: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00005290: 272c 0a09 0909 0909 2020 272d 7374 7227 ',...... '-str' │ │ │ -000052a0: 203d 3e0a 0909 0909 0920 205b 2263 616e =>...... ["can │ │ │ -000052b0: 6e6f 7420 636f 7079 2073 796d 6c69 6e6b not copy symlink │ │ │ -000052c0: 203c 2466 3e20 746f 2022 202e 0a09 0909 <$f> to " ..... │ │ │ -000052d0: 0909 2020 2022 3c24 666e 6577 3e22 5d29 .. "<$fnew>"]) │ │ │ -000052e0: 3b0a 0909 0909 6578 6974 2031 2075 6e6c ;.....exit 1 unl │ │ │ -000052f0: 6573 7320 2469 676e 6f72 6545 7272 6f72 ess $ignoreError │ │ │ -00005300: 733b 0a09 0909 2020 2020 7d0a 0909 2020 s;.... }... │ │ │ -00005310: 2020 7d0a 0909 2020 2020 2473 7461 742d }... $stat- │ │ │ -00005320: 3e69 6e63 7243 6f70 7928 293b 0a09 097d >incrCopy();...} │ │ │ -00005330: 0a09 2020 2020 7d0a 0920 2020 2069 6620 .. }.. if │ │ │ -00005340: 2824 7420 6571 2027 6c27 2920 2020 2020 ($t eq 'l') │ │ │ -00005350: 2023 2073 796d 626f 6c69 6320 6c69 6e6b # symbolic link │ │ │ -00005360: 0a09 2020 2020 7b0a 0909 6d79 2024 6368 .. {...my $ch │ │ │ -00005370: 6f77 6e20 3d0a 0909 2020 2020 666f 726b own =... fork │ │ │ -00005380: 5072 6f63 2d3e 6e65 7728 272d 6578 6563 Proc->new('-exec │ │ │ -00005390: 2720 3d3e 2027 6368 6f77 6e27 2c0a 0909 ' => 'chown',... │ │ │ -000053a0: 0909 2020 272d 7061 7261 6d27 203d 3e20 .. '-param' => │ │ │ -000053b0: 5b27 2d68 272c 2022 2475 6964 3a24 6769 ['-h', "$uid:$gi │ │ │ -000053c0: 6422 2c20 2466 6e65 775d 2c0a 0909 0909 d", $fnew],..... │ │ │ -000053d0: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' = │ │ │ -000053e0: 3e20 2224 746d 7064 6972 2f63 686f 776e > "$tmpdir/chown │ │ │ -000053f0: 2d22 2c0a 0909 0909 2020 272d 7072 4c6f -",..... '-prLo │ │ │ -00005400: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ -00005410: 0924 6368 6f77 6e2d 3e77 6169 7428 293b .$chown->wait(); │ │ │ -00005420: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -00005430: 650a 0920 2020 207b 0a09 0963 686f 776e e.. {...chown │ │ │ -00005440: 2024 7569 642c 2024 6769 642c 2024 666e $uid, $gid, $fn │ │ │ -00005450: 6577 3b0a 0909 6368 6d6f 6420 246d 6f64 ew;...chmod $mod │ │ │ -00005460: 652c 2024 666e 6577 3b0a 0909 7574 696d e, $fnew;...utim │ │ │ -00005470: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ -00005480: 2c20 2466 6e65 773b 0a09 2020 2020 7d0a , $fnew;.. }. │ │ │ -00005490: 097d 0a09 656c 7365 2020 2023 2061 6c6c .}..else # all │ │ │ -000054a0: 2066 696c 6520 7479 7065 7320 6578 6365 file types exce │ │ │ -000054b0: 7074 2027 6627 2061 6e64 2027 6427 0a09 pt 'f' and 'd'.. │ │ │ -000054c0: 7b0a 0920 2020 2026 3a3a 636f 7079 4469 {.. &::copyDi │ │ │ -000054d0: 7228 2466 2c20 2466 6e65 772c 2022 2474 r($f, $fnew, "$t │ │ │ -000054e0: 6d70 6469 722f 7374 6275 4c69 6e6b 2d22 mpdir/stbuLink-" │ │ │ -000054f0: 2c20 2470 724c 6f67 2c20 2469 676e 6f72 , $prLog, $ignor │ │ │ -00005500: 6545 7272 6f72 7329 3b0a 0920 2020 2024 eErrors);.. $ │ │ │ -00005510: 7374 6174 2d3e 696e 6372 436f 7079 2829 stat->incrCopy() │ │ │ -00005520: 3b0a 097d 0a20 2020 207d 0a7d 0a0a 6966 ;..}. }.}..if │ │ │ -00005530: 2028 2473 6176 6552 414d 290a 7b0a 2020 ($saveRAM).{. │ │ │ -00005540: 2020 6462 6d63 6c6f 7365 2825 696e 6f64 dbmclose(%inod │ │ │ -00005550: 6532 6d64 3529 3b0a 2020 2020 756e 6c69 e2md5);. unli │ │ │ -00005560: 6e6b 2024 696e 6f64 6532 6d64 3546 696c nk $inode2md5Fil │ │ │ -00005570: 653b 0a20 2020 2064 626d 636c 6f73 6528 e;. dbmclose( │ │ │ -00005580: 256d 6435 3266 696c 6529 3b0a 2020 2020 %md52file);. │ │ │ -00005590: 756e 6c69 6e6b 2024 6d64 3532 6669 6c65 unlink $md52file │ │ │ -000055a0: 4669 6c65 3b0a 7d0a 0a23 2073 6574 2061 File;.}..# set a │ │ │ -000055b0: 7469 6d65 2c20 6d74 696d 652c 206d 6f64 time, mtime, mod │ │ │ -000055c0: 6520 6f66 2064 6972 6563 746f 7269 6573 e of directories │ │ │ -000055d0: 0a63 6c6f 7365 2844 4952 4649 4c45 293b .close(DIRFILE); │ │ │ -000055e0: 0a75 6e6c 6573 7320 286f 7065 6e28 4449 .unless (open(DI │ │ │ -000055f0: 5246 494c 452c 2027 3c27 2c20 2474 6d70 RFILE, '<', $tmp │ │ │ -00005600: 4469 7246 696c 6529 290a 7b0a 2020 2020 DirFile)).{. │ │ │ -00005610: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00005620: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00005630: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ -00005640: 6e6e 6f74 2072 6561 6420 3c24 746d 7044 nnot read <$tmpD │ │ │ -00005650: 6972 4669 6c65 3e2c 2063 616e 6e6f 7420 irFile>, cannot │ │ │ -00005660: 7365 7420 2220 2e0a 0909 0920 2020 2020 set " ..... │ │ │ -00005670: 2261 7469 6d65 2061 6e64 206d 7469 6d65 "atime and mtime │ │ │ -00005680: 2066 6f72 2064 6972 6563 746f 7269 6573 for directories │ │ │ -00005690: 225d 293b 0a7d 0a65 6c73 650a 7b0a 2020 "]);.}.else.{. │ │ │ -000056a0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -000056b0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -000056c0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -000056d0: 7365 7474 696e 6720 6174 696d 652c 206d setting atime, m │ │ │ -000056e0: 7469 6d65 206f 6620 6469 7265 6374 6f72 time of director │ │ │ -000056f0: 6965 7320 2e2e 2e22 5d29 3b0a 0a20 2020 ies ..."]);.. │ │ │ -00005700: 206d 7920 246c 696e 653b 0a20 2020 2077 my $line;. w │ │ │ -00005710: 6869 6c65 2028 246c 696e 6520 3d20 3c44 hile ($line = ). {.. │ │ │ -00005730: 6368 6f70 2024 6c69 6e65 3b0a 096d 7920 chop $line;..my │ │ │ -00005740: 2824 6174 696d 652c 2024 6d74 696d 652c ($atime, $mtime, │ │ │ -00005750: 2024 6d6f 6465 2c20 2464 6629 203d 2073 $mode, $df) = s │ │ │ -00005760: 706c 6974 282f 5c73 2f2c 2024 6c69 6e65 plit(/\s/, $line │ │ │ -00005770: 2c20 3429 3b0a 0924 6466 203d 7e20 732f , 4);..$df =~ s/ │ │ │ -00005780: 5c30 2f5c 6e2f 6f67 3b0a 0963 686d 6f64 \0/\n/og;..chmod │ │ │ -00005790: 2024 6d6f 6465 2c20 2464 663b 0a09 7574 $mode, $df;..ut │ │ │ -000057a0: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti │ │ │ -000057b0: 6d65 2c20 2464 663b 0a09 7574 696d 6520 me, $df;..utime │ │ │ -000057c0: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, │ │ │ -000057d0: 2464 663b 0a20 2020 207d 0a20 2020 2063 $df;. }. c │ │ │ -000057e0: 6c6f 7365 2844 4952 4649 4c45 293b 0a7d lose(DIRFILE);.} │ │ │ -000057f0: 0a75 6e6c 696e 6b20 2474 6d70 4469 7246 .unlink $tmpDirF │ │ │ -00005800: 696c 653b 0a0a 0a24 7374 6174 2d3e 7072 ile;...$stat->pr │ │ │ -00005810: 696e 7428 293b 0a69 6620 2840 6c74 290a int();.if (@lt). │ │ │ -00005820: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr │ │ │ -00005830: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005840: 5a27 2c0a 0909 2020 272d 7374 7227 203d Z',... '-str' = │ │ │ -00005850: 3e0a 0909 2020 5b22 636f 7079 2f6c 696e >... ["copy/lin │ │ │ -00005860: 6b20 3c22 202e 206a 6f69 6e28 273e 3c27 k <" . join('><' │ │ │ -00005870: 2c20 406c 6229 202e 2022 3e20 746f 203c , @lb) . "> to < │ │ │ -00005880: 2220 2e0a 0909 2020 206a 6f69 6e28 273e " .... join('> │ │ │ -00005890: 3c27 2c20 406c 7429 202e 2022 3e20 746f <', @lt) . "> to │ │ │ -000058a0: 203c 246c 7473 3e22 5d29 3b0a 7d0a 656c <$lts>"]);.}.el │ │ │ -000058b0: 7365 0a7b 0a20 2020 2024 7072 4c6f 672d se.{. $prLog- │ │ │ -000058c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000058d0: 3e20 275a 272c 0a09 0920 2027 2d73 7472 > 'Z',... '-str │ │ │ -000058e0: 2720 3d3e 0a09 0920 205b 2263 6f70 792f ' =>... ["copy/ │ │ │ -000058f0: 6c69 6e6b 203c 2220 2e20 6a6f 696e 2827 link <" . join(' │ │ │ -00005900: 3e3c 272c 2040 6c62 2920 2e0a 0909 2020 ><', @lb) .... │ │ │ -00005910: 2022 3e20 746f 203c 246c 7473 3e22 5d29 "> to <$lts>"]) │ │ │ -00005920: 3b0a 7d0a 0a0a 6578 6974 2030 3b0a 0a0a ;.}...exit 0;... │ │ │ -00005930: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005940: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005950: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005960: 2323 0a23 2072 6574 756e 7273 2031 206f ##.# retunrs 1 o │ │ │ -00005970: 6e20 7375 6363 6573 732c 2030 2069 6620 n success, 0 if │ │ │ -00005980: 636f 7079 2066 6169 6c73 0a73 7562 2063 copy fails.sub c │ │ │ -00005990: 6865 636b 5370 6172 7365 416e 6443 6f70 heckSparseAndCop │ │ │ -000059a0: 7946 696c 6573 0a7b 0a20 2020 206d 7920 yFiles.{. my │ │ │ -000059b0: 2473 6f75 7263 6520 3d20 7368 6966 743b $source = shift; │ │ │ -000059c0: 0a20 2020 206d 7920 2474 6172 6765 7420 . my $target │ │ │ -000059d0: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -000059e0: 2470 724c 6f67 203d 2073 6869 6674 3b0a $prLog = shift;. │ │ │ -000059f0: 2020 2020 6d79 2024 7369 7a65 203d 2073 my $size = s │ │ │ -00005a00: 6869 6674 3b0a 2020 2020 6d79 2024 626c hift;. my $bl │ │ │ -00005a10: 6f63 6b73 203d 2073 6869 6674 3b0a 2020 ocks = shift;. │ │ │ -00005a20: 2020 6d79 2024 6372 6561 7465 5370 6172 my $createSpar │ │ │ -00005a30: 7365 4669 6c65 7320 3d20 7368 6966 743b seFiles = shift; │ │ │ -00005a40: 0a20 2020 206d 7920 2462 6c6f 636b 5369 . my $blockSi │ │ │ -00005a50: 7a65 203d 2073 6869 6674 3b0a 2020 2020 ze = shift;. │ │ │ -00005a60: 6d79 2024 746d 7064 6972 203d 2073 6869 my $tmpdir = shi │ │ │ -00005a70: 6674 3b0a 0a20 2020 2069 6620 2824 6372 ft;.. if ($cr │ │ │ -00005a80: 6561 7465 5370 6172 7365 4669 6c65 7320 eateSparseFiles │ │ │ -00005a90: 616e 6420 2024 626c 6f63 6b73 202a 2024 and $blocks * $ │ │ │ -00005aa0: 626c 6f63 6b53 697a 6520 3c20 2473 697a blockSize < $siz │ │ │ -00005ab0: 6529 2023 206d 6179 6265 2073 7061 7273 e) # maybe spars │ │ │ -00005ac0: 6520 6669 6c65 0a20 2020 207b 0a09 6d79 e file. {..my │ │ │ -00005ad0: 2024 7265 7420 3d20 313b 2020 2023 2073 $ret = 1; # s │ │ │ -00005ae0: 7563 6365 7373 0a09 6d79 2024 6370 203d uccess..my $cp = │ │ │ -00005af0: 2066 6f72 6b50 726f 632d 3e6e 6577 2827 forkProc->new(' │ │ │ -00005b00: 2d65 7865 6327 203d 3e20 2763 7027 2c0a -exec' => 'cp',. │ │ │ -00005b10: 0909 0920 2020 2020 2020 272d 7061 7261 ... '-para │ │ │ -00005b20: 6d27 203d 3e0a 0909 0920 2020 2020 2020 m' =>.... │ │ │ -00005b30: 5b22 2473 6f75 7263 6522 2c20 2224 7461 ["$source", "$ta │ │ │ -00005b40: 7267 6574 225d 2c0a 0909 0920 2020 2020 rget"],.... │ │ │ -00005b50: 2020 272d 6f75 7452 616e 646f 6d27 203d '-outRandom' = │ │ │ -00005b60: 3e20 2224 746d 7064 6972 2f6c 696e 6b54 > "$tmpdir/linkT │ │ │ -00005b70: 6f2d 6370 2d22 2c0a 0909 0920 2020 2020 o-cp-",.... │ │ │ -00005b80: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ -00005b90: 724c 6f67 293b 0a09 2463 702d 3e77 6169 rLog);..$cp->wai │ │ │ -00005ba0: 7428 293b 0a09 6d79 2024 6f75 7420 3d20 t();..my $out = │ │ │ -00005bb0: 2463 702d 3e67 6574 5354 444f 5554 2829 $cp->getSTDOUT() │ │ │ -00005bc0: 3b0a 0969 6620 2840 246f 7574 290a 097b ;..if (@$out)..{ │ │ │ -00005bd0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00005be0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005bf0: 5727 2c0a 0909 0920 2027 2d73 7472 2720 W',.... '-str' │ │ │ -00005c00: 3d3e 0a09 0909 2020 5b22 636f 7079 696e =>.... ["copyin │ │ │ -00005c10: 6720 6f66 203c 2473 6f75 7263 653e 2074 g of <$source> t │ │ │ -00005c20: 6f20 3c24 7461 7267 6574 3e20 7265 706f o <$target> repo │ │ │ -00005c30: 7274 6564 3a22 2c0a 0909 0920 2020 4024 rted:",.... @$ │ │ │ -00005c40: 6f75 745d 293b 0a09 7d0a 0924 6f75 7420 out]);..}..$out │ │ │ -00005c50: 3d20 2463 702d 3e67 6574 5354 4445 5252 = $cp->getSTDERR │ │ │ -00005c60: 2829 3b0a 0969 6620 2840 246f 7574 290a ();..if (@$out). │ │ │ -00005c70: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog-> │ │ │ -00005c80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00005c90: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -00005ca0: 2720 3d3e 0a09 0920 205b 2263 6f70 7969 ' =>... ["copyi │ │ │ -00005cb0: 6e67 2028 7769 7468 2027 6370 202d 7227 ng (with 'cp -r' │ │ │ -00005cc0: 2920 6f66 203c 2473 6f75 7263 653e 2074 ) of <$source> t │ │ │ -00005cd0: 6f20 3c24 7461 7267 6574 3e20 7265 706f o <$target> repo │ │ │ -00005ce0: 7274 6564 3a22 2c0a 0909 0920 2020 4024 rted:",.... @$ │ │ │ -00005cf0: 6f75 745d 293b 0a09 2020 2020 2472 6574 out]);.. $ret │ │ │ -00005d00: 203d 2030 3b0a 097d 0a09 2470 724c 6f67 = 0;..}..$prLog │ │ │ -00005d10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00005d20: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... │ │ │ -00005d30: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => ["file │ │ │ -00005d40: 203c 2473 6f75 7263 653e 2063 6f70 6965 <$source> copie │ │ │ -00005d50: 6420 6173 2073 7061 7273 6520 6669 6c65 d as sparse file │ │ │ -00005d60: 225d 290a 0920 2020 2069 6620 2472 6574 "]).. if $ret │ │ │ -00005d70: 3b0a 0a09 7265 7475 726e 2024 7265 743b ;...return $ret; │ │ │ -00005d80: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -00005d90: 2020 2020 7b0a 0972 6574 7572 6e20 263a {..return &: │ │ │ -00005da0: 3a63 6f70 7946 696c 6528 2473 6f75 7263 :copyFile($sourc │ │ │ -00005db0: 652c 2024 7461 7267 6574 2c20 2470 724c e, $target, $prL │ │ │ -00005dc0: 6f67 293b 0a20 2020 207d 0a7d 0a0a 0a0a og);. }.}.... │ │ │ -00005dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005de0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005df0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005e00: 2323 0a70 6163 6b61 6765 2053 7461 7469 ##.package Stati │ │ │ -00005e10: 7374 6963 3b0a 0a23 2323 2323 2323 2323 stic;..######### │ │ │ -00005e20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005e30: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00005e40: 7375 6220 6e65 770a 7b0a 2020 2020 6d79 sub new.{. my │ │ │ -00005e50: 2024 636c 6173 7320 3d20 7368 6966 743b $class = shift; │ │ │ -00005e60: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ -00005e70: 7b7d 3b0a 0a20 2020 206d 7920 2825 7061 {};.. my (%pa │ │ │ -00005e80: 7261 6d73 2920 3d20 2827 2d70 724c 6f67 rams) = ('-prLog │ │ │ -00005e90: 2720 2020 2020 2020 2020 2020 2020 3d3e ' => │ │ │ -00005ea0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00005eb0: 7072 6f67 7265 7373 5265 706f 7274 2720 progressReport' │ │ │ -00005ec0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -00005ed0: 2020 2027 2d70 726f 6772 6573 7344 656c '-progressDel │ │ │ -00005ee0: 7461 5469 6d65 2720 3d3e 2030 0a09 0920 taTime' => 0... │ │ │ -00005ef0: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch │ │ │ -00005f00: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams( │ │ │ -00005f10: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \%params, \@_, ' │ │ │ -00005f20: 5374 6174 6973 7469 633a 3a6e 6577 272c Statistic::new', │ │ │ -00005f30: 0a09 0909 205b 272d 7072 4c6f 6727 2c20 .... ['-prLog', │ │ │ -00005f40: 272d 7072 6f67 7265 7373 5265 706f 7274 '-progressReport │ │ │ -00005f50: 275d 293b 0a20 2020 2026 3a3a 7365 7450 ']);. &::setP │ │ │ -00005f60: 6172 616d 7344 6972 6563 7428 2473 656c aramsDirect($sel │ │ │ -00005f70: 662c 205c 2570 6172 616d 7329 3b0a 0a20 f, \%params);.. │ │ │ -00005f80: 2020 2024 7365 6c66 2d3e 7b27 7374 6174 $self->{'stat │ │ │ -00005f90: 436f 7079 277d 203d 2030 3b0a 2020 2020 Copy'} = 0;. │ │ │ -00005fa0: 2473 656c 662d 3e7b 2773 7461 744c 696e $self->{'statLin │ │ │ -00005fb0: 6b27 7d20 3d20 303b 0a20 2020 2024 7365 k'} = 0;. $se │ │ │ -00005fc0: 6c66 2d3e 7b27 7374 6174 4469 7227 7d20 lf->{'statDir'} │ │ │ -00005fd0: 3d20 303b 0a0a 2020 2020 2473 656c 662d = 0;.. $self- │ │ │ -00005fe0: 3e7b 2773 7461 7452 6561 6427 7d20 3d20 >{'statRead'} = │ │ │ -00005ff0: 303b 0a20 2020 2024 7365 6c66 2d3e 7b27 0;. $self->{' │ │ │ -00006000: 7374 6174 4d64 3527 7d20 3d20 303b 0a0a statMd5'} = 0;.. │ │ │ -00006010: 2020 2020 2473 656c 662d 3e7b 2774 696d $self->{'tim │ │ │ -00006020: 6550 726f 6772 5265 706f 7274 277d 203d eProgrReport'} = │ │ │ -00006030: 0a09 2824 7365 6c66 2d3e 7b27 7072 6f67 ..($self->{'prog │ │ │ -00006040: 7265 7373 4465 6c74 6154 696d 6527 7d20 ressDeltaTime'} │ │ │ -00006050: 3e20 3029 203f 2074 696d 6520 3a20 303b > 0) ? time : 0; │ │ │ -00006060: 0a0a 2020 2020 626c 6573 7320 2473 656c .. bless $sel │ │ │ -00006070: 662c 2024 636c 6173 733b 0a7d 0a0a 2323 f, $class;.}..## │ │ │ -00006080: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006090: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000060a0: 2323 2323 2323 0a73 7562 2069 6e63 7243 ######.sub incrC │ │ │ -000060b0: 6f70 790a 7b0a 2020 2020 6d79 2024 7365 opy.{. my $se │ │ │ -000060c0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. │ │ │ -000060d0: 202b 2b24 7365 6c66 2d3e 7b27 7374 6174 ++$self->{'stat │ │ │ -000060e0: 436f 7079 277d 3b0a 2020 2020 2473 656c Copy'};. $sel │ │ │ -000060f0: 662d 3e63 6865 636b 5072 6f67 7265 7373 f->checkProgress │ │ │ -00006100: 2829 3b0a 7d0a 0a23 2323 2323 2323 2323 ();.}..######### │ │ │ -00006110: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006120: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00006130: 7375 6220 696e 6372 4c69 6e6b 0a7b 0a20 sub incrLink.{. │ │ │ -00006140: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ -00006150: 6966 743b 0a0a 2020 2020 2b2b 2473 656c ift;.. ++$sel │ │ │ -00006160: 662d 3e7b 2773 7461 744c 696e 6b27 7d3b f->{'statLink'}; │ │ │ -00006170: 0a20 2020 2024 7365 6c66 2d3e 6368 6563 . $self->chec │ │ │ -00006180: 6b50 726f 6772 6573 7328 293b 0a7d 0a0a kProgress();.}.. │ │ │ -00006190: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000061a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000061b0: 2323 2323 2323 2323 0a73 7562 2069 6e63 ########.sub inc │ │ │ -000061c0: 7244 6972 0a7b 0a20 2020 206d 7920 2473 rDir.{. my $s │ │ │ -000061d0: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. │ │ │ -000061e0: 2020 2b2b 2473 656c 662d 3e7b 2773 7461 ++$self->{'sta │ │ │ -000061f0: 7444 6972 277d 3b0a 2020 2020 2473 656c tDir'};. $sel │ │ │ -00006200: 662d 3e63 6865 636b 5072 6f67 7265 7373 f->checkProgress │ │ │ -00006210: 2829 3b0a 7d0a 0a23 2323 2323 2323 2323 ();.}..######### │ │ │ -00006220: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006230: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00006240: 7375 6220 696e 6372 5265 6164 0a7b 0a20 sub incrRead.{. │ │ │ -00006250: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ -00006260: 6966 743b 0a0a 2020 2020 2b2b 2473 656c ift;.. ++$sel │ │ │ -00006270: 662d 3e7b 2773 7461 7452 6561 6427 7d3b f->{'statRead'}; │ │ │ -00006280: 0a20 2020 2024 7365 6c66 2d3e 6368 6563 . $self->chec │ │ │ -00006290: 6b50 726f 6772 6573 7352 6561 6428 293b kProgressRead(); │ │ │ -000062a0: 0a7d 0a0a 2323 2323 2323 2323 2323 2323 .}..############ │ │ │ -000062b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000062c0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ -000062d0: 2069 6e63 724d 6435 0a7b 0a20 2020 206d incrMd5.{. m │ │ │ -000062e0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -000062f0: 0a0a 2020 2020 2b2b 2473 656c 662d 3e7b .. ++$self->{ │ │ │ -00006300: 2773 7461 744d 6435 277d 3b0a 7d0a 0a23 'statMd5'};.}..# │ │ │ -00006310: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006320: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006330: 2323 2323 2323 230a 7375 6220 6368 6563 #######.sub chec │ │ │ -00006340: 6b50 726f 6772 6573 7352 6561 640a 7b0a kProgressRead.{. │ │ │ -00006350: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ -00006360: 6869 6674 3b0a 0a20 2020 206d 7920 246e hift;.. my $n │ │ │ -00006370: 203d 2024 7365 6c66 2d3e 7b27 7374 6174 = $self->{'stat │ │ │ -00006380: 5265 6164 277d 3b0a 2020 2020 6966 2028 Read'};. if ( │ │ │ -00006390: 2824 7365 6c66 2d3e 7b27 7072 6f67 7265 ($self->{'progre │ │ │ -000063a0: 7373 5265 706f 7274 277d 2061 6e64 0a09 ssReport'} and.. │ │ │ -000063b0: 246e 2025 2024 7365 6c66 2d3e 7b27 7072 $n % $self->{'pr │ │ │ -000063c0: 6f67 7265 7373 5265 706f 7274 277d 203d ogressReport'} = │ │ │ -000063d0: 3d20 3029 206f 720a 0928 2473 656c 662d = 0) or..($self- │ │ │ -000063e0: 3e7b 2774 696d 6550 726f 6772 5265 706f >{'timeProgrRepo │ │ │ -000063f0: 7274 277d 203e 2030 2061 6e64 0a09 2074 rt'} > 0 and.. t │ │ │ -00006400: 696d 6520 3e3d 2024 7365 6c66 2d3e 7b27 ime >= $self->{' │ │ │ -00006410: 7469 6d65 5072 6f67 7252 6570 6f72 7427 timeProgrReport' │ │ │ -00006420: 7d20 2b20 2473 656c 662d 3e7b 2770 726f } + $self->{'pro │ │ │ -00006430: 6772 6573 7344 656c 7461 5469 6d65 277d gressDeltaTime'} │ │ │ -00006440: 2929 0a20 2020 207b 0a09 2473 656c 662d )). {..$self- │ │ │ -00006450: 3e7b 2770 724c 6f67 277d 2d3e 7072 696e >{'prLog'}->prin │ │ │ -00006460: 7428 272d 6b69 6e64 2720 3d3e 2027 5027 t('-kind' => 'P' │ │ │ -00006470: 2c0a 0909 0909 272d 7374 7227 203d 3e0a ,.....'-str' =>. │ │ │ -00006480: 0909 0909 5b22 7265 6164 2024 6e20 6974 ....["read $n it │ │ │ -00006490: 656d 732c 2063 616c 6365 6420 2220 2e0a ems, calced " .. │ │ │ -000064a0: 0909 0909 2473 656c 662d 3e7b 2773 7461 ....$self->{'sta │ │ │ -000064b0: 744d 6435 277d 202e 2022 206d 6435 2073 tMd5'} . " md5 s │ │ │ -000064c0: 756d 7322 5d29 3b0a 0924 7365 6c66 2d3e ums"]);..$self-> │ │ │ -000064d0: 7b27 7469 6d65 5072 6f67 7252 6570 6f72 {'timeProgrRepor │ │ │ -000064e0: 7427 7d20 3d20 7469 6d65 0a09 2020 2020 t'} = time.. │ │ │ -000064f0: 6966 2024 7365 6c66 2d3e 7b27 7469 6d65 if $self->{'time │ │ │ -00006500: 5072 6f67 7252 6570 6f72 7427 7d20 3e20 ProgrReport'} > │ │ │ -00006510: 303b 0a20 2020 207d 0a7d 0a0a 2323 2323 0;. }.}..#### │ │ │ -00006520: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006530: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006540: 2323 2323 0a73 7562 2063 6865 636b 5072 ####.sub checkPr │ │ │ -00006550: 6f67 7265 7373 0a7b 0a20 2020 206d 7920 ogress.{. my │ │ │ -00006560: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ -00006570: 2020 2020 6d79 2024 6e20 3d20 2473 656c my $n = $sel │ │ │ -00006580: 662d 3e7b 2773 7461 7443 6f70 7927 7d20 f->{'statCopy'} │ │ │ -00006590: 2b20 2473 656c 662d 3e7b 2773 7461 744c + $self->{'statL │ │ │ -000065a0: 696e 6b27 7d20 2b0a 0924 7365 6c66 2d3e ink'} +..$self-> │ │ │ -000065b0: 7b27 7374 6174 4469 7227 7d3b 0a20 2020 {'statDir'};. │ │ │ -000065c0: 2069 6620 2828 2473 656c 662d 3e7b 2770 if (($self->{'p │ │ │ -000065d0: 726f 6772 6573 7352 6570 6f72 7427 7d20 rogressReport'} │ │ │ -000065e0: 616e 640a 0920 246e 2025 2024 7365 6c66 and.. $n % $self │ │ │ -000065f0: 2d3e 7b27 7072 6f67 7265 7373 5265 706f ->{'progressRepo │ │ │ -00006600: 7274 277d 203d 3d20 3029 206f 720a 0928 rt'} == 0) or..( │ │ │ -00006610: 2473 656c 662d 3e7b 2774 696d 6550 726f $self->{'timePro │ │ │ -00006620: 6772 5265 706f 7274 277d 203e 2030 2061 grReport'} > 0 a │ │ │ -00006630: 6e64 0a09 2074 696d 6520 3e3d 2024 7365 nd.. time >= $se │ │ │ -00006640: 6c66 2d3e 7b27 7469 6d65 5072 6f67 7252 lf->{'timeProgrR │ │ │ -00006650: 6570 6f72 7427 7d20 2b20 2473 656c 662d eport'} + $self- │ │ │ -00006660: 3e7b 2770 726f 6772 6573 7344 656c 7461 >{'progressDelta │ │ │ -00006670: 5469 6d65 277d 2929 0a20 2020 207b 0a09 Time'})). {.. │ │ │ -00006680: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ -00006690: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000066a0: 3d3e 2027 5027 2c0a 0909 0909 272d 7374 => 'P',.....'-st │ │ │ -000066b0: 7227 203d 3e0a 0909 0909 5b22 7072 6f63 r' =>.....["proc │ │ │ -000066c0: 6573 7365 6420 246e 2069 7465 6d73 2c20 essed $n items, │ │ │ -000066d0: 6361 6c63 6564 2022 202e 0a09 0909 0924 calced " ......$ │ │ │ -000066e0: 7365 6c66 2d3e 7b27 7374 6174 4d64 3527 self->{'statMd5' │ │ │ -000066f0: 7d20 2e20 2220 6d64 3520 7375 6d73 3b20 } . " md5 sums; │ │ │ -00006700: 2220 2e0a 0909 0909 2473 656c 662d 3e7b " ......$self->{ │ │ │ -00006710: 2773 7461 744c 696e 6b27 7d20 2e20 2220 'statLink'} . " │ │ │ -00006720: 6c69 6e6b 6564 2c20 2220 2e0a 0909 0909 linked, " ...... │ │ │ -00006730: 2473 656c 662d 3e7b 2773 7461 7443 6f70 $self->{'statCop │ │ │ -00006740: 7927 7d20 2e20 2220 636f 7069 6564 225d y'} . " copied"] │ │ │ -00006750: 293b 0a09 2473 656c 662d 3e7b 2774 696d );..$self->{'tim │ │ │ -00006760: 6550 726f 6772 5265 706f 7274 277d 203d eProgrReport'} = │ │ │ -00006770: 2074 696d 650a 0920 2020 2069 6620 2473 time.. if $s │ │ │ -00006780: 656c 662d 3e7b 2774 696d 6550 726f 6772 elf->{'timeProgr │ │ │ -00006790: 5265 706f 7274 277d 203e 2030 3b0a 2020 Report'} > 0;. │ │ │ -000067a0: 2020 7d0a 7d0a 0a23 2323 2323 2323 2323 }.}..######### │ │ │ -000067b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000067c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -000067d0: 7375 6220 7072 696e 740a 7b0a 2020 2020 sub print.{. │ │ │ -000067e0: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -000067f0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ -00006800: 7072 4c6f 6727 7d2d 3e70 7269 6e74 2827 prLog'}->print(' │ │ │ -00006810: 2d6b 696e 6427 203d 3e20 2753 272c 0a09 -kind' => 'S',.. │ │ │ -00006820: 0909 2020 2020 272d 7374 7227 203d 3e0a .. '-str' =>. │ │ │ -00006830: 0909 0920 2020 205b 2272 6561 6420 2220 ... ["read " │ │ │ -00006840: 2e0a 0909 0920 2020 2020 2473 656c 662d ..... $self- │ │ │ -00006850: 3e7b 2773 7461 7452 6561 6427 7d20 2e20 >{'statRead'} . │ │ │ -00006860: 2220 6974 656d 733b 2063 7265 6174 6564 " items; created │ │ │ -00006870: 2022 202e 0a09 0909 2020 2020 2024 7365 " ..... $se │ │ │ -00006880: 6c66 2d3e 7b27 7374 6174 4469 7227 7d20 lf->{'statDir'} │ │ │ -00006890: 2e20 2220 6469 7273 2c20 2220 2e0a 0909 . " dirs, " .... │ │ │ -000068a0: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s │ │ │ -000068b0: 7461 744c 696e 6b27 7d20 2e20 2220 6861 tatLink'} . " ha │ │ │ -000068c0: 7264 206c 696e 6b73 2c20 2220 2e0a 0909 rd links, " .... │ │ │ -000068d0: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s │ │ │ -000068e0: 7461 7443 6f70 7927 7d20 2e20 2220 636f tatCopy'} . " co │ │ │ -000068f0: 7069 6564 3b20 6361 6c63 6564 2022 202e pied; calced " . │ │ │ -00006900: 0a09 0909 2020 2020 2024 7365 6c66 2d3e .... $self-> │ │ │ -00006910: 7b27 7374 6174 4d64 3527 7d20 2e20 2220 {'statMd5'} . " │ │ │ -00006920: 6d64 3520 7375 6d73 2c20 225d 293b 0a7d md5 sums, "]);.} │ │ │ -00006930: 0a . │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 6c69 6e6b 546f 4469 7273 p/bin/linkToDirs │ │ │ +00000030: 0a . │ │ ├── ./usr/bin/llt │ │ │ @@ -1,437 +1,3 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose │ │ │ -00000030: 6620 436c 6165 7320 2832 3030 302d 3230 f Claes (2000-20 │ │ │ -00000040: 3232 290a 2320 2020 2020 2020 2020 2020 22).# │ │ │ -00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we │ │ │ -00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th │ │ │ -00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ -00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ -00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ -000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ -000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ -000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ -000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ -000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ -000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ -00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ -00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ -00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ -00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ -00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ -00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ -00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ -00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ -00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ -00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ -000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ -000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ -000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ -000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ -000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ -000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ -00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ -00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ -00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ -00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ -00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ -00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ -00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ -00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ -00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ -00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ -000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ -000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ -000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..push @ │ │ │ -00000300: 5645 5253 494f 4e2c 2027 2449 643a 206c VERSION, '$Id: l │ │ │ -00000310: 6c74 2033 3632 2032 3031 322d 3031 2d32 lt 362 2012-01-2 │ │ │ -00000320: 3820 3232 3a31 313a 3133 5a20 686a 6320 8 22:11:13Z hjc │ │ │ -00000330: 2420 273b 0a0a 0a75 7365 2073 7472 6963 $ ';...use stric │ │ │ -00000340: 743b 0a0a 7375 6220 6c69 6250 6174 680a t;..sub libPath. │ │ │ -00000350: 7b0a 2020 2020 6d79 2024 6669 6c65 203d {. my $file = │ │ │ -00000360: 2073 6869 6674 3b0a 0a20 2020 206d 7920 shift;.. my │ │ │ -00000370: 2464 6972 3b0a 0a20 2020 2023 2046 616c $dir;.. # Fal │ │ │ -00000380: 6c73 2044 6174 6569 2073 656c 6273 7420 ls Datei selbst │ │ │ -00000390: 6569 6e20 7379 6d6c 696e 6b20 6973 742c ein symlink ist, │ │ │ -000003a0: 2073 6f6c 616e 6765 2066 6f6c 6765 6e2c solange folgen, │ │ │ -000003b0: 2062 6973 2061 7566 6765 6cf6 7374 0a20 bis aufgel.st. │ │ │ -000003c0: 2020 2069 6620 282d 6620 2466 696c 6529 if (-f $file) │ │ │ -000003d0: 0a20 2020 207b 0a09 7768 696c 6520 282d . {..while (- │ │ │ -000003e0: 6c20 2466 696c 6529 0a09 7b0a 0920 2020 l $file)..{.. │ │ │ -000003f0: 206d 7920 246c 696e 6b20 3d20 7265 6164 my $link = read │ │ │ -00000400: 6c69 6e6b 2824 6669 6c65 293b 0a0a 0920 link($file);... │ │ │ -00000410: 2020 2069 6620 2873 7562 7374 7228 246c if (substr($l │ │ │ -00000420: 696e 6b2c 2030 2c20 3129 206e 6520 222f ink, 0, 1) ne "/ │ │ │ -00000430: 2229 0a09 2020 2020 7b0a 0909 2466 696c ").. {...$fil │ │ │ -00000440: 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 e =~ s/[^\/]+$/$ │ │ │ -00000450: 6c69 6e6b 2f3b 0a09 2020 2020 7d0a 0920 link/;.. }.. │ │ │ -00000460: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ -00000470: 0924 6669 6c65 203d 2024 6c69 6e6b 3b0a .$file = $link;. │ │ │ -00000480: 0920 2020 207d 0a09 7d0a 0a09 2824 6469 . }..}...($di │ │ │ -00000490: 722c 2024 6669 6c65 2920 3d20 2673 706c r, $file) = &spl │ │ │ -000004a0: 6974 4669 6c65 4469 7228 2466 696c 6529 itFileDir($file) │ │ │ -000004b0: 3b0a 0924 6669 6c65 203d 2022 2f24 6669 ;..$file = "/$fi │ │ │ -000004c0: 6c65 223b 0a20 2020 207d 0a20 2020 2065 le";. }. e │ │ │ -000004d0: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print │ │ │ -000004e0: 2053 5444 4552 5220 223c 2466 696c 653e STDERR "<$file> │ │ │ -000004f0: 2064 6f65 7320 6e6f 7420 6578 6973 7421 does not exist! │ │ │ -00000500: 5c6e 223b 0a09 6578 6974 2031 3b0a 2020 \n";..exit 1;. │ │ │ -00000510: 2020 7d0a 0a20 2020 2024 6469 7220 2e3d }.. $dir .= │ │ │ -00000520: 2022 2f2e 2e2f 6c69 6222 3b20 2020 2020 "/../lib"; │ │ │ -00000530: 2020 2020 2020 2320 5066 6164 207a 7520 # Pfad zu │ │ │ -00000540: 6465 6e20 4269 626c 696f 7468 656b 656e den Bibliotheken │ │ │ -00000550: 0a20 2020 206d 7920 246f 6c64 4469 7220 . my $oldDir │ │ │ -00000560: 3d20 602f 6269 6e2f 7077 6460 3b0a 2020 = `/bin/pwd`;. │ │ │ -00000570: 2020 6368 6f6d 7020 246f 6c64 4469 723b chomp $oldDir; │ │ │ -00000580: 0a20 2020 2069 6620 2863 6864 6972 2024 . if (chdir $ │ │ │ -00000590: 6469 7229 0a20 2020 207b 0a09 6d79 2024 dir). {..my $ │ │ │ -000005a0: 6162 7344 6972 203d 2060 2f62 696e 2f70 absDir = `/bin/p │ │ │ -000005b0: 7764 603b 0a09 6368 6f70 2024 6162 7344 wd`;..chop $absD │ │ │ -000005c0: 6972 3b0a 0963 6864 6972 2024 6f6c 6444 ir;..chdir $oldD │ │ │ -000005d0: 6972 3b0a 0a09 7265 7475 726e 2028 2673 ir;...return (&s │ │ │ -000005e0: 706c 6974 4669 6c65 4469 7228 2224 6162 plitFileDir("$ab │ │ │ -000005f0: 7344 6972 2466 696c 6522 2929 3b0a 2020 sDir$file"));. │ │ │ -00000600: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ -00000610: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ -00000620: 2022 3c24 6469 723e 2064 6f65 7320 6e6f "<$dir> does no │ │ │ -00000630: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting │ │ │ -00000640: 5c6e 223b 0a20 2020 207d 0a7d 0a73 7562 \n";. }.}.sub │ │ │ -00000650: 2073 706c 6974 4669 6c65 4469 720a 7b0a splitFileDir.{. │ │ │ -00000660: 2020 2020 6d79 2024 6e61 6d65 203d 2073 my $name = s │ │ │ -00000670: 6869 6674 3b0a 0a20 2020 2072 6574 7572 hift;.. retur │ │ │ -00000680: 6e20 2827 2e27 2c20 246e 616d 6529 2075 n ('.', $name) u │ │ │ -00000690: 6e6c 6573 7320 2824 6e61 6d65 203d 7e2f nless ($name =~/ │ │ │ -000006a0: 5c2f 2f29 3b20 2020 2023 206e 7572 2065 \//); # nur e │ │ │ -000006b0: 696e 6661 6368 6572 2044 6174 6569 6e61 infacher Dateina │ │ │ -000006c0: 6d65 0a0a 2020 2020 6d79 2028 2464 6972 me.. my ($dir │ │ │ -000006d0: 2c20 2466 696c 6529 203d 2024 6e61 6d65 , $file) = $name │ │ │ -000006e0: 203d 7e20 2f5e 282e 2a29 5c2f 282e 2a29 =~ /^(.*)\/(.*) │ │ │ -000006f0: 242f 733b 0a20 2020 2024 6469 7220 3d20 $/s;. $dir = │ │ │ -00000700: 272f 2720 6966 2028 2464 6972 2065 7120 '/' if ($dir eq │ │ │ -00000710: 2727 293b 2020 2020 2020 2020 2020 2020 ''); │ │ │ -00000720: 2020 2020 2020 2023 2067 696c 742c 2066 # gilt, f │ │ │ -00000730: 616c 6c73 207a 2e42 2e20 2f66 696c 656e alls z.B. /filen │ │ │ -00000740: 616d 650a 2020 2020 7265 7475 726e 2028 ame. return ( │ │ │ -00000750: 2464 6972 2c20 2466 696c 6529 3b0a 7d0a $dir, $file);.}. │ │ │ -00000760: 6d79 2028 2472 6571 2c20 2470 726f 6729 my ($req, $prog) │ │ │ -00000770: 203d 2026 6c69 6250 6174 6828 2430 293b = &libPath($0); │ │ │ -00000780: 0a70 7573 6820 4049 4e43 2c20 2224 7265 .push @INC, "$re │ │ │ -00000790: 7122 3b0a 0a72 6571 7569 7265 2027 6368 q";..require 'ch │ │ │ -000007a0: 6563 6b50 6172 616d 322e 706c 273b 0a72 eckParam2.pl';.r │ │ │ -000007b0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version. │ │ │ -000007c0: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi │ │ │ -000007d0: 6c65 4469 722e 706c 273b 0a0a 3d68 6561 leDir.pl';..=hea │ │ │ -000007e0: 6431 204e 414d 450a 0a6c 6c74 202d 206c d1 NAME..llt - l │ │ │ -000007f0: 6973 7420 6372 6561 7465 2c20 6163 6365 ist create, acce │ │ │ -00000800: 7373 2061 6e64 206d 6f64 6966 6963 6174 ss and modificat │ │ │ -00000810: 696f 6e20 7469 6d65 7320 6f66 2066 696c ion times of fil │ │ │ -00000820: 6573 0a0a 3d68 6561 6431 2053 594e 4f50 es..=head1 SYNOP │ │ │ -00000830: 5349 530a 0a09 6c6c 7420 5b2d 725d 205b SIS...llt [-r] [ │ │ │ -00000840: 2d69 5d20 5b2d 617c 2d6d 7c2d 635d 205b -i] [-a|-m|-c] [ │ │ │ -00000850: 6669 6c65 735d 205b 6469 7273 5d0a 6f72 files] [dirs].or │ │ │ -00000860: 0a20 2020 2020 2020 206c 6c74 202d 6520 . llt -e │ │ │ -00000870: 7469 6d65 0a0a 3d68 6561 6431 204f 5054 time..=head1 OPT │ │ │ -00000880: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..= │ │ │ -00000890: 6974 656d 2042 3c2d 2d68 656c 703e 2c20 item B<--help>, │ │ │ -000008a0: 423c 2d68 3e0a 0a20 2020 2073 686f 7720 B<-h>.. show │ │ │ -000008b0: 7468 6973 2068 656c 700a 0a3d 6974 656d this help..=item │ │ │ -000008c0: 2042 3c2d 2d72 6576 6572 7365 3e2c 2042 B<--reverse>, B │ │ │ -000008d0: 3c2d 723e 0a0a 2020 2020 736f 7274 2069 <-r>.. sort i │ │ │ -000008e0: 6e20 7265 7665 7273 6520 6f72 6465 720a n reverse order. │ │ │ -000008f0: 0a3d 6974 656d 2042 3c2d 2d69 6e73 656e .=item B<--insen │ │ │ -00000900: 7369 7469 7665 3e2c 2042 3c2d 693e 0a0a sitive>, B<-i>.. │ │ │ -00000910: 2020 2020 6361 7365 2069 6e73 656e 7369 case insensi │ │ │ -00000920: 7469 7665 6c79 2028 6e6f 7420 7769 7468 tively (not with │ │ │ -00000930: 202d 612c 202d 6d20 6f72 202d 6329 0a0a -a, -m or -c).. │ │ │ -00000940: 3d69 7465 6d20 423c 2d2d 6163 6365 7373 =item B<--access │ │ │ -00000950: 3e2c 2042 3c2d 613e 0a0a 2020 2020 736f >, B<-a>.. so │ │ │ -00000960: 7274 2061 6363 6f72 6469 6e67 2074 6f20 rt according to │ │ │ -00000970: 6163 6365 7373 2074 696d 650a 0a3d 6974 access time..=it │ │ │ -00000980: 656d 2042 3c2d 2d6d 6f64 6966 6963 6174 em B<--modificat │ │ │ -00000990: 696f 6e3e 2c20 423c 2d6d 3e0a 0a20 2020 ion>, B<-m>.. │ │ │ -000009a0: 2073 6f72 7420 6163 636f 7264 696e 6720 sort according │ │ │ -000009b0: 746f 206d 6f64 6966 6963 6174 696f 6e20 to modification │ │ │ -000009c0: 7469 6d65 0a0a 3d69 7465 6d20 423c 2d2d time..=item B<-- │ │ │ -000009d0: 6372 6561 7469 6f6e 3e2c 2042 3c2d 633e creation>, B<-c> │ │ │ -000009e0: 0a0a 2020 2020 736f 7274 2061 6363 6f72 .. sort accor │ │ │ -000009f0: 6469 6e67 2074 6f20 6372 6561 7469 6f6e ding to creation │ │ │ -00000a00: 2074 696d 650a 0a3d 6974 656d 2042 3c2d time..=item B<- │ │ │ -00000a10: 2d75 6e69 7854 696d 653e 2c20 423c 2d75 -unixTime>, B<-u │ │ │ -00000a20: 3e0a 0a20 2020 2073 686f 7720 756e 6978 >.. show unix │ │ │ -00000a30: 2074 696d 6520 2875 6e73 6967 6e65 6420 time (unsigned │ │ │ -00000a40: 696e 7465 6765 7229 0a0a 3d69 7465 6d20 integer)..=item │ │ │ -00000a50: 423c 2d56 3e0a 0a20 2020 2070 7269 6e74 B<-V>.. print │ │ │ -00000a60: 2076 6572 7369 6f6e 2873 290a 0a3d 6974 version(s)..=it │ │ │ -00000a70: 656d 2042 3c2d 2d65 706f 6368 3e2c 2042 em B<--epoch>, B │ │ │ -00000a80: 3c2d 653e 0a0a 2020 2020 7061 7261 6d65 <-e>.. parame │ │ │ -00000a90: 7465 7220 6973 2074 6865 2074 696d 6520 ter is the time │ │ │ -00000aa0: 7369 6e63 6520 6570 6f63 680a 2020 2020 since epoch. │ │ │ -00000ab0: 6c6c 7420 7072 696e 7420 7468 6520 6461 llt print the da │ │ │ -00000ac0: 7465 2069 6e20 6120 7265 6164 6162 6c65 te in a readable │ │ │ -00000ad0: 2066 6f72 6d61 740a 2020 2020 7468 6973 format. this │ │ │ -00000ae0: 206f 7074 696f 6e20 6361 6e20 6265 2072 option can be r │ │ │ -00000af0: 6570 6561 7465 6420 6d75 6c74 6970 6c65 epeated multiple │ │ │ -00000b00: 2074 696d 6573 0a20 2020 206c 6c74 2077 times. llt w │ │ │ -00000b10: 696c 6c20 7374 6f70 2065 7865 6375 7469 ill stop executi │ │ │ -00000b20: 6e67 2069 6620 6e6f 206f 7468 6572 206f ng if no other o │ │ │ -00000b30: 7074 696f 6e73 206f 7220 7061 7261 6d73 ptions or params │ │ │ -00000b40: 2061 7265 2063 686f 7365 6e0a 0a3d 6261 are chosen..=ba │ │ │ -00000b50: 636b 0a0a 536f 7274 696e 6720 7769 7468 ck..Sorting with │ │ │ -00000b60: 6f75 7420 5b2d 617c 2d6d 7c2d 635d 2069 out [-a|-m|-c] i │ │ │ -00000b70: 7320 736f 7274 696e 6720 6163 636f 7264 s sorting accord │ │ │ -00000b80: 696e 6720 746f 2066 696c 6520 6e61 6d65 ing to file name │ │ │ -00000b90: 732e 0a0a 3d68 6561 6431 2043 4f50 5952 s...=head1 COPYR │ │ │ -00000ba0: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright │ │ │ -00000bb0: 2863 2920 3230 3030 2d32 3032 3220 6279 (c) 2000-2022 by │ │ │ -00000bc0: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla │ │ │ -00000bd0: 6573 2028 7365 6520 5245 4144 4d45 292e es (see README). │ │ │ -00000be0: 0a50 7562 6c69 7368 6564 2075 6e64 6572 .Published under │ │ │ -00000bf0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -00000c00: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -00000c10: 7633 206f 7220 616e 7920 6c61 7465 7220 v3 or any later │ │ │ -00000c20: 7665 7273 696f 6e2e 0a0a 3d63 7574 0a0a version...=cut.. │ │ │ -00000c30: 6d79 2024 4865 6c70 203d 2026 3a3a 6765 my $Help = &::ge │ │ │ -00000c40: 7450 6f64 3254 6578 7428 2430 293b 0a0a tPod2Text($0);.. │ │ │ -00000c50: 2670 7269 6e74 5665 7273 696f 6e28 5c40 &printVersion(\@ │ │ │ -00000c60: 4152 4756 2c20 272d 5627 2c20 272d 2d76 ARGV, '-V', '--v │ │ │ -00000c70: 6572 7369 6f6e 2729 3b0a 0a6d 7920 2443 ersion');..my $C │ │ │ -00000c80: 6865 636b 5061 7220 3d0a 2020 2020 4368 heckPar =. Ch │ │ │ -00000c90: 6563 6b50 6172 616d 2d3e 6e65 7728 0a09 eckParam->new(.. │ │ │ -00000ca0: 0920 2020 2027 2d61 6c6c 6f77 4c69 7374 . '-allowList │ │ │ -00000cb0: 7327 203d 3e20 2779 6573 272c 0a09 0920 s' => 'yes',... │ │ │ -00000cc0: 2020 2027 2d6c 6973 7427 203d 3e20 5b0a '-list' => [. │ │ │ -00000cd0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00000ce0: 272d 6e61 6d65 2720 3d3e 2027 696e 7365 '-name' => 'inse │ │ │ -00000cf0: 6e73 6974 6976 6527 2c0a 0909 0909 0920 nsitive',...... │ │ │ -00000d00: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00000d10: 3d3e 2027 2d69 272c 0a09 0909 0909 2020 => '-i',...... │ │ │ -00000d20: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00000d30: 2027 2d2d 696e 7365 6e73 6974 6976 6527 '--insensitive' │ │ │ -00000d40: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl │ │ │ -00000d50: 795f 6966 2720 3d3e 0a09 0920 2020 2027 y_if' =>... ' │ │ │ -00000d60: 6e6f 7420 5b61 6363 6573 735d 2061 6e64 not [access] and │ │ │ -00000d70: 206e 6f74 205b 6d6f 6469 6669 6361 7469 not [modificati │ │ │ -00000d80: 6f6e 5d20 616e 6420 6e6f 7420 5b63 7265 on] and not [cre │ │ │ -00000d90: 6174 696f 6e5d 270a 0909 0909 0920 2020 ation]'...... │ │ │ -00000da0: 2029 2c0a 0909 0909 4f70 7469 6f6e 2d3e ),.....Option-> │ │ │ -00000db0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00000dc0: 6163 6365 7373 272c 0a09 0909 0909 2020 access',...... │ │ │ -00000dd0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00000de0: 3e20 272d 6127 2c0a 0909 0909 0920 2020 > '-a',...... │ │ │ -00000df0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -00000e00: 272d 2d61 6363 6573 7327 2c0a 0909 0909 '--access',..... │ │ │ -00000e10: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' │ │ │ -00000e20: 3d3e 0a09 0920 2020 2027 6e6f 7420 5b6d =>... 'not [m │ │ │ -00000e30: 6f64 6966 6963 6174 696f 6e5d 2061 6e64 odification] and │ │ │ -00000e40: 206e 6f74 205b 6372 6561 7469 6f6e 5d27 not [creation]' │ │ │ -00000e50: 0a09 0909 0909 2020 2020 292c 0a09 0909 ...... ),.... │ │ │ -00000e60: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00000e70: 616d 6527 203d 3e20 276d 6f64 6966 6963 ame' => 'modific │ │ │ -00000e80: 6174 696f 6e27 2c0a 0909 0909 0920 2020 ation',...... │ │ │ -00000e90: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00000ea0: 2027 2d6d 272c 0a09 0909 0909 2020 2020 '-m',...... │ │ │ -00000eb0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00000ec0: 2d2d 6d6f 6469 6669 6361 7469 6f6e 272c --modification', │ │ │ -00000ed0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only │ │ │ -00000ee0: 5f69 6627 203d 3e0a 0909 2020 2020 276e _if' =>... 'n │ │ │ -00000ef0: 6f74 205b 6163 6365 7373 5d20 616e 6420 ot [access] and │ │ │ -00000f00: 6e6f 7420 5b63 7265 6174 696f 6e5d 270a not [creation]'. │ │ │ -00000f10: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),..... │ │ │ -00000f20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00000f30: 6d65 2720 3d3e 2027 6372 6561 7469 6f6e me' => 'creation │ │ │ -00000f40: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00000f50: 5f6f 7074 696f 6e27 203d 3e20 272d 6327 _option' => '-c' │ │ │ -00000f60: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00000f70: 616c 6961 7327 203d 3e20 272d 2d63 7265 alias' => '--cre │ │ │ -00000f80: 6174 696f 6e27 2c0a 0909 0909 0920 2020 ation',...... │ │ │ -00000f90: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>.. │ │ │ -00000fa0: 0920 2020 2027 6e6f 7420 5b61 6363 6573 . 'not [acces │ │ │ -00000fb0: 735d 2061 6e64 206e 6f74 205b 6d6f 6469 s] and not [modi │ │ │ -00000fc0: 6669 6361 7469 6f6e 5d27 0a09 0909 0909 fication]'...... │ │ │ -00000fd0: 2020 2020 292c 0a09 0909 094f 7074 696f ),.....Optio │ │ │ -00000fe0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00000ff0: 3e20 2772 6576 6572 7365 272c 0a09 0909 > 'reverse',.... │ │ │ -00001000: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00001010: 6e27 203d 3e20 272d 7227 2c0a 0909 0909 n' => '-r',..... │ │ │ -00001020: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00001030: 203d 3e20 272d 2d72 6576 6572 7365 270a => '--reverse'. │ │ │ -00001040: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),..... │ │ │ -00001050: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001060: 6d65 2720 3d3e 2027 756e 6978 5469 6d65 me' => 'unixTime │ │ │ -00001070: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001080: 5f6f 7074 696f 6e27 203d 3e20 272d 7527 _option' => '-u' │ │ │ -00001090: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000010a0: 616c 6961 7327 203d 3e20 272d 2d75 6e69 alias' => '--uni │ │ │ -000010b0: 7854 696d 6527 292c 0a09 0909 094f 7074 xTime'),.....Opt │ │ │ -000010c0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000010d0: 203d 3e20 2765 706f 6368 272c 0a09 0909 => 'epoch',.... │ │ │ -000010e0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -000010f0: 6e27 203d 3e20 272d 6527 2c0a 0909 0909 n' => '-e',..... │ │ │ -00001100: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00001110: 203d 3e20 272d 2d65 706f 6368 272c 0a09 => '--epoch',.. │ │ │ -00001120: 0909 0909 2020 2020 272d 6d75 6c74 6970 .... '-multip │ │ │ -00001130: 6c65 2720 3d3e 2027 7965 7327 292c 0a09 le' => 'yes'),.. │ │ │ -00001140: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001150: 2d6e 616d 6527 203d 3e20 2768 656c 7027 -name' => 'help' │ │ │ -00001160: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001170: 6f70 7469 6f6e 2720 3d3e 2027 2d68 272c option' => '-h', │ │ │ -00001180: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00001190: 6c69 6173 2720 3d3e 2027 2d2d 6865 6c70 lias' => '--help │ │ │ -000011a0: 270a 0909 0909 0920 2020 2029 2c0a 0909 '...... ),... │ │ │ -000011b0: 0909 5d0a 0909 2020 2020 293b 0a0a 2443 ..]... );..$C │ │ │ -000011c0: 6865 636b 5061 722d 3e63 6865 636b 2827 heckPar->check(' │ │ │ -000011d0: 2d61 7267 7627 203d 3e20 5c40 4152 4756 -argv' => \@ARGV │ │ │ -000011e0: 2c0a 0909 2027 2d68 656c 7027 203d 3e20 ,... '-help' => │ │ │ -000011f0: 2448 656c 700a 0909 2029 3b0a 0a69 6620 $Help... );..if │ │ │ -00001200: 2824 4368 6563 6b50 6172 2d3e 6765 744f ($CheckPar->getO │ │ │ -00001210: 7074 5769 7468 6f75 7450 6172 2827 6865 ptWithoutPar('he │ │ │ -00001220: 6c70 2729 290a 7b0a 2020 2020 7072 696e lp')).{. prin │ │ │ -00001230: 7420 2224 4865 6c70 223b 0a20 2020 2065 t "$Help";. e │ │ │ -00001240: 7869 7420 303b 0a7d 0a0a 6d79 2024 736f xit 0;.}..my $so │ │ │ -00001250: 7274 203d 2027 6e61 6d65 273b 2020 2020 rt = 'name'; │ │ │ -00001260: 2020 2320 4465 6661 756c 743a 2041 6c70 # Default: Alp │ │ │ -00001270: 6861 6265 7469 7363 6820 736f 7274 6965 habetisch sortie │ │ │ -00001280: 7265 6e0a 2473 6f72 7420 3d20 2761 7469 ren.$sort = 'ati │ │ │ -00001290: 6d65 2720 6966 2028 2443 6865 636b 5061 me' if ($CheckPa │ │ │ -000012a0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -000012b0: 5061 7228 2761 6363 6573 7327 2929 3b0a Par('access'));. │ │ │ -000012c0: 2473 6f72 7420 3d20 276d 7469 6d65 2720 $sort = 'mtime' │ │ │ -000012d0: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g │ │ │ -000012e0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -000012f0: 276d 6f64 6966 6963 6174 696f 6e27 2929 'modification')) │ │ │ -00001300: 3b0a 2473 6f72 7420 3d20 2763 7469 6d65 ;.$sort = 'ctime │ │ │ -00001310: 2720 6966 2028 2443 6865 636b 5061 722d ' if ($CheckPar- │ │ │ -00001320: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00001330: 7228 2763 7265 6174 696f 6e27 2929 3b0a r('creation'));. │ │ │ -00001340: 6d79 2024 7265 7665 7273 6520 3d20 3120 my $reverse = 1 │ │ │ -00001350: 6966 2028 2443 6865 636b 5061 722d 3e67 if ($CheckPar->g │ │ │ -00001360: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00001370: 2772 6576 6572 7365 2729 293b 0a6d 7920 'reverse'));.my │ │ │ -00001380: 2469 6e73 656e 7369 7469 7665 203d 2031 $insensitive = 1 │ │ │ -00001390: 2069 6620 2824 4368 6563 6b50 6172 2d3e if ($CheckPar-> │ │ │ -000013a0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -000013b0: 2827 696e 7365 6e73 6974 6976 6527 2929 ('insensitive')) │ │ │ -000013c0: 3b0a 6d79 2024 756e 6978 5469 6d65 203d ;.my $unixTime = │ │ │ -000013d0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000013e0: 7074 5769 7468 6f75 7450 6172 2827 756e ptWithoutPar('un │ │ │ -000013f0: 6978 5469 6d65 2729 3b0a 6d79 2024 6570 ixTime');.my $ep │ │ │ -00001400: 6f63 6820 3d20 2443 6865 636b 5061 722d och = $CheckPar- │ │ │ -00001410: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00001420: 6570 6f63 6827 293b 0a0a 6d79 2028 4061 epoch');..my (@a │ │ │ -00001430: 6c6c 2920 3d20 2824 4368 6563 6b50 6172 ll) = ($CheckPar │ │ │ -00001440: 2d3e 6765 744c 6973 7450 6172 2829 293b ->getListPar()); │ │ │ -00001450: 0a0a 0a69 6620 2824 6570 6f63 6829 0a7b ...if ($epoch).{ │ │ │ -00001460: 0a20 2020 206d 7920 2824 6570 293b 0a20 . my ($ep);. │ │ │ -00001470: 2020 2066 6f72 6561 6368 2024 6570 2028 foreach $ep ( │ │ │ -00001480: 4024 6570 6f63 6829 0a20 2020 207b 0a09 @$epoch). {.. │ │ │ -00001490: 7072 696e 7420 2224 6570 202d 3e20 222c print "$ep -> ", │ │ │ -000014a0: 2026 6765 7454 696d 6528 2465 7029 2c20 &getTime($ep), │ │ │ -000014b0: 225c 6e22 3b0a 2020 2020 7d0a 2020 2020 "\n";. }. │ │ │ -000014c0: 6578 6974 2030 2075 6e6c 6573 7320 4061 exit 0 unless @a │ │ │ -000014d0: 6c6c 3b0a 7d0a 0a28 4061 6c6c 2920 3d20 ll;.}..(@all) = │ │ │ -000014e0: 2827 2e27 2920 756e 6c65 7373 2040 616c ('.') unless @al │ │ │ -000014f0: 6c3b 0a0a 6d79 2028 4066 696c 6573 293b l;..my (@files); │ │ │ -00001500: 0a6d 7920 2466 3b0a 666f 7265 6163 6820 .my $f;.foreach │ │ │ -00001510: 2466 2028 4061 6c6c 290a 7b0a 2020 2020 $f (@all).{. │ │ │ -00001520: 6966 2028 2d64 2024 6629 2020 2020 2320 if (-d $f) # │ │ │ -00001530: 7765 6e6e 2044 6972 6563 746f 7279 0a20 wenn Directory. │ │ │ -00001540: 2020 207b 0a09 6f70 656e 6469 7228 4449 {..opendir(DI │ │ │ -00001550: 522c 2024 6629 206f 7220 7072 696e 7420 R, $f) or print │ │ │ -00001560: 5354 4445 5252 2022 6361 6e6e 6f74 206f STDERR "cannot o │ │ │ -00001570: 7065 6e20 3c24 663e 5c6e 223b 0a09 6d79 pen <$f>\n";..my │ │ │ -00001580: 2024 6631 3b0a 0966 6f72 6561 6368 2024 $f1;..foreach $ │ │ │ -00001590: 6631 2028 7265 6164 6469 7228 4449 5229 f1 (readdir(DIR) │ │ │ -000015a0: 290a 097b 0a09 2020 2020 7075 7368 2040 )..{.. push @ │ │ │ -000015b0: 6669 6c65 732c 2022 2466 2f24 6631 223b files, "$f/$f1"; │ │ │ -000015c0: 0a09 7d0a 0963 6c6f 7365 6469 7228 4449 ..}..closedir(DI │ │ │ -000015d0: 5229 3b0a 2020 2020 7d0a 2020 2020 656c R);. }. el │ │ │ -000015e0: 7365 2020 2020 2020 2020 2020 2320 4461 se # Da │ │ │ -000015f0: 7465 690a 2020 2020 7b0a 0969 6620 282d tei. {..if (- │ │ │ -00001600: 6620 2466 290a 097b 0a09 2020 2020 7075 f $f)..{.. pu │ │ │ -00001610: 7368 2040 6669 6c65 732c 2024 663b 0a09 sh @files, $f;.. │ │ │ -00001620: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. │ │ │ -00001630: 7072 696e 7420 2243 616e 6e6f 7420 6f70 print "Cannot op │ │ │ -00001640: 656e 2066 696c 6520 3c24 663e 5c6e 223b en file <$f>\n"; │ │ │ -00001650: 0a09 7d0a 2020 2020 7d0a 7d0a 0a23 2045 ..}. }.}..# E │ │ │ -00001660: 726d 6974 7465 6c6e 2064 6572 205a 6569 rmitteln der Zei │ │ │ -00001670: 7465 6e0a 6d79 2028 4066 293b 0a66 6f72 ten.my (@f);.for │ │ │ -00001680: 6561 6368 2024 6620 2840 6669 6c65 7329 each $f (@files) │ │ │ -00001690: 0a7b 0a20 2020 206d 7920 2824 6174 696d .{. my ($atim │ │ │ -000016a0: 652c 2024 6d74 696d 652c 2024 6374 696d e, $mtime, $ctim │ │ │ -000016b0: 6529 203d 2028 6c73 7461 7428 2466 2929 e) = (lstat($f)) │ │ │ -000016c0: 5b38 2c39 2c31 305d 3b0a 2020 2020 6d79 [8,9,10];. my │ │ │ -000016d0: 2025 6820 3d20 2827 6e61 6d65 2720 3d3e %h = ('name' => │ │ │ -000016e0: 2024 662c 0a09 2020 2020 2027 6174 696d $f,.. 'atim │ │ │ -000016f0: 6527 203d 3e20 2461 7469 6d65 2c0a 0920 e' => $atime,.. │ │ │ -00001700: 2020 2020 276d 7469 6d65 2720 3d3e 2024 'mtime' => $ │ │ │ -00001710: 6d74 696d 652c 0a09 2020 2020 2027 6374 mtime,.. 'ct │ │ │ -00001720: 696d 6527 203d 3e20 2463 7469 6d65 0a09 ime' => $ctime.. │ │ │ -00001730: 2020 2020 2029 3b0a 2020 2020 7075 7368 );. push │ │ │ -00001740: 2040 662c 205c 2568 3b0a 7d0a 0a23 2053 @f, \%h;.}..# S │ │ │ -00001750: 6f72 7469 6572 656e 0a6d 7920 2840 7366 ortieren.my (@sf │ │ │ -00001760: 293b 0a69 6620 2824 736f 7274 2065 7120 );.if ($sort eq │ │ │ -00001770: 276e 616d 6527 290a 7b0a 2020 2020 6966 'name').{. if │ │ │ -00001780: 2028 2469 6e73 656e 7369 7469 7665 290a ($insensitive). │ │ │ -00001790: 2020 2020 7b0a 0940 7366 203d 2024 7265 {..@sf = $re │ │ │ -000017a0: 7665 7273 6520 3f20 736f 7274 207b 2075 verse ? sort { u │ │ │ -000017b0: 6328 2462 2d3e 7b24 736f 7274 7d29 2063 c($b->{$sort}) c │ │ │ -000017c0: 6d70 2075 6328 2461 2d3e 7b24 736f 7274 mp uc($a->{$sort │ │ │ -000017d0: 7d29 207d 2040 660a 0920 2020 203a 2073 }) } @f.. : s │ │ │ -000017e0: 6f72 7420 7b20 7563 2824 612d 3e7b 2473 ort { uc($a->{$s │ │ │ -000017f0: 6f72 747d 2920 636d 7020 7563 2824 622d ort}) cmp uc($b- │ │ │ -00001800: 3e7b 2473 6f72 747d 2920 7d20 4066 3b0a >{$sort}) } @f;. │ │ │ -00001810: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. │ │ │ -00001820: 2020 207b 0a09 4073 6620 3d20 2472 6576 {..@sf = $rev │ │ │ -00001830: 6572 7365 203f 2073 6f72 7420 7b20 2462 erse ? sort { $b │ │ │ -00001840: 2d3e 7b24 736f 7274 7d20 636d 7020 2461 ->{$sort} cmp $a │ │ │ -00001850: 2d3e 7b24 736f 7274 7d20 7d20 4066 0a09 ->{$sort} } @f.. │ │ │ -00001860: 2020 2020 3a20 736f 7274 207b 2024 612d : sort { $a- │ │ │ -00001870: 3e7b 2473 6f72 747d 2063 6d70 2024 622d >{$sort} cmp $b- │ │ │ -00001880: 3e7b 2473 6f72 747d 207d 2040 663b 0a20 >{$sort} } @f;. │ │ │ -00001890: 2020 207d 0a7d 0a65 6c73 650a 7b0a 2020 }.}.else.{. │ │ │ -000018a0: 2020 4073 6620 3d20 2472 6576 6572 7365 @sf = $reverse │ │ │ -000018b0: 203f 0a09 736f 7274 207b 2024 622d 3e7b ?..sort { $b->{ │ │ │ -000018c0: 2473 6f72 747d 203c 3d3e 2024 612d 3e7b $sort} <=> $a->{ │ │ │ -000018d0: 2473 6f72 747d 207d 2040 6620 3a0a 0973 $sort} } @f :..s │ │ │ -000018e0: 6f72 7420 7b20 2461 2d3e 7b24 736f 7274 ort { $a->{$sort │ │ │ -000018f0: 7d20 3c3d 3e20 2462 2d3e 7b24 736f 7274 } <=> $b->{$sort │ │ │ -00001900: 7d20 7d20 4066 3b0a 7d0a 0a23 2041 7573 } } @f;.}..# Aus │ │ │ -00001910: 6761 6265 0a6d 7920 246c 656e 203d 2024 gabe.my $len = $ │ │ │ -00001920: 756e 6978 5469 6d65 203f 2031 3120 3a20 unixTime ? 11 : │ │ │ -00001930: 3139 3b0a 7072 696e 7466 2022 252d 247b 19;.printf "%-${ │ │ │ -00001940: 6c65 6e7d 7320 2025 2d24 7b6c 656e 7d73 len}s %-${len}s │ │ │ -00001950: 2020 252d 247b 6c65 6e7d 7320 205b 5469 %-${len}s [Ti │ │ │ -00001960: 6d65 5d5c 6e22 2c20 2261 6363 6573 7322 me]\n", "access" │ │ │ -00001970: 2c0a 2020 2020 226d 6f64 6966 6963 6174 ,. "modificat │ │ │ -00001980: 696f 6e22 2c20 2263 7265 6174 696f 6e22 ion", "creation" │ │ │ -00001990: 3b0a 666f 7265 6163 6820 2466 2028 4073 ;.foreach $f (@s │ │ │ -000019a0: 6629 0a7b 0a20 2020 206d 7920 2474 3b0a f).{. my $t;. │ │ │ -000019b0: 2020 2020 666f 7265 6163 6820 2474 2028 foreach $t ( │ │ │ -000019c0: 2466 2d3e 7b27 6174 696d 6527 7d2c 2024 $f->{'atime'}, $ │ │ │ -000019d0: 662d 3e7b 276d 7469 6d65 277d 2c20 2466 f->{'mtime'}, $f │ │ │ -000019e0: 2d3e 7b27 6374 696d 6527 7d29 0a20 2020 ->{'ctime'}). │ │ │ -000019f0: 207b 0a09 6966 2028 2475 6e69 7854 696d {..if ($unixTim │ │ │ -00001a00: 6529 0a09 7b0a 0920 2020 2070 7269 6e74 e)..{.. print │ │ │ -00001a10: 2022 2474 2020 2022 2c0a 097d 0a09 656c "$t ",..}..el │ │ │ -00001a20: 7365 0a09 7b0a 0920 2020 2070 7269 6e74 se..{.. print │ │ │ -00001a30: 2026 6765 7454 696d 6528 2474 292c 2022 &getTime($t), " │ │ │ -00001a40: 2020 223b 0a09 7d0a 2020 2020 7d0a 2020 ";..}. }. │ │ │ -00001a50: 2020 7072 696e 7420 2466 2d3e 7b27 6e61 print $f->{'na │ │ │ -00001a60: 6d65 277d 2c20 225c 6e22 3b0a 7d0a 0a65 me'}, "\n";.}..e │ │ │ -00001a70: 7869 7420 303b 0a0a 0a73 7562 2067 6574 xit 0;...sub get │ │ │ -00001a80: 5469 6d65 0a7b 0a20 2020 206d 7920 2474 Time.{. my $t │ │ │ -00001a90: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m │ │ │ -00001aa0: 7920 2824 7365 632c 246d 696e 2c24 686f y ($sec,$min,$ho │ │ │ -00001ab0: 7572 2c24 6d64 6179 2c24 6d6f 6e2c 2479 ur,$mday,$mon,$y │ │ │ -00001ac0: 6561 7229 203d 206c 6f63 616c 7469 6d65 ear) = localtime │ │ │ -00001ad0: 2824 7429 3b0a 2020 2020 7265 7475 726e ($t);. return │ │ │ -00001ae0: 2073 7072 696e 7466 2822 2534 642e 2530 sprintf("%4d.%0 │ │ │ -00001af0: 3264 2e25 3032 6420 2530 3264 3a25 3032 2d.%02d %02d:%02 │ │ │ -00001b00: 643a 2530 3264 222c 0a09 0920 2020 2479 d:%02d",... $y │ │ │ -00001b10: 6561 722b 3139 3030 2c20 246d 6f6e 2b31 ear+1900, $mon+1 │ │ │ -00001b20: 2c20 246d 6461 792c 0a09 0920 2020 2468 , $mday,... $h │ │ │ -00001b30: 6f75 722c 2024 6d69 6e2c 2024 7365 6329 our, $min, $sec) │ │ │ -00001b40: 3b0a 7d0a 0a ;.}.. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 6c6c 740a p/bin/llt. │ │ ├── ./usr/bin/multiTail │ │ │ @@ -1,623 +1,3 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose │ │ │ -00000030: 6620 436c 6165 7320 2832 3030 302d 3230 f Claes (2000-20 │ │ │ -00000040: 3232 290a 2320 2020 2020 2020 2020 2020 22).# │ │ │ -00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we │ │ │ -00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th │ │ │ -00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ -00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ -00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ -000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ -000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ -000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ -000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ -000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ -000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ -00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ -00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ -00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ -00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ -00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ -00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ -00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ -00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ -00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ -00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ -000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ -000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ -000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ -000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ -000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ -000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ -00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ -00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ -00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ -00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ -00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ -00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ -00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ -00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ -00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ -00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ -000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ -000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ -000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#...use s │ │ │ -00000300: 7472 6963 743b 0a75 7365 2054 6572 6d3a trict;.use Term: │ │ │ -00000310: 3a41 4e53 4943 6f6c 6f72 3b0a 0a0a 7375 :ANSIColor;...su │ │ │ -00000320: 6220 6c69 6250 6174 680a 7b0a 2020 2020 b libPath.{. │ │ │ -00000330: 6d79 2024 6669 6c65 203d 2073 6869 6674 my $file = shift │ │ │ -00000340: 3b0a 0a20 2020 206d 7920 2464 6972 3b0a ;.. my $dir;. │ │ │ -00000350: 0a20 2020 2023 2046 616c 6c73 2044 6174 . # Falls Dat │ │ │ -00000360: 6569 2073 656c 6273 7420 6569 6e20 7379 ei selbst ein sy │ │ │ -00000370: 6d6c 696e 6b20 6973 742c 2073 6f6c 616e mlink ist, solan │ │ │ -00000380: 6765 2066 6f6c 6765 6e2c 2062 6973 2061 ge folgen, bis a │ │ │ -00000390: 7566 6765 6cf6 7374 0a20 2020 2069 6620 ufgel.st. if │ │ │ -000003a0: 282d 6620 2466 696c 6529 0a20 2020 207b (-f $file). { │ │ │ -000003b0: 0a09 7768 696c 6520 282d 6c20 2466 696c ..while (-l $fil │ │ │ -000003c0: 6529 0a09 7b0a 0920 2020 206d 7920 246c e)..{.. my $l │ │ │ -000003d0: 696e 6b20 3d20 7265 6164 6c69 6e6b 2824 ink = readlink($ │ │ │ -000003e0: 6669 6c65 293b 0a0a 0920 2020 2069 6620 file);... if │ │ │ -000003f0: 2873 7562 7374 7228 246c 696e 6b2c 2030 (substr($link, 0 │ │ │ -00000400: 2c20 3129 206e 6520 222f 2229 0a09 2020 , 1) ne "/").. │ │ │ -00000410: 2020 7b0a 0909 2466 696c 6520 3d7e 2073 {...$file =~ s │ │ │ -00000420: 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b /[^\/]+$/$link/; │ │ │ -00000430: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -00000440: 650a 0920 2020 207b 0a09 0924 6669 6c65 e.. {...$file │ │ │ -00000450: 203d 2024 6c69 6e6b 3b0a 0920 2020 207d = $link;.. } │ │ │ -00000460: 0a09 7d0a 0a09 2824 6469 722c 2024 6669 ..}...($dir, $fi │ │ │ -00000470: 6c65 2920 3d20 2673 706c 6974 4669 6c65 le) = &splitFile │ │ │ -00000480: 4469 7228 2466 696c 6529 3b0a 0924 6669 Dir($file);..$fi │ │ │ -00000490: 6c65 203d 2022 2f24 6669 6c65 223b 0a20 le = "/$file";. │ │ │ -000004a0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ -000004b0: 2020 7b0a 0970 7269 6e74 2053 5444 4552 {..print STDER │ │ │ -000004c0: 5220 223c 2466 696c 653e 2064 6f65 7320 R "<$file> does │ │ │ -000004d0: 6e6f 7420 6578 6973 7421 5c6e 223b 0a09 not exist!\n";.. │ │ │ -000004e0: 6578 6974 2031 3b0a 2020 2020 7d0a 0a20 exit 1;. }.. │ │ │ -000004f0: 2020 2024 6469 7220 2e3d 2022 2f2e 2e2f $dir .= "/../ │ │ │ -00000500: 6c69 6222 3b20 2020 2020 2020 2020 2020 lib"; │ │ │ -00000510: 2320 5066 6164 207a 7520 6465 6e20 4269 # Pfad zu den Bi │ │ │ -00000520: 626c 696f 7468 656b 656e 0a20 2020 206d bliotheken. m │ │ │ -00000530: 7920 246f 6c64 4469 7220 3d20 602f 6269 y $oldDir = `/bi │ │ │ -00000540: 6e2f 7077 6460 3b0a 2020 2020 6368 6f6d n/pwd`;. chom │ │ │ -00000550: 7020 246f 6c64 4469 723b 0a20 2020 2069 p $oldDir;. i │ │ │ -00000560: 6620 2863 6864 6972 2024 6469 7229 0a20 f (chdir $dir). │ │ │ -00000570: 2020 207b 0a09 6d79 2024 6162 7344 6972 {..my $absDir │ │ │ -00000580: 203d 2060 2f62 696e 2f70 7764 603b 0a09 = `/bin/pwd`;.. │ │ │ -00000590: 6368 6f70 2024 6162 7344 6972 3b0a 0963 chop $absDir;..c │ │ │ -000005a0: 6864 6972 2024 6f6c 6444 6972 3b0a 0a09 hdir $oldDir;... │ │ │ -000005b0: 7265 7475 726e 2028 2673 706c 6974 4669 return (&splitFi │ │ │ -000005c0: 6c65 4469 7228 2224 6162 7344 6972 2466 leDir("$absDir$f │ │ │ -000005d0: 696c 6522 2929 3b0a 2020 2020 7d0a 2020 ile"));. }. │ │ │ -000005e0: 2020 656c 7365 0a20 2020 207b 0a09 7072 else. {..pr │ │ │ -000005f0: 696e 7420 5354 4445 5252 2022 3c24 6469 int STDERR "<$di │ │ │ -00000600: 723e 2064 6f65 7320 6e6f 7420 6578 6973 r> does not exis │ │ │ -00000610: 742c 2065 7869 7469 6e67 5c6e 223b 0a20 t, exiting\n";. │ │ │ -00000620: 2020 207d 0a7d 0a73 7562 2073 706c 6974 }.}.sub split │ │ │ -00000630: 4669 6c65 4469 720a 7b0a 2020 2020 6d79 FileDir.{. my │ │ │ -00000640: 2024 6e61 6d65 203d 2073 6869 6674 3b0a $name = shift;. │ │ │ -00000650: 0a20 2020 2072 6574 7572 6e20 2827 2e27 . return ('.' │ │ │ -00000660: 2c20 246e 616d 6529 2075 6e6c 6573 7320 , $name) unless │ │ │ -00000670: 2824 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 ($name =~/\//); │ │ │ -00000680: 2020 2023 206e 7572 2065 696e 6661 6368 # nur einfach │ │ │ -00000690: 6572 2044 6174 6569 6e61 6d65 0a0a 2020 er Dateiname.. │ │ │ -000006a0: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil │ │ │ -000006b0: 6529 203d 2024 6e61 6d65 203d 7e20 2f5e e) = $name =~ /^ │ │ │ -000006c0: 282e 2a29 5c2f 282e 2a29 242f 733b 0a20 (.*)\/(.*)$/s;. │ │ │ -000006d0: 2020 2024 6469 7220 3d20 272f 2720 6966 $dir = '/' if │ │ │ -000006e0: 2028 2464 6972 2065 7120 2727 293b 2020 ($dir eq ''); │ │ │ -000006f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000700: 2023 2067 696c 742c 2066 616c 6c73 207a # gilt, falls z │ │ │ -00000710: 2e42 2e20 2f66 696c 656e 616d 650a 2020 .B. /filename. │ │ │ -00000720: 2020 7265 7475 726e 2028 2464 6972 2c20 return ($dir, │ │ │ -00000730: 2466 696c 6529 3b0a 7d0a 6d79 2028 2472 $file);.}.my ($r │ │ │ -00000740: 6571 2c20 2470 726f 6729 203d 2026 6c69 eq, $prog) = &li │ │ │ -00000750: 6250 6174 6828 2430 293b 0a75 6e73 6869 bPath($0);.unshi │ │ │ -00000760: 6674 2040 494e 432c 2022 2472 6571 223b ft @INC, "$req"; │ │ │ -00000770: 0a0a 0a72 6571 7569 7265 2022 6368 6563 ...require "chec │ │ │ -00000780: 6b50 6172 616d 322e 706c 223b 0a72 6571 kParam2.pl";.req │ │ │ -00000790: 7569 7265 2022 7461 696c 2e70 6c22 3b0a uire "tail.pl";. │ │ │ -000007a0: 7265 7175 6972 6520 2270 724c 6f67 2e70 require "prLog.p │ │ │ -000007b0: 6c22 3b0a 7265 7175 6972 6520 2776 6572 l";.require 'ver │ │ │ -000007c0: 7369 6f6e 2e70 6c27 3b0a 7265 7175 6972 sion.pl';.requir │ │ │ -000007d0: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';. │ │ │ -000007e0: 0a0a 6d79 2028 2563 6f6c 6f72 7329 203d ..my (%colors) = │ │ │ -000007f0: 2028 2772 6564 2720 3d3e 2031 2c0a 0909 ('red' => 1,... │ │ │ -00000800: 2767 7265 656e 2720 3d3e 2031 2c0a 0909 'green' => 1,... │ │ │ -00000810: 2779 656c 6c6f 7727 203d 3e20 312c 0a09 'yellow' => 1,.. │ │ │ -00000820: 0927 626c 7565 2720 3d3e 2031 2c0a 0909 .'blue' => 1,... │ │ │ -00000830: 276d 6167 656e 7461 2720 3d3e 2031 2c0a 'magenta' => 1,. │ │ │ -00000840: 0909 2763 7961 6e27 203d 3e20 3129 3b0a ..'cyan' => 1);. │ │ │ -00000850: 0a0a 3d68 6561 6431 204e 414d 450a 0a6d ..=head1 NAME..m │ │ │ -00000860: 756c 7469 5461 696c 2e70 6c20 2d20 5265 ultiTail.pl - Re │ │ │ -00000870: 6164 206d 756c 7469 706c 6520 6c6f 6720 ad multiple log │ │ │ -00000880: 6669 6c65 732e 2054 6865 206c 6f67 2066 files. The log f │ │ │ -00000890: 696c 6573 2063 616e 2062 6520 7772 6974 iles can be writ │ │ │ -000008a0: 7465 6e20 726f 756e 642e 0a0a 3d68 6561 ten round...=hea │ │ │ -000008b0: 6431 2053 594e 4f50 5349 530a 0a09 6d75 d1 SYNOPSIS...mu │ │ │ -000008c0: 6c74 6954 6169 6c2e 706c 205b 2d61 5d20 ltiTail.pl [-a] │ │ │ -000008d0: 5b2d 6420 6465 6c61 795d 205b 2d70 2062 [-d delay] [-p b │ │ │ -000008e0: 6567 696e 7c65 6e64 5d0a 2020 2020 2020 egin|end]. │ │ │ -000008f0: 2020 2020 2020 2020 2020 5b2d 2d70 7269 [--pri │ │ │ -00000900: 6e74 5d20 5b2d 745d 205b 2d6f 206f 7574 nt] [-t] [-o out │ │ │ -00000910: 4669 6c65 205b 2d6d 206d 6178 5d20 5b2d File [-m max] [- │ │ │ -00000920: 505d 0a09 0920 5b5b 2d6e 206e 6f46 696c P]... [[-n noFil │ │ │ -00000930: 6573 5d20 7c20 5b2d 7320 5b2d 6320 636f es] | [-s [-c co │ │ │ -00000940: 6d70 7265 7373 7072 6f67 5d5d 205d 0a09 mpressprog]] ].. │ │ │ -00000950: 095d 0a09 095b 2d43 2063 6f6c 6f72 3d70 .]...[-C color=p │ │ │ -00000960: 6174 7465 726e 205b 2d43 2063 6f6c 6f72 attern [-C color │ │ │ -00000970: 3d70 6174 7465 726e 202e 2e2e 5d5d 0a09 =pattern ...]].. │ │ │ -00000980: 095b 2d67 2065 7870 7265 7373 696f 6e5d .[-g expression] │ │ │ -00000990: 2066 696c 6573 2e2e 2e0a 0a3d 6865 6164 files.....=head │ │ │ -000009a0: 3120 4f50 5449 4f4e 530a 0a3d 6f76 6572 1 OPTIONS..=over │ │ │ -000009b0: 2038 0a0a 3d69 7465 6d20 423c 2d61 3e2c 8..=item B<-a>, │ │ │ -000009c0: 2042 3c2d 2d61 6464 4e61 6d65 3e0a 0a20 B<--addName>.. │ │ │ -000009d0: 2020 2061 6464 2066 696c 656e 616d 6520 add filename │ │ │ -000009e0: 746f 2074 6865 206f 7574 7075 7420 6174 to the output at │ │ │ -000009f0: 2074 6865 2062 6567 696e 6e69 6e67 206f the beginning o │ │ │ -00000a00: 6620 6561 6368 206c 696e 650a 0a3d 6974 f each line..=it │ │ │ -00000a10: 656d 2042 3c2d 643e 2c20 423c 2d2d 6465 em B<-d>, B<--de │ │ │ -00000a20: 6c61 793e 0a0a 2020 2020 6465 6c61 7920 lay>.. delay │ │ │ -00000a30: 696e 2073 6563 2e20 6265 7477 6565 6e20 in sec. between │ │ │ -00000a40: 6368 6563 6b69 6e67 2074 6865 2066 696c checking the fil │ │ │ -00000a50: 6573 2028 6465 6661 756c 7420 3520 7365 es (default 5 se │ │ │ -00000a60: 6329 0a0a 3d69 7465 6d20 423c 2d70 3e2c c)..=item B<-p>, │ │ │ -00000a70: 2042 3c2d 2d70 6f73 6974 696f 6e3e 0a0a B<--position>.. │ │ │ -00000a80: 2020 2020 7265 6164 2066 726f 6d20 6265 read from be │ │ │ -00000a90: 6769 6e20 6f72 2065 6e64 206f 6620 6669 gin or end of fi │ │ │ -00000aa0: 6c65 2028 6465 6661 756c 7420 3d20 6265 le (default = be │ │ │ -00000ab0: 6769 6e29 0a0a 3d69 7465 6d20 423c 2d2d gin)..=item B<-- │ │ │ -00000ac0: 7072 696e 743e 0a0a 2020 2020 7072 696e print>.. prin │ │ │ -00000ad0: 7420 636f 6e66 6967 7572 6174 696f 6e20 t configuration │ │ │ -00000ae0: 7265 6164 2066 726f 6d20 636f 6e66 6967 read from config │ │ │ -00000af0: 7572 6174 696f 6e20 6669 6c65 0a20 2020 uration file. │ │ │ -00000b00: 206f 7220 636f 6d6d 616e 6420 6c69 6e65 or command line │ │ │ -00000b10: 2061 6e64 2073 746f 700a 0a3d 6974 656d and stop..=item │ │ │ -00000b20: 2042 3c2d 743e 2c20 423c 2d2d 7769 7468 B<-t>, B<--with │ │ │ -00000b30: 5469 6d65 3e0a 0a20 2020 2077 6974 6820 Time>.. with │ │ │ -00000b40: 6375 7272 656e 7420 7469 6d65 2061 6e64 current time and │ │ │ -00000b50: 2064 6174 6520 696e 2074 6865 206f 7574 date in the out │ │ │ -00000b60: 7075 740a 0a3d 6974 656d 2042 3c2d 6f3e put..=item B<-o> │ │ │ -00000b70: 2c20 423c 2d2d 6f75 743e 0a0a 2020 2020 , B<--out>.. │ │ │ -00000b80: 7772 6974 6520 6f75 7470 7574 2074 6f20 write output to │ │ │ -00000b90: 6669 6c65 0a0a 3d69 7465 6d20 423c 2d6d file..=item B<-m │ │ │ -00000ba0: 3e2c 2042 3c2d 2d6d 6178 4669 6c65 6c65 >, B<--maxFilele │ │ │ -00000bb0: 6e3e 0a0a 2020 2020 6d61 7869 6d61 6c20 n>.. maximal │ │ │ -00000bc0: 6c65 6e20 6f66 2066 696c 6520 7772 6974 len of file writ │ │ │ -00000bd0: 7465 6e20 726f 756e 6420 2864 6566 6175 ten round (defau │ │ │ -00000be0: 6c74 203d 2031 6536 290a 0a3d 6974 656d lt = 1e6)..=item │ │ │ -00000bf0: 2042 3c2d 6e3e 2c20 423c 2d2d 6e6f 4f66 B<-n>, B<--noOf │ │ │ -00000c00: 4f6c 6446 696c 6573 3e0a 0a20 2020 206e OldFiles>.. n │ │ │ -00000c10: 756d 6265 7220 6f66 206f 6c64 2066 696c umber of old fil │ │ │ -00000c20: 6573 2074 6f20 7374 6f72 650a 0a3d 6974 es to store..=it │ │ │ -00000c30: 656d 2042 3c2d 503e 2c20 423c 2d2d 7769 em B<-P>, B<--wi │ │ │ -00000c40: 7468 5049 443e 0a0a 2020 2020 7772 6974 thPID>.. writ │ │ │ -00000c50: 6520 7069 6420 746f 206c 6f67 2066 696c e pid to log fil │ │ │ -00000c60: 6520 2864 6566 6175 6c74 2069 7320 6e6f e (default is no │ │ │ -00000c70: 7429 0a0a 3d69 7465 6d20 423c 2d48 3e2c t)..=item B<-H>, │ │ │ -00000c80: 2042 3c2d 2d77 6974 6848 6f73 746e 616d B<--withHostnam │ │ │ -00000c90: 653e 0a0a 2020 2020 7772 6974 6520 686f e>.. write ho │ │ │ -00000ca0: 7374 6e61 6d65 2074 6f20 6c6f 6720 6669 stname to log fi │ │ │ -00000cb0: 6c65 2028 6465 6661 756c 7420 6973 206e le (default is n │ │ │ -00000cc0: 6f74 290a 0a3d 6974 656d 2042 3c2d 6c3e ot)..=item B<-l> │ │ │ -00000cd0: 2c20 423c 2d2d 6d61 786c 696e 6573 3e0a , B<--maxlines>. │ │ │ -00000ce0: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num │ │ │ -00000cf0: 6265 7220 6f66 206c 696e 6573 2074 6f20 ber of lines to │ │ │ -00000d00: 7265 6164 2070 6572 202d 2d64 656c 6179 read per --delay │ │ │ -00000d10: 2069 6e20 6f6e 6520 6368 756e 6b0a 2020 in one chunk. │ │ │ -00000d20: 2020 6672 6f6d 2061 206c 6f67 2066 696c from a log fil │ │ │ -00000d30: 6520 2864 6566 6175 6c74 203d 2031 3030 e (default = 100 │ │ │ -00000d40: 3029 0a20 2020 2073 6574 7469 6e67 2074 0). setting t │ │ │ -00000d50: 6869 7320 7661 6c75 6520 746f 2030 206d his value to 0 m │ │ │ -00000d60: 6561 6e73 2074 6f20 7265 6164 2061 6c6c eans to read all │ │ │ -00000d70: 206c 696e 6573 2069 6d6d 6564 6961 7465 lines immediate │ │ │ -00000d80: 6c79 0a0a 3d69 7465 6d20 423c 2d73 3e2c ly..=item B<-s>, │ │ │ -00000d90: 2042 3c2d 2d73 6176 654c 6f67 733e 0a0a B<--saveLogs>.. │ │ │ -00000da0: 2020 2020 7361 7665 206c 6f67 2066 696c save log fil │ │ │ -00000db0: 6573 2077 6974 6820 6461 7465 2061 6e64 es with date and │ │ │ -00000dc0: 2074 696d 6520 696e 7374 6561 6420 6f66 time instead of │ │ │ -00000dd0: 2064 656c 6574 696e 6720 7468 650a 2020 deleting the. │ │ │ -00000de0: 2020 6f6c 6420 2877 6974 6820 5b2d 6e6f old (with [-no │ │ │ -00000df0: 4f66 4f6c 6446 696c 6573 5d29 0a0a 3d69 OfOldFiles])..=i │ │ │ -00000e00: 7465 6d20 423c 2d63 3e2c 2042 3c2d 2d63 tem B<-c>, B<--c │ │ │ -00000e10: 6f6d 7072 6573 7357 6974 683e 0a0a 2020 ompressWith>.. │ │ │ -00000e20: 2020 636f 6d70 7265 7373 2073 6176 6564 compress saved │ │ │ -00000e30: 206c 6f67 2066 696c 6573 2028 652e 672e log files (e.g. │ │ │ -00000e40: 2077 6974 6820 2d63 2027 677a 6970 202d with -c 'gzip - │ │ │ -00000e50: 3927 290a 0a3d 6974 656d 2042 3c2d 433e 9')..=item B<-C> │ │ │ -00000e60: 2c20 423c 2d2d 636f 6c6f 723e 0a0a 2020 , B<--color>.. │ │ │ -00000e70: 2020 7573 6520 636f 6c6f 7220 666f 7220 use color for │ │ │ -00000e80: 6120 6c69 6e65 2069 6620 7370 6563 6966 a line if specif │ │ │ -00000e90: 6965 6420 7061 7474 6572 6e20 6d61 7463 ied pattern matc │ │ │ -00000ea0: 6865 730a 2020 2020 7375 7070 6f72 7465 hes. supporte │ │ │ -00000eb0: 6420 636f 6c6f 7273 2061 7265 3a0a 2020 d colors are:. │ │ │ -00000ec0: 2020 2772 6564 272c 2027 6772 6565 6e27 'red', 'green' │ │ │ -00000ed0: 2c20 2779 656c 6c6f 7727 2c20 2762 6c75 , 'yellow', 'blu │ │ │ -00000ee0: 6527 2c20 276d 6167 656e 7461 272c 2027 e', 'magenta', ' │ │ │ -00000ef0: 6379 616e 270a 2020 2020 7468 6973 206f cyan'. this o │ │ │ -00000f00: 7074 696f 6e20 6361 6e20 6265 2075 7365 ption can be use │ │ │ -00000f10: 6420 6d75 6c74 6970 6c65 2074 696d 6573 d multiple times │ │ │ -00000f20: 0a20 2020 2065 7861 6d70 6c65 3a0a 2020 . example:. │ │ │ -00000f30: 2020 2020 202d 2d63 6f6c 6f72 2072 6564 --color red │ │ │ -00000f40: 3d45 5252 4f52 0a0a 3d69 7465 6d20 423c =ERROR..=item B< │ │ │ -00000f50: 2d67 3e2c 2042 3c2d 2d67 7265 703e 0a0a -g>, B<--grep>.. │ │ │ -00000f60: 2020 2020 6772 6570 2066 6f72 206c 696e grep for lin │ │ │ -00000f70: 6573 2077 6974 6820 7468 6520 7370 6563 es with the spec │ │ │ -00000f80: 6966 6965 6420 6578 7072 6573 7369 6f6e ified expression │ │ │ -00000f90: 0a20 2020 2065 7861 6d70 6c65 3a0a 2020 . example:. │ │ │ -00000fa0: 2020 2020 202d 2d67 7265 7020 2745 5252 --grep 'ERR │ │ │ -00000fb0: 4f52 7c57 4152 4e49 4e47 270a 0a3d 6974 OR|WARNING'..=it │ │ │ -00000fc0: 656d 2042 3c2d 563e 0a0a 2020 2020 7072 em B<-V>.. pr │ │ │ -00000fd0: 696e 7420 7665 7273 696f 6e28 7329 0a0a int version(s).. │ │ │ -00000fe0: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO │ │ │ -00000ff0: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig │ │ │ -00001000: 6874 2028 6329 2032 3030 312d 3230 3232 ht (c) 2001-2022 │ │ │ -00001010: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef │ │ │ -00001020: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM │ │ │ -00001030: 4529 0a50 7562 6c69 7368 6564 2075 6e64 E).Published und │ │ │ -00001040: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener │ │ │ -00001050: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens │ │ │ -00001060: 6520 6f72 2061 6e79 206c 6174 6572 2076 e or any later v │ │ │ -00001070: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my │ │ │ -00001080: 2024 4865 6c70 203d 2026 3a3a 6765 7450 $Help = &::getP │ │ │ -00001090: 6f64 3254 6578 7428 2430 293b 0a0a 2670 od2Text($0);..&p │ │ │ -000010a0: 7269 6e74 5665 7273 696f 6e28 5c40 4152 rintVersion(\@AR │ │ │ -000010b0: 4756 2c20 272d 5627 2c20 272d 2d76 6572 GV, '-V', '--ver │ │ │ -000010c0: 7369 6f6e 2729 3b0a 0a6d 7920 2443 6865 sion');..my $Che │ │ │ -000010d0: 636b 5061 7220 3d20 4368 6563 6b50 6172 ckPar = CheckPar │ │ │ -000010e0: 616d 2d3e 6e65 7728 272d 616c 6c6f 774c am->new('-allowL │ │ │ -000010f0: 6973 7473 2720 3d3e 2027 7965 7327 2c0a ists' => 'yes',. │ │ │ -00001100: 0909 0920 2020 2020 2020 272d 6c69 7374 ... '-list │ │ │ -00001110: 2720 3d3e 205b 0a09 0909 0920 2020 4f70 ' => [..... Op │ │ │ -00001120: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00001130: 2720 3d3e 2027 6164 644e 616d 6527 2c0a ' => 'addName',. │ │ │ -00001140: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl │ │ │ -00001150: 5f6f 7074 696f 6e27 203d 3e20 272d 6127 _option' => '-a' │ │ │ -00001160: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '- │ │ │ -00001170: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001180: 6164 644e 616d 6527 292c 0a09 0909 0920 addName'),..... │ │ │ -00001190: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ -000011a0: 6e61 6d65 2720 3d3e 2027 6465 6c61 7927 name' => 'delay' │ │ │ -000011b0: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '- │ │ │ -000011c0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -000011d0: 6427 2c0a 0909 0909 0920 2020 2020 2020 d',...... │ │ │ -000011e0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -000011f0: 2d2d 6465 6c61 7927 2c0a 0909 0909 0920 --delay',...... │ │ │ -00001200: 2020 2020 2020 272d 6465 6661 756c 7427 '-default' │ │ │ -00001210: 203d 3e20 3529 2c0a 0909 0909 2020 204f => 5),..... O │ │ │ -00001220: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001230: 6527 203d 3e20 2770 6f73 6974 696f 6e27 e' => 'position' │ │ │ -00001240: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '- │ │ │ -00001250: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001260: 7027 2c0a 0909 0909 0920 2020 2020 2020 p',...... │ │ │ -00001270: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001280: 2d2d 706f 7369 7469 6f6e 272c 0a09 0909 --position',.... │ │ │ -00001290: 0909 2020 2020 2020 2027 2d64 6566 6175 .. '-defau │ │ │ -000012a0: 6c74 2720 3d3e 2027 6265 6769 6e27 2c0a lt' => 'begin',. │ │ │ -000012b0: 0909 0909 0920 2020 2020 2020 272d 7061 ..... '-pa │ │ │ -000012c0: 7474 6572 6e27 203d 3e0a 0909 0909 0920 ttern' =>...... │ │ │ -000012d0: 2020 2020 2020 275e 6265 6769 6e24 7c5e '^begin$|^ │ │ │ -000012e0: 656e 6424 2720 2320 270a 0909 0909 2020 end$' # '..... │ │ │ -000012f0: 2029 2c0a 0909 0909 2020 204f 7074 696f ),..... Optio │ │ │ -00001300: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001310: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',...... │ │ │ -00001320: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti │ │ │ -00001330: 6f6e 2720 3d3e 2027 2d2d 7072 696e 7427 on' => '--print' │ │ │ -00001340: 292c 0a09 0909 0920 2020 4f70 7469 6f6e ),..... Option │ │ │ -00001350: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001360: 2027 7769 7468 5469 6d65 272c 0a09 0909 'withTime',.... │ │ │ -00001370: 0909 2020 2020 2020 2027 2d63 6c5f 6f70 .. '-cl_op │ │ │ -00001380: 7469 6f6e 2720 3d3e 2027 2d74 272c 0a09 tion' => '-t',.. │ │ │ -00001390: 0909 0909 2020 2020 2020 2027 2d63 6c5f .... '-cl_ │ │ │ -000013a0: 616c 6961 7327 203d 3e20 272d 2d77 6974 alias' => '--wit │ │ │ -000013b0: 6854 696d 6527 292c 0a09 0909 0920 2020 hTime'),..... │ │ │ -000013c0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000013d0: 6d65 2720 3d3e 2027 6f75 7427 2c0a 0909 me' => 'out',... │ │ │ -000013e0: 0909 0920 2020 2020 2020 272d 636c 5f6f ... '-cl_o │ │ │ -000013f0: 7074 696f 6e27 203d 3e20 272d 6f27 2c0a ption' => '-o',. │ │ │ -00001400: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl │ │ │ -00001410: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6f75 _alias' => '--ou │ │ │ -00001420: 7427 2c0a 0909 0909 0920 2020 2020 2020 t',...... │ │ │ -00001430: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00001440: 2729 2c0a 0909 0909 2020 204f 7074 696f '),..... Optio │ │ │ -00001450: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001460: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',. │ │ │ -00001470: 0909 0909 0920 2020 2020 2020 272d 636c ..... '-cl │ │ │ -00001480: 5f6f 7074 696f 6e27 203d 3e20 272d 6d27 _option' => '-m' │ │ │ -00001490: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '- │ │ │ -000014a0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -000014b0: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',.... │ │ │ -000014c0: 0909 2020 2020 2020 2027 2d64 6566 6175 .. '-defau │ │ │ -000014d0: 6c74 2720 3d3e 2031 6536 292c 0a09 0909 lt' => 1e6),.... │ │ │ -000014e0: 0920 2020 4f70 7469 6f6e 2d3e 6e65 7728 . Option->new( │ │ │ -000014f0: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4f66 '-name' => 'noOf │ │ │ -00001500: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',...... │ │ │ -00001510: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti │ │ │ -00001520: 6f6e 2720 3d3e 2027 2d6e 272c 0a09 0909 on' => '-n',.... │ │ │ -00001530: 0909 2020 2020 2020 2027 2d63 6c5f 616c .. '-cl_al │ │ │ -00001540: 6961 7327 203d 3e20 272d 2d6e 6f4f 664f ias' => '--noOfO │ │ │ -00001550: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... │ │ │ -00001560: 2020 2020 2020 272d 7061 7261 6d27 203d '-param' = │ │ │ -00001570: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... │ │ │ -00001580: 2020 2020 2027 2d6f 6e6c 795f 6966 2720 '-only_if' │ │ │ -00001590: 3d3e 0a09 0909 0927 5b70 6974 5d20 616e =>.....'[pit] an │ │ │ -000015a0: 6420 6e6f 7420 2820 5b73 6176 654c 6f67 d not ( [saveLog │ │ │ -000015b0: 735d 206f 7220 5b63 6f6d 7072 6573 7357 s] or [compressW │ │ │ -000015c0: 6974 685d 2927 292c 0a09 0909 0920 2020 ith])'),..... │ │ │ -000015d0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000015e0: 6d65 2720 3d3e 2027 7769 7468 5049 4427 me' => 'withPID' │ │ │ -000015f0: 2c0a 0909 0909 0920 2020 2020 2020 272d ,...... '- │ │ │ -00001600: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001610: 5027 2c0a 0909 0909 0920 2020 2020 2020 P',...... │ │ │ -00001620: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001630: 2d2d 7769 7468 5049 4427 292c 0a09 0909 --withPID'),.... │ │ │ -00001640: 0920 2020 4f70 7469 6f6e 2d3e 6e65 7728 . Option->new( │ │ │ -00001650: 272d 6e61 6d65 2720 3d3e 2027 7769 7468 '-name' => 'with │ │ │ -00001660: 486f 7374 6e61 6d65 272c 0a09 0909 0909 Hostname',...... │ │ │ -00001670: 2020 2020 2020 2027 2d63 6c5f 6f70 7469 '-cl_opti │ │ │ -00001680: 6f6e 2720 3d3e 2027 2d48 272c 0a09 0909 on' => '-H',.... │ │ │ -00001690: 0909 2020 2020 2020 2027 2d63 6c5f 616c .. '-cl_al │ │ │ -000016a0: 6961 7327 203d 3e20 272d 2d77 6974 6848 ias' => '--withH │ │ │ -000016b0: 6f73 746e 616d 6527 292c 0a09 0909 0920 ostname'),..... │ │ │ -000016c0: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ -000016d0: 6e61 6d65 2720 3d3e 2027 6d61 786c 696e name' => 'maxlin │ │ │ -000016e0: 6573 272c 0a09 0909 0909 2020 2020 2020 es',...... │ │ │ -000016f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001700: 2027 2d6c 272c 0a09 0909 0909 2020 2020 '-l',...... │ │ │ -00001710: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00001720: 3e20 272d 2d6d 6178 6c69 6e65 7327 2c0a > '--maxlines',. │ │ │ -00001730: 0909 0909 0920 2020 2020 2020 272d 6465 ..... '-de │ │ │ -00001740: 6661 756c 7427 203d 3e20 3130 3030 2c0a fault' => 1000,. │ │ │ -00001750: 0909 0909 0920 2020 2020 2020 272d 7061 ..... '-pa │ │ │ -00001760: 7474 6572 6e27 203d 3e20 275e 5c64 2b24 ttern' => '^\d+$ │ │ │ -00001770: 2720 2320 270a 0909 0909 2020 2029 2c0a ' # '..... ),. │ │ │ -00001780: 0909 0909 2020 204f 7074 696f 6e2d 3e6e .... Option->n │ │ │ -00001790: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's │ │ │ -000017a0: 6176 654c 6f67 7327 2c0a 0909 0909 0920 aveLogs',...... │ │ │ -000017b0: 2020 2020 2020 272d 636c 5f6f 7074 696f '-cl_optio │ │ │ -000017c0: 6e27 203d 3e20 272d 7327 2c0a 0909 0909 n' => '-s',..... │ │ │ -000017d0: 0920 2020 2020 2020 272d 636c 5f61 6c69 . '-cl_ali │ │ │ -000017e0: 6173 2720 3d3e 2027 2d2d 7361 7665 4c6f as' => '--saveLo │ │ │ -000017f0: 6773 272c 0a09 0909 0909 2020 2020 2020 gs',...... │ │ │ -00001800: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>.. │ │ │ -00001810: 0909 0909 2020 2020 2020 2027 5b6f 7574 .... '[out │ │ │ -00001820: 5d20 616e 6420 6e6f 7420 5b6e 6f4f 664f ] and not [noOfO │ │ │ -00001830: 6c64 4669 6c65 735d 2729 2c0a 0909 0909 ldFiles]'),..... │ │ │ -00001840: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -00001850: 2d6e 616d 6527 203d 3e20 2763 6f6d 7072 -name' => 'compr │ │ │ -00001860: 6573 7357 6974 6827 2c0a 0909 0909 0920 essWith',...... │ │ │ -00001870: 2020 2020 2020 272d 636c 5f6f 7074 696f '-cl_optio │ │ │ -00001880: 6e27 203d 3e20 272d 6327 2c0a 0909 0909 n' => '-c',..... │ │ │ -00001890: 0920 2020 2020 2020 272d 636c 5f61 6c69 . '-cl_ali │ │ │ -000018a0: 6173 2720 3d3e 2027 2d2d 636f 6d70 7265 as' => '--compre │ │ │ -000018b0: 7373 5769 7468 272c 0a09 0909 0909 2020 ssWith',...... │ │ │ -000018c0: 2020 2020 2027 2d70 6172 616d 2720 3d3e '-param' => │ │ │ -000018d0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... │ │ │ -000018e0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -000018f0: 3e0a 0909 0909 0920 2020 2020 2020 275b >...... '[ │ │ │ -00001900: 6f75 745d 2061 6e64 206e 6f74 205b 6e6f out] and not [no │ │ │ -00001910: 4f66 4f6c 6446 696c 6573 5d27 292c 0a09 OfOldFiles]'),.. │ │ │ -00001920: 0909 0920 2020 4f70 7469 6f6e 2d3e 6e65 ... Option->ne │ │ │ -00001930: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co │ │ │ -00001940: 6c6f 7227 2c0a 0909 0909 0920 2020 2020 lor',...... │ │ │ -00001950: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00001960: 3e20 272d 4327 2c0a 0909 0909 0920 2020 > '-C',...... │ │ │ -00001970: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ -00001980: 3d3e 2027 2d2d 636f 6c6f 7227 2c0a 0909 => '--color',... │ │ │ -00001990: 0909 0920 2020 2020 2020 272d 6d75 6c74 ... '-mult │ │ │ -000019a0: 6970 6c65 2720 3d3e 2027 7965 7327 292c iple' => 'yes'), │ │ │ -000019b0: 0a09 0909 0920 2020 4f70 7469 6f6e 2d3e ..... Option-> │ │ │ -000019c0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -000019d0: 6772 6570 272c 0a09 0909 0909 2020 2020 grep',...... │ │ │ -000019e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000019f0: 3d3e 2027 2d67 272c 0a09 0909 0909 2020 => '-g',...... │ │ │ -00001a00: 2020 2020 2027 2d63 6c5f 616c 6961 7327 '-cl_alias' │ │ │ -00001a10: 203d 3e20 272d 2d67 7265 7027 2c0a 0909 => '--grep',... │ │ │ -00001a20: 0909 0920 2020 2020 2020 272d 7061 7261 ... '-para │ │ │ -00001a30: 6d27 203d 3e20 2779 6573 2729 0a09 0909 m' => 'yes').... │ │ │ -00001a40: 2020 2020 2020 205d 0a20 2020 2029 3b0a ]. );. │ │ │ -00001a50: 0a24 4368 6563 6b50 6172 2d3e 6368 6563 .$CheckPar->chec │ │ │ -00001a60: 6b28 272d 6172 6776 2720 3d3e 205c 4041 k('-argv' => \@A │ │ │ -00001a70: 5247 562c 0a20 2020 2020 2020 2020 2020 RGV,. │ │ │ -00001a80: 2020 2020 2020 272d 6865 6c70 2720 3d3e '-help' => │ │ │ -00001a90: 2024 4865 6c70 0a20 2020 2020 2020 2020 $Help. │ │ │ -00001aa0: 2020 2020 2020 2020 293b 0a0a 6d79 2024 );..my $ │ │ │ -00001ab0: 6465 6c61 7920 3d20 2443 6865 636b 5061 delay = $CheckPa │ │ │ -00001ac0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00001ad0: 2827 6465 6c61 7927 293b 0a6d 7920 2461 ('delay');.my $a │ │ │ -00001ae0: 6464 4e61 6d65 203d 2031 2069 6620 2824 ddName = 1 if ($ │ │ │ -00001af0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001b00: 5769 7468 6f75 7450 6172 2827 6164 644e WithoutPar('addN │ │ │ -00001b10: 616d 6527 2929 3b0a 6d79 2024 706f 7369 ame'));.my $posi │ │ │ -00001b20: 7469 6f6e 203d 2024 4368 6563 6b50 6172 tion = $CheckPar │ │ │ -00001b30: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00001b40: 2770 6f73 6974 696f 6e27 293b 0a6d 7920 'position');.my │ │ │ -00001b50: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP │ │ │ -00001b60: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00001b70: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m │ │ │ -00001b80: 7920 2477 6974 6854 696d 6520 3d20 2824 y $withTime = ($ │ │ │ -00001b90: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001ba0: 5769 7468 6f75 7450 6172 2827 7769 7468 WithoutPar('with │ │ │ -00001bb0: 5469 6d65 2729 2920 3f20 2779 6573 2720 Time')) ? 'yes' │ │ │ -00001bc0: 3a20 276e 6f27 3b0a 6d79 2024 6f75 7420 : 'no';.my $out │ │ │ -00001bd0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001be0: 4f70 7457 6974 6850 6172 2827 6f75 7427 OptWithPar('out' │ │ │ -00001bf0: 293b 0a6d 7920 246d 6178 4669 6c65 6c65 );.my $maxFilele │ │ │ -00001c00: 6e20 3d20 2443 6865 636b 5061 722d 3e67 n = $CheckPar->g │ │ │ -00001c10: 6574 4f70 7457 6974 6850 6172 2827 6d61 etOptWithPar('ma │ │ │ -00001c20: 7846 696c 656c 656e 2729 3b0a 6d79 2024 xFilelen');.my $ │ │ │ -00001c30: 6e6f 4f66 4f6c 6446 696c 6573 203d 2024 noOfOldFiles = $ │ │ │ -00001c40: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001c50: 5769 7468 5061 7228 276e 6f4f 664f 6c64 WithPar('noOfOld │ │ │ -00001c60: 4669 6c65 7327 293b 0a6d 7920 2477 6974 Files');.my $wit │ │ │ -00001c70: 6850 4944 203d 2024 4368 6563 6b50 6172 hPID = $CheckPar │ │ │ -00001c80: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00001c90: 6172 2827 7769 7468 5049 4427 2920 3f20 ar('withPID') ? │ │ │ -00001ca0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my │ │ │ -00001cb0: 2024 686f 7374 6e61 6d65 203d 2024 4368 $hostname = $Ch │ │ │ -00001cc0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00001cd0: 7468 6f75 7450 6172 2827 7769 7468 486f thoutPar('withHo │ │ │ -00001ce0: 7374 6e61 6d65 2729 203f 2060 686f 7374 stname') ? `host │ │ │ -00001cf0: 6e61 6d65 202d 6660 203a 2027 273b 0a63 name -f` : '';.c │ │ │ -00001d00: 686f 6d70 2024 686f 7374 6e61 6d65 3b0a homp $hostname;. │ │ │ -00001d10: 6d79 2024 6d61 786c 696e 6573 203d 2024 my $maxlines = $ │ │ │ -00001d20: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001d30: 5769 7468 5061 7228 276d 6178 6c69 6e65 WithPar('maxline │ │ │ -00001d40: 7327 293b 0a6d 7920 2473 6176 654c 6f67 s');.my $saveLog │ │ │ -00001d50: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g │ │ │ -00001d60: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00001d70: 2773 6176 654c 6f67 7327 293b 0a24 7361 'saveLogs');.$sa │ │ │ -00001d80: 7665 4c6f 6773 203d 2027 7965 7327 2069 veLogs = 'yes' i │ │ │ -00001d90: 6620 2473 6176 654c 6f67 733b 0a6d 7920 f $saveLogs;.my │ │ │ -00001da0: 2463 6f6d 7072 6573 7357 6974 6820 3d20 $compressWith = │ │ │ -00001db0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001dc0: 7457 6974 6850 6172 2827 636f 6d70 7265 tWithPar('compre │ │ │ -00001dd0: 7373 5769 7468 2729 3b0a 6d79 2024 636f ssWith');.my $co │ │ │ -00001de0: 6c6f 7220 3d20 2443 6865 636b 5061 722d lor = $CheckPar- │ │ │ -00001df0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00001e00: 636f 6c6f 7227 293b 0a6d 7920 2467 7265 color');.my $gre │ │ │ -00001e10: 7020 3d20 2443 6865 636b 5061 722d 3e67 p = $CheckPar->g │ │ │ -00001e20: 6574 4f70 7457 6974 6850 6172 2827 6772 etOptWithPar('gr │ │ │ -00001e30: 6570 2729 3b0a 0a75 6e6c 6573 7320 2824 ep');..unless ($ │ │ │ -00001e40: 4368 6563 6b50 6172 2d3e 6765 744e 6f4c CheckPar->getNoL │ │ │ -00001e50: 6973 7450 6172 2829 290a 7b0a 2020 2020 istPar()).{. │ │ │ -00001e60: 7072 696e 7420 2224 4865 6c70 223b 0a20 print "$Help";. │ │ │ -00001e70: 2020 2065 7869 7420 313b 0a7d 0a0a 6966 exit 1;.}..if │ │ │ -00001e80: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. │ │ │ -00001e90: 2443 6865 636b 5061 722d 3e70 7269 6e74 $CheckPar->print │ │ │ -00001ea0: 2829 3b0a 2020 2020 6578 6974 2030 3b0a ();. exit 0;. │ │ │ -00001eb0: 7d0a 0a23 2067 6574 2063 6f6c 6f72 7320 }..# get colors │ │ │ -00001ec0: 616e 6420 7061 7474 6572 6e0a 6d79 2028 and pattern.my ( │ │ │ -00001ed0: 4063 6f6c 2c20 4070 6174 293b 0a66 6f72 @col, @pat);.for │ │ │ -00001ee0: 6561 6368 206d 7920 2463 6f6c 2028 4024 each my $col (@$ │ │ │ -00001ef0: 636f 6c6f 7229 0a7b 0a20 2020 206d 7920 color).{. my │ │ │ -00001f00: 2824 632c 2024 7029 203d 2073 706c 6974 ($c, $p) = split │ │ │ -00001f10: 282f 3d2f 2c20 2463 6f6c 2c20 3229 3b0a (/=/, $col, 2);. │ │ │ -00001f20: 2020 2020 756e 6c65 7373 2028 6465 6669 unless (defi │ │ │ -00001f30: 6e65 6420 2470 290a 2020 2020 7b0a 0970 ned $p). {..p │ │ │ -00001f40: 7269 6e74 2053 5444 4552 5220 2277 726f rint STDERR "wro │ │ │ -00001f50: 6e67 2061 7267 756d 656e 7420 3c24 636f ng argument <$co │ │ │ -00001f60: 6c3e 2066 6f72 206f 7074 696f 6e20 2d2d l> for option -- │ │ │ -00001f70: 636f 6c6f 723a 2027 3d27 2069 7320 6d69 color: '=' is mi │ │ │ -00001f80: 7373 696e 675c 6e22 3b0a 0965 7869 7420 ssing\n";..exit │ │ │ -00001f90: 313b 0a20 2020 207d 0a20 2020 2075 6e6c 1;. }. unl │ │ │ -00001fa0: 6573 7320 2864 6566 696e 6564 2024 636f ess (defined $co │ │ │ -00001fb0: 6c6f 7273 7b24 637d 290a 2020 2020 7b0a lors{$c}). {. │ │ │ -00001fc0: 0970 7269 6e74 2053 5444 4552 5220 2263 .print STDERR "c │ │ │ -00001fd0: 6f6c 6f72 203c 2463 3e20 6e6f 7420 7375 olor <$c> not su │ │ │ -00001fe0: 7070 6f72 7465 6420 696e 2061 7267 756d pported in argum │ │ │ -00001ff0: 656e 7420 3c24 636f 6c3e 2066 6f72 206f ent <$col> for o │ │ │ -00002000: 7074 696f 6e20 2d2d 636f 6c6f 725c 6e22 ption --color\n" │ │ │ -00002010: 2c0a 0922 616c 6c6f 7765 6420 636f 6c6f ,.."allowed colo │ │ │ -00002020: 7273 2061 7265 3a20 222c 096a 6f69 6e28 rs are: ",.join( │ │ │ -00002030: 272c 2027 2c20 736f 7274 206b 6579 7320 ', ', sort keys │ │ │ -00002040: 2563 6f6c 6f72 7329 2c20 225c 6e22 3b0a %colors), "\n";. │ │ │ -00002050: 0965 7869 7420 313b 0a20 2020 207d 0a20 .exit 1;. }. │ │ │ -00002060: 2020 2070 7573 6820 4063 6f6c 2c20 2463 push @col, $c │ │ │ -00002070: 3b0a 2020 2020 7075 7368 2040 7061 742c ;. push @pat, │ │ │ -00002080: 2024 703b 0a7d 0a24 5465 726d 3a3a 414e $p;.}.$Term::AN │ │ │ -00002090: 5349 436f 6c6f 723a 3a41 5554 4f52 4553 SIColor::AUTORES │ │ │ -000020a0: 4554 203d 2031 0a20 2020 2069 6620 4063 ET = 1. if @c │ │ │ -000020b0: 6f6c 3b0a 0a0a 2320 7369 676e 616c 2068 ol;...# signal h │ │ │ -000020c0: 616e 646c 696e 670a 2453 4947 7b49 4e54 andling.$SIG{INT │ │ │ -000020d0: 7d20 3d20 2453 4947 7b54 4552 4d7d 203d } = $SIG{TERM} = │ │ │ -000020e0: 205c 2663 6c65 616e 7570 3b0a 0a23 2049 \&cleanup;..# I │ │ │ -000020f0: 6e69 7469 616c 6973 6965 7275 6e67 0a6d nitialisierung.m │ │ │ -00002100: 7920 4066 696c 6573 3b0a 6d79 2024 6669 y @files;.my $fi │ │ │ -00002110: 6c65 3b0a 6d79 2024 6974 6572 203d 2049 le;.my $iter = I │ │ │ -00002120: 7465 725f 5061 724c 6973 742d 3e6e 6577 ter_ParList->new │ │ │ -00002130: 2824 4368 6563 6b50 6172 293b 0a77 6869 ($CheckPar);.whi │ │ │ -00002140: 6c65 2028 2466 696c 6520 3d20 2469 7465 le ($file = $ite │ │ │ -00002150: 722d 3e6e 6578 7428 2929 0a7b 0a20 2020 r->next()).{. │ │ │ -00002160: 206d 7920 2466 203d 2028 2461 6464 4e61 my $f = ($addNa │ │ │ -00002170: 6d65 2920 3f20 2224 6669 6c65 2022 203a me) ? "$file " : │ │ │ -00002180: 2027 273b 0a20 2020 2070 7573 6820 4066 '';. push @f │ │ │ -00002190: 696c 6573 2c20 7461 696c 4f6e 6546 696c iles, tailOneFil │ │ │ -000021a0: 652d 3e6e 6577 2827 2d66 696c 656e 616d e->new('-filenam │ │ │ -000021b0: 6527 203d 3e20 2466 696c 652c 0a09 0909 e' => $file,.... │ │ │ -000021c0: 0920 2027 2d70 6f73 6974 696f 6e27 203d . '-position' = │ │ │ -000021d0: 3e20 2470 6f73 6974 696f 6e2c 0a09 0909 > $position,.... │ │ │ -000021e0: 0920 2027 2d70 7265 6669 7827 203d 3e20 . '-prefix' => │ │ │ -000021f0: 2466 2c0a 0909 0909 2020 272d 6d61 786c $f,..... '-maxl │ │ │ -00002200: 696e 6573 2720 3d3e 2024 6d61 786c 696e ines' => $maxlin │ │ │ -00002210: 6573 290a 7d0a 0a0a 2320 4175 7367 6162 es).}...# Ausgab │ │ │ -00002220: 656f 626a 656b 7420 6572 7a65 7567 656e eobjekt erzeugen │ │ │ -00002230: 0a6d 7920 2840 6669 6c65 6f75 7429 203d .my (@fileout) = │ │ │ -00002240: 2028 272d 6669 6c65 2720 3d3e 2024 6f75 ('-file' => $ou │ │ │ -00002250: 7429 2069 6620 2824 6f75 7429 3b0a 6d79 t) if ($out);.my │ │ │ -00002260: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL │ │ │ -00002270: 6f67 2d3e 6e65 7728 4066 696c 656f 7574 og->new(@fileout │ │ │ -00002280: 2c0a 0909 0920 2027 2d77 6974 6854 696d ,.... '-withTim │ │ │ -00002290: 6527 203d 3e20 2477 6974 6854 696d 652c e' => $withTime, │ │ │ -000022a0: 0a09 0909 2020 272d 6d61 7846 696c 656c .... '-maxFilel │ │ │ -000022b0: 656e 2720 3d3e 2024 6d61 7846 696c 656c en' => $maxFilel │ │ │ -000022c0: 656e 2c0a 0909 0920 2027 2d6e 6f4f 664f en,.... '-noOfO │ │ │ -000022d0: 6c64 4669 6c65 7327 203d 3e20 246e 6f4f ldFiles' => $noO │ │ │ -000022e0: 664f 6c64 4669 6c65 732c 0a09 0909 2020 fOldFiles,.... │ │ │ -000022f0: 272d 7361 7665 4c6f 6773 2720 3d3e 2024 '-saveLogs' => $ │ │ │ -00002300: 7361 7665 4c6f 6773 2c0a 0909 0920 2027 saveLogs,.... ' │ │ │ -00002310: 2d63 6f6d 7072 6573 7357 6974 6827 203d -compressWith' = │ │ │ -00002320: 3e20 2463 6f6d 7072 6573 7357 6974 682c > $compressWith, │ │ │ -00002330: 0a09 0909 2020 272d 7769 7468 5049 4427 .... '-withPID' │ │ │ -00002340: 203d 3e20 2477 6974 6850 4944 2c0a 0909 => $withPID,... │ │ │ -00002350: 0920 2027 2d68 6f73 746e 616d 6527 203d . '-hostname' = │ │ │ -00002360: 3e20 2468 6f73 746e 616d 650a 2020 2020 > $hostname. │ │ │ -00002370: 293b 0a0a 0a6d 7920 2469 203d 2030 3b0a );...my $i = 0;. │ │ │ -00002380: 7768 696c 6520 2834 3229 0a7b 0a20 2020 while (42).{. │ │ │ -00002390: 206d 7920 2824 6c2c 2024 6529 203d 2024 my ($l, $e) = $ │ │ │ -000023a0: 6669 6c65 735b 2469 5d2d 3e72 6561 6428 files[$i]->read( │ │ │ -000023b0: 293b 0a20 2020 2063 686f 7020 4024 6c3b );. chop @$l; │ │ │ -000023c0: 0a0a 2020 2020 2840 246c 2920 3d20 6772 .. (@$l) = gr │ │ │ -000023d0: 6570 282f 2467 7265 702f 2c20 4024 6c29 ep(/$grep/, @$l) │ │ │ -000023e0: 0a09 6966 2024 6772 6570 3b0a 0a23 2020 ..if $grep;..# │ │ │ -000023f0: 2020 7072 696e 7420 2240 246c 5c6e 223b print "@$l\n"; │ │ │ -00002400: 0a20 2020 2069 6620 2840 636f 6c29 0a20 . if (@col). │ │ │ -00002410: 2020 207b 0a09 666f 7265 6163 6820 6d79 {..foreach my │ │ │ -00002420: 2024 6c69 6e65 2028 4024 6c29 0a09 7b0a $line (@$l)..{. │ │ │ -00002430: 0920 2020 206d 7920 2463 6f6c 466c 6167 . my $colFlag │ │ │ -00002440: 203d 2030 3b0a 2370 7269 6e74 2022 2d31 = 0;.#print "-1 │ │ │ -00002450: 2d40 636f 6c5c 6e22 3b0a 0920 2020 2066 -@col\n";.. f │ │ │ -00002460: 6f72 2028 6d79 2024 6a20 3d20 3020 3b20 or (my $j = 0 ; │ │ │ -00002470: 246a 203c 2040 636f 6c20 3b20 246a 2b2b $j < @col ; $j++ │ │ │ -00002480: 290a 0920 2020 207b 0a09 096d 7920 2470 ).. {...my $p │ │ │ -00002490: 203d 2024 7061 745b 246a 5d3b 0a23 7072 = $pat[$j];.#pr │ │ │ -000024a0: 696e 7420 222d 322d 2470 5c6e 223b 0a09 int "-2-$p\n";.. │ │ │ -000024b0: 0969 6620 2824 6c69 6e65 203d 7e20 2f24 .if ($line =~ /$ │ │ │ -000024c0: 702f 290a 0909 7b0a 0909 2020 2020 7072 p/)...{... pr │ │ │ -000024d0: 696e 7420 636f 6c6f 7220 2463 6f6c 5b24 int color $col[$ │ │ │ -000024e0: 6a5d 3b0a 0909 2020 2020 2470 724c 6f67 j];... $prLog │ │ │ -000024f0: 2d3e 7072 2824 6c69 6e65 293b 0a09 0920 ->pr($line);... │ │ │ -00002500: 2020 2070 7269 6e74 2063 6f6c 6f72 2027 print color ' │ │ │ -00002510: 7265 7365 7427 3b0a 0909 2020 2020 2463 reset';... $c │ │ │ -00002520: 6f6c 466c 6167 203d 2031 3b0a 2370 7269 olFlag = 1;.#pri │ │ │ -00002530: 6e74 2022 2d33 2d22 2c20 2463 6f6c 5b24 nt "-3-", $col[$ │ │ │ -00002540: 6a5d 2c20 222d 2463 6f6c 466c 6167 5c6e j], "-$colFlag\n │ │ │ -00002550: 223b 0a09 0920 2020 206c 6173 743b 0a09 ";... last;.. │ │ │ -00002560: 097d 0a09 2020 2020 7d0a 0920 2020 2024 .}.. }.. $ │ │ │ -00002570: 7072 4c6f 672d 3e70 7228 246c 696e 6529 prLog->pr($line) │ │ │ -00002580: 0a09 0975 6e6c 6573 7320 2463 6f6c 466c ...unless $colFl │ │ │ -00002590: 6167 3b0a 097d 0a20 2020 207d 0a20 2020 ag;..}. }. │ │ │ -000025a0: 2065 6c73 650a 2020 2020 7b0a 0924 7072 else. {..$pr │ │ │ -000025b0: 4c6f 672d 3e70 7228 4024 6c29 3b0a 2020 Log->pr(@$l);. │ │ │ -000025c0: 2020 7d0a 2020 2020 2470 724c 6f67 2d3e }. $prLog-> │ │ │ -000025d0: 7072 2822 2a2a 2a20 2465 202a 2a2a 2229 pr("*** $e ***") │ │ │ -000025e0: 2069 6620 2465 3b0a 0a20 2020 202b 2b24 if $e;.. ++$ │ │ │ -000025f0: 693b 0a20 2020 2024 6920 253d 2040 6669 i;. $i %= @fi │ │ │ -00002600: 6c65 733b 0a20 2020 2073 656c 6563 7428 les;. select( │ │ │ -00002610: 756e 6465 662c 2075 6e64 6566 2c20 756e undef, undef, un │ │ │ -00002620: 6465 662c 2024 6465 6c61 7920 2f20 4066 def, $delay / @f │ │ │ -00002630: 696c 6573 293b 2023 2073 6c65 6570 2069 iles); # sleep i │ │ │ -00002640: 6e20 7365 636f 6e64 730a 7d0a 0a0a 0a23 n seconds.}....# │ │ │ -00002650: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00002660: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00002670: 2323 2323 2323 230a 7375 6220 636c 6561 #######.sub clea │ │ │ -00002680: 6e75 700a 7b0a 2020 2020 6d79 2024 7369 nup.{. my $si │ │ │ -00002690: 676e 616d 6520 3d20 7368 6966 743b 0a20 gname = shift;. │ │ │ -000026a0: 2020 206d 7920 2465 7869 7420 3d20 2873 my $exit = (s │ │ │ -000026b0: 6869 6674 2829 207c 7c20 3129 3b0a 0a20 hift() || 1);.. │ │ │ -000026c0: 2020 2070 7269 6e74 2063 6f6c 6f72 2027 print color ' │ │ │ -000026d0: 7265 7365 7427 3b0a 2020 2020 6578 6974 reset';. exit │ │ │ -000026e0: 2024 6578 6974 3b0a 7d0a $exit;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 6d75 6c74 6954 6169 6c0a p/bin/multiTail. │ │ ├── ./usr/bin/storeBackup │ │ │ @@ -1,16353 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 312d 3230 3232 290a 2320 2020 2020 2020 1-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#..requi │ │ │ -00000300: 7265 2053 4442 4d5f 4669 6c65 3b0a 7265 re SDBM_File;.re │ │ │ -00000310: 7175 6972 6520 5469 653a 3a48 6173 683b quire Tie::Hash; │ │ │ -00000320: 0a0a 7573 6520 4663 6e74 6c3b 0a75 7365 ..use Fcntl;.use │ │ │ -00000330: 2046 636e 746c 2071 7728 4f5f 5244 5752 Fcntl qw(O_RDWR │ │ │ -00000340: 204f 5f43 5245 4154 293b 0a75 7365 2046 O_CREAT);.use F │ │ │ -00000350: 636e 746c 2071 7728 465f 5345 5450 4950 cntl qw(F_SETPIP │ │ │ -00000360: 455f 535a 293b 0a75 7365 2046 636e 746c E_SZ);.use Fcntl │ │ │ -00000370: 2071 7728 465f 4745 5450 4950 455f 535a qw(F_GETPIPE_SZ │ │ │ -00000380: 293b 0a0a 7573 6520 494f 3a3a 436f 6d70 );..use IO::Comp │ │ │ -00000390: 7265 7373 3a3a 477a 6970 2071 7728 677a ress::Gzip qw(gz │ │ │ -000003a0: 6970 2024 477a 6970 4572 726f 7229 3b0a ip $GzipError);. │ │ │ -000003b0: 7573 6520 504f 5349 583b 0a75 7365 2044 use POSIX;.use D │ │ │ -000003c0: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md │ │ │ -000003d0: 355f 6865 7829 3b0a 0a75 7365 2073 7472 5_hex);..use str │ │ │ -000003e0: 6963 743b 0a75 7365 2077 6172 6e69 6e67 ict;.use warning │ │ │ -000003f0: 733b 0a0a 246d 6169 6e3a 3a53 544f 5245 s;..$main::STORE │ │ │ -00000400: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = │ │ │ -00000410: 756e 6465 663b 0a0a 0a73 7562 206c 6962 undef;...sub lib │ │ │ -00000420: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f │ │ │ -00000430: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. │ │ │ -00000440: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. │ │ │ -00000450: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se │ │ │ -00000460: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink │ │ │ -00000470: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo │ │ │ -00000480: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel │ │ │ -00000490: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f │ │ │ -000004a0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh │ │ │ -000004b0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file).. │ │ │ -000004c0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link │ │ │ -000004d0: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file │ │ │ -000004e0: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub │ │ │ -000004f0: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1) │ │ │ -00000500: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne "/").. {. │ │ │ -00000510: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\ │ │ │ -00000520: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. │ │ │ -00000530: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. │ │ │ -00000540: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f │ │ │ -00000550: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. │ │ │ -00000560: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, │ │ │ -00000570: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF │ │ │ -00000580: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);.. │ │ │ -00000590: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = "/$file" │ │ │ -000005a0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -000005b0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -000005c0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR "<$file> do │ │ │ -000005d0: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\n" │ │ │ -000005e0: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. } │ │ │ -000005f0: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= "/ │ │ │ -00000600: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib"; │ │ │ -00000610: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den │ │ │ -00000620: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. │ │ │ -00000630: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = ` │ │ │ -00000640: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c │ │ │ -00000650: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. │ │ │ -00000660: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir │ │ │ -00000670: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs │ │ │ -00000680: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -00000690: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir; │ │ │ -000006a0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir; │ │ │ -000006b0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli │ │ │ -000006c0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir("$absDi │ │ │ -000006d0: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file"));. } │ │ │ -000006e0: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ -000006f0: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR "< │ │ │ -00000700: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e │ │ │ -00000710: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\n" │ │ │ -00000720: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp │ │ │ -00000730: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. │ │ │ -00000740: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif │ │ │ -00000750: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return ( │ │ │ -00000760: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle │ │ │ -00000770: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\// │ │ │ -00000780: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf │ │ │ -00000790: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname. │ │ │ -000007a0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $ │ │ │ -000007b0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~ │ │ │ -000007c0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\/(.*)$/s │ │ │ -000007d0: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/' │ │ │ -000007e0: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '') │ │ │ -000007f0: 3b20 2020 2020 2020 2020 2020 2020 2020 ; │ │ │ -00000800: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall │ │ │ -00000810: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename │ │ │ -00000820: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di │ │ │ -00000830: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my │ │ │ -00000840: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = │ │ │ -00000850: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un │ │ │ -00000860: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, "$re │ │ │ -00000870: 7122 3b0a 0a0a 7265 7175 6972 6520 2773 q";...require 's │ │ │ -00000880: 746f 7265 4261 636b 7570 476c 6f62 2e70 toreBackupGlob.p │ │ │ -00000890: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che │ │ │ -000008a0: 636b 5061 7261 6d32 2e70 6c27 3b0a 7265 ckParam2.pl';.re │ │ │ -000008b0: 7175 6972 6520 2763 6865 636b 4f62 6a50 quire 'checkObjP │ │ │ -000008c0: 6172 2e70 6c27 3b0a 7265 7175 6972 6520 ar.pl';.require │ │ │ -000008d0: 2770 724c 6f67 2e70 6c27 3b0a 7265 7175 'prLog.pl';.requ │ │ │ -000008e0: 6972 6520 2773 706c 6974 4c69 6e65 2e70 ire 'splitLine.p │ │ │ -000008f0: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil │ │ │ -00000900: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir │ │ │ -00000910: 6520 2764 6174 6554 6f6f 6c73 2e70 6c27 e 'dateTools.pl' │ │ │ -00000920: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP │ │ │ -00000930: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require │ │ │ -00000940: 2027 6875 6d61 6e52 6561 642e 706c 273b 'humanRead.pl'; │ │ │ -00000950: 0a72 6571 7569 7265 2027 7665 7273 696f .require 'versio │ │ │ -00000960: 6e2e 706c 273b 0a72 6571 7569 7265 2027 n.pl';.require ' │ │ │ -00000970: 6576 616c 546f 6f6c 732e 706c 273b 0a72 evalTools.pl';.r │ │ │ -00000980: 6571 7569 7265 2027 7374 6f72 6542 6163 equire 'storeBac │ │ │ -00000990: 6b75 704c 6962 2e70 6c27 3b0a 0a6e 6f20 kupLib.pl';..no │ │ │ -000009a0: 7761 726e 696e 6773 2027 6e65 776c 696e warnings 'newlin │ │ │ -000009b0: 6527 3b20 2020 2023 206e 6f20 7761 726e e'; # no warn │ │ │ -000009c0: 696e 6720 666f 7220 7374 6174 206f 6620 ing for stat of │ │ │ -000009d0: 6669 6c65 7320 7769 7468 206e 6577 6c69 files with newli │ │ │ -000009e0: 6e65 0a20 2020 2020 2020 2020 2020 2020 ne. │ │ │ -000009f0: 2020 2020 2020 2020 2020 2020 2023 2077 # w │ │ │ -00000a00: 6f72 6b73 2069 6e20 7065 726c 2035 2e36 orks in perl 5.6 │ │ │ -00000a10: 2b20 6f6e 6c79 0a0a 232f 7573 722f 696e + only..#/usr/in │ │ │ -00000a20: 636c 7564 652f 6c69 6e75 782f 6c69 6d69 clude/linux/limi │ │ │ -00000a30: 7473 2e68 3a23 6465 6669 6e65 2041 5247 ts.h:#define ARG │ │ │ -00000a40: 5f4d 4158 2020 2020 2020 2031 3331 3037 _MAX 13107 │ │ │ -00000a50: 3220 2020 2020 2020 202f 2a20 230a 2362 2 /* #.#b │ │ │ -00000a60: 7974 6573 206f 6620 6172 6773 202b 2065 ytes of args + e │ │ │ -00000a70: 6e76 6972 6f6e 2066 6f72 2065 7865 6328 nviron for exec( │ │ │ -00000a80: 2920 2a2f 0a23 0a23 0a23 4175 7320 6465 ) */.#.#.#Aus de │ │ │ -00000a90: 6d20 536f 7572 6365 2066 c3bc 7220 2278 m Source f..r "x │ │ │ -00000aa0: 6172 6773 2220 6765 6874 2068 6572 766f args" geht hervo │ │ │ -00000ab0: 723a 0a23 0a23 2020 6f72 6967 5f61 7267 r:.#.# orig_arg │ │ │ -00000ac0: 5f6d 6178 203d 2041 5247 5f4d 4158 202d _max = ARG_MAX - │ │ │ -00000ad0: 2032 3034 383b 202f 2a20 504f 5349 582e 2048; /* POSIX. │ │ │ -00000ae0: 3220 7265 7175 6972 6573 2073 7562 7472 2 requires subtr │ │ │ -00000af0: 6163 7469 6e67 2032 3034 382e 202a 2f0a acting 2048. */. │ │ │ -00000b00: 2320 2061 7267 5f6d 6178 203d 206f 7269 # arg_max = ori │ │ │ -00000b10: 675f 6172 675f 6d61 783b 0a0a 246d 6169 g_arg_max;..$mai │ │ │ -00000b20: 6e3a 3a73 7462 754d 6435 4578 6563 203d n::stbuMd5Exec = │ │ │ -00000b30: 2022 2472 6571 2f73 7462 754d 6435 4578 "$req/stbuMd5Ex │ │ │ -00000b40: 6563 2e70 6c22 3b0a 246d 6169 6e3a 3a73 ec.pl";.$main::s │ │ │ -00000b50: 7462 754d 6435 6370 203d 2022 2472 6571 tbuMd5cp = "$req │ │ │ -00000b60: 2f73 7462 754d 6435 6370 2e70 6c22 3b0a /stbuMd5cp.pl";. │ │ │ -00000b70: 246d 6169 6e3a 3a65 6e64 4f66 5374 6f72 $main::endOfStor │ │ │ -00000b80: 6542 6163 6b75 7020 3d20 303b 0a24 6d61 eBackup = 0;.$ma │ │ │ -00000b90: 696e 3a3a 6578 6563 5061 7261 6d4c 656e in::execParamLen │ │ │ -00000ba0: 6774 6820 3d20 3420 2a20 3130 3234 3b20 gth = 4 * 1024; │ │ │ -00000bb0: 2020 2020 2023 2044 6566 6175 6c74 2057 # Default W │ │ │ -00000bc0: 6572 742c 2073 6568 7220 6e69 6564 7269 ert, sehr niedri │ │ │ -00000bd0: 6720 616e 6765 7365 747a 740a 246d 6169 g angesetzt.$mai │ │ │ -00000be0: 6e3a 3a6d 696e 436f 7079 5769 7468 466f n::minCopyWithFo │ │ │ -00000bf0: 726b 203d 2031 3032 342a 2a32 3b20 2020 rk = 1024**2; │ │ │ -00000c00: 2020 2020 2320 616c 6c65 7320 7761 7320 # alles was │ │ │ -00000c10: 3c3d 2069 7374 2c20 7769 7264 2069 6e20 <= ist, wird in │ │ │ -00000c20: 7065 726c 0a20 2020 2020 2020 2020 2020 perl. │ │ │ -00000c30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000c40: 2020 2020 2020 2020 2020 2020 2023 206b # k │ │ │ -00000c50: 6f70 6965 7274 2c20 7761 7320 3e20 6973 opiert, was > is │ │ │ -00000c60: 742c 206d 6974 2066 6f72 6b0a 6d79 2028 t, mit fork.my ( │ │ │ -00000c70: 2565 7865 6350 6172 616d 4c65 6e67 7468 %execParamLength │ │ │ -00000c80: 2920 3d20 2827 4149 5827 203d 3e20 3232 ) = ('AIX' => 22 │ │ │ -00000c90: 202a 2031 3032 342c 0a09 0909 2027 4c69 * 1024,.... 'Li │ │ │ -00000ca0: 6e75 7827 203d 3e20 3632 202a 2031 3032 nux' => 62 * 102 │ │ │ -00000cb0: 3429 3b0a 246d 6169 6e3a 3a73 6f75 7263 4);.$main::sourc │ │ │ -00000cc0: 6544 6972 203d 2027 273b 2020 2020 2020 eDir = ''; │ │ │ -00000cd0: 2020 2020 2020 2020 2020 2020 2320 7365 # se │ │ │ -00000ce0: 7420 666f 7220 6d61 696e 3a3a 434f 4d52 t for main::COMR │ │ │ -00000cf0: 4553 530a 2020 2020 2020 2020 2020 2020 ESS. │ │ │ -00000d00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000d10: 2020 2020 2020 2020 2020 2020 2320 7061 # pa │ │ │ -00000d20: 7468 2074 6f20 6261 636b 7570 2064 6972 th to backup dir │ │ │ -00000d30: 6563 746f 7279 0a0a 0a6d 7920 2473 746f ectory...my $sto │ │ │ -00000d40: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa │ │ │ -00000d50: 636b 7570 5f70 7267 203d 2027 7374 6f72 ckup_prg = 'stor │ │ │ -00000d60: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac │ │ │ -00000d70: 6b75 702e 706c 273b 0a6d 7920 246c 6f63 kup.pl';.my $loc │ │ │ -00000d80: 6b46 696c 6520 3d20 2824 454e 567b 2755 kFile = ($ENV{'U │ │ │ -00000d90: 5345 5227 7d20 6571 2027 726f 6f74 2729 SER'} eq 'root') │ │ │ -00000da0: 203f 2020 2020 2023 2064 6566 6175 6c74 ? # default │ │ │ -00000db0: 2076 616c 7565 0a09 0927 2f76 6172 2f6c value...'/var/l │ │ │ -00000dc0: 6f63 6b2f 7374 6f72 6542 6163 6b75 702e ock/storeBackup. │ │ │ -00000dd0: 6c6f 636b 2720 3a0a 0909 2445 4e56 7b27 lock' :...$ENV{' │ │ │ -00000de0: 484f 4d45 277d 202e 2027 2f73 746f 7265 HOME'} . '/store │ │ │ -00000df0: 4261 636b 7570 2e6c 6f63 6b27 3b0a 6d79 Backup.lock';.my │ │ │ -00000e00: 2028 4063 6f6d 7072 6573 7329 203d 2028 (@compress) = ( │ │ │ -00000e10: 2762 7a69 7032 2729 3b20 2020 2020 2020 'bzip2'); │ │ │ -00000e20: 2020 2020 2020 2020 2320 6465 6661 756c # defaul │ │ │ -00000e30: 7420 7661 6c75 650a 6d79 2028 4075 6e63 t value.my (@unc │ │ │ -00000e40: 6f6d 7072 6573 7329 203d 2028 2762 7a69 ompress) = ('bzi │ │ │ -00000e50: 7032 272c 2027 2d64 2729 3b20 2020 2020 p2', '-d'); │ │ │ -00000e60: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu │ │ │ -00000e70: 650a 6d79 2024 6d69 6e43 6f6d 7072 6573 e.my $minCompres │ │ │ -00000e80: 7353 697a 6520 3d20 3130 3234 3b20 2020 sSize = 1024; │ │ │ -00000e90: 2020 2020 2320 6465 6661 756c 7420 7661 # default va │ │ │ -00000ea0: 6c75 650a 6d79 2024 706f 7374 6669 7820 lue.my $postfix │ │ │ -00000eb0: 3d20 272e 627a 3227 3b20 2020 2020 2020 = '.bz2'; │ │ │ -00000ec0: 2020 2020 2020 2320 6465 6661 756c 7420 # default │ │ │ -00000ed0: 7661 6c75 650a 6d79 2024 7175 6575 6543 value.my $queueC │ │ │ -00000ee0: 6f6d 7072 6573 7320 3d20 3130 3030 3b20 ompress = 1000; │ │ │ -00000ef0: 2020 2020 2020 2020 2320 6465 6661 756c # defaul │ │ │ -00000f00: 7420 7661 6c75 650a 6d79 2024 7175 6575 t value.my $queu │ │ │ -00000f10: 6543 6f70 7920 3d20 3130 3030 3b20 2020 eCopy = 1000; │ │ │ -00000f20: 2020 2020 2020 2020 2020 2320 6465 6661 # defa │ │ │ -00000f30: 756c 7420 7661 6c75 650a 6d79 2024 7175 ult value.my $qu │ │ │ -00000f40: 6575 6542 6c6f 636b 203d 2031 3030 303b eueBlock = 1000; │ │ │ -00000f50: 2020 2020 2020 2020 2020 2020 2320 6465 # de │ │ │ -00000f60: 6661 756c 7420 7661 6c75 650a 6d79 2024 fault value.my $ │ │ │ -00000f70: 6e6f 426c 6f63 6b52 756c 6573 203d 2035 noBlockRules = 5 │ │ │ -00000f80: 3b20 2020 2020 2020 2020 2020 2020 2320 ; # │ │ │ -00000f90: 6465 6661 756c 7420 7661 6c75 652c 206d default value, m │ │ │ -00000fa0: 7573 7420 6265 203e 2030 0a24 6d61 696e ust be > 0.$main │ │ │ -00000fb0: 3a3a 6e6f 426c 6f63 6b44 6576 6963 6573 ::noBlockDevices │ │ │ -00000fc0: 203d 2035 3b20 2020 2020 2020 2023 2064 = 5; # d │ │ │ -00000fd0: 6566 6175 6c74 2076 616c 7565 2c20 6d75 efault value, mu │ │ │ -00000fe0: 7374 2062 6520 3e20 300a 246d 6169 6e3a st be > 0.$main: │ │ │ -00000ff0: 3a6e 6f43 6f6d 7072 6573 7352 756c 6573 :noCompressRules │ │ │ -00001000: 203d 2035 3b20 2020 2020 2020 2320 6465 = 5; # de │ │ │ -00001010: 6661 756c 7420 7661 6c75 652c 206d 7573 fault value, mus │ │ │ -00001020: 7420 6265 203e 2030 0a6d 7920 2463 6865 t be > 0.my $che │ │ │ -00001030: 636b 426c 6f63 6b73 4253 6465 6661 756c ckBlocksBSdefaul │ │ │ -00001040: 7420 3d20 2731 4d27 3b20 2023 2064 6566 t = '1M'; # def │ │ │ -00001050: 6175 6c74 2076 616c 7565 0a6d 7920 2463 ault value.my $c │ │ │ -00001060: 6865 636b 426c 6f63 6b73 4253 6d69 6e20 heckBlocksBSmin │ │ │ -00001070: 3d20 3130 2a31 3032 343b 2020 2023 206d = 10*1024; # m │ │ │ -00001080: 696e 696d 616c 2076 616c 7565 0a6d 7920 inimal value.my │ │ │ -00001090: 246e 6f43 6f70 7920 3d20 313b 2020 2020 $noCopy = 1; │ │ │ -000010a0: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -000010b0: 2064 6566 6175 6c74 2076 616c 7565 0a6d default value.m │ │ │ -000010c0: 7920 2463 686d 6f64 4d44 3546 696c 6520 y $chmodMD5File │ │ │ -000010d0: 3d20 2730 3630 3027 3b20 2020 2020 2020 = '0600'; │ │ │ -000010e0: 2023 2064 6566 6175 6c74 2076 616c 7565 # default value │ │ │ -000010f0: 0a6d 7920 2474 6d70 6469 7220 3d20 272f .my $tmpdir = '/ │ │ │ -00001100: 746d 7027 3b20 2020 2020 2020 2020 2020 tmp'; │ │ │ -00001110: 2020 2023 2064 6566 6175 6c74 2076 616c # default val │ │ │ -00001120: 7565 0a6d 7920 4065 7863 6570 7453 7566 ue.my @exceptSuf │ │ │ -00001130: 6669 7820 3d20 2827 5c2e 7a69 7027 2c20 fix = ('\.zip', │ │ │ -00001140: 275c 2e62 7a32 272c 2027 5c2e 677a 272c '\.bz2', '\.gz', │ │ │ -00001150: 2027 5c2e 7467 7a27 2c20 275c 2e6a 7067 '\.tgz', '\.jpg │ │ │ -00001160: 272c 2027 5c2e 6769 6627 2c0a 0909 2020 ', '\.gif',... │ │ │ -00001170: 2020 275c 2e74 6966 663f 272c 2027 5c2e '\.tiff?', '\. │ │ │ -00001180: 6d70 653f 6727 2c20 275c 2e6d 705b 3334 mpe?g', '\.mp[34 │ │ │ -00001190: 5d27 2c20 275c 2e6d 7065 3f5b 3334 5d67 ]', '\.mpe?[34]g │ │ │ -000011a0: 272c 2027 5c2e 6f67 6727 2c0a 0909 2020 ', '\.ogg',... │ │ │ -000011b0: 2020 275c 2e67 7067 272c 2027 5c2e 706e '\.gpg', '\.pn │ │ │ -000011c0: 6727 2c20 275c 2e6c 7a6d 6127 2c20 275c g', '\.lzma', '\ │ │ │ -000011d0: 2e78 7a27 2c20 275c 2e6d 6f76 2729 3b0a .xz', '\.mov');. │ │ │ -000011e0: 6d79 2024 6c6f 6749 6e42 6163 6b75 7044 my $logInBackupD │ │ │ -000011f0: 6972 4669 6c65 4e61 6d65 203d 2027 2e73 irFileName = '.s │ │ │ -00001200: 746f 7265 4261 636b 7570 2e6c 6f67 273b toreBackup.log'; │ │ │ -00001210: 0a6d 7920 2463 6865 636b 5375 6d46 696c .my $checkSumFil │ │ │ -00001220: 6520 3d20 272e 6d64 3543 6865 636b 5375 e = '.md5CheckSu │ │ │ -00001230: 6d73 273b 0a6d 7920 2462 6c6f 636b 4368 ms';.my $blockCh │ │ │ -00001240: 6563 6b53 756d 4669 6c65 203d 2027 2e6d eckSumFile = '.m │ │ │ -00001250: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ -00001260: 273b 0a24 6d61 696e 3a3a 6368 6563 6b53 ';.$main::checkS │ │ │ -00001270: 756d 4669 6c65 5665 7273 696f 6e20 3d20 umFileVersion = │ │ │ -00001280: 2731 2e33 273b 0a6d 7920 246b 6565 7041 '1.3';.my $keepA │ │ │ -00001290: 6c6c 203d 2027 3330 6427 3b0a 6d79 2024 ll = '30d';.my $ │ │ │ -000012a0: 6b65 6570 4475 706c 6963 6174 6520 3d20 keepDuplicate = │ │ │ -000012b0: 2737 6427 3b0a 0a6d 7920 2466 6c61 6742 '7d';..my $flagB │ │ │ -000012c0: 6c6f 636b 4465 7669 6365 203d 2030 3b20 lockDevice = 0; │ │ │ -000012d0: 2020 2020 2020 2020 2023 2031 2069 6620 # 1 if │ │ │ -000012e0: 626c 6f63 6b20 6f72 2064 6576 6963 6520 block or device │ │ │ -000012f0: 6f70 7469 6f6e 7320 6172 6520 7573 6564 options are used │ │ │ -00001300: 0a24 746d 7064 6972 203d 2024 454e 567b .$tmpdir = $ENV{ │ │ │ -00001310: 2754 4d50 4449 5227 7d20 6966 2064 6566 'TMPDIR'} if def │ │ │ -00001320: 696e 6564 2024 454e 567b 2754 4d50 4449 ined $ENV{'TMPDI │ │ │ -00001330: 5227 7d3b 0a0a 0a23 2073 746f 7265 4261 R'};...# storeBa │ │ │ -00001340: 636b 7570 2e70 6c20 246d 6169 6e3a 3a53 ckup.pl $main::S │ │ │ -00001350: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO │ │ │ -00001360: 4e0a 0a3d 6865 6164 3120 4e41 4d45 0a0a N..=head1 NAME.. │ │ │ -00001370: 7374 6f72 6542 6163 6b75 702e 706c 202d storeBackup.pl - │ │ │ -00001380: 2066 616e 6379 2063 6f6d 7072 6573 7369 fancy compressi │ │ │ -00001390: 6e67 206d 616e 6167 696e 6720 6368 6563 ng managing chec │ │ │ -000013a0: 6b73 756d 6d69 6e67 0a20 2020 2020 2020 ksumming. │ │ │ -000013b0: 2020 2020 2020 2020 2020 6861 7264 2d6c hard-l │ │ │ -000013c0: 696e 6b69 6e67 2064 6564 7570 6c69 6361 inking deduplica │ │ │ -000013d0: 7469 6e67 2027 6370 202d 7561 270a 0a3d ting 'cp -ua'..= │ │ │ -000013e0: 6865 6164 3120 4445 5343 5249 5054 494f head1 DESCRIPTIO │ │ │ -000013f0: 4e0a 0a54 6869 7320 7072 6f67 7261 6d20 N..This program │ │ │ -00001400: 636f 7069 6573 2074 7265 6573 2074 6f20 copies trees to │ │ │ -00001410: 616e 6f74 6865 7220 6c6f 6361 7469 6f6e another location │ │ │ -00001420: 2e20 4576 6572 7920 6669 6c65 2063 6f70 . Every file cop │ │ │ -00001430: 6965 6420 6973 0a70 6f74 656e 7469 616c ied is.potential │ │ │ -00001440: 6c79 2063 6f6d 7072 6573 7365 6420 2873 ly compressed (s │ │ │ -00001450: 6565 202d 2d65 7863 6570 7453 7566 6669 ee --exceptSuffi │ │ │ -00001460: 7829 2e20 5468 6520 6261 636b 7570 7320 x). The backups │ │ │ -00001470: 6166 7465 720a 7468 6520 6669 7273 7420 after.the first │ │ │ -00001480: 6261 636b 7570 2077 696c 6c20 636f 6d70 backup will comp │ │ │ -00001490: 6172 6520 7468 6520 6669 6c65 7320 7769 are the files wi │ │ │ -000014a0: 7468 2061 6e20 6d64 3520 6368 6563 6b73 th an md5 checks │ │ │ -000014b0: 756d 0a77 6974 6820 7468 6520 6c61 7374 um.with the last │ │ │ -000014c0: 2073 746f 7265 6420 7665 7273 696f 6e2e stored version. │ │ │ -000014d0: 2049 6620 7468 6579 2061 7265 2065 7175 If they are equ │ │ │ -000014e0: 616c 2c20 6974 2077 696c 6c20 6f6e 6c79 al, it will only │ │ │ -000014f0: 206d 616b 6520 616e 0a68 6172 6420 6c69 make an.hard li │ │ │ -00001500: 6e6b 2074 6f20 6974 2e20 4974 2077 696c nk to it. It wil │ │ │ -00001510: 6c20 616c 736f 2063 6865 636b 206d 7469 l also check mti │ │ │ -00001520: 6d65 2c20 6374 696d 6520 616e 6420 7369 me, ctime and si │ │ │ -00001530: 7a65 2074 6f20 7265 636f 676e 697a 650a ze to recognize. │ │ │ -00001540: 6964 656e 7469 616c 2066 696c 6573 2069 idential files i │ │ │ -00001550: 6e20 6f6c 6465 7220 6261 636b 7570 7320 n older backups │ │ │ -00001560: 7665 7279 2066 6173 742e 0a49 7420 6361 very fast..It ca │ │ │ -00001570: 6e20 616c 736f 2062 6163 6b75 7020 6269 n also backup bi │ │ │ -00001580: 6720 696d 6167 6520 6669 6c65 7320 6661 g image files fa │ │ │ -00001590: 7374 2061 6e64 2065 6666 6963 6965 6e74 st and efficient │ │ │ -000015a0: 6c79 206f 6e20 6120 7065 7220 626c 6f63 ly on a per bloc │ │ │ -000015b0: 6b0a 6261 7369 7320 2864 6174 6120 6465 k.basis (data de │ │ │ -000015c0: 6475 706c 6963 6174 696f 6e29 2e0a 0a59 duplication)...Y │ │ │ -000015d0: 6f75 2063 616e 206f 7665 7277 7269 7465 ou can overwrite │ │ │ -000015e0: 206f 7074 696f 6e73 2069 6e20 7468 6520 options in the │ │ │ -000015f0: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi │ │ │ -00001600: 6c65 206f 6e20 7468 6520 636f 6d6d 616e le on the comman │ │ │ -00001610: 6420 6c69 6e65 2e0a 0a3d 6865 6164 3120 d line...=head1 │ │ │ -00001620: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store │ │ │ -00001630: 4261 636b 7570 2e70 6c20 2d2d 6865 6c70 Backup.pl --help │ │ │ -00001640: 0a6f 7220 2020 200a 0973 746f 7265 4261 .or ..storeBa │ │ │ -00001650: 636b 7570 2e70 6c20 2d67 2063 6f6e 6669 ckup.pl -g confi │ │ │ -00001660: 6746 696c 650a 6f72 0a09 7374 6f72 6542 gFile.or..storeB │ │ │ -00001670: 6163 6b75 702e 706c 205b 2d66 2063 6f6e ackup.pl [-f con │ │ │ -00001680: 6669 6746 696c 655d 205b 2d73 2073 6f75 figFile] [-s sou │ │ │ -00001690: 7263 6544 6972 5d0a 0920 2020 2020 205b rceDir].. [ │ │ │ -000016a0: 2d62 2062 6163 6b75 7044 6972 6563 746f -b backupDirecto │ │ │ -000016b0: 7279 5d20 5b2d 5320 7365 7269 6573 5d20 ry] [-S series] │ │ │ -000016c0: 5b2d 2d63 6865 636b 436f 6d70 725d 205b [--checkCompr] [ │ │ │ -000016d0: 2d2d 7072 696e 745d 0a09 2020 2020 2020 --print].. │ │ │ -000016e0: 5b2d 5420 746d 7064 6972 5d20 5b2d 4c20 [-T tmpdir] [-L │ │ │ -000016f0: 6c6f 636b 4669 6c65 5d20 5b2d 2d75 6e6c lockFile] [--unl │ │ │ -00001700: 6f63 6b42 6566 6f72 6544 656c 5d20 0a09 ockBeforeDel] .. │ │ │ -00001710: 2020 2020 2020 5b2d 2d65 7863 6570 7444 [--exceptD │ │ │ -00001720: 6972 7320 6469 7231 5d20 5b2d 2d63 6f6e irs dir1] [--con │ │ │ -00001730: 7445 7863 6570 7444 6972 7345 7272 5d0a tExceptDirsErr]. │ │ │ -00001740: 0920 2020 2020 205b 2d2d 696e 636c 7564 . [--includ │ │ │ -00001750: 6544 6972 7320 6469 7231 5d0a 0920 2020 eDirs dir1].. │ │ │ -00001760: 2020 205b 2d2d 6578 6365 7074 5275 6c65 [--exceptRule │ │ │ -00001770: 2072 756c 655d 205b 2d2d 696e 636c 7564 rule] [--includ │ │ │ -00001780: 6552 756c 6520 7275 6c65 5d0a 0920 2020 eRule rule].. │ │ │ -00001790: 2020 205b 2d2d 6578 6365 7074 5479 7065 [--exceptType │ │ │ -000017a0: 7320 7479 7065 735d 0a09 2020 2020 2020 s types].. │ │ │ -000017b0: 5b2d 2d73 7065 6369 616c 5479 7065 4172 [--specialTypeAr │ │ │ -000017c0: 6368 6976 6572 2061 7263 6869 7665 7220 chiver archiver │ │ │ -000017d0: 5b2d 2d61 7263 6869 7665 5479 7065 7320 [--archiveTypes │ │ │ -000017e0: 7479 7065 735d 5d0a 0920 2020 2020 205b types]].. [ │ │ │ -000017f0: 2d2d 6370 4973 476e 755d 205b 2d2d 6c69 --cpIsGnu] [--li │ │ │ -00001800: 6e6b 5379 6d6c 696e 6b73 5d0a 0920 2020 nkSymlinks].. │ │ │ -00001810: 2020 205b 2d2d 7072 6563 6f6d 6d61 6e64 [--precommand │ │ │ -00001820: 206a 6f62 5d20 5b2d 2d70 6f73 7463 6f6d job] [--postcom │ │ │ -00001830: 6d61 6e64 206a 6f62 5d0a 2020 2020 2020 mand job]. │ │ │ -00001840: 2020 2020 2020 2020 5b2d 2d66 6f6c 6c6f [--follo │ │ │ -00001850: 774c 696e 6b73 2064 6570 7468 5d20 5b2d wLinks depth] [- │ │ │ -00001860: 2d73 7461 7949 6e46 696c 6553 7973 7465 -stayInFileSyste │ │ │ -00001870: 6d5d 205b 2d2d 6869 6768 4c61 7465 6e63 m] [--highLatenc │ │ │ -00001880: 795d 0a09 2020 2020 2020 5b2d 2d69 676e y].. [--ign │ │ │ -00001890: 6f72 6550 6572 6d73 5d20 5b2d 2d6c 6174 orePerms] [--lat │ │ │ -000018a0: 654c 696e 6b73 205b 2d2d 6c61 7465 436f eLinks [--lateCo │ │ │ -000018b0: 6d70 7265 7373 5d5d 205b 2d2d 6175 746f mpress]] [--auto │ │ │ -000018c0: 7265 7061 6972 5d0a 0920 2020 2020 205b repair].. [ │ │ │ -000018d0: 2d2d 6368 6563 6b42 6c6f 636b 7353 7566 --checkBlocksSuf │ │ │ -000018e0: 6669 7820 7375 6666 6978 5d20 5b2d 2d63 fix suffix] [--c │ │ │ -000018f0: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz │ │ │ -00001900: 6520 7369 7a65 5d0a 0920 2020 2020 205b e size].. [ │ │ │ -00001910: 2d2d 6368 6563 6b42 6c6f 636b 7342 535d --checkBlocksBS] │ │ │ -00001920: 205b 2d2d 6368 6563 6b42 6c6f 636b 7343 [--checkBlocksC │ │ │ -00001930: 6f6d 7072 2063 6865 636b 7c79 6573 7c6e ompr check|yes|n │ │ │ -00001940: 6f5d 0a09 2020 2020 2020 5b2d 2d63 6865 o].. [--che │ │ │ -00001950: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel │ │ │ -00001960: 5d20 5b2d 2d71 7565 7565 426c 6f63 6b5d ] [--queueBlock] │ │ │ -00001970: 0a20 2020 2020 2020 2020 2020 2020 205b . [ │ │ │ -00001980: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul │ │ │ -00001990: 6530 2072 756c 6520 5b2d 2d63 6865 636b e0 rule [--check │ │ │ -000019a0: 426c 6f63 6b73 4253 3020 7369 7a65 5d0a BlocksBS0 size]. │ │ │ -000019b0: 2020 2020 2020 2020 2020 2020 2020 205b [ │ │ │ -000019c0: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom │ │ │ -000019d0: 7072 3020 6b65 795d 205b 2d2d 6368 6563 pr0 key] [--chec │ │ │ -000019e0: 6b42 6c6f 636b 7352 6561 6430 2066 696c kBlocksRead0 fil │ │ │ -000019f0: 7465 725d 0a20 2020 2020 2020 2020 2020 ter]. │ │ │ -00001a00: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc │ │ │ -00001a10: 6b73 5061 7261 6c6c 656c 305d 5d0a 2020 ksParallel0]]. │ │ │ -00001a20: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c │ │ │ -00001a30: 6865 636b 426c 6f63 6b73 5275 6c65 3120 heckBlocksRule1 │ │ │ -00001a40: 7275 6c65 205b 2d2d 6368 6563 6b42 6c6f rule [--checkBlo │ │ │ -00001a50: 636b 7342 5331 2073 697a 655d 0a20 2020 cksBS1 size]. │ │ │ -00001a60: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c │ │ │ -00001a70: 6865 636b 426c 6f63 6b73 436f 6d70 7231 heckBlocksCompr1 │ │ │ -00001a80: 206b 6579 5d20 5b2d 2d63 6865 636b 426c key] [--checkBl │ │ │ -00001a90: 6f63 6b73 5265 6164 3120 6669 6c74 6572 ocksRead1 filter │ │ │ -00001aa0: 5d0a 2020 2020 2020 2020 2020 2020 2020 ]. │ │ │ -00001ab0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7350 [--checkBlocksP │ │ │ -00001ac0: 6172 616c 6c65 6c31 5d5d 0a20 2020 2020 arallel1]]. │ │ │ -00001ad0: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec │ │ │ -00001ae0: 6b42 6c6f 636b 7352 756c 6532 2072 756c kBlocksRule2 rul │ │ │ -00001af0: 6520 5b2d 2d63 6865 636b 426c 6f63 6b73 e [--checkBlocks │ │ │ -00001b00: 4253 3220 7369 7a65 5d0a 2020 2020 2020 BS2 size]. │ │ │ -00001b10: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec │ │ │ -00001b20: 6b42 6c6f 636b 7343 6f6d 7072 3220 6b64 kBlocksCompr2 kd │ │ │ -00001b30: 6579 5d20 5b2d 2d63 6865 636b 426c 6f63 ey] [--checkBloc │ │ │ -00001b40: 6b73 5265 6164 3220 6669 6c74 6572 5d0a ksRead2 filter]. │ │ │ -00001b50: 2020 2020 2020 2020 2020 2020 2020 205b [ │ │ │ -00001b60: 2d2d 6368 6563 6b42 6c6f 636b 7350 6172 --checkBlocksPar │ │ │ -00001b70: 616c 6c65 6c32 5d5d 0a20 2020 2020 2020 allel2]]. │ │ │ -00001b80: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB │ │ │ -00001b90: 6c6f 636b 7352 756c 6533 2072 756c 6520 locksRule3 rule │ │ │ -00001ba0: 5b2d 2d63 6865 636b 426c 6f63 6b73 4253 [--checkBlocksBS │ │ │ -00001bb0: 3320 7369 7a65 5d0a 2020 2020 2020 2020 3 size]. │ │ │ -00001bc0: 2020 2020 2020 205b 2d2d 6368 6563 6b42 [--checkB │ │ │ -00001bd0: 6c6f 636b 7343 6f6d 7072 3320 6b65 795d locksCompr3 key] │ │ │ -00001be0: 205b 2d2d 6368 6563 6b42 6c6f 636b 7352 [--checkBlocksR │ │ │ -00001bf0: 6561 6433 2066 696c 7465 725d 0a20 2020 ead3 filter]. │ │ │ -00001c00: 2020 2020 2020 2020 2020 2020 5b2d 2d63 [--c │ │ │ -00001c10: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall │ │ │ -00001c20: 656c 335d 5d0a 2020 2020 2020 2020 2020 el3]]. │ │ │ -00001c30: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc │ │ │ -00001c40: 6b73 5275 6c65 3420 7275 6c65 205b 2d2d ksRule4 rule [-- │ │ │ -00001c50: 6368 6563 6b42 6c6f 636b 7342 5334 2073 checkBlocksBS4 s │ │ │ -00001c60: 697a 655d 0a20 2020 2020 2020 2020 2020 ize]. │ │ │ -00001c70: 2020 2020 5b2d 2d63 6865 636b 426c 6f63 [--checkBloc │ │ │ -00001c80: 6b73 436f 6d70 7234 206b 6579 5d20 5b2d ksCompr4 key] [- │ │ │ -00001c90: 2d63 6865 636b 426c 6f63 6b73 5265 6164 -checkBlocksRead │ │ │ -00001ca0: 3420 6669 6c74 6572 5d0a 2020 2020 2020 4 filter]. │ │ │ -00001cb0: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec │ │ │ -00001cc0: 6b42 6c6f 636b 7350 6172 616c 6c65 6c34 kBlocksParallel4 │ │ │ -00001cd0: 5d5d 0a20 2020 2020 2020 2020 2020 2020 ]]. │ │ │ -00001ce0: 205b 2d2d 6368 6563 6b44 6576 6963 6573 [--checkDevices │ │ │ -00001cf0: 3020 6c69 7374 205b 2d2d 6368 6563 6b44 0 list [--checkD │ │ │ -00001d00: 6576 6963 6573 4469 7230 5d0a 2020 2020 evicesDir0]. │ │ │ -00001d10: 2020 2020 2020 2020 2020 205b 2d2d 6368 [--ch │ │ │ -00001d20: 6563 6b44 6576 6963 6573 4253 305d 205b eckDevicesBS0] [ │ │ │ -00001d30: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp │ │ │ -00001d40: 7230 206b 6579 5d0a 2020 2020 2020 2020 r0 key]. │ │ │ -00001d50: 2020 2020 2020 205b 2d2d 6368 6563 6b44 [--checkD │ │ │ -00001d60: 6576 6963 6573 5061 7261 6c6c 656c 305d evicesParallel0] │ │ │ -00001d70: 5d0a 2020 2020 2020 2020 2020 2020 2020 ]. │ │ │ -00001d80: 5b2d 2d63 6865 636b 4465 7669 6365 7331 [--checkDevices1 │ │ │ -00001d90: 206c 6973 7420 5b2d 2d63 6865 636b 4465 list [--checkDe │ │ │ -00001da0: 7669 6365 7344 6972 315d 0a20 2020 2020 vicesDir1]. │ │ │ -00001db0: 2020 2020 2020 2020 2020 5b2d 2d63 6865 [--che │ │ │ -00001dc0: 636b 4465 7669 6365 7342 5331 5d20 5b63 ckDevicesBS1] [c │ │ │ -00001dd0: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr │ │ │ -00001de0: 3120 6b65 795d 0a20 2020 2020 2020 2020 1 key]. │ │ │ -00001df0: 2020 2020 2020 5b2d 2d63 6865 636b 4465 [--checkDe │ │ │ -00001e00: 7669 6365 7350 6172 616c 6c65 6c31 5d5d vicesParallel1]] │ │ │ -00001e10: 0a20 2020 2020 2020 2020 2020 2020 205b . [ │ │ │ -00001e20: 2d2d 6368 6563 6b44 6576 6963 6573 3220 --checkDevices2 │ │ │ -00001e30: 6c69 7374 205b 2d2d 6368 6563 6b44 6576 list [--checkDev │ │ │ -00001e40: 6963 6573 4469 7232 5d0a 2020 2020 2020 icesDir2]. │ │ │ -00001e50: 2020 2020 2020 2020 205b 2d2d 6368 6563 [--chec │ │ │ -00001e60: 6b44 6576 6963 6573 4253 325d 205b 6368 kDevicesBS2] [ch │ │ │ -00001e70: 6563 6b44 6576 6963 6573 436f 6d70 7232 eckDevicesCompr2 │ │ │ -00001e80: 206b 6579 5d0a 2020 2020 2020 2020 2020 key]. │ │ │ -00001e90: 2020 2020 205b 2d2d 6368 6563 6b44 6576 [--checkDev │ │ │ -00001ea0: 6963 6573 5061 7261 6c6c 656c 325d 5d0a icesParallel2]]. │ │ │ -00001eb0: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ -00001ec0: 2d63 6865 636b 4465 7669 6365 7333 206c -checkDevices3 l │ │ │ -00001ed0: 6973 7420 5b2d 2d63 6865 636b 4465 7669 ist [--checkDevi │ │ │ -00001ee0: 6365 7344 6972 335d 0a20 2020 2020 2020 cesDir3]. │ │ │ -00001ef0: 2020 2020 2020 2020 5b2d 2d63 6865 636b [--check │ │ │ -00001f00: 4465 7669 6365 7342 5333 5d20 5b63 6865 DevicesBS3] [che │ │ │ -00001f10: 636b 4465 7669 6365 7343 6f6d 7072 3320 ckDevicesCompr3 │ │ │ -00001f20: 6b65 795d 0a20 2020 2020 2020 2020 2020 key]. │ │ │ -00001f30: 2020 2020 5b2d 2d63 6865 636b 4465 7669 [--checkDevi │ │ │ -00001f40: 6365 7350 6172 616c 6c65 6c33 5d5d 0a20 cesParallel3]]. │ │ │ -00001f50: 2020 2020 2020 2020 2020 2020 205b 2d2d [-- │ │ │ -00001f60: 6368 6563 6b44 6576 6963 6573 3420 6c69 checkDevices4 li │ │ │ -00001f70: 7374 205b 2d2d 6368 6563 6b44 6576 6963 st [--checkDevic │ │ │ -00001f80: 6573 4469 7234 5d0a 2020 2020 2020 2020 esDir4]. │ │ │ -00001f90: 2020 2020 2020 205b 2d2d 6368 6563 6b44 [--checkD │ │ │ -00001fa0: 6576 6963 6573 4253 345d 205b 6368 6563 evicesBS4] [chec │ │ │ -00001fb0: 6b44 6576 6963 6573 436f 6d70 7234 206b kDevicesCompr4 k │ │ │ -00001fc0: 6579 5d0a 2020 2020 2020 2020 2020 2020 ey]. │ │ │ -00001fd0: 2020 205b 2d2d 6368 6563 6b44 6576 6963 [--checkDevic │ │ │ -00001fe0: 6573 5061 7261 6c6c 656c 315d 5d0a 0920 esParallel1]].. │ │ │ -00001ff0: 2020 2020 205b 2d2d 7361 7665 5241 4d5d [--saveRAM] │ │ │ -00002000: 205b 2d63 2063 6f6d 7072 6573 735d 205b [-c compress] [ │ │ │ -00002010: 2d75 2075 6e63 6f6d 7072 6573 735d 205b -u uncompress] [ │ │ │ -00002020: 2d70 2070 6f73 7466 6978 5d0a 0920 2020 -p postfix].. │ │ │ -00002030: 2020 205b 2d2d 6e6f 436f 6d70 7265 7373 [--noCompress │ │ │ -00002040: 206e 756d 6265 725d 205b 2d2d 7175 6575 number] [--queu │ │ │ -00002050: 6543 6f6d 7072 6573 7320 6e75 6d62 6572 eCompress number │ │ │ -00002060: 5d0a 0920 2020 2020 205b 2d2d 6e6f 436f ].. [--noCo │ │ │ -00002070: 7079 206e 756d 6265 725d 205b 2d2d 7175 py number] [--qu │ │ │ -00002080: 6575 6543 6f70 7920 6e75 6d62 6572 5d0a eueCopy number]. │ │ │ -00002090: 0920 2020 2020 205b 2d2d 7769 7468 5573 . [--withUs │ │ │ -000020a0: 6572 4772 6f75 7053 7461 745d 205b 2d2d erGroupStat] [-- │ │ │ -000020b0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil │ │ │ -000020c0: 6520 6669 6c65 6e61 6d65 5d0a 0920 2020 e filename].. │ │ │ -000020d0: 2020 205b 2d2d 6578 6365 7074 5375 6666 [--exceptSuff │ │ │ -000020e0: 6978 2073 7566 6669 7865 735d 095b 2d2d ix suffixes].[-- │ │ │ -000020f0: 6164 6445 7863 6570 7453 7566 6669 7820 addExceptSuffix │ │ │ -00002100: 7375 6666 6978 6573 5d0a 0920 2020 2020 suffixes].. │ │ │ -00002110: 205b 2d2d 636f 6d70 7265 7373 5375 6666 [--compressSuff │ │ │ -00002120: 6978 5d20 5b2d 2d6d 696e 436f 6d70 7265 ix] [--minCompre │ │ │ -00002130: 7373 5369 7a65 2073 697a 655d 205b 2d2d ssSize size] [-- │ │ │ -00002140: 636f 6d70 7252 756c 655d 0a09 2020 2020 comprRule].. │ │ │ -00002150: 2020 5b2d 2d64 6f4e 6f74 436f 6d70 7265 [--doNotCompre │ │ │ -00002160: 7373 4d44 3546 696c 655d 205b 2d2d 6368 ssMD5File] [--ch │ │ │ -00002170: 6d6f 644d 4435 4669 6c65 5d20 5b2d 765d modMD5File] [-v] │ │ │ -00002180: 0a09 2020 2020 2020 5b2d 6420 6c65 7665 .. [-d leve │ │ │ -00002190: 6c5d 205b 2d2d 7072 6f67 7265 7373 5265 l] [--progressRe │ │ │ -000021a0: 706f 7274 206e 756d 6265 725b 2c74 696d port number[,tim │ │ │ -000021b0: 6566 7261 6d65 5d5d 0a09 2020 2020 2020 eframe]].. │ │ │ -000021c0: 5b2d 2d69 676e 6f72 6552 6561 6445 7272 [--ignoreReadErr │ │ │ -000021d0: 6f72 5d20 5b2d 2d73 7570 7072 6573 7349 or] [--suppressI │ │ │ -000021e0: 6e66 6f5d 0a20 2020 2020 2020 2020 2020 nfo]. │ │ │ -000021f0: 2020 205b 2d2d 7375 7070 7265 7373 5761 [--suppressWa │ │ │ -00002200: 726e 696e 6720 6b65 795d 205b 2d2d 6c69 rning key] [--li │ │ │ -00002210: 6e6b 546f 5265 6365 6e74 206e 616d 655d nkToRecent name] │ │ │ -00002220: 0a09 2020 2020 2020 5b2d 2d64 6f4e 6f74 .. [--doNot │ │ │ -00002230: 4465 6c65 7465 5d20 5b2d 2d64 656c 6574 Delete] [--delet │ │ │ -00002240: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs │ │ │ -00002250: 5d20 5b2d 2d6d 6178 4861 7264 4c69 6e6b ] [--maxHardLink │ │ │ -00002260: 735d 0a09 2020 2020 2020 5b2d 2d72 6573 s].. [--res │ │ │ -00002270: 6574 4174 696d 655d 205b 2d2d 6b65 6570 etAtime] [--keep │ │ │ -00002280: 416c 6c20 7469 6d65 5065 7269 6f64 5d20 All timePeriod] │ │ │ -00002290: 5b2d 2d6b 6565 7057 6565 6b64 6179 2065 [--keepWeekday e │ │ │ -000022a0: 6e74 7279 5d0a 0920 2020 2020 205b 5b2d ntry].. [[- │ │ │ -000022b0: 2d6b 6565 7046 6972 7374 4f66 5965 6172 -keepFirstOfYear │ │ │ -000022c0: 5d20 5b2d 2d6b 6565 704c 6173 744f 6659 ] [--keepLastOfY │ │ │ -000022d0: 6561 725d 0a09 2020 2020 2020 205b 2d2d ear].. [-- │ │ │ -000022e0: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ -000022f0: 5d20 5b2d 2d6b 6565 704c 6173 744f 664d ] [--keepLastOfM │ │ │ -00002300: 6f6e 7468 5d0a 0920 2020 2020 2020 5b2d onth].. [- │ │ │ -00002310: 2d66 6972 7374 4461 794f 6657 6565 6b20 -firstDayOfWeek │ │ │ -00002320: 6461 795d 205b 2d2d 6b65 6570 4669 7273 day] [--keepFirs │ │ │ -00002330: 744f 6657 6565 6b5d 0a20 2020 2020 2020 tOfWeek]. │ │ │ -00002340: 2020 2020 2020 2020 5b2d 2d6b 6565 704c [--keepL │ │ │ -00002350: 6173 744f 6657 6565 6b5d 205b 2d2d 6b65 astOfWeek] [--ke │ │ │ -00002360: 6570 4475 706c 6963 6174 655d 205b 2d2d epDuplicate] [-- │ │ │ -00002370: 6b65 6570 4d69 6e4e 756d 6265 725d 0a20 keepMinNumber]. │ │ │ -00002380: 2020 2020 2020 2020 2020 2020 2020 5b2d [- │ │ │ -00002390: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber]. │ │ │ -000023a0: 0920 2020 2020 2020 207c 205b 2d2d 6b65 . | [--ke │ │ │ -000023b0: 6570 5265 6c61 7469 7665 5d20 5d0a 0920 epRelative] ].. │ │ │ -000023c0: 2020 2020 205b 2d6c 206c 6f67 4669 6c65 [-l logFile │ │ │ -000023d0: 0a09 2020 2020 2020 205b 2d2d 706c 7573 .. [--plus │ │ │ -000023e0: 4c6f 6753 7464 6f75 745d 205b 2d2d 7375 LogStdout] [--su │ │ │ -000023f0: 7070 7265 7373 5469 6d65 5d20 5b2d 6d20 ppressTime] [-m │ │ │ -00002400: 6d61 7846 696c 656c 656e 5d0a 0920 2020 maxFilelen].. │ │ │ -00002410: 2020 2020 5b5b 2d6e 206e 6f4f 664f 6c64 [[-n noOfOld │ │ │ -00002420: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save │ │ │ -00002430: 4c6f 6773 5d5d 0a09 2020 2020 2020 205b Logs]].. [ │ │ │ -00002440: 2d2d 636f 6d70 7265 7373 5769 7468 2063 --compressWith c │ │ │ -00002450: 6f6d 7072 6573 7370 726f 675d 5d0a 0920 ompressprog]].. │ │ │ -00002460: 2020 2020 205b 2d2d 6c6f 6749 6e42 6163 [--logInBac │ │ │ -00002470: 6b75 7044 6972 205b 2d2d 636f 6d70 7265 kupDir [--compre │ │ │ -00002480: 7373 4c6f 6749 6e42 6163 6b75 7044 6972 ssLogInBackupDir │ │ │ -00002490: 5d0a 0920 2020 2020 2020 5b2d 2d6c 6f67 ].. [--log │ │ │ -000024a0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -000024b0: 616d 6520 6c6f 6746 696c 655d 5d0a 0920 ame logFile]].. │ │ │ -000024c0: 2020 2020 205b 6f74 6865 7242 6163 6b75 [otherBacku │ │ │ -000024d0: 7053 6572 6965 7320 2e2e 2e5d 0a0a 0a3d pSeries ...]...= │ │ │ -000024e0: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..= │ │ │ -000024f0: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B< │ │ │ -00002500: 2d2d 6865 6c70 3e0a 0a20 2020 2073 686f --help>.. sho │ │ │ -00002510: 7720 7468 6973 2068 656c 700a 0a3d 6974 w this help..=it │ │ │ -00002520: 656d 2042 3c2d 2d67 656e 6572 6174 653e em B<--generate> │ │ │ -00002530: 2c20 423c 2d67 3e0a 0a20 2020 2067 656e , B<-g>.. gen │ │ │ -00002540: 6572 6174 6520 6120 7465 6d70 6c61 7465 erate a template │ │ │ -00002550: 206f 6620 7468 6520 636f 6e66 6967 7572 of the configur │ │ │ -00002560: 6174 696f 6e20 6669 6c65 0a0a 3d69 7465 ation file..=ite │ │ │ -00002570: 6d20 423c 2d2d 6368 6563 6b43 6f6d 7072 m B<--checkCompr │ │ │ -00002580: 3e2c 2042 3c2d 433e 0a0a 2020 2020 6368 >, B<-C>.. ch │ │ │ -00002590: 6563 6b20 636f 6d70 7265 7373 696f 6e20 eck compression │ │ │ -000025a0: 666f 7220 616c 6c20 6669 6c65 7320 6269 for all files bi │ │ │ -000025b0: 6767 6572 2074 6861 6e20 316b 2074 6f20 gger than 1k to │ │ │ -000025c0: 6368 6563 6b20 6966 0a20 2020 2069 7420 check if. it │ │ │ -000025d0: 6d61 6b65 7320 7365 6e73 6520 746f 2063 makes sense to c │ │ │ -000025e0: 6f6d 7072 6573 7320 7468 656d 0a20 2020 ompress them. │ │ │ -000025f0: 206f 7665 7277 7269 7465 7320 6f70 7469 overwrites opti │ │ │ -00002600: 6f6e 730a 2020 2020 2020 2020 6578 6365 ons. exce │ │ │ -00002610: 7074 5375 6666 6978 2c20 6164 6445 7863 ptSuffix, addExc │ │ │ -00002620: 6570 7453 7566 6669 782c 206d 696e 436f eptSuffix, minCo │ │ │ -00002630: 6d70 7265 7373 5369 7a65 2c20 636f 6d70 mpressSize, comp │ │ │ -00002640: 7252 756c 650a 0a3d 6974 656d 2042 3c2d rRule..=item B<- │ │ │ -00002650: 2d70 7269 6e74 3e0a 0a20 2020 2070 7269 -print>.. pri │ │ │ -00002660: 6e74 2063 6f6e 6669 6775 7261 7469 6f6e nt configuration │ │ │ -00002670: 2072 6561 6420 6672 6f6d 2063 6f6e 6669 read from confi │ │ │ -00002680: 6775 7261 7469 6f6e 2066 696c 650a 2020 guration file. │ │ │ -00002690: 2020 6f72 2063 6f6d 6d61 6e64 206c 696e or command lin │ │ │ -000026a0: 6520 616e 6420 7374 6f70 0a0a 3d69 7465 e and stop..=ite │ │ │ -000026b0: 6d20 423c 2d2d 6669 6c65 3e2c 2042 3c2d m B<--file>, B<- │ │ │ -000026c0: 663e 0a0a 2020 2020 636f 6e66 6967 7572 f>.. configur │ │ │ -000026d0: 6174 696f 6e20 6669 6c65 2028 696e 7374 ation file (inst │ │ │ -000026e0: 6561 6420 6f66 206f 7220 6164 6469 7469 ead of or additi │ │ │ -000026f0: 6f6e 616c 6c79 2074 6f20 6f70 7469 6f6e onally to option │ │ │ -00002700: 730a 2020 2020 6f6e 2063 6f6d 6d61 6e64 s. on command │ │ │ -00002710: 206c 696e 6529 0a0a 3d69 7465 6d20 423c line)..=item B< │ │ │ -00002720: 2d2d 736f 7572 6365 4469 723e 2c20 423c --sourceDir>, B< │ │ │ -00002730: 2d73 3e0a 0a20 2020 2073 6f75 7263 6520 -s>.. source │ │ │ -00002740: 6469 7265 6374 6f72 7920 286d 7573 7420 directory (must │ │ │ -00002750: 6578 6973 7429 0a0a 3d69 7465 6d20 423c exist)..=item B< │ │ │ -00002760: 2d2d 6261 636b 7570 4469 723e 2c20 423c --backupDir>, B< │ │ │ -00002770: 2d62 3e0a 0a20 2020 2074 6f70 206c 6576 -b>.. top lev │ │ │ -00002780: 656c 2064 6972 6563 746f 7279 206f 6620 el directory of │ │ │ -00002790: 616c 6c20 6261 636b 7570 7320 286d 7573 all backups (mus │ │ │ -000027a0: 7420 6578 6973 7429 0a0a 3d69 7465 6d20 t exist)..=item │ │ │ -000027b0: 423c 2d2d 7365 7269 6573 3e2c 2042 3c2d B<--series>, B<- │ │ │ -000027c0: 533e 0a0a 2020 2020 7365 7269 6573 2064 S>.. series d │ │ │ -000027d0: 6972 6563 746f 7279 2c20 6465 6661 756c irectory, defaul │ │ │ -000027e0: 7420 6973 2027 6465 6661 756c 7427 0a20 t is 'default'. │ │ │ -000027f0: 2020 2072 656c 6174 6976 6520 7061 7468 relative path │ │ │ -00002800: 2066 726f 6d20 6261 636b 7570 4469 720a from backupDir. │ │ │ -00002810: 0a3d 6974 656d 2042 3c2d 2d74 6d70 6469 .=item B<--tmpdi │ │ │ -00002820: 723e 2c20 423c 2d54 3e0a 0a20 2020 2064 r>, B<-T>.. d │ │ │ -00002830: 6972 6563 746f 7279 2066 6f72 2074 656d irectory for tem │ │ │ -00002840: 706f 7261 7279 2066 696c 6573 2c20 6465 porary files, de │ │ │ -00002850: 6661 756c 7420 6973 203c 2f74 6d70 3e0a fault is . │ │ │ -00002860: 0a3d 6974 656d 2042 3c2d 2d6c 6f63 6b46 .=item B<--lockF │ │ │ -00002870: 696c 653e 2c20 423c 2d4c 3e0a 0a20 2020 ile>, B<-L>.. │ │ │ -00002880: 206c 6f63 6b20 6669 6c65 2c20 6966 2065 lock file, if e │ │ │ -00002890: 7869 7374 732c 206e 6577 2069 6e73 7461 xists, new insta │ │ │ -000028a0: 6e63 6573 2077 696c 6c20 6669 6e69 7368 nces will finish │ │ │ -000028b0: 2069 6620 616e 206f 6c64 0a20 2020 2069 if an old. i │ │ │ -000028c0: 7320 616c 7265 6164 7920 7275 6e6e 696e s already runnin │ │ │ -000028d0: 672c 2064 6566 6175 6c74 2069 7320 246c g, default is $l │ │ │ -000028e0: 6f63 6b46 696c 650a 2020 2020 7468 6973 ockFile. this │ │ │ -000028f0: 2074 7970 6520 6f66 206c 6f63 6b20 6669 type of lock fi │ │ │ -00002900: 6c65 7320 646f 6573 206e 6f74 2077 6f72 les does not wor │ │ │ -00002910: 6b20 6163 726f 7373 206d 756c 7469 706c k across multipl │ │ │ -00002920: 6520 7365 7276 6572 730a 2020 2020 616e e servers. an │ │ │ -00002930: 6420 6973 206e 6f74 2064 6573 6967 6e65 d is not designe │ │ │ -00002940: 6420 746f 2073 6570 6172 6174 6520 7374 d to separate st │ │ │ -00002950: 6f72 6542 6163 6b75 702e 706c 2061 6e64 oreBackup.pl and │ │ │ -00002960: 0a20 2020 2073 746f 7265 4261 636b 7570 . storeBackup │ │ │ -00002970: 5570 6461 7465 4261 636b 7570 2e70 6c20 UpdateBackup.pl │ │ │ -00002980: 6f72 2061 6e79 206f 7468 6572 2073 746f or any other sto │ │ │ -00002990: 7265 4261 636b 7570 0a20 2020 2070 726f reBackup. pro │ │ │ -000029a0: 6365 7373 2069 6e20 6120 7365 7061 7261 cess in a separa │ │ │ -000029b0: 7465 2050 4944 2073 7061 6365 2e0a 2020 te PID space.. │ │ │ -000029c0: 2020 4465 6661 756c 7420 6c6f 636b 2066 Default lock f │ │ │ -000029d0: 696c 6520 666f 7220 726f 6f74 2069 7320 ile for root is │ │ │ -000029e0: 696e 202f 7661 722f 6c6f 636b 2c20 666f in /var/lock, fo │ │ │ -000029f0: 7220 6f74 6865 7273 2069 6e20 5c24 484f r others in \$HO │ │ │ -00002a00: 4d45 0a0a 3d69 7465 6d20 423c 2d2d 756e ME..=item B<--un │ │ │ -00002a10: 6c6f 636b 4265 666f 7265 4465 6c3e 0a0a lockBeforeDel>.. │ │ │ -00002a20: 2020 2020 7265 6d6f 7665 2074 6865 206c remove the l │ │ │ -00002a30: 6f63 6b20 6669 6c65 2062 6566 6f72 6520 ock file before │ │ │ -00002a40: 6465 6c65 7469 6e67 206f 6c64 2062 6163 deleting old bac │ │ │ -00002a50: 6b75 7073 0a20 2020 2064 6566 6175 6c74 kups. default │ │ │ -00002a60: 2069 7320 746f 2064 656c 6574 6520 7468 is to delete th │ │ │ -00002a70: 6520 6c6f 636b 2066 696c 6520 6166 7465 e lock file afte │ │ │ -00002a80: 7220 7265 6d6f 7669 6e67 206f 6c64 0a20 r removing old. │ │ │ -00002a90: 2020 2062 6163 6b75 7073 0a0a 3d69 7465 backups..=ite │ │ │ -00002aa0: 6d20 423c 2d2d 6578 6365 7074 4469 7273 m B<--exceptDirs │ │ │ -00002ab0: 3e2c 2042 3c2d 653e 0a0a 2020 2020 6469 >, B<-e>.. di │ │ │ -00002ac0: 7265 6374 6f72 6965 7320 746f 2065 7863 rectories to exc │ │ │ -00002ad0: 6570 7420 6672 6f6d 2062 6163 6b69 6e67 ept from backing │ │ │ -00002ae0: 2075 7020 2872 656c 6174 6976 6520 7061 up (relative pa │ │ │ -00002af0: 7468 292c 0a20 2020 2077 696c 6463 6172 th),. wildcar │ │ │ -00002b00: 6473 2061 7265 2070 6f73 7369 626c 6520 ds are possible │ │ │ -00002b10: 616e 6420 7368 6f75 6c64 2062 6520 7175 and should be qu │ │ │ -00002b20: 6f74 6564 2074 6f20 6176 6f69 640a 2020 oted to avoid. │ │ │ -00002b30: 2020 7265 706c 6163 656d 656e 7473 2062 replacements b │ │ │ -00002b40: 7920 7468 6520 7368 656c 6c0a 2020 2020 y the shell. │ │ │ -00002b50: 7573 6520 7468 6973 2070 6172 616d 6574 use this paramet │ │ │ -00002b60: 6572 206d 756c 7469 706c 6520 7469 6d65 er multiple time │ │ │ -00002b70: 7320 666f 7220 6d75 6c74 6970 6c65 0a20 s for multiple. │ │ │ -00002b80: 2020 2064 6972 6563 746f 7269 6573 0a0a directories.. │ │ │ -00002b90: 3d69 7465 6d20 423c 2d2d 636f 6e74 4578 =item B<--contEx │ │ │ -00002ba0: 6365 7074 4469 7273 4572 723e 0a0a 2020 ceptDirsErr>.. │ │ │ -00002bb0: 2020 636f 6e74 696e 7565 2069 6620 6f6e continue if on │ │ │ -00002bc0: 6520 6f72 206d 6f72 6520 6f66 2074 6865 e or more of the │ │ │ -00002bd0: 2065 7863 6570 7469 6f6e 616c 2064 6972 exceptional dir │ │ │ -00002be0: 6563 746f 7269 6573 0a20 2020 2064 6f20 ectories. do │ │ │ -00002bf0: 6e6f 7420 6578 6973 7420 2864 6566 6175 not exist (defau │ │ │ -00002c00: 6c74 2069 7320 746f 2073 746f 7020 7072 lt is to stop pr │ │ │ -00002c10: 6f63 6573 7369 6e67 290a 0a3d 6974 656d ocessing)..=item │ │ │ -00002c20: 2042 3c2d 2d69 6e63 6c75 6465 4469 7273 B<--includeDirs │ │ │ -00002c30: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6469 >, B<-i>.. di │ │ │ -00002c40: 7265 6374 6f72 6965 7320 746f 2069 6e63 rectories to inc │ │ │ -00002c50: 6c75 6465 2069 6e20 7468 6520 6261 636b lude in the back │ │ │ -00002c60: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat │ │ │ -00002c70: 6829 2c0a 2020 2020 7769 6c64 6361 7264 h),. wildcard │ │ │ -00002c80: 7320 6172 6520 706f 7373 6962 6c65 2061 s are possible a │ │ │ -00002c90: 6e64 2068 6176 6520 746f 2062 6520 7175 nd have to be qu │ │ │ -00002ca0: 6f74 6564 0a20 2020 2075 7365 2074 6869 oted. use thi │ │ │ -00002cb0: 7320 7061 7261 6d65 7465 7220 6d75 6c74 s parameter mult │ │ │ -00002cc0: 6970 6c65 2074 696d 6573 2066 6f72 206d iple times for m │ │ │ -00002cd0: 756c 7469 706c 6520 6469 7265 6374 6f72 ultiple director │ │ │ -00002ce0: 6965 730a 0a3d 6974 656d 2042 3c2d 2d65 ies..=item B<--e │ │ │ -00002cf0: 7863 6570 7452 756c 653e 0a0a 2020 2020 xceptRule>.. │ │ │ -00002d00: 4669 6c65 7320 746f 2065 7863 6c75 6465 Files to exclude │ │ │ -00002d10: 2066 726f 6d20 6261 636b 696e 6720 7570 from backing up │ │ │ -00002d20: 2e0a 2020 2020 7365 6520 5245 4144 4d45 .. see README │ │ │ -00002d30: 3a20 2769 6e63 6c75 6469 6e67 202f 2065 : 'including / e │ │ │ -00002d40: 7863 6c75 6469 6e67 2066 696c 6573 2061 xcluding files a │ │ │ -00002d50: 6e64 2064 6972 6563 746f 7269 6573 270a nd directories'. │ │ │ -00002d60: 0a3d 6974 656d 2042 3c2d 2d69 6e63 6c75 .=item B<--inclu │ │ │ -00002d70: 6465 5275 6c65 3e0a 0a20 2020 2046 696c deRule>.. Fil │ │ │ -00002d80: 6573 2074 6f20 696e 636c 7564 6520 696e es to include in │ │ │ -00002d90: 2074 6865 2062 6163 6b75 6720 7570 202d the backug up - │ │ │ -00002da0: 206c 696b 6520 6578 6365 7074 5275 6c65 like exceptRule │ │ │ -00002db0: 0a20 2020 2073 6565 2052 4541 444d 453a . see README: │ │ │ -00002dc0: 2027 696e 636c 7564 696e 6720 2f20 6578 'including / ex │ │ │ -00002dd0: 636c 7564 696e 6720 6669 6c65 7320 616e cluding files an │ │ │ -00002de0: 6420 6469 7265 6374 6f72 6965 7327 0a0a d directories'.. │ │ │ -00002df0: 3d69 7465 6d20 423c 2d2d 7772 6974 6545 =item B<--writeE │ │ │ -00002e00: 7863 6c75 6465 4c6f 673e 0a0a 2020 2020 xcludeLog>.. │ │ │ -00002e10: 7772 6974 6520 6120 6669 6c65 206e 616d write a file nam │ │ │ -00002e20: 6520 2e73 746f 7265 4261 636b 7570 2e6e e .storeBackup.n │ │ │ -00002e30: 6f74 5361 7665 642e 627a 3220 7769 7468 otSaved.bz2 with │ │ │ -00002e40: 2074 6865 206e 616d 6573 0a20 2020 206f the names. o │ │ │ -00002e50: 6620 616c 6c20 736b 6970 7065 6420 6669 f all skipped fi │ │ │ -00002e60: 6c65 730a 0a3d 6974 656d 2042 3c2d 2d65 les..=item B<--e │ │ │ -00002e70: 7863 6570 7454 7970 6573 3e0a 0a20 2020 xceptTypes>.. │ │ │ -00002e80: 2064 6f20 6e6f 7420 7361 7665 2074 6865 do not save the │ │ │ -00002e90: 2073 7065 6369 6669 6564 2074 7970 6520 specified type │ │ │ -00002ea0: 6f66 2066 696c 6573 2c20 616c 6c6f 7765 of files, allowe │ │ │ -00002eb0: 643a 2053 6263 6670 6c0a 2020 2020 2020 d: Sbcfpl. │ │ │ -00002ec0: 2020 5320 2d20 6669 6c65 2069 7320 6120 S - file is a │ │ │ -00002ed0: 736f 636b 6574 0a20 2020 2020 2020 2062 socket. b │ │ │ -00002ee0: 202d 2066 696c 6520 6973 2061 2062 6c6f - file is a blo │ │ │ -00002ef0: 636b 2073 7065 6369 616c 2066 696c 650a ck special file. │ │ │ -00002f00: 2020 2020 2020 2020 6320 2d20 6669 6c65 c - file │ │ │ -00002f10: 2069 7320 6120 6368 6172 6163 7465 7220 is a character │ │ │ -00002f20: 7370 6563 6961 6c20 6669 6c65 0a20 2020 special file. │ │ │ -00002f30: 2020 2020 2066 202d 2066 696c 6520 6973 f - file is │ │ │ -00002f40: 2061 2070 6c61 696e 2066 696c 650a 2020 a plain file. │ │ │ -00002f50: 2020 2020 2020 7020 2d20 6669 6c65 2069 p - file i │ │ │ -00002f60: 7320 6120 6e61 6d65 6420 7069 7065 0a20 s a named pipe. │ │ │ -00002f70: 2020 2020 2020 206c 202d 2066 696c 6520 l - file │ │ │ -00002f80: 6973 2061 2073 796d 626f 6c69 6320 6c69 is a symbolic li │ │ │ -00002f90: 6e6b 0a20 2020 2020 2020 2053 6263 2063 nk. Sbc c │ │ │ -00002fa0: 616e 206f 6e6c 7920 6265 2073 6176 6564 an only be saved │ │ │ -00002fb0: 2077 6865 6e20 7573 696e 6720 6f70 7469 when using opti │ │ │ -00002fc0: 6f6e 205b 6370 4973 476e 755d 0a0a 3d69 on [cpIsGnu]..=i │ │ │ -00002fd0: 7465 6d20 423c 2d2d 6172 6368 6976 6554 tem B<--archiveT │ │ │ -00002fe0: 7970 6573 3e0a 0a20 2020 2073 6176 6520 ypes>.. save │ │ │ -00002ff0: 7468 6520 7370 6563 6966 6965 6420 7479 the specified ty │ │ │ -00003000: 7065 206f 6620 6669 6c65 7320 696e 2061 pe of files in a │ │ │ -00003010: 6e20 6172 6368 6976 6520 696e 7374 6561 n archive instea │ │ │ -00003020: 6420 7361 7669 6e67 0a20 2020 2074 6865 d saving. the │ │ │ -00003030: 6d20 6469 7265 6374 6c79 2069 6e20 7468 m directly in th │ │ │ -00003040: 6520 6669 6c65 2073 7973 7465 6d0a 2020 e file system. │ │ │ -00003050: 2020 7573 6520 7468 6973 2069 6620 796f use this if yo │ │ │ -00003060: 7520 7761 6e74 2074 6f20 6261 636b 7570 u want to backup │ │ │ -00003070: 2074 686f 7365 2066 696c 6520 7479 7065 those file type │ │ │ -00003080: 7320 6275 7420 796f 7572 2074 6172 6765 s but your targe │ │ │ -00003090: 740a 2020 2020 6669 6c65 206f 7220 7472 t. file or tr │ │ │ -000030a0: 616e 7370 6f72 7420 2865 672e 2073 7368 ansport (eg. ssh │ │ │ -000030b0: 6673 206f 7220 6e6f 6e20 676e 752d 6370 fs or non gnu-cp │ │ │ -000030c0: 2920 7379 7374 656d 2064 6f65 7320 6e6f ) system does no │ │ │ -000030d0: 7420 7375 7070 6f72 740a 2020 2020 7468 t support. th │ │ │ -000030e0: 6f73 6520 7479 7065 7320 6f66 2066 696c ose types of fil │ │ │ -000030f0: 6573 0a20 2020 2020 2020 2053 202d 2066 es. S - f │ │ │ -00003100: 696c 6520 6973 2061 2073 6f63 6b65 740a ile is a socket. │ │ │ -00003110: 2020 2020 2020 2020 6220 2d20 6669 6c65 b - file │ │ │ -00003120: 2069 7320 6120 626c 6f63 6b20 7370 6563 is a block spec │ │ │ -00003130: 6961 6c20 6669 6c65 0a20 2020 2020 2020 ial file. │ │ │ -00003140: 2063 202d 2066 696c 6520 6973 2061 2063 c - file is a c │ │ │ -00003150: 6861 7261 6374 6572 2073 7065 6369 616c haracter special │ │ │ -00003160: 2066 696c 650a 2020 2020 2020 2020 7020 file. p │ │ │ -00003170: 2d20 6669 6c65 2069 7320 6120 6e61 6d65 - file is a name │ │ │ -00003180: 6420 7069 7065 0a20 2020 2079 6f75 2061 d pipe. you a │ │ │ -00003190: 6c73 6f20 6861 7665 2074 6f20 7365 7420 lso have to set │ │ │ -000031a0: 2d2d 7370 6563 6961 6c54 7970 6541 7263 --specialTypeArc │ │ │ -000031b0: 6869 7665 7220 7768 656e 2075 7369 6e67 hiver when using │ │ │ -000031c0: 2074 6869 7320 6f70 7469 6f6e 0a0a 3d69 this option..=i │ │ │ -000031d0: 7465 6d20 423c 2d2d 7370 6563 6961 6c54 tem B<--specialT │ │ │ -000031e0: 7970 6541 7263 6869 7665 723e 0a0a 2020 ypeArchiver>.. │ │ │ -000031f0: 2020 706f 7373 6962 6c65 2076 616c 7565 possible value │ │ │ -00003200: 7320 6172 6520 2763 7069 6f27 206f 7220 s are 'cpio' or │ │ │ -00003210: 2774 6172 272e 2064 6566 6175 6c74 2069 'tar'. default i │ │ │ -00003220: 7320 2763 7069 6f27 0a20 2020 2074 6172 s 'cpio'. tar │ │ │ -00003230: 2069 7320 6e6f 7420 6162 6c65 2074 6f20 is not able to │ │ │ -00003240: 6172 6368 6976 6520 736f 636b 6574 730a archive sockets. │ │ │ -00003250: 2020 2020 6370 696f 2069 7320 6e6f 7420 cpio is not │ │ │ -00003260: 7061 7274 206f 6620 7468 6520 6163 7475 part of the actu │ │ │ -00003270: 616c 2070 6f73 6978 2073 7461 6e64 6172 al posix standar │ │ │ -00003280: 6420 616e 7920 6d6f 7265 0a0a 3d69 7465 d any more..=ite │ │ │ -00003290: 6d20 423c 2d2d 6370 4973 476e 753e 0a0a m B<--cpIsGnu>.. │ │ │ -000032a0: 2020 2020 4163 7469 7661 7465 2074 6869 Activate thi │ │ │ -000032b0: 7320 6f70 7469 6f6e 2069 6620 796f 7572 s option if your │ │ │ -000032c0: 2073 7973 7465 6d73 2063 7020 6973 2061 systems cp is a │ │ │ -000032d0: 2066 756c 6c2d 6665 6174 7572 6564 0a20 full-featured. │ │ │ -000032e0: 2020 2047 4e55 2076 6572 7369 6f6e 2e20 GNU version. │ │ │ -000032f0: 496e 2074 6869 7320 6361 7365 2079 6f75 In this case you │ │ │ -00003300: 2077 696c 6c20 6265 2061 626c 6520 746f will be able to │ │ │ -00003310: 2061 6c73 6f20 6261 636b 7570 0a20 2020 also backup. │ │ │ -00003320: 2073 6576 6572 616c 2073 7065 6369 616c several special │ │ │ -00003330: 2066 696c 6520 7479 7065 7320 6c69 6b65 file types like │ │ │ -00003340: 2073 6f63 6b65 7473 2e0a 0a3d 6974 656d sockets...=item │ │ │ -00003350: 2042 3c2d 2d6c 696e 6b53 796d 6c69 6e6b B<--linkSymlink │ │ │ -00003360: 733e 0a0a 2020 2020 6861 7264 206c 696e s>.. hard lin │ │ │ -00003370: 6b20 6964 656e 7469 6361 6c20 7379 6d6c k identical syml │ │ │ -00003380: 696e 6b73 0a0a 3d69 7465 6d20 423c 2d2d inks..=item B<-- │ │ │ -00003390: 7072 6563 6f6d 6d61 6e64 3e0a 0a20 2020 precommand>.. │ │ │ -000033a0: 2065 7865 6320 6a6f 6220 6265 666f 7265 exec job before │ │ │ -000033b0: 2073 7461 7274 696e 6720 7468 6520 6261 starting the ba │ │ │ -000033c0: 636b 7570 2c20 6368 6563 6b73 206c 6f63 ckup, checks loc │ │ │ -000033d0: 6b46 696c 6520 282d 4c29 0a20 2020 2062 kFile (-L). b │ │ │ -000033e0: 6566 6f72 6520 7374 6172 7469 6e67 2028 efore starting ( │ │ │ -000033f0: 652e 672e 2063 616e 2062 6520 7573 6564 e.g. can be used │ │ │ -00003400: 2066 6f72 2072 7379 6e63 290a 2020 2020 for rsync). │ │ │ -00003410: 7374 6f70 7320 6578 6563 7574 696f 6e20 stops execution │ │ │ -00003420: 6966 206a 6f62 2072 6574 7572 6e73 2065 if job returns e │ │ │ -00003430: 7869 7420 7374 6174 7573 2021 3d20 300a xit status != 0. │ │ │ -00003440: 2020 2020 5468 6973 2070 6172 616d 6574 This paramet │ │ │ -00003450: 6572 2069 7320 7061 7273 6564 206c 696b er is parsed lik │ │ │ -00003460: 6520 6120 6c69 6e65 2069 6e20 7468 6520 e a line in the │ │ │ -00003470: 636f 6e66 6967 7572 6174 696f 6e0a 2020 configuration. │ │ │ -00003480: 2020 6669 6c65 2061 6e64 206e 6f72 6d61 file and norma │ │ │ -00003490: 6c6c 7920 6861 7320 746f 2062 6520 7175 lly has to be qu │ │ │ -000034a0: 6f74 6564 2e0a 0a3d 6974 656d 2042 3c2d oted...=item B<- │ │ │ -000034b0: 2d70 6f73 7463 6f6d 6d61 6e64 3e0a 0a20 -postcommand>.. │ │ │ -000034c0: 2020 2065 7865 6320 6a6f 6220 6166 7465 exec job afte │ │ │ -000034d0: 7220 6669 6e69 7368 696e 6720 7468 6520 r finishing the │ │ │ -000034e0: 6261 636b 7570 2c20 6275 7420 6265 666f backup, but befo │ │ │ -000034f0: 7265 2065 7261 7369 6e67 206f 660a 2020 re erasing of. │ │ │ -00003500: 2020 6f6c 6420 6261 636b 7570 7320 2072 old backups r │ │ │ -00003510: 6570 6f72 7473 2069 6620 6a6f 6220 7265 eports if job re │ │ │ -00003520: 7475 726e 7320 6578 6974 2073 7461 7475 turns exit statu │ │ │ -00003530: 7320 213d 2030 0a20 2020 2054 6869 7320 s != 0. This │ │ │ -00003540: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par │ │ │ -00003550: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line │ │ │ -00003560: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura │ │ │ -00003570: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an │ │ │ -00003580: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t │ │ │ -00003590: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i │ │ │ -000035a0: 7465 6d20 423c 2d2d 666f 6c6c 6f77 4c69 tem B<--followLi │ │ │ -000035b0: 6e6b 733e 0a0a 2020 2020 666f 6c6c 6f77 nks>.. follow │ │ │ -000035c0: 2073 796d 626f 6c69 6320 6c69 6e6b 7320 symbolic links │ │ │ -000035d0: 6c69 6b65 2064 6972 6563 746f 7269 6573 like directories │ │ │ -000035e0: 2075 7020 746f 2064 6570 7468 0a20 2020 up to depth. │ │ │ -000035f0: 2064 6566 6175 6c74 203d 2030 202d 3e20 default = 0 -> │ │ │ -00003600: 646f 206e 6f74 2066 6f6c 6c6f 7720 6c69 do not follow li │ │ │ -00003610: 6e6b 730a 0a3d 6974 656d 2042 3c2d 2d73 nks..=item B<--s │ │ │ -00003620: 7461 7949 6e46 696c 6553 7973 7465 6d3e tayInFileSystem> │ │ │ -00003630: 0a0a 2020 2020 6f6e 6c79 2073 746f 7265 .. only store │ │ │ -00003640: 2074 6865 2063 6f6e 7465 6e74 7320 6f66 the contents of │ │ │ -00003650: 2066 696c 6520 7379 7374 656d 7320 6e61 file systems na │ │ │ -00003660: 6d65 6420 6279 0a20 2020 202d 2d73 6f75 med by. --sou │ │ │ -00003670: 7263 6544 6972 2061 6e64 2073 796d 6c69 rceDir and symli │ │ │ -00003680: 6e6b 6564 2076 6961 202d 2d66 6f6c 6c6f nked via --follo │ │ │ -00003690: 774c 696e 6b73 0a0a 3d69 7465 6d20 423c wLinks..=item B< │ │ │ -000036a0: 2d2d 6869 6768 4c61 7465 6e63 793e 0a0a --highLatency>.. │ │ │ -000036b0: 2020 2020 7573 6520 7468 6973 2066 6f72 use this for │ │ │ -000036c0: 2061 2076 6572 7920 6869 6768 206c 6174 a very high lat │ │ │ -000036d0: 656e 6379 206c 696e 6520 2865 672e 2076 ency line (eg. v │ │ │ -000036e0: 706e 206f 7665 720a 2020 2020 7468 6520 pn over. the │ │ │ -000036f0: 696e 7465 726e 6574 2920 666f 7220 6265 internet) for be │ │ │ -00003700: 7474 6572 2070 6172 616c 6c65 6c69 7a61 tter paralleliza │ │ │ -00003710: 7469 6f6e 0a0a 3d69 7465 6d20 423c 2d2d tion..=item B<-- │ │ │ -00003720: 6967 6e6f 7265 5065 726d 733e 0a0a 2020 ignorePerms>.. │ │ │ -00003730: 2020 4966 2074 6869 7320 6f70 7469 6f6e If this option │ │ │ -00003740: 2069 7320 7365 6c65 6374 6564 2c20 6669 is selected, fi │ │ │ -00003750: 6c65 7320 7769 6c6c 206e 6f74 206e 6563 les will not nec │ │ │ -00003760: 6573 7361 7269 6c79 2068 6176 650a 2020 essarily have. │ │ │ -00003770: 2020 7468 6520 7361 6d65 2070 6572 6d69 the same permi │ │ │ -00003780: 7373 696f 6e73 2061 6e64 206f 776e 6572 ssions and owner │ │ │ -00003790: 2061 7320 7468 6520 6f72 6967 696e 616c as the original │ │ │ -000037a0: 732e 2054 6869 730a 2020 2020 7370 6565 s. This. spee │ │ │ -000037b0: 6473 2075 7020 6261 636b 7570 7320 6f6e ds up backups on │ │ │ -000037c0: 206e 6574 776f 726b 2064 7269 7665 7320 network drives │ │ │ -000037d0: 6120 6c6f 742e 2052 6563 6f76 6572 7920 a lot. Recovery │ │ │ -000037e0: 7769 7468 0a20 2020 2073 746f 7265 4261 with. storeBa │ │ │ -000037f0: 636b 7570 5265 636f 7665 722e 706c 2077 ckupRecover.pl w │ │ │ -00003800: 696c 6c20 7265 7374 6f72 6520 7468 656d ill restore them │ │ │ -00003810: 2063 6f72 7265 6374 6c79 2e0a 0a3d 6974 correctly...=it │ │ │ -00003820: 656d 2042 3c2d 2d6c 6174 654c 696e 6b73 em B<--lateLinks │ │ │ -00003830: 3e0a 0a20 2020 2064 6f20 2a6e 6f74 2a20 >.. do *not* │ │ │ -00003840: 7772 6974 6520 6861 7264 206c 696e 6b73 write hard links │ │ │ -00003850: 2074 6f20 6578 6973 7469 6e67 2066 696c to existing fil │ │ │ -00003860: 6573 2069 6e20 7468 6520 6261 636b 7570 es in the backup │ │ │ -00003870: 0a20 2020 2064 7572 696e 6720 7468 6520 . during the │ │ │ -00003880: 6261 636b 7570 0a20 2020 2079 6f75 2068 backup. you h │ │ │ -00003890: 6176 6520 746f 2063 616c 6c20 7468 6520 ave to call the │ │ │ -000038a0: 7072 6f67 7261 6d20 7374 6f72 6542 6163 program storeBac │ │ │ -000038b0: 6b75 7057 7269 7465 4c61 7465 4c69 6e6b kupWriteLateLink │ │ │ -000038c0: 2e70 6c0a 2020 2020 6c61 7465 7220 6f6e .pl. later on │ │ │ -000038d0: 2079 6f75 7220 7365 7276 6572 2069 6620 your server if │ │ │ -000038e0: 796f 7520 7365 7420 7468 6973 2066 6c61 you set this fla │ │ │ -000038f0: 6720 746f 2027 7965 7327 0a20 2020 2079 g to 'yes'. y │ │ │ -00003900: 6f75 2068 6176 6520 746f 2072 756e 2073 ou have to run s │ │ │ -00003910: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate │ │ │ -00003920: 4261 636b 7570 2e70 6c20 6c61 7465 7220 Backup.pl later │ │ │ -00003930: 2d20 7365 650a 2020 2020 6465 7363 7269 - see. descri │ │ │ -00003940: 7074 696f 6e20 666f 7220 7468 6174 2070 ption for that p │ │ │ -00003950: 726f 6772 616d 0a0a 3d69 7465 6d20 423c rogram..=item B< │ │ │ -00003960: 2d2d 6c61 7465 436f 6d70 7265 7373 3e0a --lateCompress>. │ │ │ -00003970: 0a20 2020 206f 6e6c 7920 696e 2063 6f6d . only in com │ │ │ -00003980: 6269 6e61 7469 6f6e 2077 6974 6820 2d2d bination with -- │ │ │ -00003990: 6c61 7465 4c69 6e6b 730a 2020 2020 636f lateLinks. co │ │ │ -000039a0: 6d70 7265 7373 696f 6e20 6672 6f6d 2066 mpression from f │ │ │ -000039b0: 696c 6573 203e 3d20 6d69 6e43 6f6d 7072 iles >= minCompr │ │ │ -000039c0: 6573 7353 697a 6520 7769 6c6c 2062 6520 essSize will be │ │ │ -000039d0: 646f 6e65 0a20 2020 206c 6174 6572 2c20 done. later, │ │ │ -000039e0: 7468 6520 6669 6c65 2069 7320 2874 656d the file is (tem │ │ │ -000039f0: 706f 7261 7269 6c79 2920 636f 7069 6564 porarily) copied │ │ │ -00003a00: 2069 6e74 6f20 7468 6520 6261 636b 7570 into the backup │ │ │ -00003a10: 0a0a 3d69 7465 6d20 423c 2d2d 6175 746f ..=item B<--auto │ │ │ -00003a20: 7265 7061 6972 3e2c 2042 3c2d 613e 0a0a repair>, B<-a>.. │ │ │ -00003a30: 2020 2020 7265 7061 6972 2073 696d 706c repair simpl │ │ │ -00003a40: 6520 696e 636f 6e73 6973 7465 6e63 6965 e inconsistencie │ │ │ -00003a50: 7320 2866 726f 6d20 6c61 7465 4c69 6e6b s (from lateLink │ │ │ -00003a60: 7329 2061 7574 6f6d 6174 6963 616c 6c79 s) automatically │ │ │ -00003a70: 0a20 2020 2077 6974 686f 7574 2072 6571 . without req │ │ │ -00003a80: 7565 7374 696e 6720 7468 6520 6163 7469 uesting the acti │ │ │ -00003a90: 6f6e 0a0a 3d69 7465 6d20 423c 2d2d 6368 on..=item B<--ch │ │ │ -00003aa0: 6563 6b42 6c6f 636b 7353 7566 6669 783e eckBlocksSuffix> │ │ │ -00003ab0: 0a0a 2020 2020 4669 6c65 7320 7769 7468 .. Files with │ │ │ -00003ac0: 2073 7566 6669 7820 666f 7220 7768 6963 suffix for whic │ │ │ -00003ad0: 6820 7374 6f72 6542 6163 6b75 7020 7769 h storeBackup wi │ │ │ -00003ae0: 6c6c 206d 616b 6520 616e 206d 6435 0a20 ll make an md5. │ │ │ -00003af0: 2020 2063 6865 636b 206f 6e20 626c 6f63 check on bloc │ │ │ -00003b00: 6b73 206f 6620 7468 6174 2066 696c 652e ks of that file. │ │ │ -00003b10: 2045 7865 6375 7465 6420 6166 7465 720a Executed after. │ │ │ -00003b20: 2020 2020 2d2d 6368 6563 6b42 6c6f 636b --checkBlock │ │ │ -00003b30: 7352 756c 6528 6e29 0a20 2020 2054 6869 sRule(n). Thi │ │ │ -00003b40: 7320 6f70 7469 6f6e 2063 616e 2062 6520 s option can be │ │ │ -00003b50: 7265 7065 6174 6564 206d 756c 7469 706c repeated multipl │ │ │ -00003b60: 6520 7469 6d65 730a 0a3d 6974 656d 2042 e times..=item B │ │ │ -00003b70: 3c2d 2d63 6865 636b 426c 6f63 6b73 4d69 <--checkBlocksMi │ │ │ -00003b80: 6e53 697a 653e 0a0a 2020 2020 4f6e 6c79 nSize>.. Only │ │ │ -00003b90: 2063 6865 636b 2066 696c 6573 2073 7065 check files spe │ │ │ -00003ba0: 6369 6669 6564 2069 6e20 2d2d 6368 6563 cified in --chec │ │ │ -00003bb0: 6b42 6c6f 636b 7353 7566 6669 7820 6966 kBlocksSuffix if │ │ │ -00003bc0: 2074 6865 7265 0a20 2020 2066 696c 6520 there. file │ │ │ -00003bd0: 7369 7a65 2069 7320 6174 206c 6561 7374 size is at least │ │ │ -00003be0: 2074 6869 7320 7661 6c75 652c 2064 6566 this value, def │ │ │ -00003bf0: 6175 6c74 2069 7320 3130 304d 0a0a 3d69 ault is 100M..=i │ │ │ -00003c00: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo │ │ │ -00003c10: 636b 7342 533e 0a0a 2020 2020 426c 6f63 cksBS>.. Bloc │ │ │ -00003c20: 6b20 7369 7a65 2066 6f72 2066 696c 6573 k size for files │ │ │ -00003c30: 2073 7065 6369 6669 6564 2077 6974 6820 specified with │ │ │ -00003c40: 2d2d 6368 6563 6b42 6c6f 636b 7353 7566 --checkBlocksSuf │ │ │ -00003c50: 6669 780a 2020 2020 4465 6661 756c 7420 fix. Default │ │ │ -00003c60: 6973 2024 6368 6563 6b42 6c6f 636b 7342 is $checkBlocksB │ │ │ -00003c70: 5364 6566 6175 6c74 2028 3120 6d65 6761 Sdefault (1 mega │ │ │ -00003c80: 6279 7465 290a 0a3d 6974 656d 2042 3c2d byte)..=item B<- │ │ │ -00003c90: 2d63 6865 636b 426c 6f63 6b73 436f 6d70 -checkBlocksComp │ │ │ -00003ca0: 723e 0a0a 2020 2020 6966 2073 6574 2c20 r>.. if set, │ │ │ -00003cb0: 7468 6520 626c 6f63 6b73 2067 656e 6572 the blocks gener │ │ │ -00003cc0: 6174 6564 2064 7565 2074 6f20 6368 6563 ated due to chec │ │ │ -00003cd0: 6b42 6c6f 636b 7353 7566 6669 780a 2020 kBlocksSuffix. │ │ │ -00003ce0: 2020 6172 6520 636f 6d70 7265 7373 6564 are compressed │ │ │ -00003cf0: 2c20 6465 6661 756c 7420 6973 2027 6e6f , default is 'no │ │ │ -00003d00: 270a 2020 2020 6966 2073 6574 2074 6f20 '. if set to │ │ │ -00003d10: 2763 6865 636b 272c 2074 7269 6573 2074 'check', tries t │ │ │ -00003d20: 6f20 6573 7469 6d61 7465 2069 6620 636f o estimate if co │ │ │ -00003d30: 6d70 7265 7373 696f 6e20 6865 6c70 730a mpression helps. │ │ │ -00003d40: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check │ │ │ -00003d50: 426c 6f63 6b73 5061 7261 6c6c 656c 3e0a BlocksParallel>. │ │ │ -00003d60: 0a20 2020 2052 6561 6420 6669 6c65 7320 . Read files │ │ │ -00003d70: 7370 6563 6966 6965 6420 6865 7265 2069 specified here i │ │ │ -00003d80: 6e20 7061 7261 6c6c 656c 2074 6f20 226e n parallel to "n │ │ │ -00003d90: 6f72 6d61 6c22 206f 6e65 732e 0a20 2020 ormal" ones.. │ │ │ -00003da0: 2054 6869 7320 6f6e 6c79 206d 616b 6573 This only makes │ │ │ -00003db0: 2073 656e 7365 2069 6620 7468 6579 2061 sense if they a │ │ │ -00003dc0: 7265 206f 6e20 6120 6469 6666 6572 656e re on a differen │ │ │ -00003dd0: 7420 6469 736b 2e0a 2020 2020 4465 6661 t disk.. Defa │ │ │ -00003de0: 756c 7420 7661 6c75 6520 6973 2027 6e6f ult value is 'no │ │ │ -00003df0: 270a 0a3d 6974 656d 2042 3c2d 2d71 7565 '..=item B<--que │ │ │ -00003e00: 7565 426c 6f63 6b3e 0a0a 2020 2020 6c65 ueBlock>.. le │ │ │ -00003e10: 6e67 7468 206f 6620 7175 6575 6520 746f ngth of queue to │ │ │ -00003e20: 2073 746f 7265 2066 696c 6573 2062 6566 store files bef │ │ │ -00003e30: 6f72 6520 626c 6f63 6b20 6368 6563 6b69 ore block checki │ │ │ -00003e40: 6e67 2c0a 2020 2020 6465 6661 756c 7420 ng,. default │ │ │ -00003e50: 3d20 2471 7565 7565 426c 6f63 6b0a 0a3d = $queueBlock..= │ │ │ -00003e60: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl │ │ │ -00003e70: 6f63 6b73 5275 6c65 303e 0a0a 2020 2020 ocksRule0>.. │ │ │ -00003e80: 4669 6c65 7320 666f 7220 7768 6963 6820 Files for which │ │ │ -00003e90: 7374 6f72 6542 6163 6b75 7020 7769 6c6c storeBackup will │ │ │ -00003ea0: 206d 616b 6520 616e 206d 6435 2063 6865 make an md5 che │ │ │ -00003eb0: 636b 0a20 2020 2064 6570 656e 6469 6e67 ck. depending │ │ │ -00003ec0: 206f 6e20 626c 6f63 6b73 206f 6620 7468 on blocks of th │ │ │ -00003ed0: 6174 2066 696c 652e 0a0a 3d69 7465 6d20 at file...=item │ │ │ -00003ee0: 423c 2d2d 6368 6563 6b42 6c6f 636b 7342 B<--checkBlocksB │ │ │ -00003ef0: 5330 3e0a 0a20 2020 2042 6c6f 636b 2073 S0>.. Block s │ │ │ -00003f00: 697a 6520 666f 7220 6f70 7469 6f6e 2063 ize for option c │ │ │ -00003f10: 6865 636b 426c 6f63 6b73 5275 6c65 0a20 heckBlocksRule. │ │ │ -00003f20: 2020 2044 6566 6175 6c74 2069 7320 2463 Default is $c │ │ │ -00003f30: 6865 636b 426c 6f63 6b73 4253 6465 6661 heckBlocksBSdefa │ │ │ -00003f40: 756c 7420 2831 206d 6567 6162 7974 6529 ult (1 megabyte) │ │ │ -00003f50: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ -00003f60: 6b42 6c6f 636b 7343 6f6d 7072 303e 0a0a kBlocksCompr0>.. │ │ │ -00003f70: 2020 2020 6966 2073 6574 2c20 7468 6520 if set, the │ │ │ -00003f80: 626c 6f63 6b73 2067 656e 6572 6174 6564 blocks generated │ │ │ -00003f90: 2064 7565 2074 6f20 7468 6973 2072 756c due to this rul │ │ │ -00003fa0: 6520 6172 650a 2020 2020 636f 6d70 7265 e are. compre │ │ │ -00003fb0: 7373 6564 0a0a 3d69 7465 6d20 423c 2d2d ssed..=item B<-- │ │ │ -00003fc0: 6368 6563 6b42 6c6f 636b 7352 6561 6430 checkBlocksRead0 │ │ │ -00003fd0: 3e0a 0a20 2020 2046 696c 7465 7220 666f >.. Filter fo │ │ │ -00003fe0: 7220 7265 6164 696e 6720 7468 6520 6669 r reading the fi │ │ │ -00003ff0: 6c65 2074 6f20 7472 6561 7420 6173 2061 le to treat as a │ │ │ -00004000: 2062 6c6f 636b 6564 2066 696c 650a 2020 blocked file. │ │ │ -00004010: 2020 6567 2e20 2767 7a69 7020 2d64 2720 eg. 'gzip -d' │ │ │ -00004020: 6966 2074 6865 2066 696c 6520 6973 2063 if the file is c │ │ │ -00004030: 6f6d 7072 6573 7365 642e 2044 6566 6175 ompressed. Defau │ │ │ -00004040: 6c74 2069 7320 6e6f 0a20 2020 2072 6561 lt is no. rea │ │ │ -00004050: 6420 6669 6c74 6572 2e0a 2020 2020 5468 d filter.. Th │ │ │ -00004060: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is │ │ │ -00004070: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the │ │ │ -00004080: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. │ │ │ -00004090: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi │ │ │ -000040a0: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally │ │ │ -000040b0: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted │ │ │ -000040c0: 2c0a 2020 2020 6567 2e20 2767 7a69 7020 ,. eg. 'gzip │ │ │ -000040d0: 2d39 270a 0a3d 6974 656d 2042 3c2d 2d63 -9'..=item B<--c │ │ │ -000040e0: 6865 636b 426c 6f63 6b73 5061 7261 6c6c heckBlocksParall │ │ │ -000040f0: 656c 303e 0a0a 2020 2020 5265 6164 2066 el0>.. Read f │ │ │ -00004100: 696c 6573 2073 7065 6369 6669 6564 2068 iles specified h │ │ │ -00004110: 6572 6520 696e 2070 6172 616c 6c65 6c20 ere in parallel │ │ │ -00004120: 746f 2022 6e6f 726d 616c 2220 6f6e 6573 to "normal" ones │ │ │ -00004130: 2e0a 2020 2020 5468 6973 206f 6e6c 7920 .. This only │ │ │ -00004140: 6d61 6b65 7320 7365 6e73 6520 6966 2074 makes sense if t │ │ │ -00004150: 6865 7920 6172 6520 6f6e 2061 2064 6966 hey are on a dif │ │ │ -00004160: 6665 7265 6e74 2064 6973 6b2e 0a20 2020 ferent disk.. │ │ │ -00004170: 2044 6566 6175 6c74 2076 616c 7565 2069 Default value i │ │ │ -00004180: 7320 276e 6f27 0a0a 3d69 7465 6d20 423c s 'no'..=item B< │ │ │ -00004190: 2d2d 6368 6563 6b42 6c6f 636b 7352 756c --checkBlocksRul │ │ │ -000041a0: 6531 3e0a 0a3d 6974 656d 2042 3c2d 2d63 e1>..=item B<--c │ │ │ -000041b0: 6865 636b 426c 6f63 6b73 4253 313e 0a0a heckBlocksBS1>.. │ │ │ -000041c0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB │ │ │ -000041d0: 6c6f 636b 7343 6f6d 7072 313e 0a0a 3d69 locksCompr1>..=i │ │ │ -000041e0: 7465 6d20 423c 2d2d 6368 6563 6b42 6c6f tem B<--checkBlo │ │ │ -000041f0: 636b 7352 6561 6431 3e0a 0a3d 6974 656d cksRead1>..=item │ │ │ -00004200: 2042 3c2d 2d63 6865 636b 426c 6f63 6b73 B<--checkBlocks │ │ │ -00004210: 5061 7261 6c6c 656c 313e 0a0a 3d69 7465 Parallel1>..=ite │ │ │ -00004220: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock │ │ │ -00004230: 7352 756c 6532 3e0a 0a3d 6974 656d 2042 sRule2>..=item B │ │ │ -00004240: 3c2d 2d63 6865 636b 426c 6f63 6b73 4253 <--checkBlocksBS │ │ │ -00004250: 323e 0a0a 3d69 7465 6d20 423c 2d2d 6368 2>..=item B<--ch │ │ │ -00004260: 6563 6b42 6c6f 636b 7343 6f6d 7072 323e eckBlocksCompr2> │ │ │ -00004270: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ -00004280: 6b42 6c6f 636b 7352 6561 6432 3e0a 0a3d kBlocksRead2>..= │ │ │ -00004290: 6974 656d 2042 3c2d 2d63 6865 636b 426c item B<--checkBl │ │ │ -000042a0: 6f63 6b73 5061 7261 6c6c 656c 323e 0a0a ocksParallel2>.. │ │ │ -000042b0: 3d69 7465 6d20 423c 2d2d 6368 6563 6b42 =item B<--checkB │ │ │ -000042c0: 6c6f 636b 7352 756c 6533 3e0a 0a3d 6974 locksRule3>..=it │ │ │ -000042d0: 656d 2042 3c2d 2d63 6865 636b 426c 6f63 em B<--checkBloc │ │ │ -000042e0: 6b73 4253 333e 0a0a 3d69 7465 6d20 423c ksBS3>..=item B< │ │ │ -000042f0: 2d2d 6368 6563 6b42 6c6f 636b 7343 6f6d --checkBlocksCom │ │ │ -00004300: 7072 333e 0a0a 3d69 7465 6d20 423c 2d2d pr3>..=item B<-- │ │ │ -00004310: 6368 6563 6b42 6c6f 636b 7352 6561 6433 checkBlocksRead3 │ │ │ -00004320: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ -00004330: 636b 426c 6f63 6b73 5061 7261 6c6c 656c ckBlocksParallel │ │ │ -00004340: 333e 0a0a 3d69 7465 6d20 423c 2d2d 6368 3>..=item B<--ch │ │ │ -00004350: 6563 6b42 6c6f 636b 7352 756c 6534 3e0a eckBlocksRule4>. │ │ │ -00004360: 0a3d 6974 656d 2042 3c2d 2d63 6865 636b .=item B<--check │ │ │ -00004370: 426c 6f63 6b73 4253 343e 0a0a 3d69 7465 BlocksBS4>..=ite │ │ │ -00004380: 6d20 423c 2d2d 6368 6563 6b42 6c6f 636b m B<--checkBlock │ │ │ -00004390: 7343 6f6d 7072 343e 0a0a 3d69 7465 6d20 sCompr4>..=item │ │ │ -000043a0: 423c 2d2d 6368 6563 6b42 6c6f 636b 7352 B<--checkBlocksR │ │ │ -000043b0: 6561 6434 3e0a 0a3d 6974 656d 2042 3c2d ead4>..=item B<- │ │ │ -000043c0: 2d63 6865 636b 426c 6f63 6b73 5061 7261 -checkBlocksPara │ │ │ -000043d0: 6c6c 656c 343e 0a0a 3d69 7465 6d20 423c llel4>..=item B< │ │ │ -000043e0: 2d2d 6368 6563 6b44 6576 6963 6573 303e --checkDevices0> │ │ │ -000043f0: 0a0a 2020 2020 4c69 7374 206f 6620 6465 .. List of de │ │ │ -00004400: 7669 6365 7320 666f 7220 6d64 3520 636b vices for md5 ck │ │ │ -00004410: 6563 6b20 6465 7065 6e64 696e 6720 6f6e eck depending on │ │ │ -00004420: 2062 6c6f 636b 7320 6f66 2074 6865 7365 blocks of these │ │ │ -00004430: 0a20 2020 2064 6576 6963 6573 2028 6567 . devices (eg │ │ │ -00004440: 2e20 2f64 6576 2f73 6462 206f 7220 2f64 . /dev/sdb or /d │ │ │ -00004450: 6576 2f73 6462 3129 0a0a 3d69 7465 6d20 ev/sdb1)..=item │ │ │ -00004460: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices │ │ │ -00004470: 4469 7230 3e0a 0a20 2020 2044 6972 6563 Dir0>.. Direc │ │ │ -00004480: 746f 7279 2077 6865 7265 2074 6f20 7374 tory where to st │ │ │ -00004490: 6f72 6520 7468 6520 6261 636b 7570 206f ore the backup o │ │ │ -000044a0: 6620 7468 6520 6465 7669 6365 0a0a 3d69 f the device..=i │ │ │ -000044b0: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev │ │ │ -000044c0: 6963 6573 4253 303e 0a0a 2020 2020 426c icesBS0>.. Bl │ │ │ -000044d0: 6f63 6b20 7369 7a65 206f 6620 6f70 7469 ock size of opti │ │ │ -000044e0: 6f6e 2063 6865 636b 4465 7669 6365 7330 on checkDevices0 │ │ │ -000044f0: 2c0a 2020 2020 6465 6661 756c 7420 6973 ,. default is │ │ │ -00004500: 2031 4d20 2831 206d 6567 6162 7974 6529 1M (1 megabyte) │ │ │ -00004510: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ -00004520: 6b44 6576 6963 6573 436f 6d70 7230 3e0a kDevicesCompr0>. │ │ │ -00004530: 0a20 2020 2043 6f6d 7072 6573 7320 626c . Compress bl │ │ │ -00004540: 6f63 6b73 2072 6573 756c 7469 6e67 2066 ocks resulting f │ │ │ -00004550: 726f 6d20 6f70 7469 6f6e 2063 6865 636b rom option check │ │ │ -00004560: 4465 7669 6365 7330 0a20 2020 2070 6f73 Devices0. pos │ │ │ -00004570: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are │ │ │ -00004580: 2027 6368 6563 6b27 2c20 2779 6573 2720 'check', 'yes' │ │ │ -00004590: 6f72 2027 6e6f 272c 2064 6566 6175 6c74 or 'no', default │ │ │ -000045a0: 2069 7320 276e 6f27 0a0a 3d69 7465 6d20 is 'no'..=item │ │ │ -000045b0: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices │ │ │ -000045c0: 5061 7261 6c6c 656c 303e 0a0a 2020 2020 Parallel0>.. │ │ │ -000045d0: 5265 6164 2064 6576 6963 6573 2073 7065 Read devices spe │ │ │ -000045e0: 6369 6669 6564 2069 6e20 7061 7261 6c6c cified in parall │ │ │ -000045f0: 656c 2074 6f20 7468 6520 7265 7374 206f el to the rest o │ │ │ -00004600: 6620 7468 650a 2020 2020 6261 636b 7570 f the. backup │ │ │ -00004610: 2e20 5468 6973 206f 6e6c 7920 6d61 6b65 . This only make │ │ │ -00004620: 7320 7365 6e73 6520 6966 2074 6865 7920 s sense if they │ │ │ -00004630: 6172 6520 6f6e 2061 2064 6966 6665 7265 are on a differe │ │ │ -00004640: 6e74 0a20 2020 2064 6973 6b2e 2044 6566 nt. disk. Def │ │ │ -00004650: 6175 6c74 2076 616c 7565 2069 7320 276e ault value is 'n │ │ │ -00004660: 6f27 0a0a 3d69 7465 6d20 423c 2d2d 6368 o'..=item B<--ch │ │ │ -00004670: 6563 6b44 6576 6963 6573 313e 0a0a 3d69 eckDevices1>..=i │ │ │ -00004680: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev │ │ │ -00004690: 6963 6573 4469 7231 3e0a 0a3d 6974 656d icesDir1>..=item │ │ │ -000046a0: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice │ │ │ -000046b0: 7342 5331 3e0a 0a3d 6974 656d 2042 3c2d sBS1>..=item B<- │ │ │ -000046c0: 2d63 6865 636b 4465 7669 6365 7343 6f6d -checkDevicesCom │ │ │ -000046d0: 7072 313e 0a0a 3d69 7465 6d20 423c 2d2d pr1>..=item B<-- │ │ │ -000046e0: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara │ │ │ -000046f0: 6c6c 656c 313e 0a0a 3d69 7465 6d20 423c llel1>..=item B< │ │ │ -00004700: 2d2d 6368 6563 6b44 6576 6963 6573 323e --checkDevices2> │ │ │ -00004710: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ -00004720: 6b44 6576 6963 6573 4469 7232 3e0a 0a3d kDevicesDir2>..= │ │ │ -00004730: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe │ │ │ -00004740: 7669 6365 7342 5332 3e0a 0a3d 6974 656d vicesBS2>..=item │ │ │ -00004750: 2042 3c2d 2d63 6865 636b 4465 7669 6365 B<--checkDevice │ │ │ -00004760: 7343 6f6d 7072 323e 0a0a 3d69 7465 6d20 sCompr2>..=item │ │ │ -00004770: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices │ │ │ -00004780: 5061 7261 6c6c 656c 323e 0a0a 3d69 7465 Parallel2>..=ite │ │ │ -00004790: 6d20 423c 2d2d 6368 6563 6b44 6576 6963 m B<--checkDevic │ │ │ -000047a0: 6573 333e 0a0a 3d69 7465 6d20 423c 2d2d es3>..=item B<-- │ │ │ -000047b0: 6368 6563 6b44 6576 6963 6573 4469 7233 checkDevicesDir3 │ │ │ -000047c0: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ -000047d0: 636b 4465 7669 6365 7342 5333 3e0a 0a3d ckDevicesBS3>..= │ │ │ -000047e0: 6974 656d 2042 3c2d 2d63 6865 636b 4465 item B<--checkDe │ │ │ -000047f0: 7669 6365 7343 6f6d 7072 333e 0a0a 3d69 vicesCompr3>..=i │ │ │ -00004800: 7465 6d20 423c 2d2d 6368 6563 6b44 6576 tem B<--checkDev │ │ │ -00004810: 6963 6573 5061 7261 6c6c 656c 333e 0a0a icesParallel3>.. │ │ │ -00004820: 3d69 7465 6d20 423c 2d2d 6368 6563 6b44 =item B<--checkD │ │ │ -00004830: 6576 6963 6573 343e 0a0a 3d69 7465 6d20 evices4>..=item │ │ │ -00004840: 423c 2d2d 6368 6563 6b44 6576 6963 6573 B<--checkDevices │ │ │ -00004850: 4469 7234 3e0a 0a3d 6974 656d 2042 3c2d Dir4>..=item B<- │ │ │ -00004860: 2d63 6865 636b 4465 7669 6365 7342 5334 -checkDevicesBS4 │ │ │ -00004870: 3e0a 0a3d 6974 656d 2042 3c2d 2d63 6865 >..=item B<--che │ │ │ -00004880: 636b 4465 7669 6365 7343 6f6d 7072 343e ckDevicesCompr4> │ │ │ -00004890: 0a0a 3d69 7465 6d20 423c 2d2d 6368 6563 ..=item B<--chec │ │ │ -000048a0: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel │ │ │ -000048b0: 343e 0a0a 3d69 7465 6d20 423c 2d2d 7361 4>..=item B<--sa │ │ │ -000048c0: 7665 5241 4d3e 0a0a 2020 2020 7772 6974 veRAM>.. writ │ │ │ -000048d0: 6520 7465 6d70 6f72 6172 7920 6462 6d20 e temporary dbm │ │ │ -000048e0: 6669 6c65 7320 696e 202d 2d74 6d70 6469 files in --tmpdi │ │ │ -000048f0: 720a 2020 2020 7573 6520 7468 6973 2069 r. use this i │ │ │ -00004900: 6620 796f 7520 646f 206e 6f74 2068 6176 f you do not hav │ │ │ -00004910: 6520 656e 6f75 6768 2052 414d 0a0a 3d69 e enough RAM..=i │ │ │ -00004920: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress │ │ │ -00004930: 3e2c 2042 3c2d 633e 0a0a 2020 2020 636f >, B<-c>.. co │ │ │ -00004940: 6d70 7265 7373 2063 6f6d 6d61 6e64 2028 mpress command ( │ │ │ -00004950: 7769 7468 206f 7074 696f 6e73 292c 2064 with options), d │ │ │ -00004960: 6566 6175 6c74 2069 7320 3c62 7a69 7032 efault is . This param │ │ │ -00004980: 6574 6572 2069 7320 7061 7273 6564 206c eter is parsed l │ │ │ -00004990: 696b 6520 7468 6520 6c69 6e65 2069 6e20 ike the line in │ │ │ -000049a0: 7468 650a 2020 2020 636f 6e66 6967 7572 the. configur │ │ │ -000049b0: 6174 696f 6e20 6669 6c65 2061 6e64 206e ation file and n │ │ │ -000049c0: 6f72 6d61 6c6c 7920 6861 7320 746f 2062 ormally has to b │ │ │ -000049d0: 6520 7175 6f74 6564 2c0a 2020 2020 6567 e quoted,. eg │ │ │ -000049e0: 2e20 2767 7a69 7020 2d39 270a 0a3d 6974 . 'gzip -9'..=it │ │ │ -000049f0: 656d 2042 3c2d 2d75 6e63 6f6d 7072 6573 em B<--uncompres │ │ │ -00004a00: 733e 2c20 423c 2d75 3e0a 0a20 2020 2075 s>, B<-u>.. u │ │ │ -00004a10: 6e63 6f6d 7072 6573 7320 636f 6d6d 616e ncompress comman │ │ │ -00004a20: 6420 2877 6974 6820 6f70 7469 6f6e 7329 d (with options) │ │ │ -00004a30: 2c20 6465 6661 756c 7420 6973 2020 3c62 , default is . Thi │ │ │ -00004a50: 7320 7061 7261 6d65 7465 7220 6973 2070 s parameter is p │ │ │ -00004a60: 6172 7365 6420 6c69 6b65 2074 6865 206c arsed like the l │ │ │ -00004a70: 696e 6520 696e 2074 6865 0a20 2020 2063 ine in the. c │ │ │ -00004a80: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ -00004a90: 6520 616e 6420 6e6f 726d 616c 6c79 2068 e and normally h │ │ │ -00004aa0: 6173 2074 6f20 6265 2071 756f 7465 642c as to be quoted, │ │ │ -00004ab0: 2065 672e 0a20 2020 2027 677a 6970 202d eg.. 'gzip - │ │ │ -00004ac0: 6427 0a0a 3d69 7465 6d20 423c 2d2d 706f d'..=item B<--po │ │ │ -00004ad0: 7374 6669 783e 2c20 423c 2d70 3e0a 0a20 stfix>, B<-p>.. │ │ │ -00004ae0: 2020 2070 6f73 7466 6978 2074 6f20 6164 postfix to ad │ │ │ -00004af0: 6420 6166 7465 7220 636f 6d70 7265 7373 d after compress │ │ │ -00004b00: 696f 6e2c 2064 6566 6175 6c74 2069 7320 ion, default is │ │ │ -00004b10: 3c2e 627a 323e 0a0a 3d69 7465 6d20 423c <.bz2>..=item B< │ │ │ -00004b20: 2d2d 6578 6365 7074 5375 6666 6978 3e0a --exceptSuffix>. │ │ │ -00004b30: 0a20 2020 2064 6f20 6e6f 7420 636f 6d70 . do not comp │ │ │ -00004b40: 7265 7373 2066 696c 6573 2077 6974 6820 ress files with │ │ │ -00004b50: 7468 6520 666f 6c6c 6f77 696e 670a 2020 the following. │ │ │ -00004b60: 2020 7375 6666 6978 2028 7570 7065 7263 suffix (upperc │ │ │ -00004b70: 6173 6520 696e 636c 7564 6564 293a 0a20 ase included):. │ │ │ -00004b80: 2020 2027 5c2e 7a69 7027 2c20 275c 2e62 '\.zip', '\.b │ │ │ -00004b90: 7a32 272c 2027 5c2e 677a 272c 2027 5c2e z2', '\.gz', '\. │ │ │ -00004ba0: 7467 7a27 2c20 275c 2e6a 7067 272c 2027 tgz', '\.jpg', ' │ │ │ -00004bb0: 5c2e 6769 6627 2c0a 2020 2020 275c 2e74 \.gif',. '\.t │ │ │ -00004bc0: 6966 663f 272c 2027 5c2e 6d70 6567 272c iff?', '\.mpeg', │ │ │ -00004bd0: 2027 5c2e 6d70 653f 6727 2c20 275c 2e6d '\.mpe?g', '\.m │ │ │ -00004be0: 7065 3f5b 3334 5d27 2c20 275c 2e6f 6767 pe?[34]', '\.ogg │ │ │ -00004bf0: 272c 0a20 2020 2027 5c2e 6770 6727 2c20 ',. '\.gpg', │ │ │ -00004c00: 275c 2e70 6e67 272c 2027 5c2e 6c7a 6d61 '\.png', '\.lzma │ │ │ -00004c10: 272c 2027 5c2e 787a 272c 2027 5c2e 6d6f ', '\.xz', '\.mo │ │ │ -00004c20: 7627 0a20 2020 2054 6869 7320 6f70 7469 v'. This opti │ │ │ -00004c30: 6f6e 2063 616e 2062 6520 7265 7065 6174 on can be repeat │ │ │ -00004c40: 6564 206d 756c 7469 706c 6520 7469 6d65 ed multiple time │ │ │ -00004c50: 730a 2020 2020 4966 2079 6f75 2064 6f20 s. If you do │ │ │ -00004c60: 6e6f 7420 7761 6e74 2061 6e79 2063 6f6d not want any com │ │ │ -00004c70: 7072 6573 7369 6f6e 2c20 7365 7420 7468 pression, set th │ │ │ -00004c80: 6973 206f 7074 696f 6e0a 2020 2020 746f is option. to │ │ │ -00004c90: 2027 2e2a 270a 0a3d 6974 656d 2042 3c2d '.*'..=item B<- │ │ │ -00004ca0: 2d61 6464 4578 6365 7074 5375 6666 6978 -addExceptSuffix │ │ │ -00004cb0: 3e0a 0a20 2020 206c 696b 6520 2d2d 6578 >.. like --ex │ │ │ -00004cc0: 6365 7074 5375 6666 6978 2c20 6275 7420 ceptSuffix, but │ │ │ -00004cd0: 646f 206e 6f74 2072 6570 6c61 6365 2064 do not replace d │ │ │ -00004ce0: 6566 6175 6c74 732c 2061 6464 0a0a 3d69 efaults, add..=i │ │ │ -00004cf0: 7465 6d20 423c 2d2d 636f 6d70 7265 7373 tem B<--compress │ │ │ -00004d00: 5375 6666 6978 3e0a 0a20 2020 204c 696b Suffix>.. Lik │ │ │ -00004d10: 6520 2d2d 6578 6365 7074 5375 6666 6978 e --exceptSuffix │ │ │ -00004d20: 2c20 6275 7420 6d65 6e74 696f 6e65 6420 , but mentioned │ │ │ -00004d30: 6669 6c65 7320 7769 6c6c 2062 650a 2020 files will be. │ │ │ -00004d40: 2020 636f 6d70 7265 7373 6564 2e20 4966 compressed. If │ │ │ -00004d50: 2079 6f75 2063 686f 7365 2074 6869 7320 you chose this │ │ │ -00004d60: 6f70 7469 6f6e 2c20 7468 656e 2066 696c option, then fil │ │ │ -00004d70: 6573 206e 6f74 0a20 2020 2061 6666 6563 es not. affec │ │ │ -00004d80: 7465 6420 6265 2065 7865 6370 7453 7566 ted be execptSuf │ │ │ -00004d90: 6669 782c 2061 6464 4578 6365 7074 5375 fix, addExceptSu │ │ │ -00004da0: 6666 6978 206f 7220 7468 6973 2053 7566 ffix or this Suf │ │ │ -00004db0: 6669 7865 730a 2020 2020 7769 6c6c 2062 fixes. will b │ │ │ -00004dc0: 6520 7261 7465 6420 6279 2074 6865 2072 e rated by the r │ │ │ -00004dd0: 756c 6520 6675 6e63 7469 6f6e 2043 4f4d ule function COM │ │ │ -00004de0: 5052 4553 5349 4f4e 5f43 4845 434b 2077 PRESSION_CHECK w │ │ │ -00004df0: 6574 6865 720a 2020 2020 746f 2063 6f6d ether. to com │ │ │ -00004e00: 7072 6573 7320 6f72 206e 6f74 0a0a 3d69 press or not..=i │ │ │ -00004e10: 7465 6d20 423c 2d2d 6d69 6e43 6f6d 7072 tem B<--minCompr │ │ │ -00004e20: 6573 7353 697a 653e 0a0a 2020 2020 4669 essSize>.. Fi │ │ │ -00004e30: 6c65 7320 736d 616c 6c65 7220 7468 616e les smaller than │ │ │ -00004e40: 2074 6869 7320 7369 7a65 2077 696c 6c20 this size will │ │ │ -00004e50: 6e65 7665 7220 6265 2063 6f6d 7072 6573 never be compres │ │ │ -00004e60: 7365 640a 2020 2020 6275 7420 636f 7069 sed. but copi │ │ │ -00004e70: 6564 0a0a 3d69 7465 6d20 423c 2d2d 636f ed..=item B<--co │ │ │ -00004e80: 6d70 7252 756c 653e 0a0a 2020 2020 616c mprRule>.. al │ │ │ -00004e90: 7465 726e 6174 6976 6520 746f 202d 2d65 ternative to --e │ │ │ -00004ea0: 7863 6570 7453 7566 6669 782c 2063 6f6d xceptSuffix, com │ │ │ -00004eb0: 7072 6573 7353 7566 6669 7820 616e 6420 pressSuffix and │ │ │ -00004ec0: 6d69 6e43 6f6d 7072 6573 7353 697a 653a minCompressSize: │ │ │ -00004ed0: 0a20 2020 2064 6566 696e 6974 696f 6e20 . definition │ │ │ -00004ee0: 6f66 2061 2072 756c 6520 7768 6963 6820 of a rule which │ │ │ -00004ef0: 6669 6c65 7320 7769 6c6c 2062 6520 636f files will be co │ │ │ -00004f00: 6d70 7265 7373 6564 0a0a 3d69 7465 6d20 mpressed..=item │ │ │ -00004f10: 423c 2d2d 6e6f 436f 6d70 7265 7373 3e0a B<--noCompress>. │ │ │ -00004f20: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num │ │ │ -00004f30: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel │ │ │ -00004f40: 636f 6d70 7265 7373 206f 7065 7261 7469 compress operati │ │ │ -00004f50: 6f6e 732c 0a20 2020 2064 6566 6175 6c74 ons,. default │ │ │ -00004f60: 203d 2063 686f 7365 6e20 6175 746f 6d61 = chosen automa │ │ │ -00004f70: 7469 6361 6c6c 790a 0a3d 6974 656d 2042 tically..=item B │ │ │ -00004f80: 3c2d 2d71 7565 7565 436f 6d70 7265 7373 <--queueCompress │ │ │ -00004f90: 3e0a 0a20 2020 206c 656e 6774 6820 6f66 >.. length of │ │ │ -00004fa0: 2071 7565 7565 2074 6f20 7374 6f72 6520 queue to store │ │ │ -00004fb0: 6669 6c65 7320 6265 666f 7265 2063 6f6d files before com │ │ │ -00004fc0: 7072 6573 7369 6f6e 2c0a 2020 2020 6465 pression,. de │ │ │ -00004fd0: 6661 756c 7420 3d20 3130 3030 0a0a 3d69 fault = 1000..=i │ │ │ -00004fe0: 7465 6d20 423c 2d2d 6e6f 436f 7079 3e0a tem B<--noCopy>. │ │ │ -00004ff0: 0a20 2020 206d 6178 696d 616c 206e 756d . maximal num │ │ │ -00005000: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel │ │ │ -00005010: 636f 7079 206f 7065 7261 7469 6f6e 732c copy operations, │ │ │ -00005020: 0a20 2020 2064 6566 6175 6c74 203d 2031 . default = 1 │ │ │ -00005030: 0a0a 3d69 7465 6d20 423c 2d2d 7175 6575 ..=item B<--queu │ │ │ -00005040: 6543 6f70 793e 0a0a 2020 2020 6c65 6e67 eCopy>.. leng │ │ │ -00005050: 7468 206f 6620 7175 6575 6520 746f 2073 th of queue to s │ │ │ -00005060: 746f 7265 2066 696c 6573 2062 6566 6f72 tore files befor │ │ │ -00005070: 6520 636f 7079 696e 672c 0a20 2020 2064 e copying,. d │ │ │ -00005080: 6566 6175 6c74 203d 2031 3030 300a 0a3d efault = 1000..= │ │ │ -00005090: 6974 656d 2042 3c2d 2d77 6974 6855 7365 item B<--withUse │ │ │ -000050a0: 7247 726f 7570 5374 6174 3e0a 0a20 2020 rGroupStat>.. │ │ │ -000050b0: 2077 7269 7465 2073 7461 7469 7374 6963 write statistic │ │ │ -000050c0: 7320 6162 6f75 7420 7573 6564 2073 7061 s about used spa │ │ │ -000050d0: 6365 2069 6e20 6c6f 6720 6669 6c65 0a0a ce in log file.. │ │ │ -000050e0: 3d69 7465 6d20 423c 2d2d 7573 6572 4772 =item B<--userGr │ │ │ -000050f0: 6f75 7053 7461 7446 696c 653e 0a0a 2020 oupStatFile>.. │ │ │ -00005100: 2020 7772 6974 6520 7374 6174 6973 7469 write statisti │ │ │ -00005110: 6373 2061 626f 7574 2075 7365 6420 7370 cs about used sp │ │ │ -00005120: 6163 6520 696e 206e 616d 6520 6669 6c65 ace in name file │ │ │ -00005130: 0a20 2020 2077 696c 6c20 6265 206f 7665 . will be ove │ │ │ -00005140: 7272 6964 6465 6e20 6561 6368 2074 696d rridden each tim │ │ │ -00005150: 650a 0a3d 6974 656d 2042 3c2d 2d64 6f4e e..=item B<--doN │ │ │ -00005160: 6f74 436f 6d70 7265 7373 4d44 3546 696c otCompressMD5Fil │ │ │ -00005170: 653e 0a0a 2020 2020 646f 206e 6f74 2063 e>.. do not c │ │ │ -00005180: 6f6d 7072 6573 7320 2e6d 6435 4368 6563 ompress .md5Chec │ │ │ -00005190: 6b53 756d 4669 6c65 0a0a 3d69 7465 6d20 kSumFile..=item │ │ │ -000051a0: 423c 2d2d 6368 6d6f 644d 4435 4669 6c65 B<--chmodMD5File │ │ │ -000051b0: 3e0a 0a20 2020 2070 6572 6d69 7373 696f >.. permissio │ │ │ -000051c0: 6e73 206f 6620 2e6d 6435 4368 6563 6b53 ns of .md5CheckS │ │ │ -000051d0: 756d 4669 6c65 2061 6e64 2063 6f72 7265 umFile and corre │ │ │ -000051e0: 7370 6f6e 6469 6e67 0a20 2020 202e 7374 sponding. .st │ │ │ -000051f0: 6f72 6542 6163 6b75 704c 696e 6b73 2064 oreBackupLinks d │ │ │ -00005200: 6972 6563 746f 7279 2c20 6465 6661 756c irectory, defaul │ │ │ -00005210: 7420 6973 2030 3630 300a 0a3d 6974 656d t is 0600..=item │ │ │ -00005220: 2042 3c2d 2d76 6572 626f 7365 3e2c 2042 B<--verbose>, B │ │ │ -00005230: 3c2d 763e 0a0a 2020 2020 7665 7262 6f73 <-v>.. verbos │ │ │ -00005240: 6520 6d65 7373 6167 6573 0a0a 3d69 7465 e messages..=ite │ │ │ -00005250: 6d20 423c 2d2d 6465 6275 673e 2c20 423c m B<--debug>, B< │ │ │ -00005260: 2d64 3e0a 0a20 2020 2067 656e 6572 6174 -d>.. generat │ │ │ -00005270: 6520 6465 6275 6720 6d65 7373 6167 6573 e debug messages │ │ │ -00005280: 2c20 6c65 7665 6c73 2061 7265 2030 2028 , levels are 0 ( │ │ │ -00005290: 6e6f 6e65 2c20 6465 6661 756c 7429 2c0a none, default),. │ │ │ -000052a0: 2020 2020 3120 2873 6f6d 6529 2c20 3220 1 (some), 2 │ │ │ -000052b0: 286d 616e 7929 206d 6573 7361 6765 732c (many) messages, │ │ │ -000052c0: 2065 7370 6563 6961 6c6c 7920 696e 0a20 especially in. │ │ │ -000052d0: 2020 202d 2d65 7863 6570 7452 756c 6520 --exceptRule │ │ │ -000052e0: 616e 6420 2d2d 696e 636c 7564 6552 756c and --includeRul │ │ │ -000052f0: 650a 0a3d 6974 656d 2042 3c2d 2d72 6573 e..=item B<--res │ │ │ -00005300: 6574 4174 696d 653e 0a0a 2020 2020 7265 etAtime>.. re │ │ │ -00005310: 7365 7420 6163 6365 7373 2074 696d 6520 set access time │ │ │ -00005320: 696e 2074 6865 2073 6f75 7263 6520 6469 in the source di │ │ │ -00005330: 7265 6374 6f72 7920 2d20 6275 7420 7468 rectory - but th │ │ │ -00005340: 6973 2077 696c 6c0a 2020 2020 6368 616e is will. chan │ │ │ -00005350: 6765 2063 7469 6d65 2028 7469 6d65 206f ge ctime (time o │ │ │ -00005360: 6620 6c61 7374 206d 6f64 6966 6963 6174 f last modificat │ │ │ -00005370: 696f 6e20 6f66 2066 696c 6520 7374 6174 ion of file stat │ │ │ -00005380: 7573 0a20 2020 2069 6e66 6f72 6d61 7469 us. informati │ │ │ -00005390: 6f6e 290a 0a3d 6974 656d 2042 3c2d 2d64 on)..=item B<--d │ │ │ -000053a0: 6f4e 6f74 4465 6c65 7465 3e0a 0a20 2020 oNotDelete>.. │ │ │ -000053b0: 2063 6865 636b 206f 6e6c 792c 2064 6f20 check only, do │ │ │ -000053c0: 6e6f 7420 6465 6c65 7465 2061 6e79 2062 not delete any b │ │ │ -000053d0: 6163 6b75 700a 0a3d 6974 656d 2042 3c2d ackup..=item B<- │ │ │ -000053e0: 2d64 656c 6574 654e 6f74 4669 6e69 7368 -deleteNotFinish │ │ │ -000053f0: 6564 4469 7273 3e0a 0a20 2020 2064 656c edDirs>.. del │ │ │ -00005400: 6574 6520 6f6c 6420 6261 636b 7570 7320 ete old backups │ │ │ -00005410: 7768 6963 6820 6861 7665 206e 6f74 2062 which have not b │ │ │ -00005420: 6565 6e20 6669 6e69 7368 6564 0a20 2020 een finished. │ │ │ -00005430: 2074 6869 7320 7769 6c6c 206f 6e6c 7920 this will only │ │ │ -00005440: 6861 7070 656e 2069 6620 646f 4e6f 7444 happen if doNotD │ │ │ -00005450: 656c 6574 6520 6973 2073 6574 0a0a 3d69 elete is set..=i │ │ │ -00005460: 7465 6d20 423c 2d2d 6d61 7848 6172 644c tem B<--maxHardL │ │ │ -00005470: 696e 6b73 3e0a 0a20 2020 206d 6178 696d inks>.. maxim │ │ │ -00005480: 756d 206e 756d 6265 7220 6f66 2068 6172 um number of har │ │ │ -00005490: 6420 6c69 6e6b 7320 746f 2075 7365 0a20 d links to use. │ │ │ -000054a0: 2020 207a 6572 6f20 2864 6566 6175 6c74 zero (default │ │ │ -000054b0: 2920 6d65 616e 7320 6c69 6d69 7420 6465 ) means limit de │ │ │ -000054c0: 7065 6e64 7320 6f6e 2066 696c 6520 7379 pends on file sy │ │ │ -000054d0: 7374 656d 2075 7365 6420 6f6e 6c79 0a0a stem used only.. │ │ │ -000054e0: 3d69 7465 6d20 423c 2d2d 6b65 6570 416c =item B<--keepAl │ │ │ -000054f0: 6c3e 0a0a 2020 2020 6b65 6570 2062 6163 l>.. keep bac │ │ │ -00005500: 6b75 7073 2077 6869 6368 2061 7265 206e kups which are n │ │ │ -00005510: 6f74 206f 6c64 6572 2074 6861 6e20 7468 ot older than th │ │ │ -00005520: 6520 7370 6563 6966 6965 6420 616d 6f75 e specified amou │ │ │ -00005530: 6e74 0a20 2020 206f 6620 7469 6d65 2e20 nt. of time. │ │ │ -00005540: 5468 6973 2069 7320 6c69 6b65 2061 2064 This is like a d │ │ │ -00005550: 6566 6175 6c74 2076 616c 7565 2066 6f72 efault value for │ │ │ -00005560: 2061 6c6c 2064 6179 7320 696e 0a20 2020 all days in. │ │ │ -00005570: 202d 2d6b 6565 7057 6565 6b64 6179 2e20 --keepWeekday. │ │ │ -00005580: 4265 6769 6e73 2064 656c 6574 696e 6720 Begins deleting │ │ │ -00005590: 6174 2074 6865 2065 6e64 206f 6620 7468 at the end of th │ │ │ -000055a0: 6520 7363 7269 7074 0a20 2020 2074 6865 e script. the │ │ │ -000055b0: 2074 696d 6520 7261 6e67 6520 6861 7320 time range has │ │ │ -000055c0: 746f 2062 6520 7370 6563 6966 6965 6420 to be specified │ │ │ -000055d0: 696e 2066 6f72 6d61 7420 2764 686d 7327 in format 'dhms' │ │ │ -000055e0: 2c20 652e 672e 0a20 2020 2020 2031 3064 , e.g.. 10d │ │ │ -000055f0: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days │ │ │ -00005600: 2061 6e64 2034 2068 6f75 7273 0a20 2020 and 4 hours. │ │ │ -00005610: 2020 2064 6566 6175 6c74 203d 2032 3064 default = 20d │ │ │ -00005620: 0a0a 3d69 7465 6d20 423c 2d2d 6b65 6570 ..=item B<--keep │ │ │ -00005630: 5765 656b 6461 793e 0a0a 2020 2020 6b65 Weekday>.. ke │ │ │ -00005640: 6570 2062 6163 6b75 7073 2066 6f72 2074 ep backups for t │ │ │ -00005650: 6865 2073 7065 6369 6669 6564 2064 6179 he specified day │ │ │ -00005660: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif │ │ │ -00005670: 6965 640a 2020 2020 616d 6f75 6e74 206f ied. amount o │ │ │ -00005680: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit │ │ │ -00005690: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v │ │ │ -000056a0: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in. │ │ │ -000056b0: 2020 2020 2d2d 6b65 6570 416c 6c2e 2027 --keepAll. ' │ │ │ -000056c0: 4d6f 6e2c 5765 643a 3430 6420 5361 743a Mon,Wed:40d Sat: │ │ │ -000056d0: 3630 6431 306d 2720 6d65 616e 733a 0a20 60d10m' means:. │ │ │ -000056e0: 2020 2020 206b 6565 7020 6261 636b 7570 keep backup │ │ │ -000056f0: 7320 6672 6f6d 204d 6f6e 2061 6e64 2057 s from Mon and W │ │ │ -00005700: 6564 2034 3064 6179 7320 2b20 356d 696e ed 40days + 5min │ │ │ -00005710: 730a 2020 2020 2020 6b65 6570 2062 6163 s. keep bac │ │ │ -00005720: 6b75 7073 2066 726f 6d20 5361 7420 3630 kups from Sat 60 │ │ │ -00005730: 6461 7973 202b 2031 306d 696e 730a 2020 days + 10mins. │ │ │ -00005740: 2020 2020 6b65 6570 2062 6163 6b75 7073 keep backups │ │ │ -00005750: 2066 726f 6d20 7468 6520 7265 7374 206f from the rest o │ │ │ -00005760: 6620 7468 6520 6461 7973 206c 696b 6520 f the days like │ │ │ -00005770: 7370 6369 6669 6564 2069 6e0a 2020 2020 spcified in. │ │ │ -00005780: 2020 2d2d 6b65 6570 416c 6c20 2864 6566 --keepAll (def │ │ │ -00005790: 6175 6c74 2024 6b65 6570 416c 6c29 0a20 ault $keepAll). │ │ │ -000057a0: 2020 2069 6620 796f 7520 616c 736f 2075 if you also u │ │ │ -000057b0: 7365 2074 6865 2027 6172 6368 6976 6520 se the 'archive │ │ │ -000057c0: 666c 6167 2720 6974 206d 6561 6e73 2074 flag' it means t │ │ │ -000057d0: 6f20 6e6f 740a 2020 2020 6465 6c65 7465 o not. delete │ │ │ -000057e0: 2074 6865 2061 6666 6563 7465 6420 6469 the affected di │ │ │ -000057f0: 7265 6374 6f72 6965 7320 7669 6120 2d2d rectories via -- │ │ │ -00005800: 6b65 6570 4d61 784e 756d 6265 723a 0a20 keepMaxNumber:. │ │ │ -00005810: 2020 2020 2061 3130 6434 6820 6d65 616e a10d4h mean │ │ │ -00005820: 7320 3130 2064 6179 7320 616e 6420 3420 s 10 days and 4 │ │ │ -00005830: 686f 7572 7320 616e 6420 2761 7263 6869 hours and 'archi │ │ │ -00005840: 7665 2066 6c61 6727 0a20 2020 2065 2e67 ve flag'. e.g │ │ │ -00005850: 2e20 274d 6f6e 2c57 6564 3a61 3430 6435 . 'Mon,Wed:a40d5 │ │ │ -00005860: 6d20 5361 743a 3630 6431 306d 2720 6d65 m Sat:60d10m' me │ │ │ -00005870: 616e 733a 0a20 2020 2020 206b 6565 7020 ans:. keep │ │ │ -00005880: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon │ │ │ -00005890: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days │ │ │ -000058a0: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi │ │ │ -000058b0: 7665 270a 2020 2020 2020 6b65 6570 2062 ve'. keep b │ │ │ -000058c0: 6163 6b75 7073 2066 726f 6d20 5361 7420 ackups from Sat │ │ │ -000058d0: 3630 6461 7973 202b 2031 306d 696e 730a 60days + 10mins. │ │ │ -000058e0: 2020 2020 2020 6b65 6570 2062 6163 6b75 keep backu │ │ │ -000058f0: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest │ │ │ -00005900: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik │ │ │ -00005910: 6520 7370 6563 6966 6965 6420 696e 0a20 e specified in. │ │ │ -00005920: 2020 2020 202d 2d6b 6565 7041 6c6c 2028 --keepAll ( │ │ │ -00005930: 6465 6661 756c 7420 3330 6429 0a0a 3d69 default 30d)..=i │ │ │ -00005940: 7465 6d20 423c 2d2d 6b65 6570 4669 7273 tem B<--keepFirs │ │ │ -00005950: 744f 6659 6561 723e 0a0a 2020 2020 646f tOfYear>.. do │ │ │ -00005960: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the │ │ │ -00005970: 6669 7273 7420 6261 636b 7570 206f 6620 first backup of │ │ │ -00005980: 6120 7965 6172 0a20 2020 2066 6f72 6d61 a year. forma │ │ │ -00005990: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ -000059a0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ -000059b0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ -000059c0: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast │ │ │ -000059d0: 4f66 5965 6172 3e0a 0a20 2020 2064 6f20 OfYear>.. do │ │ │ -000059e0: 6e6f 7420 6465 6c65 7465 2074 6865 206c not delete the l │ │ │ -000059f0: 6173 7420 6261 636b 7570 206f 6620 6120 ast backup of a │ │ │ -00005a00: 7965 6172 0a20 2020 2066 6f72 6d61 7420 year. format │ │ │ -00005a10: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi │ │ │ -00005a20: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc │ │ │ -00005a30: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite │ │ │ -00005a40: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO │ │ │ -00005a50: 664d 6f6e 7468 3e0a 0a20 2020 2064 6f20 fMonth>.. do │ │ │ -00005a60: 6e6f 7420 6465 6c65 7465 2074 6865 2066 not delete the f │ │ │ -00005a70: 6972 7374 2062 6163 6b75 7020 6f66 2061 irst backup of a │ │ │ -00005a80: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma │ │ │ -00005a90: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ -00005aa0: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ -00005ab0: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ -00005ac0: 7465 6d20 423c 2d2d 6b65 6570 4c61 7374 tem B<--keepLast │ │ │ -00005ad0: 4f66 4d6f 6e74 683e 0a0a 2020 2020 646f OfMonth>.. do │ │ │ -00005ae0: 206e 6f74 2064 656c 6574 6520 7468 6520 not delete the │ │ │ -00005af0: 6c61 7374 2062 6163 6b75 7020 6f66 2061 last backup of a │ │ │ -00005b00: 206d 6f6e 7468 0a20 2020 2066 6f72 6d61 month. forma │ │ │ -00005b10: 7420 6973 2074 696d 6550 6572 696f 6420 t is timePeriod │ │ │ -00005b20: 7769 7468 2070 6f73 7369 626c 6520 2761 with possible 'a │ │ │ -00005b30: 7263 6869 7665 2066 6c61 6727 0a0a 3d69 rchive flag'..=i │ │ │ -00005b40: 7465 6d20 423c 2d2d 6669 7273 7444 6179 tem B<--firstDay │ │ │ -00005b50: 4f66 5765 656b 3e0a 0a20 2020 2064 6566 OfWeek>.. def │ │ │ -00005b60: 6175 6c74 3a20 2753 756e 272e 2054 6869 ault: 'Sun'. Thi │ │ │ -00005b70: 7320 7661 6c75 6520 6973 2075 7365 6420 s value is used │ │ │ -00005b80: 666f 7220 6361 6c63 756c 6174 696e 670a for calculating. │ │ │ -00005b90: 2020 2020 2d2d 6b65 6570 4669 7273 744f --keepFirstO │ │ │ -00005ba0: 6657 6565 6b20 616e 6420 2d2d 6b65 6570 fWeek and --keep │ │ │ -00005bb0: 4c61 7374 4f66 5765 656b 0a0a 3d69 7465 LastOfWeek..=ite │ │ │ -00005bc0: 6d20 423c 2d2d 6b65 6570 4669 7273 744f m B<--keepFirstO │ │ │ -00005bd0: 6657 6565 6b3e 0a0a 2020 2020 646f 206e fWeek>.. do n │ │ │ -00005be0: 6f74 2064 656c 6574 6520 7468 6520 6669 ot delete the fi │ │ │ -00005bf0: 7273 7420 6261 636b 7570 206f 6620 6120 rst backup of a │ │ │ -00005c00: 7765 656b 0a20 2020 2066 6f72 6d61 7420 week. format │ │ │ -00005c10: 6973 2074 696d 6550 6572 696f 6420 7769 is timePeriod wi │ │ │ -00005c20: 7468 2070 6f73 7369 626c 6520 2761 7263 th possible 'arc │ │ │ -00005c30: 6869 7665 2066 6c61 6727 0a0a 3d69 7465 hive flag'..=ite │ │ │ -00005c40: 6d20 423c 2d2d 6b65 6570 4c61 7374 4f66 m B<--keepLastOf │ │ │ -00005c50: 5765 656b 3e0a 0a20 2020 2064 6f20 6e6f Week>.. do no │ │ │ -00005c60: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las │ │ │ -00005c70: 7420 6261 636b 7570 206f 6620 6120 7765 t backup of a we │ │ │ -00005c80: 656b 0a20 2020 2066 6f72 6d61 7420 6973 ek. format is │ │ │ -00005c90: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with │ │ │ -00005ca0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi │ │ │ -00005cb0: 7665 2066 6c61 6727 0a0a 3d69 7465 6d20 ve flag'..=item │ │ │ -00005cc0: 423c 2d2d 6b65 6570 4475 706c 6963 6174 B<--keepDuplicat │ │ │ -00005cd0: 653e 0a0a 2020 2020 6b65 6570 206d 756c e>.. keep mul │ │ │ -00005ce0: 7469 706c 6520 6261 636b 7570 7320 6f66 tiple backups of │ │ │ -00005cf0: 206f 6e65 2064 6179 2075 7020 746f 2074 one day up to t │ │ │ -00005d00: 696d 6550 6572 696f 640a 2020 2020 666f imePeriod. fo │ │ │ -00005d10: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri │ │ │ -00005d20: 6f64 2c20 2761 7263 6869 7665 2066 6c61 od, 'archive fla │ │ │ -00005d30: 6727 2069 7320 6e6f 7420 706f 7373 6962 g' is not possib │ │ │ -00005d40: 6c65 0a20 2020 2064 6566 6175 6c74 203d le. default = │ │ │ -00005d50: 2037 640a 0a3d 6974 656d 2042 3c2d 2d6b 7d..=item B<--k │ │ │ -00005d60: 6565 704d 696e 4e75 6d62 6572 3e0a 0a20 eepMinNumber>.. │ │ │ -00005d70: 2020 204b 6565 7020 7468 6174 206d 696d Keep that mim │ │ │ -00005d80: 696e 756d 206f 6620 6261 636b 7570 732e inum of backups. │ │ │ -00005d90: 204d 756c 7469 706c 6520 6261 636b 7570 Multiple backup │ │ │ -00005da0: 7320 6f66 206f 6e65 0a20 2020 2064 6179 s of one. day │ │ │ -00005db0: 2061 7265 2063 6f75 6e74 6564 2061 7320 are counted as │ │ │ -00005dc0: 6f6e 6520 6261 636b 7570 2e20 4465 6661 one backup. Defa │ │ │ -00005dd0: 756c 7420 6973 2031 302e 0a0a 3d69 7465 ult is 10...=ite │ │ │ -00005de0: 6d20 423c 2d2d 6b65 6570 4d61 784e 756d m B<--keepMaxNum │ │ │ -00005df0: 6265 723e 0a0a 2020 2020 5472 7920 746f ber>.. Try to │ │ │ -00005e00: 206b 6565 7020 6f6e 6c79 2074 6861 7420 keep only that │ │ │ -00005e10: 6d61 7869 6d75 6d20 6f66 2062 6163 6b75 maximum of backu │ │ │ -00005e20: 7073 2e20 4966 2079 6f75 2068 6176 6520 ps. If you have │ │ │ -00005e30: 6d6f 7265 0a20 2020 2062 6163 6b75 7073 more. backups │ │ │ -00005e40: 2c20 7468 6520 666f 6c6c 6f77 696e 6720 , the following │ │ │ -00005e50: 7365 7175 656e 6365 206f 6620 6465 6c65 sequence of dele │ │ │ -00005e60: 7469 6e67 2077 696c 6c20 6861 7070 656e ting will happen │ │ │ -00005e70: 3a0a 2020 2020 2d20 6465 6c65 7465 2061 :. - delete a │ │ │ -00005e80: 6c6c 2064 7570 6c69 6361 7465 7320 6f66 ll duplicates of │ │ │ -00005e90: 2061 2064 6179 2c20 6265 6769 6e6e 696e a day, beginnin │ │ │ -00005ea0: 6720 7769 7468 2074 6865 206f 6c64 0a20 g with the old. │ │ │ -00005eb0: 2020 2020 206f 6e63 652c 2065 7863 6570 once, excep │ │ │ -00005ec0: 7420 7468 6520 6c61 7374 206f 6620 6576 t the last of ev │ │ │ -00005ed0: 6572 7920 6461 790a 2020 2020 2d20 6966 ery day. - if │ │ │ -00005ee0: 2074 6869 7320 6973 206e 6f74 2065 6e6f this is not eno │ │ │ -00005ef0: 7567 682c 2064 656c 6574 6520 7468 6520 ugh, delete the │ │ │ -00005f00: 7265 7374 206f 6620 7468 6520 6261 636b rest of the back │ │ │ -00005f10: 7570 730a 2020 2020 2020 6265 6769 6e6e ups. beginn │ │ │ -00005f20: 696e 6720 7769 7468 2074 6865 206f 6c64 ing with the old │ │ │ -00005f30: 6573 742c 2062 7574 202a 6e65 7665 722a est, but *never* │ │ │ -00005f40: 2061 2062 6163 6b75 7020 7769 7468 0a20 a backup with. │ │ │ -00005f50: 2020 2020 2074 6865 2027 6172 6368 6976 the 'archiv │ │ │ -00005f60: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l │ │ │ -00005f70: 6173 7420 6261 636b 7570 0a0a 3d69 7465 ast backup..=ite │ │ │ -00005f80: 6d20 423c 2d2d 6b65 6570 5265 6c61 7469 m B<--keepRelati │ │ │ -00005f90: 7665 3e2c 2042 3c2d 523e 0a0a 2020 2020 ve>, B<-R>.. │ │ │ -00005fa0: 416c 7465 726e 6174 6976 6520 6465 6c65 Alternative dele │ │ │ -00005fb0: 7469 6f6e 2073 6368 656d 652e 2049 6620 tion scheme. If │ │ │ -00005fc0: 796f 7520 7573 6520 7468 6973 206f 7074 you use this opt │ │ │ -00005fd0: 696f 6e2c 2061 6c6c 0a20 2020 206f 7468 ion, all. oth │ │ │ -00005fe0: 6572 206b 6565 7020 6f70 7469 6f6e 7320 er keep options │ │ │ -00005ff0: 6172 6520 6967 6e6f 7265 642e 2050 7265 are ignored. Pre │ │ │ -00006000: 7365 7276 6573 2062 6163 6b75 7073 2064 serves backups d │ │ │ -00006010: 6570 656e 6469 6e67 0a20 2020 206f 6e20 epending. on │ │ │ -00006020: 7468 6569 7220 2a72 656c 6174 6976 652a their *relative* │ │ │ -00006030: 2061 6765 2e20 4578 616d 706c 653a 0a20 age. Example:. │ │ │ -00006040: 2020 202d 5220 2731 6420 3764 2036 3164 -R '1d 7d 61d │ │ │ -00006050: 2039 3264 270a 2020 2020 7769 6c6c 2028 92d'. will ( │ │ │ -00006060: 7472 7920 746f 2920 656e 7375 7265 2074 try to) ensure t │ │ │ -00006070: 6861 7420 7468 6572 6520 6973 2061 6c77 hat there is alw │ │ │ -00006080: 6179 730a 2020 2020 2d20 4f6e 6520 6261 ays. - One ba │ │ │ -00006090: 636b 7570 2062 6574 7765 656e 2031 2064 ckup between 1 d │ │ │ -000060a0: 6179 2061 6e64 2037 2064 6179 7320 6f6c ay and 7 days ol │ │ │ -000060b0: 640a 2020 2020 2d20 4f6e 6520 6261 636b d. - One back │ │ │ -000060c0: 7570 2062 6574 7765 656e 2035 2064 6179 up between 5 day │ │ │ -000060d0: 7320 616e 6420 7e32 206d 6f6e 7468 7320 s and ~2 months │ │ │ -000060e0: 6f6c 640a 2020 2020 2d20 4f6e 6520 6261 old. - One ba │ │ │ -000060f0: 636b 7570 2062 6574 7765 656e 207e 3220 ckup between ~2 │ │ │ -00006100: 6d6f 6e74 6873 2061 6e64 207e 3320 6d6f months and ~3 mo │ │ │ -00006110: 6e74 6873 206f 6c64 0a20 2020 2049 6620 nths old. If │ │ │ -00006120: 7468 6572 6520 6973 206e 6f20 6261 636b there is no back │ │ │ -00006130: 7570 2066 6f72 2061 2073 7065 6369 6669 up for a specifi │ │ │ -00006140: 6564 2074 696d 6573 7061 6e0a 2020 2020 ed timespan. │ │ │ -00006150: 2865 2e67 2e20 6265 6361 7573 6520 7468 (e.g. because th │ │ │ -00006160: 6520 6c61 7374 2062 6163 6b75 7020 7761 e last backup wa │ │ │ -00006170: 7320 646f 6e65 206d 6f72 6520 7468 616e s done more than │ │ │ -00006180: 2032 2077 6565 6b73 0a20 2020 2061 676f 2 weeks. ago │ │ │ -00006190: 2920 7468 6520 6e65 7874 206f 6c64 6572 ) the next older │ │ │ -000061a0: 2062 6163 6b75 7020 7769 6c6c 2062 6520 backup will be │ │ │ -000061b0: 7573 6564 2066 6f72 2074 6869 7320 7469 used for this ti │ │ │ -000061c0: 6d65 7370 616e 2e0a 0a3d 6974 656d 2042 mespan...=item B │ │ │ -000061d0: 3c2d 2d70 726f 6772 6573 7352 6570 6f72 <--progressRepor │ │ │ -000061e0: 743e 2c20 423c 2d50 3e0a 0a20 2020 2070 t>, B<-P>.. p │ │ │ -000061f0: 7269 6e74 2070 726f 6772 6573 7320 7265 rint progress re │ │ │ -00006200: 706f 7274 2061 6674 6572 2065 6163 6820 port after each │ │ │ -00006210: 276e 756d 6265 7227 2066 696c 6573 0a20 'number' files. │ │ │ -00006220: 2020 2061 6464 6974 696f 6e61 6c20 796f additional yo │ │ │ -00006230: 7520 6d61 7920 6164 6420 6120 7469 6d65 u may add a time │ │ │ -00006240: 2066 7261 6d65 2061 6674 6572 2077 6869 frame after whi │ │ │ -00006250: 6368 2061 206d 6573 7361 6765 2069 730a ch a message is. │ │ │ -00006260: 2020 2020 7072 696e 7465 640a 2020 2020 printed. │ │ │ -00006270: 6966 2079 6f75 2077 616e 7420 746f 2070 if you want to p │ │ │ -00006280: 7269 6e74 2061 2072 6570 6f72 7420 6561 rint a report ea │ │ │ -00006290: 6368 2031 3030 3020 6669 6c65 7320 616e ch 1000 files an │ │ │ -000062a0: 6420 6166 7465 720a 2020 2020 6f6e 6520 d after. one │ │ │ -000062b0: 6d69 6e75 7465 2061 6e64 2031 3020 7365 minute and 10 se │ │ │ -000062c0: 636f 6e64 732c 2075 7365 3a20 2d50 2031 conds, use: -P 1 │ │ │ -000062d0: 3030 302c 316d 3130 730a 0a3d 6974 656d 000,1m10s..=item │ │ │ -000062e0: 2042 3c2d 2d70 7269 6e74 4465 7074 683e B<--printDepth> │ │ │ -000062f0: 2c20 423c 2d44 3e0a 0a20 2020 2070 7269 , B<-D>.. pri │ │ │ -00006300: 6e74 2064 6570 7468 206f 6620 6163 7475 nt depth of actu │ │ │ -00006310: 616c 2072 6561 6420 6469 7265 6374 6f72 al read director │ │ │ -00006320: 7920 6475 7269 6e67 2062 6163 6b75 700a y during backup. │ │ │ -00006330: 0a3d 6974 656d 2042 3c2d 2d69 676e 6f72 .=item B<--ignor │ │ │ -00006340: 6552 6561 6445 7272 6f72 3e0a 0a20 2020 eReadError>.. │ │ │ -00006350: 2069 676e 6f72 6520 7265 6164 2065 7272 ignore read err │ │ │ -00006360: 6f72 7320 696e 2073 6f75 7263 6520 6469 ors in source di │ │ │ -00006370: 7265 6374 6f72 793b 206e 6f74 2072 6561 rectory; not rea │ │ │ -00006380: 6461 626c 650a 2020 2020 6469 7265 6374 dable. direct │ │ │ -00006390: 6f72 6965 7320 646f 206e 6f74 2063 6175 ories do not cau │ │ │ -000063a0: 7365 2073 746f 7265 4261 636b 7570 2e70 se storeBackup.p │ │ │ -000063b0: 6c20 746f 2073 746f 7020 7072 6f63 6573 l to stop proces │ │ │ -000063c0: 7369 6e67 0a0a 3d69 7465 6d20 423c 2d2d sing..=item B<-- │ │ │ -000063d0: 7375 7070 7265 7373 5761 726e 696e 673e suppressWarning> │ │ │ -000063e0: 0a0a 2020 2020 7375 7070 7265 7373 2028 .. suppress ( │ │ │ -000063f0: 756e 7761 6e74 6564 2920 7761 726e 696e unwanted) warnin │ │ │ -00006400: 6773 2069 6e20 7468 6520 6c6f 6720 6669 gs in the log fi │ │ │ -00006410: 6c65 733b 0a20 2020 2074 6f20 7375 7070 les;. to supp │ │ │ -00006420: 7265 7373 2077 6172 6e69 6e67 732c 2074 ress warnings, t │ │ │ -00006430: 6865 2066 6f6c 6c6f 7769 6e67 206b 6579 he following key │ │ │ -00006440: 7320 6361 6e20 6265 2075 7365 643a 0a20 s can be used:. │ │ │ -00006450: 2020 2020 2065 7863 4469 7220 2873 7570 excDir (sup │ │ │ -00006460: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn │ │ │ -00006470: 696e 6720 7468 6174 2065 7863 6c75 6465 ing that exclude │ │ │ -00006480: 6420 6469 7265 6374 6f72 6965 730a 2020 d directories. │ │ │ -00006490: 2020 2020 2020 2020 2020 2064 6f20 6e6f do no │ │ │ -000064a0: 7420 6578 6973 7429 0a20 2020 2020 2066 t exist). f │ │ │ -000064b0: 696c 6543 6861 6e67 6520 2873 7570 7072 ileChange (suppr │ │ │ -000064c0: 6573 7365 7320 7468 6520 7761 726e 696e esses the warnin │ │ │ -000064d0: 6720 7468 6174 2061 2066 696c 6520 6861 g that a file ha │ │ │ -000064e0: 7320 6368 616e 6765 640a 2020 2020 2020 s changed. │ │ │ -000064f0: 2020 2020 2020 2020 2020 2064 7572 696e durin │ │ │ -00006500: 6720 7468 6520 6261 636b 7570 290a 2020 g the backup). │ │ │ -00006510: 2020 2020 6372 5365 7269 6573 2028 7375 crSeries (su │ │ │ -00006520: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war │ │ │ -00006530: 6e69 6e67 2074 6861 7420 7374 6f72 6542 ning that storeB │ │ │ -00006540: 6163 6b75 7020 6861 6420 746f 0a20 2020 ackup had to. │ │ │ -00006550: 2020 2020 2020 2020 2020 2020 6372 6561 crea │ │ │ -00006560: 7465 2074 6865 2027 6465 6661 756c 7427 te the 'default' │ │ │ -00006570: 2073 6572 6965 7329 0a20 2020 2020 2068 series). h │ │ │ -00006580: 6173 6843 6f6c 6c69 7369 6f6e 2028 7375 ashCollision (su │ │ │ -00006590: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war │ │ │ -000065a0: 6e69 6e67 2069 6620 6120 706f 7373 6962 ning if a possib │ │ │ -000065b0: 6c65 0a20 2020 2020 2020 2020 2020 2020 le. │ │ │ -000065c0: 2020 2020 2020 2068 6173 6820 636f 6c6c hash coll │ │ │ -000065d0: 6973 696f 6e20 6973 2064 6574 6563 7465 ision is detecte │ │ │ -000065e0: 6429 0a20 2020 2020 6669 6c65 4e61 6d65 d). fileName │ │ │ -000065f0: 5769 7468 4c69 6e65 4665 6564 2028 7375 WithLineFeed (su │ │ │ -00006600: 7070 7265 7373 6573 2074 6865 2077 6172 ppresses the war │ │ │ -00006610: 6e69 6e67 2069 6620 6120 6669 6c65 6e61 ning if a filena │ │ │ -00006620: 6d65 0a20 2020 2020 2020 2020 2020 2020 me. │ │ │ -00006630: 2020 2020 2020 2020 2020 2020 2063 6f6e con │ │ │ -00006640: 7461 696e 7320 6120 6c69 6e65 2066 6565 tains a line fee │ │ │ -00006650: 6429 0a20 2020 2020 7573 655f 4442 5f46 d). use_DB_F │ │ │ -00006660: 696c 6520 2873 7570 7072 6573 7365 7320 ile (suppresses │ │ │ -00006670: 7468 6520 7761 726e 696e 6720 7468 6174 the warning that │ │ │ -00006680: 2079 6f75 2073 686f 756c 6420 696e 7374 you should inst │ │ │ -00006690: 616c 6c0a 2020 2020 2020 2020 2020 2020 all. │ │ │ -000066a0: 2020 2020 2020 7065 726c 206d 6f64 756c perl modul │ │ │ -000066b0: 6520 4442 5f46 696c 6520 666f 7220 6265 e DB_File for be │ │ │ -000066c0: 7474 6572 2070 6572 666f 7261 6d6e 6365 tter perforamnce │ │ │ -000066d0: 290a 2020 2020 2075 7365 5f4d 4c44 424d ). use_MLDBM │ │ │ -000066e0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ -000066f0: 2077 6172 6e69 6e67 2074 6861 7420 796f warning that yo │ │ │ -00006700: 7520 7368 6f75 6c64 2069 6e73 7461 6c6c u should install │ │ │ -00006710: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00006720: 2070 6572 6c20 6d6f 6475 6c65 204d 4c44 perl module MLD │ │ │ -00006730: 424d 2069 6620 796f 7520 7761 6e74 2074 BM if you want t │ │ │ -00006740: 6f20 7573 6520 7275 6c65 2066 756e 6374 o use rule funct │ │ │ -00006750: 696f 6e73 0a20 2020 2020 2020 2020 2020 ions. │ │ │ -00006760: 2020 2020 204d 4152 4b5f 4449 5220 6f72 MARK_DIR or │ │ │ -00006770: 204d 4152 4b5f 4449 525f 5245 4320 746f MARK_DIR_REC to │ │ │ -00006780: 6765 7468 6572 2077 6974 6820 6f70 7469 gether with opti │ │ │ -00006790: 6f6e 2073 6176 6552 414d 290a 2020 2020 on saveRAM). │ │ │ -000067a0: 2075 7365 5f49 4f43 6f6d 7072 6573 7342 use_IOCompressB │ │ │ -000067b0: 7a69 7032 2028 7375 7070 7265 7373 6573 zip2 (suppresses │ │ │ -000067c0: 2074 6865 2077 6172 6e69 6e67 2074 6861 the warning tha │ │ │ -000067d0: 7420 796f 7520 7368 6f75 6c64 0a20 2020 t you should. │ │ │ -000067e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000067f0: 2020 2020 2020 2069 6e73 7461 6c20 7065 instal pe │ │ │ -00006800: 726c 206d 6f64 756c 6520 494f 3a3a 436f rl module IO::Co │ │ │ -00006810: 6d70 7265 7373 3a3a 427a 6970 320a 2020 mpress::Bzip2. │ │ │ -00006820: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00006830: 2020 2020 2020 2020 666f 7220 6265 7474 for bett │ │ │ -00006840: 6572 2070 6572 666f 726d 616e 6365 290a er performance). │ │ │ -00006850: 2020 2020 206e 6f42 6163 6b75 7046 6f72 noBackupFor │ │ │ -00006860: 5065 7269 6f64 2028 7375 7070 7265 7373 Period (suppress │ │ │ -00006870: 6573 2077 6172 6e69 6e67 2074 6861 7420 es warning that │ │ │ -00006880: 7468 6572 6520 6172 650a 2020 2020 2020 there are. │ │ │ -00006890: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000068a0: 2020 6e6f 2062 6163 6b75 7073 2066 6f72 no backups for │ │ │ -000068b0: 2063 6572 7461 696e 2070 6572 696f 6473 certain periods │ │ │ -000068c0: 2077 6865 6e20 7573 696e 670a 2020 2020 when using. │ │ │ -000068d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000068e0: 2020 2020 6f70 7469 6f6e 206b 6565 7052 option keepR │ │ │ -000068f0: 656c 6174 6976 6529 0a20 2020 2054 6869 elative). Thi │ │ │ -00006900: 7320 6f70 7469 6f6e 2063 616e 2062 6520 s option can be │ │ │ -00006910: 7265 7065 6174 6564 206d 756c 7469 706c repeated multipl │ │ │ -00006920: 6520 7469 6d65 7320 6f6e 2074 6865 2063 e times on the c │ │ │ -00006930: 6f6d 6d61 6e64 206c 696e 652e 0a0a 3d69 ommand line...=i │ │ │ -00006940: 7465 6d20 423c 2d2d 7375 7070 7265 7373 tem B<--suppress │ │ │ -00006950: 496e 666f 3e0a 0a20 2020 2073 7570 7072 Info>.. suppr │ │ │ -00006960: 6573 7320 2875 6e77 616e 7465 6429 2069 ess (unwanted) i │ │ │ -00006970: 6e66 6f73 2069 6e20 7468 6520 6c6f 6720 nfos in the log │ │ │ -00006980: 6669 6c65 733b 0a20 2020 2074 6f20 7375 files;. to su │ │ │ -00006990: 7070 7265 7373 2069 6e66 6f73 2c20 7468 ppress infos, th │ │ │ -000069a0: 6520 666f 6c6c 6f77 696e 6720 6b65 7973 e following keys │ │ │ -000069b0: 2063 616e 2062 6520 7573 6564 3a0a 2020 can be used:. │ │ │ -000069c0: 2020 2020 7265 6164 4368 6563 6b53 756d readCheckSum │ │ │ -000069d0: 7320 2873 7570 7072 6573 7320 7468 6520 s (suppress the │ │ │ -000069e0: 696e 666f 726d 6174 696f 6e20 7468 6174 information that │ │ │ -000069f0: 2063 6865 636b 7375 6d73 0a20 2020 2020 checksums. │ │ │ -00006a00: 2020 2020 2020 2020 2020 2020 2020 206f o │ │ │ -00006a10: 6620 626c 6f63 6b65 6420 6669 6c65 7320 f blocked files │ │ │ -00006a20: 6172 6520 7265 6164 290a 2020 2020 5468 are read). Th │ │ │ -00006a30: 6973 206f 7074 696f 6e20 6361 6e20 6265 is option can be │ │ │ -00006a40: 2072 6570 6561 7465 6420 6d75 6c74 6970 repeated multip │ │ │ -00006a50: 6c65 2074 696d 6573 206f 6e20 7468 6520 le times on the │ │ │ -00006a60: 636f 6d6d 616e 6420 6c69 6e65 2e0a 0a3d command line...= │ │ │ -00006a70: 6974 656d 2042 3c2d 2d6c 696e 6b54 6f52 item B<--linkToR │ │ │ -00006a80: 6563 656e 743e 0a0a 2020 2020 6166 7465 ecent>.. afte │ │ │ -00006a90: 7220 6120 7375 6363 6573 7366 756c 2062 r a successful b │ │ │ -00006aa0: 6163 6b75 702c 2073 6574 2061 2073 796d ackup, set a sym │ │ │ -00006ab0: 626f 6c69 6320 6c69 6e6b 2074 6f0a 2020 bolic link to. │ │ │ -00006ac0: 2020 7468 6174 2062 6163 6b75 7020 616e that backup an │ │ │ -00006ad0: 6420 6465 6c65 7465 2065 7869 7374 696e d delete existin │ │ │ -00006ae0: 6720 6f6c 6465 7220 6c69 6e6b 7320 7769 g older links wi │ │ │ -00006af0: 7468 2074 6865 0a20 2020 2073 616d 6520 th the. same │ │ │ -00006b00: 6e61 6d65 0a0a 3d69 7465 6d20 423c 2d2d name..=item B<-- │ │ │ -00006b10: 6c6f 6746 696c 653e 2c20 423c 2d6c 3e0a logFile>, B<-l>. │ │ │ -00006b20: 0a20 2020 206c 6f67 2066 696c 6520 2864 . log file (d │ │ │ -00006b30: 6566 6175 6c74 2069 7320 5354 444f 5554 efault is STDOUT │ │ │ -00006b40: 290a 0a3d 6974 656d 2042 3c2d 2d70 6c75 )..=item B<--plu │ │ │ -00006b50: 734c 6f67 5374 646f 7574 3e0a 0a20 2020 sLogStdout>.. │ │ │ -00006b60: 2069 6620 796f 7520 7370 6563 6966 7920 if you specify │ │ │ -00006b70: 6120 6c6f 6720 6669 6c65 2077 6974 6820 a log file with │ │ │ -00006b80: 2d2d 6c6f 6746 696c 6520 796f 7520 6361 --logFile you ca │ │ │ -00006b90: 6e0a 2020 2020 6164 6469 7469 6f6e 616c n. additional │ │ │ -00006ba0: 6c79 2070 7269 6e74 2074 6865 206f 7574 ly print the out │ │ │ -00006bb0: 7075 7420 746f 2053 5444 4f55 5420 7769 put to STDOUT wi │ │ │ -00006bc0: 7468 2074 6869 7320 666c 6167 0a0a 3d69 th this flag..=i │ │ │ -00006bd0: 7465 6d20 423c 2d2d 7375 7070 7265 7373 tem B<--suppress │ │ │ -00006be0: 5469 6d65 3e0a 0a20 2020 2073 7570 7072 Time>.. suppr │ │ │ -00006bf0: 6573 7320 6f75 7470 7574 206f 6620 7469 ess output of ti │ │ │ -00006c00: 6d65 2069 6e20 6c6f 6766 696c 650a 0a3d me in logfile..= │ │ │ -00006c10: 6974 656d 2042 3c2d 2d6d 6178 4669 6c65 item B<--maxFile │ │ │ -00006c20: 6c65 6e3e 2c20 423c 2d6d 3e0a 0a20 2020 len>, B<-m>.. │ │ │ -00006c30: 206d 6178 696d 616c 206c 656e 6774 6820 maximal length │ │ │ -00006c40: 6f66 206c 6f67 2066 696c 652c 2064 6566 of log file, def │ │ │ -00006c50: 6175 6c74 203d 2031 6536 0a0a 3d69 7465 ault = 1e6..=ite │ │ │ -00006c60: 6d20 423c 2d2d 6e6f 4f66 4f6c 6446 696c m B<--noOfOldFil │ │ │ -00006c70: 6573 3e2c 2042 3c2d 6e3e 0a0a 2020 2020 es>, B<-n>.. │ │ │ -00006c80: 6e75 6d62 6572 206f 6620 6f6c 6420 6c6f number of old lo │ │ │ -00006c90: 6720 6669 6c65 732c 2064 6566 6175 6c74 g files, default │ │ │ -00006ca0: 203d 2035 0a0a 3d69 7465 6d20 423c 2d2d = 5..=item B<-- │ │ │ -00006cb0: 7361 7665 4c6f 6773 3e0a 0a20 2020 2073 saveLogs>.. s │ │ │ -00006cc0: 6176 6520 6c6f 6720 6669 6c65 7320 7769 ave log files wi │ │ │ -00006cd0: 7468 2064 6174 6520 616e 6420 7469 6d65 th date and time │ │ │ -00006ce0: 2069 6e73 7465 6164 206f 6620 6465 6c65 instead of dele │ │ │ -00006cf0: 7469 6e67 2074 6865 0a20 2020 206f 6c64 ting the. old │ │ │ -00006d00: 2028 7769 7468 205b 2d6e 6f4f 664f 6c64 (with [-noOfOld │ │ │ -00006d10: 4669 6c65 735d 290a 0a3d 6974 656d 2042 Files])..=item B │ │ │ -00006d20: 3c2d 2d63 6f6d 7072 6573 7357 6974 683e <--compressWith> │ │ │ -00006d30: 0a0a 2020 2020 636f 6d70 7265 7373 2073 .. compress s │ │ │ -00006d40: 6176 6564 206c 6f67 2066 696c 6573 2028 aved log files ( │ │ │ -00006d50: 652e 672e 2077 6974 6820 2767 7a69 7020 e.g. with 'gzip │ │ │ -00006d60: 2d39 2729 0a20 2020 2064 6566 6175 6c74 -9'). default │ │ │ -00006d70: 2069 7320 2762 7a69 7032 270a 2020 2020 is 'bzip2'. │ │ │ -00006d80: 5468 6973 2070 6172 616d 6574 6572 2069 This parameter i │ │ │ -00006d90: 7320 7061 7273 6564 206c 696b 6520 6120 s parsed like a │ │ │ -00006da0: 6c69 6e65 2069 6e20 7468 6520 636f 6e66 line in the conf │ │ │ -00006db0: 6967 7572 6174 696f 6e0a 2020 2020 6669 iguration. fi │ │ │ -00006dc0: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally │ │ │ -00006dd0: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted │ │ │ -00006de0: 2e0a 0a3d 6974 656d 2042 3c2d 2d6c 6f67 ...=item B<--log │ │ │ -00006df0: 496e 4261 636b 7570 4469 723e 0a0a 2020 InBackupDir>.. │ │ │ -00006e00: 2020 7772 6974 6520 6c6f 6720 6669 6c65 write log file │ │ │ -00006e10: 2028 616c 736f 2920 696e 2074 6865 2062 (also) in the b │ │ │ -00006e20: 6163 6b75 7020 6469 7265 6374 6f72 790a ackup directory. │ │ │ -00006e30: 2020 2020 4265 2061 7761 7265 2074 6861 Be aware tha │ │ │ -00006e40: 7420 7468 6973 206c 6f67 2064 6f65 7320 t this log does │ │ │ -00006e50: 6e6f 7420 636f 6e74 6169 6e20 616c 6c20 not contain all │ │ │ -00006e60: 6572 726f 720a 2020 2020 6d65 7373 6167 error. messag │ │ │ -00006e70: 6573 206f 6620 7468 6520 6f6e 6520 7370 es of the one sp │ │ │ -00006e80: 6563 6966 6965 6420 7769 7468 202d 2d6c ecified with --l │ │ │ -00006e90: 6f67 4669 6c65 210a 0a3d 6974 656d 2042 ogFile!..=item B │ │ │ -00006ea0: 3c2d 2d63 6f6d 7072 6573 734c 6f67 496e <--compressLogIn │ │ │ -00006eb0: 4261 636b 7570 4469 723e 0a0a 2020 2020 BackupDir>.. │ │ │ -00006ec0: 636f 6d70 7265 7373 2074 6865 206c 6f67 compress the log │ │ │ -00006ed0: 2066 696c 6520 696e 2074 6865 2062 6163 file in the bac │ │ │ -00006ee0: 6b75 7020 6469 7265 6374 6f72 790a 0a3d kup directory..= │ │ │ -00006ef0: 6974 656d 2042 3c2d 2d6c 6f67 496e 4261 item B<--logInBa │ │ │ -00006f00: 636b 7570 4469 7246 696c 654e 616d 653e ckupDirFileName> │ │ │ -00006f10: 0a0a 2020 2020 6669 6c65 6e61 6d65 2074 .. filename t │ │ │ -00006f20: 6f20 7573 6520 666f 7220 7772 6974 696e o use for writin │ │ │ -00006f30: 6720 7468 6520 6162 6f76 6520 6c6f 6720 g the above log │ │ │ -00006f40: 6669 6c65 2c0a 2020 2020 6465 6661 756c file,. defaul │ │ │ -00006f50: 7420 6973 202e 7374 6f72 6542 6163 6b75 t is .storeBacku │ │ │ -00006f60: 702e 6c6f 670a 0a3d 6974 656d 2042 3c6f p.log..=item B.. List of o │ │ │ -00006f90: 7468 6572 2062 6163 6b75 7020 7365 7269 ther backup seri │ │ │ -00006fa0: 6573 2074 6f20 636f 6e73 6964 6572 2066 es to consider f │ │ │ -00006fb0: 6f72 0a20 2020 2068 6172 6420 6c69 6e6b or. hard link │ │ │ -00006fc0: 696e 672e 2052 656c 6174 6976 6520 7061 ing. Relative pa │ │ │ -00006fd0: 7468 2066 726f 6d20 6261 636b 7570 4469 th from backupDi │ │ │ -00006fe0: 7221 0a20 2020 2046 6f72 6d61 7420 2865 r!. Format (e │ │ │ -00006ff0: 7861 6d70 6c65 7329 3a0a 2020 2020 6261 xamples):. ba │ │ │ -00007000: 636b 7570 5365 7269 6573 2f32 3030 322e ckupSeries/2002. │ │ │ -00007010: 3038 2e32 395f 3038 2e32 352e 3238 202d 08.29_08.25.28 - │ │ │ -00007020: 3e20 636f 6e73 6964 6572 2074 6869 7320 > consider this │ │ │ -00007030: 6261 636b 7570 0a20 2020 206f 720a 2020 backup. or. │ │ │ -00007040: 2020 303a 6261 636b 7570 5365 7269 6573 0:backupSeries │ │ │ -00007050: 202d 3e6c 6173 7420 2879 6f75 6e67 6573 ->last (younges │ │ │ -00007060: 7429 2069 6e20 3c62 6163 6b75 7044 6972 t) in /backupSeries. │ │ │ -00007080: 2020 2031 3a62 6163 6b75 7053 6572 6965 1:backupSerie │ │ │ -00007090: 7320 2d3e 6f6e 6520 6265 666f 7265 206c s ->one before l │ │ │ -000070a0: 6173 7420 696e 203c 6261 636b 7570 4469 ast in /backupSeries. │ │ │ -000070c0: 2020 2020 6e3a 6261 636b 7570 5365 7269 n:backupSeri │ │ │ -000070d0: 6573 202d 3e0a 2020 2020 2020 6e27 7468 es ->. n'th │ │ │ -000070e0: 2062 6566 6f72 6520 6c61 7374 2069 6e20 before last in │ │ │ -000070f0: 3c62 6163 6b75 7044 6972 3e2f 6261 636b /back │ │ │ -00007100: 7570 5365 7269 6573 0a20 2020 2033 2d35 upSeries. 3-5 │ │ │ -00007110: 3a62 6163 6b75 7053 6572 6965 7320 2d3e :backupSeries -> │ │ │ -00007120: 0a20 2020 2020 2033 7264 2c20 3474 6820 . 3rd, 4th │ │ │ -00007130: 616e 6420 3574 6820 696e 203c 6261 636b and 5th in /backupSer │ │ │ -00007150: 6965 730a 2020 2020 616c 6c3a 6261 636b ies. all:back │ │ │ -00007160: 7570 5365 7269 6573 202d 3e20 616c 6c20 upSeries -> all │ │ │ -00007170: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b │ │ │ -00007180: 6163 6b75 7053 6572 6965 730a 2020 2020 ackupSeries. │ │ │ -00007190: 596f 7520 6361 6e20 616c 736f 2075 7365 You can also use │ │ │ -000071a0: 2077 696c 6463 6172 6473 2069 6e20 7365 wildcards in se │ │ │ -000071b0: 7269 6573 206e 616d 6573 2e20 5365 6520 ries names. See │ │ │ -000071c0: 646f 6375 6d65 6e74 6174 696f 6e2c 0a20 documentation,. │ │ │ -000071d0: 2020 2073 6563 7469 6f6e 2027 5573 696e section 'Usin │ │ │ -000071e0: 6720 5769 6c64 6361 7264 7320 666f 7220 g Wildcards for │ │ │ -000071f0: 5265 706c 6963 6174 696f 6e27 2066 6f72 Replication' for │ │ │ -00007200: 2064 6574 6169 6c73 2e0a 2020 2020 4465 details.. De │ │ │ -00007210: 6661 756c 7420 6973 2074 6f20 6c69 6e6b fault is to link │ │ │ -00007220: 2074 6f20 7468 6520 6c61 7374 2062 6163 to the last bac │ │ │ -00007230: 6b75 7020 696e 2065 7665 7279 2073 6572 kup in every ser │ │ │ -00007240: 6965 730a 0a3d 6261 636b 0a0a 3d68 6561 ies..=back..=hea │ │ │ -00007250: 6431 2043 4f50 5952 4947 4854 0a0a 436f d1 COPYRIGHT..Co │ │ │ -00007260: 7079 7269 6768 7420 2863 2920 3230 3030 pyright (c) 2000 │ │ │ -00007270: 2d32 3032 3220 6279 2048 6569 6e7a 2d4a -2022 by Heinz-J │ │ │ -00007280: 6f73 6566 2043 6c61 6573 2028 7365 6520 osef Claes (see │ │ │ -00007290: 5245 4144 4d45 292e 0a50 7562 6c69 7368 README)..Publish │ │ │ -000072a0: 6564 2075 6e64 6572 2074 6865 2047 4e55 ed under the GNU │ │ │ -000072b0: 2047 656e 6572 616c 2050 7562 6c69 6320 General Public │ │ │ -000072c0: 4c69 6365 6e73 652c 2065 6974 6865 7220 License, either │ │ │ -000072d0: 7665 7273 696f 6e20 330a 6f66 2074 6865 version 3.of the │ │ │ -000072e0: 204c 6963 656e 7365 2c20 6f72 2028 6174 License, or (at │ │ │ -000072f0: 2079 6f75 7220 6f70 7469 6f6e 2920 616e your option) an │ │ │ -00007300: 7920 6c61 7465 7220 7665 7273 696f 6e2e y later version. │ │ │ -00007310: 0a0a 3d63 7574 0a0a 6d79 2024 4865 6c70 ..=cut..my $Help │ │ │ -00007320: 203d 203c 3c45 4f48 3b0a 7472 7920 2724 = < &::S │ │ │ -000074c0: 495a 4528 2233 4d22 2927 2061 6e64 2027 IZE("3M")' and ' │ │ │ -000074d0: 5c24 7569 6420 6571 2022 686a 6322 2720 \$uid eq "hjc"' │ │ │ -000074e0: 2920 6f72 0a23 2020 2020 2820 275c 246d ) or.# ( '\$m │ │ │ -000074f0: 7469 6d65 203e 2026 3a3a 4441 5445 2822 time > &::DATE(" │ │ │ -00007500: 3364 3468 2229 2720 616e 6420 6e6f 7420 3d4h")' and not │ │ │ -00007510: 275c 2466 696c 6520 3d7e 206d 232f 746d '\$file =~ m#/tm │ │ │ -00007520: 702f 2327 2029 270a 3b63 6865 636b 426c p/#' )'.;checkBl │ │ │ -00007530: 6f63 6b73 5275 6c65 303d 0a0a 2320 426c ocksRule0=..# Bl │ │ │ -00007540: 6f63 6b20 7369 7a65 2066 6f72 206f 7074 ock size for opt │ │ │ -00007550: 696f 6e20 6368 6563 6b42 6c6f 636b 7352 ion checkBlocksR │ │ │ -00007560: 756c 650a 2320 6465 6661 756c 7420 6973 ule.# default is │ │ │ -00007570: 2024 6368 6563 6b42 6c6f 636b 7342 5364 $checkBlocksBSd │ │ │ -00007580: 6566 6175 6c74 2028 3120 6d65 6761 6279 efault (1 megaby │ │ │ -00007590: 7465 290a 3b63 6865 636b 426c 6f63 6b73 te).;checkBlocks │ │ │ -000075a0: 4253 303d 0a0a 2320 6966 2073 6574 2074 BS0=..# if set t │ │ │ -000075b0: 6f20 2779 6573 272c 2062 6c6f 636b 7320 o 'yes', blocks │ │ │ -000075c0: 6765 6e65 7261 7465 6420 6475 6520 746f generated due to │ │ │ -000075d0: 2074 6869 7320 7275 6c65 2077 696c 6c20 this rule will │ │ │ -000075e0: 6265 2063 6f6d 7072 6573 7365 640a 2320 be compressed.# │ │ │ -000075f0: 706f 7373 6962 6c65 2076 616c 7565 733a possible values: │ │ │ -00007600: 2027 6368 6563 6b27 2c20 2779 6573 2720 'check', 'yes' │ │ │ -00007610: 6f72 2027 6e6f 272c 2064 6566 6175 6c74 or 'no', default │ │ │ -00007620: 2069 7320 276e 6f27 0a23 2063 6865 636b is 'no'.# check │ │ │ -00007630: 2075 7365 7273 2043 4f4d 5245 5353 494f users COMRESSIO │ │ │ -00007640: 4e5f 4348 4543 4b20 2873 6565 206f 7074 N_CHECK (see opt │ │ │ -00007650: 696f 6e20 636f 6d70 7265 7373 5375 6666 ion compressSuff │ │ │ -00007660: 6978 290a 3b63 6865 636b 426c 6f63 6b73 ix).;checkBlocks │ │ │ -00007670: 436f 6d70 7230 3d0a 0a23 2046 696c 7465 Compr0=..# Filte │ │ │ -00007680: 7220 666f 7220 7265 6164 696e 6720 7468 r for reading th │ │ │ -00007690: 6520 6669 6c65 2074 6f20 7472 6561 7420 e file to treat │ │ │ -000076a0: 6173 2061 2062 6c6f 636b 6564 2066 696c as a blocked fil │ │ │ -000076b0: 650a 2320 6567 2e20 2020 677a 6970 202d e.# eg. gzip - │ │ │ -000076c0: 6420 2020 6966 2074 6865 2066 696c 6520 d if the file │ │ │ -000076d0: 6973 2063 6f6d 7072 6573 7365 642e 2044 is compressed. D │ │ │ -000076e0: 6566 6175 6c74 2069 7320 6e6f 2072 6561 efault is no rea │ │ │ -000076f0: 6420 6669 6c74 6572 2e0a 3b63 6865 636b d filter..;check │ │ │ -00007700: 426c 6f63 6b73 5265 6164 303d 0a0a 2320 BlocksRead0=..# │ │ │ -00007710: 5265 6164 2066 696c 6573 2073 7065 6369 Read files speci │ │ │ -00007720: 6669 6564 2068 6572 6520 696e 2070 6172 fied here in par │ │ │ -00007730: 616c 6c65 6c20 746f 2022 6e6f 726d 616c allel to "normal │ │ │ -00007740: 2220 6f6e 6573 2e0a 2320 5468 6973 206f " ones..# This o │ │ │ -00007750: 6e6c 7920 6d61 6b65 7320 7365 6e73 6520 nly makes sense │ │ │ -00007760: 6966 2074 6865 7920 6172 6520 6f6e 2061 if they are on a │ │ │ -00007770: 2064 6966 6665 7265 6e74 2064 6973 6b2e different disk. │ │ │ -00007780: 0a23 2044 6566 6175 6c74 2076 616c 7565 .# Default value │ │ │ -00007790: 2069 7320 276e 6f27 0a3b 6368 6563 6b42 is 'no'.;checkB │ │ │ -000077a0: 6c6f 636b 7350 6172 616c 6c65 6c30 3d0a locksParallel0=. │ │ │ -000077b0: 0a45 4f48 0a20 2020 203b 0a7b 0a20 2020 .EOH. ;.{. │ │ │ -000077c0: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore │ │ │ -000077d0: 6163 6820 2469 2028 312e 2e24 6e6f 426c ach $i (1..$noBl │ │ │ -000077e0: 6f63 6b52 756c 6573 2d31 290a 2020 2020 ockRules-1). │ │ │ -000077f0: 7b0a 0924 626c 6f63 6b52 756c 6573 4865 {..$blockRulesHe │ │ │ -00007800: 6c70 202e 3d0a 0920 2020 2073 7072 696e lp .=.. sprin │ │ │ -00007810: 7466 2822 3b63 6865 636b 426c 6f63 6b73 tf(";checkBlocks │ │ │ -00007820: 5275 6c65 2564 3d5c 6e3b 6368 6563 6b42 Rule%d=\n;checkB │ │ │ -00007830: 6c6f 636b 7342 5325 643d 5c6e 3b63 6865 locksBS%d=\n;che │ │ │ -00007840: 636b 426c 6f63 6b73 436f 6d70 7225 643d ckBlocksCompr%d= │ │ │ -00007850: 5c6e 2220 2e0a 0909 2020 2020 223b 6368 \n" .... ";ch │ │ │ -00007860: 6563 6b42 6c6f 636b 7352 6561 6425 643d eckBlocksRead%d= │ │ │ -00007870: 5c6e 3b63 6865 636b 426c 6f63 6b73 5061 \n;checkBlocksPa │ │ │ -00007880: 7261 6c6c 656c 2564 3d5c 6e5c 6e22 2c0a rallel%d=\n\n",. │ │ │ -00007890: 0909 2020 2020 2469 2c20 2469 2c20 2469 .. $i, $i, $i │ │ │ -000078a0: 2c20 2469 2c20 2469 293b 0a20 2020 207d , $i, $i);. } │ │ │ -000078b0: 0a20 2020 2063 686f 7020 2462 6c6f 636b . chop $block │ │ │ -000078c0: 5275 6c65 7348 656c 703b 0a7d 0a0a 6d79 RulesHelp;.}..my │ │ │ -000078d0: 2024 626c 6f63 6b44 6576 6963 6548 656c $blockDeviceHel │ │ │ -000078e0: 7020 3d20 3c3c 454f 483b 0a23 2020 4c69 p = < cons │ │ │ -00008910: 6964 6572 2074 6869 7320 6261 636b 7570 ider this backup │ │ │ -00008920: 0a23 206f 720a 2320 303a 6261 636b 7570 .# or.# 0:backup │ │ │ -00008930: 5365 7269 6573 2020 2020 2d3e 206c 6173 Series -> las │ │ │ -00008940: 7420 2879 6f75 6e67 6573 7429 2062 6163 t (youngest) bac │ │ │ -00008950: 6b75 7020 696e 203c 6261 636b 7570 4469 kup in /backupSeries. │ │ │ -00008970: 2320 313a 6261 636b 7570 5365 7269 6573 # 1:backupSeries │ │ │ -00008980: 2020 2020 2d3e 2066 6972 7374 2062 6566 -> first bef │ │ │ -00008990: 6f72 6520 6c61 7374 2062 6163 6b75 7020 ore last backup │ │ │ -000089a0: 696e 203c 6261 636b 7570 4469 723e 2f62 in /b │ │ │ -000089b0: 6163 6b75 7053 6572 6965 730a 2320 6e3a ackupSeries.# n: │ │ │ -000089c0: 6261 636b 7570 5365 7269 6573 2020 2020 backupSeries │ │ │ -000089d0: 2d3e 206e 2774 6820 6265 666f 7265 206c -> n'th before l │ │ │ -000089e0: 6173 7420 6261 636b 7570 2069 6e20 3c62 ast backup in /backup │ │ │ -00008a00: 5365 7269 6573 0a23 2033 2d35 3a62 6163 Series.# 3-5:bac │ │ │ -00008a10: 6b75 7053 6572 6965 7320 202d 3e20 3372 kupSeries -> 3r │ │ │ -00008a20: 642c 2034 7468 2061 6e64 2035 7468 2069 d, 4th and 5th i │ │ │ -00008a30: 6e20 3c62 6163 6b75 7044 6972 3e2f 6261 n /ba │ │ │ -00008a40: 636b 7570 5365 7269 6573 0a23 2061 6c6c ckupSeries.# all │ │ │ -00008a50: 3a62 6163 6b75 7053 6572 6965 7320 202d :backupSeries - │ │ │ -00008a60: 3e20 616c 6c20 696e 203c 6261 636b 7570 > all in /backupSerie │ │ │ -00008a80: 730a 2320 5468 6973 206f 7074 696f 6e20 s.# This option │ │ │ -00008a90: 6973 2075 7365 6675 6c2c 2069 6620 796f is useful, if yo │ │ │ -00008aa0: 7520 7761 6e74 2074 6f20 6578 706c 6963 u want to explic │ │ │ -00008ab0: 6974 6c79 2068 6172 6420 6c69 6e6b 0a23 itly hard link.# │ │ │ -00008ac0: 2074 6f20 6261 636b 7570 2073 6572 6965 to backup serie │ │ │ -00008ad0: 7320 6672 6f6d 2064 6966 6665 7265 6e74 s from different │ │ │ -00008ae0: 2062 6163 6b75 7073 2e20 596f 7520 6361 backups. You ca │ │ │ -00008af0: 6e20 7370 6563 6966 7920 6567 2e20 7769 n specify eg. wi │ │ │ -00008b00: 7468 0a23 2030 3a6d 7942 6163 6b75 7020 th.# 0:myBackup │ │ │ -00008b10: 746f 2074 6865 206c 6173 7420 6261 636b to the last back │ │ │ -00008b20: 7570 206f 6620 7365 7269 6573 2027 6d79 up of series 'my │ │ │ -00008b30: 4261 636b 7570 272e 2049 6620 796f 7520 Backup'. If you │ │ │ -00008b40: 7370 6563 6966 790a 2320 6261 636b 7570 specify.# backup │ │ │ -00008b50: 2073 6572 6965 7320 7769 7468 206f 7468 series with oth │ │ │ -00008b60: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, │ │ │ -00008b70: 7468 656e 206f 6e6c 7920 7468 6573 6520 then only these │ │ │ -00008b80: 6261 636b 7570 7320 7769 6c6c 2062 650a backups will be. │ │ │ -00008b90: 2320 7573 6564 2066 6f72 2068 6172 6420 # used for hard │ │ │ -00008ba0: 6c69 6e6b 696e 672e 0a23 2059 6f75 2063 linking..# You c │ │ │ -00008bb0: 616e 2061 6c73 6f20 7573 6520 7769 6c64 an also use wild │ │ │ -00008bc0: 6361 7264 7320 696e 2073 6572 6965 7320 cards in series │ │ │ -00008bd0: 6e61 6d65 732e 2053 6565 2064 6f63 756d names. See docum │ │ │ -00008be0: 656e 7461 7469 6f6e 2c0a 2320 7365 6374 entation,.# sect │ │ │ -00008bf0: 696f 6e20 2755 7369 6e67 2057 696c 6463 ion 'Using Wildc │ │ │ -00008c00: 6172 6473 2066 6f72 2052 6570 6c69 6361 ards for Replica │ │ │ -00008c10: 7469 6f6e 2720 666f 7220 6465 7461 696c tion' for detail │ │ │ -00008c20: 732e 0a23 2044 6566 6175 6c74 2076 616c s..# Default val │ │ │ -00008c30: 7565 2069 7320 746f 206c 696e 6b20 746f ue is to link to │ │ │ -00008c40: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup │ │ │ -00008c50: 206f 6620 616c 6c20 7365 7269 6573 2073 of all series s │ │ │ -00008c60: 746f 7265 6420 696e 0a23 2027 6261 636b tored in.# 'back │ │ │ -00008c70: 7570 4469 7227 2e0a 3b6f 7468 6572 4261 upDir'..;otherBa │ │ │ -00008c80: 636b 7570 5365 7269 6573 3d0a 0a23 206c ckupSeries=..# l │ │ │ -00008c90: 6f63 6b20 6669 6c65 2c20 6966 2065 7869 ock file, if exi │ │ │ -00008ca0: 7374 2c20 6e65 7720 696e 7374 616e 6365 st, new instance │ │ │ -00008cb0: 7320 7769 6c6c 2066 696e 6973 6820 6966 s will finish if │ │ │ -00008cc0: 0a23 2061 6e20 6f6c 6420 6973 2061 6c72 .# an old is alr │ │ │ -00008cd0: 6561 6479 2072 756e 6e69 6e67 2c20 6465 eady running, de │ │ │ -00008ce0: 6661 756c 7420 6973 2024 6c6f 636b 4669 fault is $lockFi │ │ │ -00008cf0: 6c65 0a23 2044 6566 6175 6c74 206c 6f63 le.# Default loc │ │ │ -00008d00: 6b20 6669 6c65 2066 6f72 2072 6f6f 7420 k file for root │ │ │ -00008d10: 6973 2069 6e20 2f76 6172 2f6c 6f63 6b2c is in /var/lock, │ │ │ -00008d20: 2066 6f72 206f 7468 6572 7320 696e 205c for others in \ │ │ │ -00008d30: 2448 4f4d 450a 3b6c 6f63 6b46 696c 653d $HOME.;lockFile= │ │ │ -00008d40: 0a0a 2320 7265 6d6f 7665 2074 6865 206c ..# remove the l │ │ │ -00008d50: 6f63 6b20 6669 6c65 7320 6265 666f 7265 ock files before │ │ │ -00008d60: 2064 656c 6574 696e 6720 6f6c 6420 6261 deleting old ba │ │ │ -00008d70: 636b 7570 730a 2320 6465 6661 756c 7420 ckups.# default │ │ │ -00008d80: 2827 6e6f 2729 2069 7320 746f 2064 656c ('no') is to del │ │ │ -00008d90: 6574 6520 7468 6520 6c6f 636b 2066 696c ete the lock fil │ │ │ -00008da0: 6520 6166 7465 7220 6465 6c65 7469 6e67 e after deleting │ │ │ -00008db0: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu │ │ │ -00008dc0: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and │ │ │ -00008dd0: 2027 6e6f 270a 3b75 6e6c 6f63 6b42 6566 'no'.;unlockBef │ │ │ -00008de0: 6f72 6544 656c 3d0a 0a23 2063 6f6e 7469 oreDel=..# conti │ │ │ -00008df0: 6e75 6520 6966 206f 6e65 206f 7220 6d6f nue if one or mo │ │ │ -00008e00: 7265 206f 6620 7468 6520 6578 6365 7074 re of the except │ │ │ -00008e10: 696f 6e61 6c20 6469 7265 6374 6f72 6965 ional directorie │ │ │ -00008e20: 730a 2320 646f 206e 6f74 2065 7869 7374 s.# do not exist │ │ │ -00008e30: 2028 6e6f 2069 7320 7374 6f70 7069 6e67 (no is stopping │ │ │ -00008e40: 2070 726f 6365 7373 696e 6729 0a23 2064 processing).# d │ │ │ -00008e50: 6566 6175 6c74 2069 7320 276e 6f27 2c20 efault is 'no', │ │ │ -00008e60: 6361 6e20 6265 2027 7965 7327 206f 7220 can be 'yes' or │ │ │ -00008e70: 276e 6f27 0a3b 636f 6e74 4578 6365 7074 'no'.;contExcept │ │ │ -00008e80: 4469 7273 4572 723d 0a0a 2320 4469 7265 DirsErr=..# Dire │ │ │ -00008e90: 6374 6f72 6965 7320 746f 2065 7863 6c75 ctories to exclu │ │ │ -00008ea0: 6465 2066 726f 6d20 7468 6520 6261 636b de from the back │ │ │ -00008eb0: 7570 2028 7265 6c61 7469 7665 2070 6174 up (relative pat │ │ │ -00008ec0: 6820 696e 7369 6465 206f 6620 7468 6520 h inside of the │ │ │ -00008ed0: 6261 636b 7570 292e 0a23 2059 6f75 2063 backup)..# You c │ │ │ -00008ee0: 616e 2075 7365 2073 6865 6c6c 2074 7970 an use shell typ │ │ │ -00008ef0: 6520 7769 6c64 6361 7264 732e 0a23 2054 e wildcards..# T │ │ │ -00008f00: 6865 7365 2064 6972 6563 746f 7269 6573 hese directories │ │ │ -00008f10: 2068 6176 6520 746f 2062 6520 7365 7061 have to be sepa │ │ │ -00008f20: 7261 7465 6420 6279 2073 7061 6365 206f rated by space o │ │ │ -00008f30: 7220 6e65 776c 696e 652e 0a3b 6578 6365 r newline..;exce │ │ │ -00008f40: 7074 4469 7273 3d0a 0a23 2044 6972 6563 ptDirs=..# Direc │ │ │ -00008f50: 746f 7269 6573 2074 6f20 696e 636c 7564 tories to includ │ │ │ -00008f60: 6520 696e 2074 6865 2062 6163 6b75 7020 e in the backup │ │ │ -00008f70: 2872 656c 6174 6976 6520 7061 7468 2069 (relative path i │ │ │ -00008f80: 6e73 6964 6520 6f66 2074 6865 2062 6163 nside of the bac │ │ │ -00008f90: 6b75 7029 2e0a 2320 596f 7520 6361 6e20 kup)..# You can │ │ │ -00008fa0: 7573 6520 7368 656c 6c20 7479 7065 2077 use shell type w │ │ │ -00008fb0: 696c 6463 6172 6473 2e0a 2320 5468 6573 ildcards..# Thes │ │ │ -00008fc0: 6520 6469 7265 6374 6f72 6965 7320 6861 e directories ha │ │ │ -00008fd0: 7665 2074 6f20 6265 2073 6570 6172 6174 ve to be separat │ │ │ -00008fe0: 6564 2062 7920 7370 6163 6520 6f72 206e ed by space or n │ │ │ -00008ff0: 6577 6c69 6e65 2e0a 3b69 6e63 6c75 6465 ewline..;include │ │ │ -00009000: 4469 7273 3d0a 0a23 2072 756c 6520 666f Dirs=..# rule fo │ │ │ -00009010: 7220 6578 636c 7564 696e 6720 6669 6c65 r excluding file │ │ │ -00009020: 7320 2f20 6f6e 6c79 2066 6f72 2065 7870 s / only for exp │ │ │ -00009030: 6572 6965 6e63 6564 2061 646d 696e 6973 erienced adminis │ │ │ -00009040: 7472 6174 6f72 730a 2320 2121 2120 7365 trators.# !!! se │ │ │ -00009050: 6520 5245 4144 4d45 2066 696c 6520 2769 e README file 'i │ │ │ -00009060: 6e63 6c75 6469 6e67 202f 2065 7863 6c75 ncluding / exclu │ │ │ -00009070: 6469 6e67 2066 696c 6573 2061 6e64 2064 ding files and d │ │ │ -00009080: 6972 6563 746f 7269 6573 270a 2320 4558 irectories'.# EX │ │ │ -00009090: 414d 504c 453a 200a 2320 7365 6172 6368 AMPLE: .# search │ │ │ -000090a0: 5275 6c65 203d 2028 2027 5c24 7369 7a65 Rule = ( '\$size │ │ │ -000090b0: 203e 2026 3a3a 5349 5a45 2822 334d 2229 > &::SIZE("3M") │ │ │ -000090c0: 2720 616e 6420 275c 2475 6964 2065 7120 ' and '\$uid eq │ │ │ -000090d0: 2268 6a63 2227 2029 206f 720a 2320 2020 "hjc"' ) or.# │ │ │ -000090e0: 2028 2027 5c24 6d74 696d 6520 3e20 263a ( '\$mtime > &: │ │ │ -000090f0: 3a44 4154 4528 2233 6434 6822 2927 2061 :DATE("3d4h")' a │ │ │ -00009100: 6e64 206e 6f74 2027 5c24 6669 6c65 203d nd not '\$file = │ │ │ -00009110: 7e20 6d23 2f74 6d70 2f23 2720 2927 0a3b ~ m#/tmp/#' )'.; │ │ │ -00009120: 6578 6365 7074 5275 6c65 3d0a 0a23 2046 exceptRule=..# F │ │ │ -00009130: 6f72 2065 7870 6c61 6e61 7469 6f6e 732c or explanations, │ │ │ -00009140: 2073 6565 2027 6578 6365 7074 5275 6c65 see 'exceptRule │ │ │ -00009150: 272e 0a3b 696e 636c 7564 6552 756c 653d '..;includeRule= │ │ │ -00009160: 0a0a 2320 7772 6974 6520 6120 6669 6c65 ..# write a file │ │ │ -00009170: 206e 616d 6520 2e73 746f 7265 4261 636b name .storeBack │ │ │ -00009180: 7570 2e6e 6f74 5361 7665 642e 627a 3220 up.notSaved.bz2 │ │ │ -00009190: 7769 7468 2074 6865 0a23 206e 616d 6573 with the.# names │ │ │ -000091a0: 206f 6620 616c 6c20 736b 6970 7065 6420 of all skipped │ │ │ -000091b0: 6669 6c65 732c 2064 6566 6175 6c74 2069 files, default i │ │ │ -000091c0: 7320 276e 6f27 2c20 6361 6e20 6265 2027 s 'no', can be ' │ │ │ -000091d0: 7965 7327 206f 7220 276e 6f27 0a3b 7772 yes' or 'no'.;wr │ │ │ -000091e0: 6974 6545 7863 6c75 6465 4c6f 673d 0a0a iteExcludeLog=.. │ │ │ -000091f0: 2320 646f 206e 6f74 2073 6176 6520 7468 # do not save th │ │ │ -00009200: 6520 7370 6563 6966 6965 6420 7479 7065 e specified type │ │ │ -00009210: 7320 6f66 2066 696c 6573 2c20 616c 6c6f s of files, allo │ │ │ -00009220: 7765 643a 2053 6263 6670 6c0a 2320 5320 wed: Sbcfpl.# S │ │ │ -00009230: 2d20 6669 6c65 2069 7320 6120 736f 636b - file is a sock │ │ │ -00009240: 6574 0a23 2062 202d 2066 696c 6520 6973 et.# b - file is │ │ │ -00009250: 2061 2062 6c6f 636b 2073 7065 6369 616c a block special │ │ │ -00009260: 2066 696c 650a 2320 6320 2d20 6669 6c65 file.# c - file │ │ │ -00009270: 2069 7320 6120 6368 6172 6163 7465 7220 is a character │ │ │ -00009280: 7370 6563 6961 6c20 6669 6c65 0a23 2066 special file.# f │ │ │ -00009290: 202d 2066 696c 6520 6973 2061 2070 6c61 - file is a pla │ │ │ -000092a0: 696e 2066 696c 650a 2320 7020 2d20 6669 in file.# p - fi │ │ │ -000092b0: 6c65 2069 7320 6120 6e61 6d65 6420 7069 le is a named pi │ │ │ -000092c0: 7065 0a23 206c 202d 2066 696c 6520 6973 pe.# l - file is │ │ │ -000092d0: 2061 2073 796d 626f 6c69 6320 6c69 6e6b a symbolic link │ │ │ -000092e0: 0a23 2053 7062 6320 6361 6e20 6f6e 6c79 .# Spbc can only │ │ │ -000092f0: 2062 6520 6261 636b 6564 2075 7020 6966 be backed up if │ │ │ -00009300: 2047 4e55 2063 6f70 7920 6973 2061 7661 GNU copy is ava │ │ │ -00009310: 696c 6162 6c65 2e0a 3b65 7863 6570 7454 ilable..;exceptT │ │ │ -00009320: 7970 6573 3d0a 0a23 2073 6176 6520 7468 ypes=..# save th │ │ │ -00009330: 6520 7370 6563 6966 6965 6420 7479 7065 e specified type │ │ │ -00009340: 206f 6620 6669 6c65 7320 696e 2061 6e20 of files in an │ │ │ -00009350: 6172 6368 6976 6520 696e 7374 6561 6420 archive instead │ │ │ -00009360: 7361 7669 6e67 0a23 2074 6865 6d20 6469 saving.# them di │ │ │ -00009370: 7265 6374 6c79 2069 6e20 7468 6520 6669 rectly in the fi │ │ │ -00009380: 6c65 2073 7973 7465 6d0a 2320 7573 6520 le system.# use │ │ │ -00009390: 7468 6973 2069 6620 796f 7520 7761 6e74 this if you want │ │ │ -000093a0: 2074 6f20 6261 636b 7570 2074 686f 7365 to backup those │ │ │ -000093b0: 2066 696c 6520 7479 7065 7320 6275 7420 file types but │ │ │ -000093c0: 796f 7572 2074 6172 6765 740a 2320 6669 your target.# fi │ │ │ -000093d0: 6c65 206f 7220 7472 616e 7370 6f72 7420 le or transport │ │ │ -000093e0: 2865 672e 2073 7368 6673 206f 7220 6e6f (eg. sshfs or no │ │ │ -000093f0: 6e20 676e 752d 6370 2920 7379 7374 656d n gnu-cp) system │ │ │ -00009400: 2064 6f65 7320 6e6f 7420 7375 7070 6f72 does not suppor │ │ │ -00009410: 740a 2320 7468 6f73 6520 7479 7065 7320 t.# those types │ │ │ -00009420: 6f66 2066 696c 650a 2320 2020 5320 2d20 of file.# S - │ │ │ -00009430: 6669 6c65 2069 7320 6120 736f 636b 6574 file is a socket │ │ │ -00009440: 0a23 2020 2062 202d 2066 696c 6520 6973 .# b - file is │ │ │ -00009450: 2061 2062 6c6f 636b 2073 7065 6369 616c a block special │ │ │ -00009460: 2066 696c 650a 2320 2020 6320 2d20 6669 file.# c - fi │ │ │ -00009470: 6c65 2069 7320 6120 6368 6172 6163 7465 le is a characte │ │ │ -00009480: 7220 7370 6563 6961 6c20 6669 6c65 0a23 r special file.# │ │ │ -00009490: 2020 2070 202d 2066 696c 6520 6973 2061 p - file is a │ │ │ -000094a0: 206e 616d 6564 2070 6970 650a 2320 2020 named pipe.# │ │ │ -000094b0: 6c20 2d20 6669 6c65 2069 7320 6120 7379 l - file is a sy │ │ │ -000094c0: 6d62 6f6c 6963 206c 696e 6b0a 2320 796f mbolic link.# yo │ │ │ -000094d0: 7520 616c 736f 2068 6176 6520 746f 2073 u also have to s │ │ │ -000094e0: 6574 2073 7065 6369 616c 5479 7065 4172 et specialTypeAr │ │ │ -000094f0: 6368 6976 6572 2077 6865 6e20 7573 696e chiver when usin │ │ │ -00009500: 6720 7468 6973 206f 7074 696f 6e0a 3b61 g this option.;a │ │ │ -00009510: 7263 6869 7665 5479 7065 733d 0a0a 0a23 rchiveTypes=...# │ │ │ -00009520: 2070 6f73 7369 626c 6520 7661 6c75 6573 possible values │ │ │ -00009530: 2061 7265 2027 6370 696f 272c 2027 7461 are 'cpio', 'ta │ │ │ -00009540: 7227 2c20 276e 6f6e 6527 2e20 6465 6661 r', 'none'. defa │ │ │ -00009550: 756c 7420 6973 2027 6370 696f 270a 2320 ult is 'cpio'.# │ │ │ -00009560: 7461 7220 6973 206e 6f74 2061 626c 6520 tar is not able │ │ │ -00009570: 746f 2061 7263 6869 7665 2073 6f63 6b65 to archive socke │ │ │ -00009580: 7473 0a23 2063 7069 6f20 6973 206e 6f74 ts.# cpio is not │ │ │ -00009590: 2070 6172 7420 6f66 2074 6865 2061 6374 part of the act │ │ │ -000095a0: 7561 6c20 706f 7369 7820 7374 616e 6461 ual posix standa │ │ │ -000095b0: 7264 2061 6e79 206d 6f72 650a 3b73 7065 rd any more.;spe │ │ │ -000095c0: 6369 616c 5479 7065 4172 6368 6976 6572 cialTypeArchiver │ │ │ -000095d0: 3d0a 0a23 2041 6374 6976 6174 6520 7468 =..# Activate th │ │ │ -000095e0: 6973 206f 7074 696f 6e20 6966 2079 6f75 is option if you │ │ │ -000095f0: 7220 7379 7374 656d 2773 2063 7020 6973 r system's cp is │ │ │ -00009600: 2061 2066 756c 6c2d 6665 6174 7572 6564 a full-featured │ │ │ -00009610: 2047 4e55 0a23 2076 6572 7369 6f6e 2e20 GNU.# version. │ │ │ -00009620: 496e 2074 6869 7320 6361 7365 2079 6f75 In this case you │ │ │ -00009630: 2077 696c 6c20 6265 2061 626c 6520 746f will be able to │ │ │ -00009640: 2061 6c73 6f20 6261 636b 7570 2073 6576 also backup sev │ │ │ -00009650: 6572 616c 0a23 2073 7065 6369 616c 2066 eral.# special f │ │ │ -00009660: 696c 6520 7479 7065 7320 6c69 6b65 2073 ile types like s │ │ │ -00009670: 6f63 6b65 7473 2e0a 2320 506f 7373 6962 ockets..# Possib │ │ │ -00009680: 6c65 2076 616c 7565 7320 6172 6520 2779 le values are 'y │ │ │ -00009690: 6573 2720 616e 6420 276e 6f27 2e20 4465 es' and 'no'. De │ │ │ -000096a0: 6661 756c 7420 6973 2027 6e6f 270a 3b63 fault is 'no'.;c │ │ │ -000096b0: 7049 7347 6e75 3d0a 0a23 206d 616b 6520 pIsGnu=..# make │ │ │ -000096c0: 6120 6861 7264 206c 696e 6b20 746f 2065 a hard link to e │ │ │ -000096d0: 7869 7374 696e 672c 2069 6465 6e74 6963 xisting, identic │ │ │ -000096e0: 616c 2073 796d 6c69 6e6b 7320 696e 206f al symlinks in o │ │ │ -000096f0: 6c64 2062 6163 6b75 7073 0a23 2075 7365 ld backups.# use │ │ │ -00009700: 2074 6869 732c 2069 6620 796f 7572 206f this, if your o │ │ │ -00009710: 7065 7261 7469 6e67 2073 7973 7465 6d20 perating system │ │ │ -00009720: 7375 7070 6f72 7473 2074 6869 7320 286c supports this (l │ │ │ -00009730: 696e 7578 2064 6f65 7329 0a23 2050 6f73 inux does).# Pos │ │ │ -00009740: 7369 626c 6520 7661 6c75 6573 2061 7265 sible values are │ │ │ -00009750: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'. │ │ │ -00009760: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no' │ │ │ -00009770: 0a3b 6c69 6e6b 5379 6d6c 696e 6b73 3d0a .;linkSymlinks=. │ │ │ -00009780: 0a23 2065 7865 6320 6a6f 6220 6265 666f .# exec job befo │ │ │ -00009790: 7265 2073 7461 7274 696e 6720 7468 6520 re starting the │ │ │ -000097a0: 6261 636b 7570 2c20 6368 6563 6b73 206c backup, checks l │ │ │ -000097b0: 6f63 6b46 696c 6520 282d 4c29 2062 6566 ockFile (-L) bef │ │ │ -000097c0: 6f72 650a 2320 7374 6172 7469 6e67 2028 ore.# starting ( │ │ │ -000097d0: 652e 672e 2063 616e 2062 6520 7573 6564 e.g. can be used │ │ │ -000097e0: 2066 6f72 2072 7379 6e63 2920 7374 6f70 for rsync) stop │ │ │ -000097f0: 7320 6578 6563 7574 696f 6e20 6966 206a s execution if j │ │ │ -00009800: 6f62 2072 6574 7572 6e73 0a23 2065 7869 ob returns.# exi │ │ │ -00009810: 7420 7374 6174 7573 2021 3d20 300a 3b70 t status != 0.;p │ │ │ -00009820: 7265 636f 6d6d 616e 643d 0a0a 2320 6578 recommand=..# ex │ │ │ -00009830: 6563 206a 6f62 2061 6674 6572 2066 696e ec job after fin │ │ │ -00009840: 6973 6869 6e67 2074 6865 2062 6163 6b75 ishing the backu │ │ │ -00009850: 702c 2062 7574 2062 6566 6f72 6520 6572 p, but before er │ │ │ -00009860: 6173 696e 6720 6f66 206f 6c64 0a23 2062 asing of old.# b │ │ │ -00009870: 6163 6b75 7073 2072 6570 6f72 7473 2069 ackups reports i │ │ │ -00009880: 6620 6a6f 6220 7265 7475 726e 7320 6578 f job returns ex │ │ │ -00009890: 6974 2073 7461 7475 7320 213d 2030 0a3b it status != 0.; │ │ │ -000098a0: 706f 7374 636f 6d6d 616e 643d 0a0a 2320 postcommand=..# │ │ │ -000098b0: 666f 6c6c 6f77 2073 796d 626f 6c69 6320 follow symbolic │ │ │ -000098c0: 6c69 6e6b 7320 6c69 6b65 2064 6972 6563 links like direc │ │ │ -000098d0: 746f 7269 6573 2075 7020 746f 2064 6570 tories up to dep │ │ │ -000098e0: 7468 2030 202d 3e20 646f 206e 6f74 0a23 th 0 -> do not.# │ │ │ -000098f0: 2066 6f6c 6c6f 7720 6c69 6e6b 730a 3b66 follow links.;f │ │ │ -00009900: 6f6c 6c6f 774c 696e 6b73 3d0a 0a23 206f ollowLinks=..# o │ │ │ -00009910: 6e6c 7920 7374 6f72 6520 7468 6520 636f nly store the co │ │ │ -00009920: 6e74 656e 7473 206f 6620 6669 6c65 2073 ntents of file s │ │ │ -00009930: 7973 7465 6d73 206e 616d 6564 2062 790a ystems named by. │ │ │ -00009940: 2320 736f 7572 6365 4469 7220 616e 6420 # sourceDir and │ │ │ -00009950: 7379 6d6c 696e 6b65 6420 7669 6120 666f symlinked via fo │ │ │ -00009960: 6c6c 6f77 4c69 6e6b 730a 2320 706f 7373 llowLinks.# poss │ │ │ -00009970: 6962 6c65 2076 616c 7565 7320 6172 6520 ible values are │ │ │ -00009980: 2779 6573 2720 616e 6420 276e 6f27 3b20 'yes' and 'no'; │ │ │ -00009990: 6465 6661 756c 7420 6973 2027 6e6f 270a default is 'no'. │ │ │ -000099a0: 3b73 7461 7949 6e46 696c 6553 7973 7465 ;stayInFileSyste │ │ │ -000099b0: 6d3d 0a0a 2320 7573 6520 7468 6973 206f m=..# use this o │ │ │ -000099c0: 6e6c 7920 6966 2079 6f75 2077 7269 7465 nly if you write │ │ │ -000099d0: 2079 6f75 7220 6261 636b 7570 206f 7665 your backup ove │ │ │ -000099e0: 7220 6120 6869 6768 206c 6174 656e 6379 r a high latency │ │ │ -000099f0: 206c 696e 650a 2320 6c69 6b65 2061 2076 line.# like a v │ │ │ -00009a00: 706e 206f 7665 7220 7468 6520 696e 7465 pn over the inte │ │ │ -00009a10: 726e 6574 0a23 2073 746f 7265 6261 636b rnet.# storeback │ │ │ -00009a20: 7570 2077 696c 6c20 7573 6520 6d6f 7265 up will use more │ │ │ -00009a30: 2070 6172 616c 6c65 6c69 7a61 7469 6f6e parallelization │ │ │ -00009a40: 2061 7420 7468 6520 636f 7374 206f 6620 at the cost of │ │ │ -00009a50: 6d6f 7265 0a23 2063 7075 2070 6f77 6572 more.# cpu power │ │ │ -00009a60: 0a23 2070 6f73 7369 626c 6520 7661 6c75 .# possible valu │ │ │ -00009a70: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and │ │ │ -00009a80: 2027 6e6f 273b 2064 6566 6175 6c74 2069 'no'; default i │ │ │ -00009a90: 7320 276e 6f27 0a3b 6869 6768 4c61 7465 s 'no'.;highLate │ │ │ -00009aa0: 6e63 793d 0a0a 2320 4966 2074 6869 7320 ncy=..# If this │ │ │ -00009ab0: 6f70 7469 6f6e 2069 7320 656e 6162 6c65 option is enable │ │ │ -00009ac0: 642c 2074 6865 6e20 7468 6520 6669 6c65 d, then the file │ │ │ -00009ad0: 7320 696e 2074 6865 2062 6163 6b75 7020 s in the backup │ │ │ -00009ae0: 7769 6c6c 206e 6f74 0a23 206e 6563 6365 will not.# necce │ │ │ -00009af0: 7373 6172 696c 7920 6861 7665 2074 6865 ssarily have the │ │ │ -00009b00: 2073 616d 6520 7065 726d 6973 7369 6f6e same permission │ │ │ -00009b10: 7320 616e 6420 6f77 6e65 7220 6173 2074 s and owner as t │ │ │ -00009b20: 6865 206f 7269 6769 6e61 6c73 2e0a 2320 he originals..# │ │ │ -00009b30: 5468 6973 2073 7065 6564 7320 7570 2062 This speeds up b │ │ │ -00009b40: 6163 6b75 7073 206f 6e20 6e65 7477 6f72 ackups on networ │ │ │ -00009b50: 6b20 6472 6976 6573 2061 206c 6f74 2e20 k drives a lot. │ │ │ -00009b60: 436f 7272 6563 7420 7065 726d 6973 7369 Correct permissi │ │ │ -00009b70: 6f6e 730a 2320 6172 6520 7265 7374 6f72 ons.# are restor │ │ │ -00009b80: 6564 2062 7920 7374 6f72 6542 6163 6b75 ed by storeBacku │ │ │ -00009b90: 7052 6563 6f76 6572 2e70 6c20 6e6f 206d pRecover.pl no m │ │ │ -00009ba0: 6174 7465 7220 7768 6174 2074 6869 7320 atter what this │ │ │ -00009bb0: 6f70 7469 6f6e 2069 730a 2320 7365 7420 option is.# set │ │ │ -00009bc0: 746f 2e20 4465 6661 756c 7420 6973 2027 to. Default is ' │ │ │ -00009bd0: 6e6f 270a 3b69 676e 6f72 6550 6572 6d73 no'.;ignorePerms │ │ │ -00009be0: 3d0a 0a23 2073 7570 7072 6573 7320 2875 =..# suppress (u │ │ │ -00009bf0: 6e77 616e 7465 6429 2077 6172 6e69 6e67 nwanted) warning │ │ │ -00009c00: 7320 696e 2074 6865 206c 6f67 2066 696c s in the log fil │ │ │ -00009c10: 6573 3b0a 2320 746f 2073 7570 7072 6573 es;.# to suppres │ │ │ -00009c20: 7320 7761 726e 696e 6773 2c20 7468 6520 s warnings, the │ │ │ -00009c30: 666f 6c6c 6f77 696e 6720 6b65 7973 2063 following keys c │ │ │ -00009c40: 616e 2062 6520 7573 6564 3a0a 2320 2020 an be used:.# │ │ │ -00009c50: 6578 6344 6972 2028 7375 7070 7265 7373 excDir (suppress │ │ │ -00009c60: 6573 2074 6865 2077 6172 6e69 6e67 2074 es the warning t │ │ │ -00009c70: 6861 7420 6578 636c 7564 6564 2064 6972 hat excluded dir │ │ │ -00009c80: 6563 746f 7269 6573 0a23 2020 2020 2020 ectories.# │ │ │ -00009c90: 2020 2020 646f 206e 6f74 2065 7869 7374 do not exist │ │ │ -00009ca0: 290a 2320 2020 6669 6c65 4368 616e 6765 ).# fileChange │ │ │ -00009cb0: 2028 7375 7070 7265 7373 6573 2074 6865 (suppresses the │ │ │ -00009cc0: 2077 6172 6e69 6e67 2074 6861 7420 6120 warning that a │ │ │ -00009cd0: 6669 6c65 2068 6173 2063 6861 6e67 6564 file has changed │ │ │ -00009ce0: 2064 7572 696e 670a 2320 2020 2020 2020 during.# │ │ │ -00009cf0: 2020 2020 2020 2074 6865 2062 6163 6b75 the backu │ │ │ -00009d00: 7029 0a23 2020 2063 7253 6572 6965 7320 p).# crSeries │ │ │ -00009d10: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the │ │ │ -00009d20: 7761 726e 696e 6720 7468 6174 2073 746f warning that sto │ │ │ -00009d30: 7265 4261 636b 7570 2068 6164 2074 6f20 reBackup had to │ │ │ -00009d40: 6372 6561 7465 2074 6865 0a23 2020 2020 create the.# │ │ │ -00009d50: 2020 2020 2020 2020 2764 6566 6175 6c74 'default │ │ │ -00009d60: 2720 7365 7269 6573 290a 2320 2020 6861 ' series).# ha │ │ │ -00009d70: 7368 436f 6c6c 6973 696f 6e20 2873 7570 shCollision (sup │ │ │ -00009d80: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn │ │ │ -00009d90: 696e 6720 6966 2061 2070 6f73 7369 626c ing if a possibl │ │ │ -00009da0: 650a 2320 2020 2020 2020 2020 2020 2020 e.# │ │ │ -00009db0: 2020 2020 6861 7368 2063 6f6c 6c69 7369 hash collisi │ │ │ -00009dc0: 6f6e 2069 7320 6465 7465 6374 6564 290a on is detected). │ │ │ -00009dd0: 2320 2020 6669 6c65 4e61 6d65 5769 7468 # fileNameWith │ │ │ -00009de0: 4c69 6e65 4665 6564 2028 7375 7070 7265 LineFeed (suppre │ │ │ -00009df0: 7373 6573 2074 6865 2077 6172 6e69 6e67 sses the warning │ │ │ -00009e00: 2069 6620 6120 6669 6c65 6e61 6d65 0a23 if a filename.# │ │ │ -00009e10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00009e20: 2020 2020 2020 2020 636f 6e74 6169 6e73 contains │ │ │ -00009e30: 2061 206c 696e 6520 6665 6564 290a 2320 a line feed).# │ │ │ -00009e40: 2020 2075 7365 5f44 425f 4669 6c65 2028 use_DB_File ( │ │ │ -00009e50: 7375 7070 7265 7373 6573 2074 6865 2077 suppresses the w │ │ │ -00009e60: 6172 6e69 6e67 2074 6861 7420 796f 7520 arning that you │ │ │ -00009e70: 7368 6f75 6c64 2069 6e73 7461 6c6c 0a23 should install.# │ │ │ -00009e80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00009e90: 2070 6572 6c20 6d6f 6475 6c65 2044 425f perl module DB_ │ │ │ -00009ea0: 4669 6c65 2066 6f72 2062 6574 7465 7220 File for better │ │ │ -00009eb0: 7065 7266 6f72 616d 6e63 6529 0a23 2020 perforamnce).# │ │ │ -00009ec0: 2020 7573 655f 4d4c 4442 4d20 2873 7570 use_MLDBM (sup │ │ │ -00009ed0: 7072 6573 7365 7320 7468 6520 7761 726e presses the warn │ │ │ -00009ee0: 696e 6720 7468 6174 2079 6f75 2073 686f ing that you sho │ │ │ -00009ef0: 756c 6420 696e 7374 616c 6c0a 2320 2020 uld install.# │ │ │ -00009f00: 2020 2020 2020 2020 2020 2020 7065 726c perl │ │ │ -00009f10: 206d 6f64 756c 6520 4d4c 4442 4d20 6966 module MLDBM if │ │ │ -00009f20: 2079 6f75 2077 616e 7420 746f 2075 7365 you want to use │ │ │ -00009f30: 2072 756c 6520 6675 6e63 7469 6f6e 730a rule functions. │ │ │ -00009f40: 2320 2020 2020 2020 2020 2020 2020 2020 # │ │ │ -00009f50: 4d41 524b 5f44 4952 206f 7220 4d41 524b MARK_DIR or MARK │ │ │ -00009f60: 5f44 4952 5f52 4543 2074 6f67 6574 6865 _DIR_REC togethe │ │ │ -00009f70: 7220 7769 7468 206f 7074 696f 6e20 7361 r with option sa │ │ │ -00009f80: 7665 5241 4d29 0a23 2020 2020 7573 655f veRAM).# use_ │ │ │ -00009f90: 494f 436f 6d70 7265 7373 427a 6970 3220 IOCompressBzip2 │ │ │ -00009fa0: 2873 7570 7072 6573 7365 7320 7468 6520 (suppresses the │ │ │ -00009fb0: 7761 726e 696e 6720 7468 6174 2079 6f75 warning that you │ │ │ -00009fc0: 2073 686f 756c 640a 2320 2020 2020 2020 should.# │ │ │ -00009fd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00009fe0: 2020 696e 7374 616c 2070 6572 6c20 6d6f instal perl mo │ │ │ -00009ff0: 6475 6c65 2049 4f3a 3a43 6f6d 7072 6573 dule IO::Compres │ │ │ -0000a000: 733a 3a42 7a69 7032 0a23 2020 2020 2020 s::Bzip2.# │ │ │ -0000a010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000a020: 2020 2066 6f72 2062 6574 7465 7220 7065 for better pe │ │ │ -0000a030: 7266 6f72 6d61 6e63 6529 0a23 2020 2020 rformance).# │ │ │ -0000a040: 6e6f 4261 636b 7570 466f 7250 6572 696f noBackupForPerio │ │ │ -0000a050: 6420 2873 7570 7072 6573 7365 7320 7761 d (suppresses wa │ │ │ -0000a060: 726e 696e 6720 7468 6174 2074 6865 7265 rning that there │ │ │ -0000a070: 2061 7265 0a23 2020 2020 2020 2020 2020 are.# │ │ │ -0000a080: 2020 2020 2020 2020 2020 2020 206e 6f20 no │ │ │ -0000a090: 6261 636b 7570 7320 666f 7220 6365 7274 backups for cert │ │ │ -0000a0a0: 6169 6e20 7065 7269 6f64 7320 7768 656e ain periods when │ │ │ -0000a0b0: 2075 7369 6e67 0a23 2020 2020 2020 2020 using.# │ │ │ -0000a0c0: 2020 2020 2020 2020 2020 2020 2020 206f o │ │ │ -0000a0d0: 7074 696f 6e20 6b65 6570 5265 6c61 7469 ption keepRelati │ │ │ -0000a0e0: 7665 290a 2320 2054 6869 7320 6f70 7469 ve).# This opti │ │ │ -0000a0f0: 6f6e 2063 616e 2062 6520 7265 7065 6174 on can be repeat │ │ │ -0000a100: 6564 206d 756c 7469 706c 6520 7469 6d65 ed multiple time │ │ │ -0000a110: 7320 6f6e 2074 6865 2063 6f6d 6d61 6e64 s on the command │ │ │ -0000a120: 206c 696e 652e 0a23 2020 4578 616d 706c line..# Exampl │ │ │ -0000a130: 6520 7573 6167 6520 696e 2063 6f6e 6620 e usage in conf │ │ │ -0000a140: 6669 6c65 3a0a 2320 2073 7570 7072 6573 file:.# suppres │ │ │ -0000a150: 7357 6172 6e69 6e67 203d 2065 7863 4469 sWarning = excDi │ │ │ -0000a160: 7220 6669 6c65 4368 616e 6765 2063 7253 r fileChange crS │ │ │ -0000a170: 6572 6965 7320 6861 7368 436f 6c6c 6973 eries hashCollis │ │ │ -0000a180: 696f 6e0a 2320 2042 7920 6465 6661 756c ion.# By defaul │ │ │ -0000a190: 7420 6e6f 2077 6172 6e69 6e67 7320 6172 t no warnings ar │ │ │ -0000a1a0: 6520 7375 7070 7265 7373 6564 2e0a 3b73 e suppressed..;s │ │ │ -0000a1b0: 7570 7072 6573 7357 6172 6e69 6e67 3d0a uppressWarning=. │ │ │ -0000a1c0: 0a23 2073 7570 7072 6573 7320 2875 6e77 .# suppress (unw │ │ │ -0000a1d0: 616e 7465 6429 2069 6e66 6f73 2069 6e20 anted) infos in │ │ │ -0000a1e0: 7468 6520 6c6f 6720 6669 6c65 733b 0a23 the log files;.# │ │ │ -0000a1f0: 2074 6f20 7375 7070 7265 7373 2069 6e66 to suppress inf │ │ │ -0000a200: 6f73 2c20 7468 6520 666f 6c6c 6f77 696e os, the followin │ │ │ -0000a210: 6720 6b65 7973 2063 616e 2062 6520 7573 g keys can be us │ │ │ -0000a220: 6564 3a0a 2320 2020 7265 6164 4368 6563 ed:.# readChec │ │ │ -0000a230: 6b53 756d 7320 2873 7570 7072 6573 7320 kSums (suppress │ │ │ -0000a240: 7468 6520 696e 666f 726d 6174 696f 6e20 the information │ │ │ -0000a250: 7468 6174 2063 6865 636b 7375 6d73 0a23 that checksums.# │ │ │ -0000a260: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000a270: 206f 6620 626c 6f63 6b65 6420 6669 6c65 of blocked file │ │ │ -0000a280: 7320 6172 6520 7265 6164 290a 2320 2054 s are read).# T │ │ │ -0000a290: 6869 7320 6f70 7469 6f6e 2063 616e 2062 his option can b │ │ │ -0000a2a0: 6520 7265 7065 6174 6564 206d 756c 7469 e repeated multi │ │ │ -0000a2b0: 706c 6520 7469 6d65 7320 6f6e 2074 6865 ple times on the │ │ │ -0000a2c0: 2063 6f6d 6d61 6e64 206c 696e 652e 0a23 command line..# │ │ │ -0000a2d0: 2020 7375 7070 7265 7373 496e 666f 203d suppressInfo = │ │ │ -0000a2e0: 2072 6561 6443 6865 636b 5375 6d73 0a23 readCheckSums.# │ │ │ -0000a2f0: 2020 4279 2064 6566 6175 6c74 206e 6f20 By default no │ │ │ -0000a300: 696e 666f 7320 6172 6520 7375 7070 7265 infos are suppre │ │ │ -0000a310: 7373 6564 2e0a 3b73 7570 7072 6573 7349 ssed..;suppressI │ │ │ -0000a320: 6e66 6f3d 0a0a 2320 646f 202a 6e6f 742a nfo=..# do *not* │ │ │ -0000a330: 2077 7269 7465 2068 6172 6420 6c69 6e6b write hard link │ │ │ -0000a340: 7320 746f 2065 7869 7374 696e 6720 6669 s to existing fi │ │ │ -0000a350: 6c65 7320 696e 2074 6865 2062 6163 6b75 les in the backu │ │ │ -0000a360: 700a 2320 6475 7269 6e67 2074 6865 2062 p.# during the b │ │ │ -0000a370: 6163 6b75 7020 2879 6573 7c6e 6f29 0a23 ackup (yes|no).# │ │ │ -0000a380: 2079 6f75 2068 6176 6520 746f 2063 616c you have to cal │ │ │ -0000a390: 6c20 7468 6520 7072 6f67 7261 6d20 7374 l the program st │ │ │ -0000a3a0: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB │ │ │ -0000a3b0: 6163 6b75 702e 706c 0a23 206c 6174 6572 ackup.pl.# later │ │ │ -0000a3c0: 206f 6e20 796f 7572 2073 6572 7665 7220 on your server │ │ │ -0000a3d0: 6966 2079 6f75 2073 6574 2074 6869 7320 if you set this │ │ │ -0000a3e0: 666c 6167 2074 6f20 2779 6573 270a 2320 flag to 'yes'.# │ │ │ -0000a3f0: 796f 7520 6861 7665 2074 6f20 7275 6e20 you have to run │ │ │ -0000a400: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat │ │ │ -0000a410: 6542 6163 6b75 702e 706c 206c 6174 6572 eBackup.pl later │ │ │ -0000a420: 202d 2073 6565 0a23 2064 6573 6372 6970 - see.# descrip │ │ │ -0000a430: 7469 6f6e 2066 6f72 2074 6861 7420 7072 tion for that pr │ │ │ -0000a440: 6f67 7261 6d0a 2320 6465 6661 756c 7420 ogram.# default │ │ │ -0000a450: 3d20 6e6f 3a20 646f 206e 6f74 2077 7269 = no: do not wri │ │ │ -0000a460: 7465 2068 6172 6420 6c69 6e6b 730a 3b6c te hard links.;l │ │ │ -0000a470: 6174 654c 696e 6b73 3d0a 0a23 206f 6e6c ateLinks=..# onl │ │ │ -0000a480: 7920 696e 2063 6f6d 6269 6e61 7469 6f6e y in combination │ │ │ -0000a490: 2077 6974 6820 2d2d 6c61 7465 4c69 6e6b with --lateLink │ │ │ -0000a4a0: 730a 2320 636f 6d70 7265 7373 696f 6e20 s.# compression │ │ │ -0000a4b0: 6672 6f6d 2066 696c 6573 203e 3d20 7369 from files >= si │ │ │ -0000a4c0: 7a65 2077 696c 6c20 6265 2064 6f6e 6520 ze will be done │ │ │ -0000a4d0: 6c61 7465 722c 0a23 2074 6865 2066 696c later,.# the fil │ │ │ -0000a4e0: 6520 6973 2028 7465 6d70 6f72 6172 696c e is (temporaril │ │ │ -0000a4f0: 7929 2063 6f70 6965 6420 696e 746f 2074 y) copied into t │ │ │ -0000a500: 6865 2062 6163 6b75 700a 2320 6465 6661 he backup.# defa │ │ │ -0000a510: 756c 7420 3d20 6e6f 3a20 6e6f 206c 6174 ult = no: no lat │ │ │ -0000a520: 6520 636f 6d70 7265 7373 696f 6e0a 3b6c e compression.;l │ │ │ -0000a530: 6174 6543 6f6d 7072 6573 733d 0a0a 2320 ateCompress=..# │ │ │ -0000a540: 7265 7061 6972 2073 696d 706c 6520 696e repair simple in │ │ │ -0000a550: 636f 6e73 6973 7465 6e63 6965 7320 2866 consistencies (f │ │ │ -0000a560: 726f 6d20 6c61 7465 4c69 6e6b 7329 2061 rom lateLinks) a │ │ │ -0000a570: 7574 6f6d 6174 6963 616c 6c79 0a23 2077 utomatically.# w │ │ │ -0000a580: 6974 686f 7574 2072 6571 7565 7374 696e ithout requestin │ │ │ -0000a590: 6720 7468 6520 6163 7469 6f6e 0a23 2064 g the action.# d │ │ │ -0000a5a0: 6566 6175 6c74 203d 206e 6f2c 206e 6f20 efault = no, no │ │ │ -0000a5b0: 6175 746f 6d61 7469 6320 7265 7061 6972 automatic repair │ │ │ -0000a5c0: 0a3b 6175 746f 7265 7061 6972 3d0a 0a23 .;autorepair=..# │ │ │ -0000a5d0: 2046 696c 6573 2077 6974 6820 7370 6563 Files with spec │ │ │ -0000a5e0: 6966 6965 6420 7375 6666 6978 2066 6f72 ified suffix for │ │ │ -0000a5f0: 2077 6869 6368 2073 746f 7265 4261 636b which storeBack │ │ │ -0000a600: 7570 2077 696c 6c20 6d61 6b65 2061 6e20 up will make an │ │ │ -0000a610: 6d64 3520 6368 6563 6b0a 2320 6f6e 2062 md5 check.# on b │ │ │ -0000a620: 6c6f 636b 7320 6f66 2074 6861 7420 6669 locks of that fi │ │ │ -0000a630: 6c65 2e20 4578 6563 7574 6564 2061 6674 le. Executed aft │ │ │ -0000a640: 6572 202d 2d63 6865 636b 426c 6f63 6b73 er --checkBlocks │ │ │ -0000a650: 5275 6c65 286e 290a 3b63 6865 636b 426c Rule(n).;checkBl │ │ │ -0000a660: 6f63 6b73 5375 6666 6978 3d0a 0a23 204f ocksSuffix=..# O │ │ │ -0000a670: 6e6c 7920 6368 6563 6b20 6669 6c65 7320 nly check files │ │ │ -0000a680: 7370 6563 6966 6965 6420 696e 202d 2d63 specified in --c │ │ │ -0000a690: 6865 636b 426c 6f63 6b73 5375 6666 6978 heckBlocksSuffix │ │ │ -0000a6a0: 2069 6620 7468 6572 650a 2320 6669 6c65 if there.# file │ │ │ -0000a6b0: 2073 697a 6520 6973 2061 7420 6c65 6173 size is at leas │ │ │ -0000a6c0: 7420 7468 6973 2076 616c 7565 2c20 6465 t this value, de │ │ │ -0000a6d0: 6661 756c 7420 6973 2031 3030 4d0a 3b63 fault is 100M.;c │ │ │ -0000a6e0: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz │ │ │ -0000a6f0: 653d 0a0a 2320 426c 6f63 6b20 7369 7a65 e=..# Block size │ │ │ -0000a700: 2066 6f72 2066 696c 6573 2073 7065 6369 for files speci │ │ │ -0000a710: 6669 6564 2077 6974 6820 2d2d 6368 6563 fied with --chec │ │ │ -0000a720: 6b42 6c6f 636b 7353 7566 6669 780a 2320 kBlocksSuffix.# │ │ │ -0000a730: 6465 6661 756c 7420 6973 2024 6368 6563 default is $chec │ │ │ -0000a740: 6b42 6c6f 636b 7342 5364 6566 6175 6c74 kBlocksBSdefault │ │ │ -0000a750: 2028 3120 6d65 6761 6279 7465 290a 3b63 (1 megabyte).;c │ │ │ -0000a760: 6865 636b 426c 6f63 6b73 4253 3d0a 0a23 heckBlocksBS=..# │ │ │ -0000a770: 2069 6620 7365 742c 2074 6865 2062 6c6f if set, the blo │ │ │ -0000a780: 636b 7320 6765 6e65 7261 7465 6420 6475 cks generated du │ │ │ -0000a790: 6520 746f 2063 6865 636b 426c 6f63 6b73 e to checkBlocks │ │ │ -0000a7a0: 5375 6666 6978 2061 7265 2063 6f6d 7072 Suffix are compr │ │ │ -0000a7b0: 6573 7365 640a 2320 506f 7373 6962 6c65 essed.# Possible │ │ │ -0000a7c0: 2076 616c 7565 7320 6172 6520 2763 6865 values are 'che │ │ │ -0000a7d0: 636b 2c20 2779 6573 2720 616e 6420 276e ck, 'yes' and 'n │ │ │ -0000a7e0: 6f27 2e20 4465 6661 756c 7420 6973 2027 o'. Default is ' │ │ │ -0000a7f0: 6e6f 270a 2320 6368 6563 6b20 7573 6573 no'.# check uses │ │ │ -0000a800: 2043 4f4d 5245 5353 494f 4e5f 4348 4543 COMRESSION_CHEC │ │ │ -0000a810: 4b20 2873 6565 206f 7074 696f 6e20 636f K (see option co │ │ │ -0000a820: 6d70 7265 7373 5375 6666 6978 290a 3b63 mpressSuffix).;c │ │ │ -0000a830: 6865 636b 426c 6f63 6b73 436f 6d70 723d heckBlocksCompr= │ │ │ -0000a840: 0a0a 2320 5265 6164 2066 696c 6573 2073 ..# Read files s │ │ │ -0000a850: 7065 6369 6669 6564 2068 6572 6520 696e pecified here in │ │ │ -0000a860: 2070 6172 616c 6c65 6c20 746f 2022 6e6f parallel to "no │ │ │ -0000a870: 726d 616c 2220 6f6e 6573 2e0a 2320 5468 rmal" ones..# Th │ │ │ -0000a880: 6973 206f 6e6c 7920 6d61 6b65 7320 7365 is only makes se │ │ │ -0000a890: 6e73 6520 6966 2074 6865 7920 6172 6520 nse if they are │ │ │ -0000a8a0: 6f6e 2061 2064 6966 6665 7265 6e74 2064 on a different d │ │ │ -0000a8b0: 6973 6b2e 0a23 2044 6566 6175 6c74 2076 isk..# Default v │ │ │ -0000a8c0: 616c 7565 2069 7320 276e 6f27 0a3b 6368 alue is 'no'.;ch │ │ │ -0000a8d0: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle │ │ │ -0000a8e0: 6c3d 0a0a 2320 6c65 6e67 7468 206f 6620 l=..# length of │ │ │ -0000a8f0: 7175 6575 6520 746f 2073 746f 7265 2066 queue to store f │ │ │ -0000a900: 696c 6573 2062 6566 6f72 6520 626c 6f63 iles before bloc │ │ │ -0000a910: 6b20 6368 6563 6b69 6e67 2c0a 2320 6465 k checking,.# de │ │ │ -0000a920: 6661 756c 7420 3d20 2471 7565 7565 426c fault = $queueBl │ │ │ -0000a930: 6f63 6b0a 3b71 7565 7565 426c 6f63 6b3d ock.;queueBlock= │ │ │ -0000a940: 0a0a 2462 6c6f 636b 5275 6c65 7348 656c ..$blockRulesHel │ │ │ -0000a950: 700a 2462 6c6f 636b 4465 7669 6365 4865 p.$blockDeviceHe │ │ │ -0000a960: 6c70 0a23 2077 7269 7465 2074 656d 706f lp.# write tempo │ │ │ -0000a970: 7261 7279 2064 626d 2066 696c 6573 2069 rary dbm files i │ │ │ -0000a980: 6e20 2d2d 746d 7064 6972 0a23 2075 7365 n --tmpdir.# use │ │ │ -0000a990: 2074 6869 7320 6966 2079 6f75 2068 6176 this if you hav │ │ │ -0000a9a0: 6520 6e6f 7420 656e 6f75 6768 2052 414d e not enough RAM │ │ │ -0000a9b0: 2c20 6465 6661 756c 7420 6973 206e 6f0a , default is no. │ │ │ -0000a9c0: 3b73 6176 6552 414d 3d0a 0a23 2063 6f6d ;saveRAM=..# com │ │ │ -0000a9d0: 7072 6573 7320 636f 6d6d 616e 6420 2877 press command (w │ │ │ -0000a9e0: 6974 6820 6f70 7469 6f6e 7329 2c20 6465 ith options), de │ │ │ -0000a9f0: 6661 756c 7420 6973 203c 4063 6f6d 7072 fault is <@compr │ │ │ -0000aa00: 6573 733e 0a3b 636f 6d70 7265 7373 3d0a ess>.;compress=. │ │ │ -0000aa10: 0a23 2075 6e63 6f6d 7072 6573 7320 636f .# uncompress co │ │ │ -0000aa20: 6d6d 616e 6420 2877 6974 6820 6f70 7469 mmand (with opti │ │ │ -0000aa30: 6f6e 7329 2c20 6465 6661 756c 7420 6973 ons), default is │ │ │ -0000aa40: 203c 4075 6e63 6f6d 7072 6573 733e 0a3b <@uncompress>.; │ │ │ -0000aa50: 756e 636f 6d70 7265 7373 3d0a 0a23 2070 uncompress=..# p │ │ │ -0000aa60: 6f73 7466 6978 2074 6f20 6164 6420 6166 ostfix to add af │ │ │ -0000aa70: 7465 7220 636f 6d70 7265 7373 696f 6e2c ter compression, │ │ │ -0000aa80: 2064 6566 6175 6c74 2069 7320 3c24 706f default is <$po │ │ │ -0000aa90: 7374 6669 783e 0a3b 706f 7374 6669 783d stfix>.;postfix= │ │ │ -0000aaa0: 0a0a 2320 646f 206e 6f74 2063 6f6d 7072 ..# do not compr │ │ │ -0000aab0: 6573 7320 6669 6c65 7320 7769 7468 2074 ess files with t │ │ │ -0000aac0: 6865 2066 6f6c 6c6f 7769 6e67 0a23 2073 he following.# s │ │ │ -0000aad0: 7566 6669 7820 2875 7070 6572 6361 7365 uffix (uppercase │ │ │ -0000aae0: 2069 6e63 6c75 6465 6429 3a0a 2320 2869 included):.# (i │ │ │ -0000aaf0: 6620 796f 7520 7365 7420 7468 6973 2074 f you set this t │ │ │ -0000ab00: 6f20 272e 2a27 2c20 6e6f 2066 696c 6573 o '.*', no files │ │ │ -0000ab10: 2077 696c 6c20 6265 2063 6f6d 7072 6573 will be compres │ │ │ -0000ab20: 7365 6429 0a23 2044 6566 6175 6c74 2069 sed).# Default i │ │ │ -0000ab30: 7320 4065 7863 6570 7453 7566 6669 780a s @exceptSuffix. │ │ │ -0000ab40: 3b65 7863 6570 7453 7566 6669 783d 0a0a ;exceptSuffix=.. │ │ │ -0000ab50: 2320 6c69 6b65 202d 2d65 7863 6570 7453 # like --exceptS │ │ │ -0000ab60: 7566 6669 782c 2062 7574 2064 6f20 6e6f uffix, but do no │ │ │ -0000ab70: 7420 7265 706c 6163 6520 6465 6661 756c t replace defaul │ │ │ -0000ab80: 7473 2c20 6164 640a 3b61 6464 4578 6365 ts, add.;addExce │ │ │ -0000ab90: 7074 5375 6666 6978 3d0a 0a0a 2320 4c69 ptSuffix=...# Li │ │ │ -0000aba0: 6b65 202d 2d65 7863 6570 7453 7566 6669 ke --exceptSuffi │ │ │ -0000abb0: 782c 2062 7574 206d 656e 7469 6f6e 6564 x, but mentioned │ │ │ -0000abc0: 2066 696c 6573 2077 696c 6c20 6265 0a23 files will be.# │ │ │ -0000abd0: 2063 6f6d 7072 6573 7365 642e 2049 6620 compressed. If │ │ │ -0000abe0: 796f 7520 6368 6f73 6520 7468 6973 206f you chose this o │ │ │ -0000abf0: 7074 696f 6e2c 2074 6865 6e20 6669 6c65 ption, then file │ │ │ -0000ac00: 7320 6e6f 740a 2320 6166 6665 6374 6564 s not.# affected │ │ │ -0000ac10: 2062 6520 6578 6563 7074 5375 6666 6978 be execptSuffix │ │ │ -0000ac20: 2c20 6164 6445 7863 6570 7453 7566 6669 , addExceptSuffi │ │ │ -0000ac30: 7820 6f72 2074 6869 7320 5375 6666 6978 x or this Suffix │ │ │ -0000ac40: 6573 0a23 2077 696c 6c20 6265 2072 6174 es.# will be rat │ │ │ -0000ac50: 6564 2062 7920 7468 6520 7275 6c65 2066 ed by the rule f │ │ │ -0000ac60: 756e 6374 696f 6e20 434f 4d50 5245 5353 unction COMPRESS │ │ │ -0000ac70: 5f43 4845 434b 2077 6574 6865 720a 2320 _CHECK wether.# │ │ │ -0000ac80: 746f 2063 6f6d 7072 6573 7320 6f72 206e to compress or n │ │ │ -0000ac90: 6f74 0a3b 636f 6d70 7265 7373 5375 6666 ot.;compressSuff │ │ │ -0000aca0: 6978 3d0a 0a23 2046 696c 6573 2073 6d61 ix=..# Files sma │ │ │ -0000acb0: 6c6c 6572 2074 6861 6e20 7468 6973 2073 ller than this s │ │ │ -0000acc0: 697a 6520 7769 6c6c 206e 6576 6572 2062 ize will never b │ │ │ -0000acd0: 6520 636f 6d70 7265 7373 6564 2062 7574 e compressed but │ │ │ -0000ace0: 2061 6c77 6179 730a 2320 636f 7069 6564 always.# copied │ │ │ -0000acf0: 2e20 4465 6661 756c 7420 6973 2024 6d69 . Default is $mi │ │ │ -0000ad00: 6e43 6f6d 7072 6573 7353 697a 650a 3b6d nCompressSize.;m │ │ │ -0000ad10: 696e 436f 6d70 7265 7373 5369 7a65 3d0a inCompressSize=. │ │ │ -0000ad20: 0a23 2061 6c74 6572 6e61 7469 7665 2074 .# alternative t │ │ │ -0000ad30: 6f20 6578 6365 7074 5375 6666 6978 2c20 o exceptSuffix, │ │ │ -0000ad40: 636f 6d70 7252 756c 6520 616e 6420 6d69 comprRule and mi │ │ │ -0000ad50: 6e43 6f6d 7072 6573 7353 697a 653a 0a23 nCompressSize:.# │ │ │ -0000ad60: 2064 6566 696e 6974 696f 6e20 6f66 2061 definition of a │ │ │ -0000ad70: 2072 756c 6520 7768 6963 6820 6669 6c65 rule which file │ │ │ -0000ad80: 7320 7769 6c6c 2062 6520 636f 6d70 7265 s will be compre │ │ │ -0000ad90: 7373 6564 0a23 2049 6620 7468 6973 2072 ssed.# If this r │ │ │ -0000ada0: 756c 6520 6973 2073 6574 2c20 6578 6365 ule is set, exce │ │ │ -0000adb0: 7074 5375 6666 6978 2c20 6164 6445 7863 ptSuffix, addExc │ │ │ -0000adc0: 6570 7453 7566 6669 780a 2320 616e 6420 eptSuffix.# and │ │ │ -0000add0: 6d69 6e43 6f6d 7072 6573 7353 697a 6520 minCompressSize │ │ │ -0000ade0: 6172 6520 6967 6e6f 7265 642e 0a23 2044 are ignored..# D │ │ │ -0000adf0: 6566 6175 6c74 2072 756c 6520 5f67 656e efault rule _gen │ │ │ -0000ae00: 6572 6174 6564 5f20 6672 6f6d 2074 6865 erated_ from the │ │ │ -0000ae10: 206f 7074 696f 6e73 2061 626f 7665 2069 options above i │ │ │ -0000ae20: 733a 0a23 2063 6f6d 7072 5275 6c65 203d s:.# comprRule = │ │ │ -0000ae30: 2027 5c24 7369 7a65 203e 2031 3032 3427 '\$size > 1024' │ │ │ -0000ae40: 2061 6e64 206e 6f74 0a23 2020 2027 5c24 and not.# '\$ │ │ │ -0000ae50: 6669 6c65 203d 7e20 2f5c 2e7a 6970 5c5c file =~ /\.zip\\ │ │ │ -0000ae60: 5a7c 5c2e 627a 325c 5c5a 7c5c 2e67 7a5c Z|\.bz2\\Z|\.gz\ │ │ │ -0000ae70: 5c5a 7c5c 2e74 677a 5c5c 5a7c 5c2e 6a70 \Z|\.tgz\\Z|\.jp │ │ │ -0000ae80: 675c 5c5a 7c5c 2e67 6966 5c5c 5a7c 5c2e g\\Z|\.gif\\Z|\. │ │ │ -0000ae90: 7469 6666 5c5c 5a7c 5c2e 7469 665c 5c5a tiff\\Z|\.tif\\Z │ │ │ -0000aea0: 7c5c 2e6d 7065 675c 5c5a 7c5c 2e6d 7067 |\.mpeg\\Z|\.mpg │ │ │ -0000aeb0: 5c5c 5a7c 5c2e 6d70 335c 5c5a 7c5c 2e6f \\Z|\.mp3\\Z|\.o │ │ │ -0000aec0: 6767 5c5c 5a7c 5c2e 6770 675c 5c5a 7c5c gg\\Z|\.gpg\\Z|\ │ │ │ -0000aed0: 2e70 6e67 5c5c 5a2f 6927 0a23 206f 7220 .png\\Z/i'.# or │ │ │ -0000aee0: 2865 672e 2069 6620 636f 6d70 7265 7373 (eg. if compress │ │ │ -0000aef0: 5375 6666 6978 203d 205c 2e64 6f63 205c Suffix = \.doc \ │ │ │ -0000af00: 2e70 6466 293a 0a23 2020 2027 5c24 7369 .pdf):.# '\$si │ │ │ -0000af10: 7a65 203e 2031 3032 3420 616e 6420 6e6f ze > 1024 and no │ │ │ -0000af20: 7420 5c24 6669 6c65 203d 7e20 2f5c 2e7a t \$file =~ /\.z │ │ │ -0000af30: 6970 5c5c 5a7c 5c2e 627a 325c 5c5a 7c5c ip\\Z|\.bz2\\Z|\ │ │ │ -0000af40: 2e67 7a5c 5c5a 7c5c 2e74 677a 5c5c 5a7c .gz\\Z|\.tgz\\Z| │ │ │ -0000af50: 5c2e 6a70 675c 5c5a 7c5c 2e67 6966 5c5c \.jpg\\Z|\.gif\\ │ │ │ -0000af60: 5a7c 5c2e 7469 6666 5c5c 5a7c 5c2e 7469 Z|\.tiff\\Z|\.ti │ │ │ -0000af70: 665c 5c5a 7c5c 2e6d 7065 675c 5c5a 7c5c f\\Z|\.mpeg\\Z|\ │ │ │ -0000af80: 2e6d 7067 5c5c 5a7c 5c2e 6d70 335c 5c5a .mpg\\Z|\.mp3\\Z │ │ │ -0000af90: 7c5c 2e6f 6767 5c5c 5a7c 5c2e 6770 675c |\.ogg\\Z|\.gpg\ │ │ │ -0000afa0: 5c5a 7c5c 2e70 6e67 5c5c 5a2f 6920 616e \Z|\.png\\Z/i an │ │ │ -0000afb0: 6420 2820 5c24 6669 6c65 203d 7e20 2f5c d ( \$file =~ /\ │ │ │ -0000afc0: 2e64 6f63 5c5c 5a7c 5c2e 7064 665c 5c5a .doc\\Z|\.pdf\\Z │ │ │ -0000afd0: 2f69 206f 7220 263a 3a43 4f4d 5052 4553 /i or &::COMPRES │ │ │ -0000afe0: 5349 4f4e 5f43 4845 434b 285c 2466 696c SION_CHECK(\$fil │ │ │ -0000aff0: 6529 2029 270a 3b63 6f6d 7072 5275 6c65 e) )'.;comprRule │ │ │ -0000b000: 3d0a 0a23 206d 6178 696d 616c 206e 756d =..# maximal num │ │ │ -0000b010: 6265 7220 6f66 2070 6172 616c 6c65 6c20 ber of parallel │ │ │ -0000b020: 636f 6d70 7265 7373 206f 7065 7261 7469 compress operati │ │ │ -0000b030: 6f6e 732c 0a23 2064 6566 6175 6c74 203d ons,.# default = │ │ │ -0000b040: 2063 686f 7365 6e20 6175 746f 6d61 7469 chosen automati │ │ │ -0000b050: 6361 6c6c 790a 3b6e 6f43 6f6d 7072 6573 cally.;noCompres │ │ │ -0000b060: 733d 0a0a 2320 6c65 6e67 7468 206f 6620 s=..# length of │ │ │ -0000b070: 7175 6575 6520 746f 2073 746f 7265 2066 queue to store f │ │ │ -0000b080: 696c 6573 2062 6566 6f72 6520 636f 6d70 iles before comp │ │ │ -0000b090: 7265 7373 696f 6e2c 0a23 2064 6566 6175 ression,.# defau │ │ │ -0000b0a0: 6c74 203d 2024 7175 6575 6543 6f6d 7072 lt = $queueCompr │ │ │ -0000b0b0: 6573 730a 3b71 7565 7565 436f 6d70 7265 ess.;queueCompre │ │ │ -0000b0c0: 7373 3d0a 0a23 206d 6178 696d 616c 206e ss=..# maximal n │ │ │ -0000b0d0: 756d 6265 7220 6f66 2070 6172 616c 6c65 umber of paralle │ │ │ -0000b0e0: 6c20 636f 7079 206f 7065 7261 7469 6f6e l copy operation │ │ │ -0000b0f0: 732c 0a23 2064 6566 6175 6c74 203d 2024 s,.# default = $ │ │ │ -0000b100: 6e6f 436f 7079 0a3b 6e6f 436f 7079 3d0a noCopy.;noCopy=. │ │ │ -0000b110: 0a23 206c 656e 6774 6820 6f66 2071 7565 .# length of que │ │ │ -0000b120: 7565 2074 6f20 7374 6f72 6520 6669 6c65 ue to store file │ │ │ -0000b130: 7320 6265 666f 7265 2063 6f70 7969 6e67 s before copying │ │ │ -0000b140: 2c0a 2320 6465 6661 756c 7420 3d20 2471 ,.# default = $q │ │ │ -0000b150: 7565 7565 436f 7079 0a3b 7175 6575 6543 ueueCopy.;queueC │ │ │ -0000b160: 6f70 793d 0a0a 2320 7772 6974 6520 7374 opy=..# write st │ │ │ -0000b170: 6174 6973 7469 6373 2061 626f 7574 2075 atistics about u │ │ │ -0000b180: 7365 6420 7370 6163 6520 696e 206c 6f67 sed space in log │ │ │ -0000b190: 2066 696c 650a 2320 6465 6661 756c 7420 file.# default │ │ │ -0000b1a0: 6973 2027 6e6f 270a 3b77 6974 6855 7365 is 'no'.;withUse │ │ │ -0000b1b0: 7247 726f 7570 5374 6174 3d0a 0a23 2077 rGroupStat=..# w │ │ │ -0000b1c0: 7269 7465 2073 7461 7469 7374 6963 7320 rite statistics │ │ │ -0000b1d0: 6162 6f75 7420 7573 6564 2073 7061 6365 about used space │ │ │ -0000b1e0: 2069 6e20 6e61 6d65 2066 696c 650a 2309 in name file.#. │ │ │ -0000b1f0: 0920 2020 2077 696c 6c20 6265 206f 7665 . will be ove │ │ │ -0000b200: 7272 6964 6465 6e20 6561 6368 2074 696d rridden each tim │ │ │ -0000b210: 650a 2320 6966 206e 6f20 6669 6c65 206e e.# if no file n │ │ │ -0000b220: 616d 6520 6973 2067 6976 656e 2c20 6e6f ame is given, no │ │ │ -0000b230: 7468 696e 6720 7769 6c6c 2062 6520 7772 thing will be wr │ │ │ -0000b240: 6974 7465 6e0a 2320 666f 726d 6174 2069 itten.# format i │ │ │ -0000b250: 733a 0a23 2069 6465 6e74 6966 6965 7220 s:.# identifier │ │ │ -0000b260: 7569 6420 7573 6572 4e61 6d65 2076 616c uid userName val │ │ │ -0000b270: 7565 0a23 2069 6465 6e74 6966 6965 7220 ue.# identifier │ │ │ -0000b280: 6769 6420 6772 6f75 704e 616d 6520 7661 gid groupName va │ │ │ -0000b290: 6c75 650a 3b75 7365 7247 726f 7570 5374 lue.;userGroupSt │ │ │ -0000b2a0: 6174 4669 6c65 3d0a 0a23 2064 6566 6175 atFile=..# defau │ │ │ -0000b2b0: 6c74 2069 7320 276e 6f27 2c20 6966 2079 lt is 'no', if y │ │ │ -0000b2c0: 6f75 2064 6f20 6e6f 7420 7761 6e74 2074 ou do not want t │ │ │ -0000b2d0: 6f20 636f 6d70 7265 7373 2c20 7361 7920 o compress, say │ │ │ -0000b2e0: 2779 6573 270a 3b64 6f4e 6f74 436f 6d70 'yes'.;doNotComp │ │ │ -0000b2f0: 7265 7373 4d44 3546 696c 653d 0a0a 2320 ressMD5File=..# │ │ │ -0000b300: 7065 726d 6973 7369 6f6e 7320 6f66 202e permissions of . │ │ │ -0000b310: 6d64 3563 6865 636b 5375 6d46 696c 652c md5checkSumFile, │ │ │ -0000b320: 2064 6566 6175 6c74 2069 7320 2463 686d default is $chm │ │ │ -0000b330: 6f64 4d44 3546 696c 650a 3b63 686d 6f64 odMD5File.;chmod │ │ │ -0000b340: 4d44 3546 696c 653d 0a0a 2320 7665 7262 MD5File=..# verb │ │ │ -0000b350: 6f73 6520 6d65 7373 6167 6573 2c20 6162 ose messages, ab │ │ │ -0000b360: 6f75 7420 6578 6365 7074 5275 6c65 2061 out exceptRule a │ │ │ -0000b370: 6e64 2069 6e63 6c75 6465 5275 6c65 0a23 nd includeRule.# │ │ │ -0000b380: 2061 6e64 2061 6464 6564 2066 696c 6573 and added files │ │ │ -0000b390: 2e20 6465 6661 756c 7420 6973 2027 6e6f . default is 'no │ │ │ -0000b3a0: 270a 3b76 6572 626f 7365 3d0a 0a23 2067 '.;verbose=..# g │ │ │ -0000b3b0: 656e 6572 6174 6520 6465 6275 6720 6d65 enerate debug me │ │ │ -0000b3c0: 7373 6167 6573 2c20 6c65 7665 6c73 2061 ssages, levels a │ │ │ -0000b3d0: 7265 2030 2028 6e6f 6e65 2c20 6465 6661 re 0 (none, defa │ │ │ -0000b3e0: 756c 7429 2c0a 2320 3120 2873 6f6d 6529 ult),.# 1 (some) │ │ │ -0000b3f0: 2c20 3220 286d 616e 7929 206d 6573 7361 , 2 (many) messa │ │ │ -0000b400: 6765 730a 3b64 6562 7567 3d0a 0a23 2072 ges.;debug=..# r │ │ │ -0000b410: 6573 6574 2061 6363 6573 7320 7469 6d65 eset access time │ │ │ -0000b420: 2069 6e20 7468 6520 736f 7572 6365 2064 in the source d │ │ │ -0000b430: 6972 6563 746f 7279 202d 2062 7574 2074 irectory - but t │ │ │ -0000b440: 6869 7320 7769 6c6c 0a23 2063 6861 6e67 his will.# chang │ │ │ -0000b450: 6520 6374 696d 6520 2874 696d 6520 6f66 e ctime (time of │ │ │ -0000b460: 206c 6173 7420 6d6f 6469 6669 6361 7469 last modificati │ │ │ -0000b470: 6f6e 206f 6620 6669 6c65 2073 7461 7475 on of file statu │ │ │ -0000b480: 730a 2320 696e 666f 726d 6174 696f 6e0a s.# information. │ │ │ -0000b490: 2320 6465 6661 756c 7420 6973 2027 6e6f # default is 'no │ │ │ -0000b4a0: 272c 2069 6620 796f 7520 7761 6e74 2074 ', if you want t │ │ │ -0000b4b0: 6869 732c 2073 6179 2027 7965 7327 0a3b his, say 'yes'.; │ │ │ -0000b4c0: 7265 7365 7441 7469 6d65 3d0a 0a23 2064 resetAtime=..# d │ │ │ -0000b4d0: 6f20 6e6f 7420 6465 6c65 7465 2061 6e79 o not delete any │ │ │ -0000b4e0: 206f 6c64 2062 6163 6b75 7020 2865 2e67 old backup (e.g │ │ │ -0000b4f0: 2e20 7370 6563 6966 6965 6420 7669 6120 . specified via │ │ │ -0000b500: 2d2d 6b65 6570 416c 6c20 6f72 0a23 202d --keepAll or.# - │ │ │ -0000b510: 2d6b 6565 7057 6565 6b64 6179 2920 6275 -keepWeekday) bu │ │ │ -0000b520: 7420 7072 696e 7420 6120 6d65 7373 6167 t print a messag │ │ │ -0000b530: 652e 2054 6869 7320 6973 2066 6f72 2074 e. This is for t │ │ │ -0000b540: 6573 7469 6e67 2063 6f6e 6669 6775 7261 esting configura │ │ │ -0000b550: 746f 6e73 0a23 206f 7220 6966 2079 6f75 tons.# or if you │ │ │ -0000b560: 2077 616e 7420 746f 2064 656c 6574 6520 want to delete │ │ │ -0000b570: 6f6c 6420 6261 636b 7570 7320 7769 7468 old backups with │ │ │ -0000b580: 2073 746f 7265 4261 636b 7570 4465 6c2e storeBackupDel. │ │ │ -0000b590: 706c 2e0a 2320 5661 6c75 6573 2061 7265 pl..# Values are │ │ │ -0000b5a0: 2027 7965 7327 2061 6e64 2027 6e6f 272e 'yes' and 'no'. │ │ │ -0000b5b0: 2044 6566 6175 6c74 2069 7320 276e 6f27 Default is 'no' │ │ │ -0000b5c0: 2077 6869 6368 206d 6561 6e73 2074 6f20 which means to │ │ │ -0000b5d0: 6e6f 7420 6465 6c65 7465 2e0a 3b64 6f4e not delete..;doN │ │ │ -0000b5e0: 6f74 4465 6c65 7465 3d0a 0a23 2064 656c otDelete=..# del │ │ │ -0000b5f0: 6574 6520 6f6c 6420 6261 636b 7570 7320 ete old backups │ │ │ -0000b600: 7768 6963 6820 6861 7665 206e 6f74 2062 which have not b │ │ │ -0000b610: 6565 6e20 6669 6e69 7368 6564 0a23 2074 een finished.# t │ │ │ -0000b620: 6869 7320 7769 6c6c 206e 6f74 2068 6170 his will not hap │ │ │ -0000b630: 7065 6e20 6966 2064 6f4e 6f74 4465 6c65 pen if doNotDele │ │ │ -0000b640: 7465 2069 7320 7365 740a 2320 5661 6c75 te is set.# Valu │ │ │ -0000b650: 6573 2061 7265 2027 7965 7327 2061 6e64 es are 'yes' and │ │ │ -0000b660: 2027 6e6f 272e 2044 6566 6175 6c74 2069 'no'. Default i │ │ │ -0000b670: 7320 276e 6f27 2077 6869 6368 206d 6561 s 'no' which mea │ │ │ -0000b680: 6e73 206e 6f74 2074 6f20 6465 6c65 7465 ns not to delete │ │ │ -0000b690: 2e0a 3b64 656c 6574 654e 6f74 4669 6e69 ..;deleteNotFini │ │ │ -0000b6a0: 7368 6564 4469 7273 3d0a 0a23 206d 6178 shedDirs=..# max │ │ │ -0000b6b0: 696d 756d 206e 756d 6265 7220 6f66 2068 imum number of h │ │ │ -0000b6c0: 6172 6420 6c69 6e6b 7320 746f 2063 7265 ard links to cre │ │ │ -0000b6d0: 6174 6520 6f6e 2061 2066 696c 650a 2320 ate on a file.# │ │ │ -0000b6e0: 7a65 726f 2028 6465 6661 756c 7429 206d zero (default) m │ │ │ -0000b6f0: 6561 6e73 206c 696d 6974 2064 6570 656e eans limit depen │ │ │ -0000b700: 6473 206f 6e20 6669 6c65 2073 7973 7465 ds on file syste │ │ │ -0000b710: 6d20 7573 6564 206f 6e6c 790a 3b6d 6178 m used only.;max │ │ │ -0000b720: 4861 7264 4c69 6e6b 7320 3d0a 0a23 206b HardLinks =..# k │ │ │ -0000b730: 6565 7020 6261 636b 7570 7320 7768 6963 eep backups whic │ │ │ -0000b740: 6820 6172 6520 6e6f 7420 6f6c 6465 7220 h are not older │ │ │ -0000b750: 7468 616e 2074 6865 2073 7065 6369 6669 than the specifi │ │ │ -0000b760: 6564 2061 6d6f 756e 740a 2320 6f66 2074 ed amount.# of t │ │ │ -0000b770: 696d 652e 2054 6869 7320 6973 206c 696b ime. This is lik │ │ │ -0000b780: 6520 6120 6465 6661 756c 7420 7661 6c75 e a default valu │ │ │ -0000b790: 6520 666f 7220 616c 6c20 6461 7973 2069 e for all days i │ │ │ -0000b7a0: 6e0a 2320 2d2d 6b65 6570 5765 656b 6461 n.# --keepWeekda │ │ │ -0000b7b0: 792e 2042 6567 696e 7320 6465 6c65 7469 y. Begins deleti │ │ │ -0000b7c0: 6e67 2061 7420 7468 6520 656e 6420 6f66 ng at the end of │ │ │ -0000b7d0: 2074 6865 2073 6372 6970 740a 2320 7468 the script.# th │ │ │ -0000b7e0: 6520 7469 6d65 2072 616e 6765 2068 6173 e time range has │ │ │ -0000b7f0: 2074 6f20 6265 2073 7065 6369 6669 6564 to be specified │ │ │ -0000b800: 2069 6e20 666f 726d 6174 2027 6468 6d73 in format 'dhms │ │ │ -0000b810: 272c 2065 2e67 2e0a 2320 3130 6434 6820 ', e.g..# 10d4h │ │ │ -0000b820: 6d65 616e 7320 3130 2064 6179 7320 616e means 10 days an │ │ │ -0000b830: 6420 3420 686f 7572 730a 2320 6465 6661 d 4 hours.# defa │ │ │ -0000b840: 756c 7420 3d20 246b 6565 7041 6c6c 3b0a ult = $keepAll;. │ │ │ -0000b850: 2320 416e 2061 7263 6869 7665 2066 6c61 # An archive fla │ │ │ -0000b860: 6720 6973 206e 6f74 2070 6f73 7369 626c g is not possibl │ │ │ -0000b870: 6520 7769 7468 2074 6869 7320 7061 7261 e with this para │ │ │ -0000b880: 6d65 7465 7220 2873 6565 2062 656c 6f77 meter (see below │ │ │ -0000b890: 292e 0a3b 6b65 6570 416c 6c3d 0a0a 2320 )..;keepAll=..# │ │ │ -0000b8a0: 6b65 6570 2062 6163 6b75 7073 2066 6f72 keep backups for │ │ │ -0000b8b0: 2074 6865 2073 7065 6369 6669 6564 2064 the specified d │ │ │ -0000b8c0: 6179 7320 666f 7220 7468 6520 7370 6563 ays for the spec │ │ │ -0000b8d0: 6966 6965 640a 2320 616d 6f75 6e74 206f ified.# amount o │ │ │ -0000b8e0: 6620 7469 6d65 2e20 4f76 6572 7772 6974 f time. Overwrit │ │ │ -0000b8f0: 6573 2074 6865 2064 6566 6175 6c74 2076 es the default v │ │ │ -0000b900: 616c 7565 7320 6368 6f73 656e 2069 6e0a alues chosen in. │ │ │ -0000b910: 2320 2d2d 6b65 6570 416c 6c2e 2027 4d6f # --keepAll. 'Mo │ │ │ -0000b920: 6e2c 5765 643a 3430 6420 5361 743a 3630 n,Wed:40d Sat:60 │ │ │ -0000b930: 6431 306d 2720 6d65 616e 733a 0a23 206b d10m' means:.# k │ │ │ -0000b940: 6565 7020 6261 636b 7570 7320 6672 6f6d eep backups from │ │ │ -0000b950: 204d 6f6e 2061 6e64 2057 6564 2034 3064 Mon and Wed 40d │ │ │ -0000b960: 6179 7320 2b20 356d 696e 730a 2320 6b65 ays + 5mins.# ke │ │ │ -0000b970: 6570 2062 6163 6b75 7073 2066 726f 6d20 ep backups from │ │ │ -0000b980: 5361 7420 3630 6461 7973 202b 2031 306d Sat 60days + 10m │ │ │ -0000b990: 696e 730a 2320 6b65 6570 2062 6163 6b75 ins.# keep backu │ │ │ -0000b9a0: 7073 2066 726f 6d20 7468 6520 7265 7374 ps from the rest │ │ │ -0000b9b0: 206f 6620 7468 6520 6461 7973 206c 696b of the days lik │ │ │ -0000b9c0: 6520 7370 6369 6669 6564 2069 6e0a 2320 e spcified in.# │ │ │ -0000b9d0: 2d2d 6b65 6570 416c 6c20 2864 6566 6175 --keepAll (defau │ │ │ -0000b9e0: 6c74 2024 6b65 6570 416c 6c29 0a23 2079 lt $keepAll).# y │ │ │ -0000b9f0: 6f75 2063 616e 2061 6c73 6f20 7365 7420 ou can also set │ │ │ -0000ba00: 7468 6520 2761 7263 6869 7665 2066 6c61 the 'archive fla │ │ │ -0000ba10: 6727 2e0a 2320 274d 6f6e 2c57 6564 3a61 g'..# 'Mon,Wed:a │ │ │ -0000ba20: 3430 6435 6d20 5361 743a 3630 6431 306d 40d5m Sat:60d10m │ │ │ -0000ba30: 2720 6d65 616e 733a 0a23 206b 6565 7020 ' means:.# keep │ │ │ -0000ba40: 6261 636b 7570 7320 6672 6f6d 204d 6f6e backups from Mon │ │ │ -0000ba50: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days │ │ │ -0000ba60: 2b20 356d 696e 7320 2b20 2761 7263 6869 + 5mins + 'archi │ │ │ -0000ba70: 7665 270a 2320 6b65 6570 2062 6163 6b75 ve'.# keep backu │ │ │ -0000ba80: 7073 2066 726f 6d20 5361 7420 3630 6461 ps from Sat 60da │ │ │ -0000ba90: 7973 202b 2031 306d 696e 730a 2320 6b65 ys + 10mins.# ke │ │ │ -0000baa0: 6570 2062 6163 6b75 7073 2066 726f 6d20 ep backups from │ │ │ -0000bab0: 7468 6520 7265 7374 206f 6620 7468 6520 the rest of the │ │ │ -0000bac0: 6461 7973 206c 696b 6520 7370 6563 6966 days like specif │ │ │ -0000bad0: 6965 6420 696e 0a23 202d 2d6b 6565 7041 ied in.# --keepA │ │ │ -0000bae0: 6c6c 2028 6465 6661 756c 7420 246b 6565 ll (default $kee │ │ │ -0000baf0: 7041 6c6c 290a 2320 4966 2079 6f75 2061 pAll).# If you a │ │ │ -0000bb00: 6c73 6f20 7573 6520 7468 6520 2761 7263 lso use the 'arc │ │ │ -0000bb10: 6869 7665 2066 6c61 6727 2069 7420 6d65 hive flag' it me │ │ │ -0000bb20: 616e 7320 746f 206e 6f74 0a23 2064 656c ans to not.# del │ │ │ -0000bb30: 6574 6520 7468 6520 6166 6665 6374 6564 ete the affected │ │ │ -0000bb40: 2064 6972 6563 746f 7269 6573 2076 6961 directories via │ │ │ -0000bb50: 202d 2d6b 6565 704d 6178 4e75 6d62 6572 --keepMaxNumber │ │ │ -0000bb60: 3a0a 2320 6131 3064 3468 206d 6561 6e73 :.# a10d4h means │ │ │ -0000bb70: 2031 3020 6461 7973 2061 6e64 2034 2068 10 days and 4 h │ │ │ -0000bb80: 6f75 7273 2061 6e64 2027 6172 6368 6976 ours and 'archiv │ │ │ -0000bb90: 6520 666c 6167 270a 3b6b 6565 7057 6565 e flag'.;keepWee │ │ │ -0000bba0: 6b64 6179 3d0a 0a23 2064 6f20 6e6f 7420 kday=..# do not │ │ │ -0000bbb0: 6465 6c65 7465 2074 6865 2066 6972 7374 delete the first │ │ │ -0000bbc0: 2062 6163 6b75 7020 6f66 2061 2079 6561 backup of a yea │ │ │ -0000bbd0: 720a 2320 666f 726d 6174 2069 7320 7469 r.# format is ti │ │ │ -0000bbe0: 6d65 5065 7269 6f64 2077 6974 6820 706f mePeriod with po │ │ │ -0000bbf0: 7373 6962 6c65 2027 6172 6368 6976 6520 ssible 'archive │ │ │ -0000bc00: 666c 6167 270a 3b6b 6565 7046 6972 7374 flag'.;keepFirst │ │ │ -0000bc10: 4f66 5965 6172 3d0a 0a23 2064 6f20 6e6f OfYear=..# do no │ │ │ -0000bc20: 7420 6465 6c65 7465 2074 6865 206c 6173 t delete the las │ │ │ -0000bc30: 7420 6261 636b 7570 206f 6620 6120 7965 t backup of a ye │ │ │ -0000bc40: 6172 0a23 2066 6f72 6d61 7420 6973 2074 ar.# format is t │ │ │ -0000bc50: 696d 6550 6572 696f 6420 7769 7468 2070 imePeriod with p │ │ │ -0000bc60: 6f73 7369 626c 6520 2761 7263 6869 7665 ossible 'archive │ │ │ -0000bc70: 2066 6c61 6727 0a3b 6b65 6570 4c61 7374 flag'.;keepLast │ │ │ -0000bc80: 4f66 5965 6172 3d0a 0a23 2064 6f20 6e6f OfYear=..# do no │ │ │ -0000bc90: 7420 6465 6c65 7465 2074 6865 2066 6972 t delete the fir │ │ │ -0000bca0: 7374 2062 6163 6b75 7020 6f66 2061 206d st backup of a m │ │ │ -0000bcb0: 6f6e 7468 0a23 2066 6f72 6d61 7420 6973 onth.# format is │ │ │ -0000bcc0: 2074 696d 6550 6572 696f 6420 7769 7468 timePeriod with │ │ │ -0000bcd0: 2070 6f73 7369 626c 6520 2761 7263 6869 possible 'archi │ │ │ -0000bce0: 7665 2066 6c61 6727 0a3b 6b65 6570 4669 ve flag'.;keepFi │ │ │ -0000bcf0: 7273 744f 664d 6f6e 7468 3d0a 0a23 2064 rstOfMonth=..# d │ │ │ -0000bd00: 6f20 6e6f 7420 6465 6c65 7465 2074 6865 o not delete the │ │ │ -0000bd10: 206c 6173 7420 6261 636b 7570 206f 6620 last backup of │ │ │ -0000bd20: 6120 6d6f 6e74 680a 2320 666f 726d 6174 a month.# format │ │ │ -0000bd30: 2069 7320 7469 6d65 5065 7269 6f64 2077 is timePeriod w │ │ │ -0000bd40: 6974 6820 706f 7373 6962 6c65 2027 6172 ith possible 'ar │ │ │ -0000bd50: 6368 6976 6520 666c 6167 270a 3b6b 6565 chive flag'.;kee │ │ │ -0000bd60: 704c 6173 744f 664d 6f6e 7468 3d0a 0a23 pLastOfMonth=..# │ │ │ -0000bd70: 2064 6566 6175 6c74 3a20 2753 756e 272e default: 'Sun'. │ │ │ -0000bd80: 2054 6869 7320 7661 6c75 6520 6973 2075 This value is u │ │ │ -0000bd90: 7365 6420 666f 7220 6361 6c63 756c 6174 sed for calculat │ │ │ -0000bda0: 696e 670a 2320 2d2d 6b65 6570 4669 7273 ing.# --keepFirs │ │ │ -0000bdb0: 744f 6657 6565 6b20 616e 6420 2d2d 6b65 tOfWeek and --ke │ │ │ -0000bdc0: 6570 4c61 7374 4f66 5765 656b 0a3b 6669 epLastOfWeek.;fi │ │ │ -0000bdd0: 7273 7444 6179 4f66 5765 656b 3d0a 0a23 rstDayOfWeek=..# │ │ │ -0000bde0: 2064 6f20 6e6f 7420 6465 6c65 7465 2074 do not delete t │ │ │ -0000bdf0: 6865 2066 6972 7374 2062 6163 6b75 7020 he first backup │ │ │ -0000be00: 6f66 2061 2077 6565 6b0a 2320 666f 726d of a week.# form │ │ │ -0000be10: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod │ │ │ -0000be20: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible ' │ │ │ -0000be30: 6172 6368 6976 6520 666c 6167 270a 3b6b archive flag'.;k │ │ │ -0000be40: 6565 7046 6972 7374 4f66 5765 656b 3d0a eepFirstOfWeek=. │ │ │ -0000be50: 0a23 2064 6f20 6e6f 7420 6465 6c65 7465 .# do not delete │ │ │ -0000be60: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup │ │ │ -0000be70: 206f 6620 6120 7765 656b 0a23 2066 6f72 of a week.# for │ │ │ -0000be80: 6d61 7420 6973 2074 696d 6550 6572 696f mat is timePerio │ │ │ -0000be90: 6420 7769 7468 2070 6f73 7369 626c 6520 d with possible │ │ │ -0000bea0: 2761 7263 6869 7665 2066 6c61 6727 0a3b 'archive flag'.; │ │ │ -0000beb0: 6b65 6570 4c61 7374 4f66 5765 656b 3d0a keepLastOfWeek=. │ │ │ -0000bec0: 0a23 206b 6565 7020 6d75 6c74 6970 6c65 .# keep multiple │ │ │ -0000bed0: 2062 6163 6b75 7073 206f 6620 6f6e 6520 backups of one │ │ │ -0000bee0: 6461 7920 7570 2074 6f20 7469 6d65 5065 day up to timePe │ │ │ -0000bef0: 7269 6f64 0a23 2066 6f72 6d61 7420 6973 riod.# format is │ │ │ -0000bf00: 2074 696d 6550 6572 696f 642c 2027 6172 timePeriod, 'ar │ │ │ -0000bf10: 6368 6976 6520 666c 6167 2720 6973 206e chive flag' is n │ │ │ -0000bf20: 6f74 2070 6f73 7369 626c 650a 2320 6465 ot possible.# de │ │ │ -0000bf30: 6661 756c 7420 6973 2024 6b65 6570 4475 fault is $keepDu │ │ │ -0000bf40: 706c 6963 6174 650a 3b6b 6565 7044 7570 plicate.;keepDup │ │ │ -0000bf50: 6c69 6361 7465 3d0a 0a23 204b 6565 7020 licate=..# Keep │ │ │ -0000bf60: 7468 6174 206d 696d 696e 756d 206f 6620 that miminum of │ │ │ -0000bf70: 6261 636b 7570 732e 204d 756c 7469 706c backups. Multipl │ │ │ -0000bf80: 6520 6261 636b 7570 7320 6f66 206f 6e65 e backups of one │ │ │ -0000bf90: 0a23 2064 6179 2061 7265 2063 6f75 6e74 .# day are count │ │ │ -0000bfa0: 6564 2061 7320 6f6e 6520 6261 636b 7570 ed as one backup │ │ │ -0000bfb0: 2e20 4465 6661 756c 7420 6973 2031 302e . Default is 10. │ │ │ -0000bfc0: 0a3b 6b65 6570 4d69 6e4e 756d 6265 723d .;keepMinNumber= │ │ │ -0000bfd0: 0a0a 2320 5472 7920 746f 206b 6565 7020 ..# Try to keep │ │ │ -0000bfe0: 6f6e 6c79 2074 6861 7420 6d61 7869 6d75 only that maximu │ │ │ -0000bff0: 6d20 6f66 2062 6163 6b75 7073 2e20 4966 m of backups. If │ │ │ -0000c000: 2079 6f75 2068 6176 6520 6d6f 7265 0a23 you have more.# │ │ │ -0000c010: 2062 6163 6b75 7073 2c20 7468 6520 666f backups, the fo │ │ │ -0000c020: 6c6c 6f77 696e 6720 7365 7175 656e 6365 llowing sequence │ │ │ -0000c030: 206f 6620 6465 6c65 7469 6e67 2077 696c of deleting wil │ │ │ -0000c040: 6c20 6861 7070 656e 3a0a 2320 2d20 6465 l happen:.# - de │ │ │ -0000c050: 6c65 7465 2061 6c6c 2064 7570 6c69 6361 lete all duplica │ │ │ -0000c060: 7465 7320 6f66 2061 2064 6179 2c20 6265 tes of a day, be │ │ │ -0000c070: 6769 6e6e 696e 6720 7769 7468 2074 6865 ginning with the │ │ │ -0000c080: 206f 6c64 0a23 2020 206f 6e63 652c 2065 old.# once, e │ │ │ -0000c090: 7863 6570 7420 7468 6520 6f6c 6465 7374 xcept the oldest │ │ │ -0000c0a0: 206f 6620 6576 6572 7920 6461 790a 2320 of every day.# │ │ │ -0000c0b0: 2d20 6966 2074 6869 7320 6973 206e 6f74 - if this is not │ │ │ -0000c0c0: 2065 6e6f 7567 682c 2064 656c 6574 6520 enough, delete │ │ │ -0000c0d0: 7468 6520 7265 7374 206f 6620 7468 6520 the rest of the │ │ │ -0000c0e0: 6261 636b 7570 730a 2320 2020 6265 6769 backups.# begi │ │ │ -0000c0f0: 6e6e 696e 6720 7769 7468 2074 6865 206f nning with the o │ │ │ -0000c100: 6c64 6573 742c 2062 7574 202a 6e65 7665 ldest, but *neve │ │ │ -0000c110: 722a 2061 2062 6163 6b75 7020 7769 7468 r* a backup with │ │ │ -0000c120: 0a23 2020 2074 6865 2027 6172 6368 6976 .# the 'archiv │ │ │ -0000c130: 6520 666c 6167 2720 6f72 2074 6865 206c e flag' or the l │ │ │ -0000c140: 6173 7420 6261 636b 7570 0a3b 6b65 6570 ast backup.;keep │ │ │ -0000c150: 4d61 784e 756d 6265 723d 0a0a 2320 416c MaxNumber=..# Al │ │ │ -0000c160: 7465 726e 6174 6976 6520 6465 6c65 7469 ternative deleti │ │ │ -0000c170: 6f6e 2073 6368 656d 652e 2049 6620 796f on scheme. If yo │ │ │ -0000c180: 7520 7573 6520 7468 6973 206f 7074 696f u use this optio │ │ │ -0000c190: 6e2c 2061 6c6c 0a23 206f 7468 6572 206b n, all.# other k │ │ │ -0000c1a0: 6565 7020 6f70 7469 6f6e 7320 6172 6520 eep options are │ │ │ -0000c1b0: 6967 6e6f 7265 642e 2050 7265 7365 7276 ignored. Preserv │ │ │ -0000c1c0: 6573 2062 6163 6b75 7073 2064 6570 656e es backups depen │ │ │ -0000c1d0: 6469 6e67 0a23 206f 6e20 7468 6569 7220 ding.# on their │ │ │ -0000c1e0: 2a72 656c 6174 6976 652a 2061 6765 2e20 *relative* age. │ │ │ -0000c1f0: 4578 616d 706c 653a 0a23 0a23 2020 206b Example:.#.# k │ │ │ -0000c200: 6565 7052 656c 6174 6976 6520 3d20 3164 eepRelative = 1d │ │ │ -0000c210: 2037 6420 3631 6420 3932 640a 230a 2320 7d 61d 92d.#.# │ │ │ -0000c220: 7769 6c6c 2028 7472 7920 746f 2920 656e will (try to) en │ │ │ -0000c230: 7375 7265 2074 6861 7420 7468 6572 6520 sure that there │ │ │ -0000c240: 6973 2061 6c77 6179 730a 230a 2320 2d20 is always.#.# - │ │ │ -0000c250: 4f6e 6520 6261 636b 7570 2062 6574 7765 One backup betwe │ │ │ -0000c260: 656e 2031 2064 6179 2061 6e64 2037 2064 en 1 day and 7 d │ │ │ -0000c270: 6179 7320 6f6c 640a 2320 2d20 4f6e 6520 ays old.# - One │ │ │ -0000c280: 6261 636b 7570 2062 6574 7765 656e 2035 backup between 5 │ │ │ -0000c290: 2064 6179 7320 616e 6420 3220 6d6f 6e74 days and 2 mont │ │ │ -0000c2a0: 6873 206f 6c64 0a23 202d 204f 6e65 2062 hs old.# - One b │ │ │ -0000c2b0: 6163 6b75 7020 6265 7477 6565 6e20 7e32 ackup between ~2 │ │ │ -0000c2c0: 206d 6f6e 7468 7320 616e 6420 7e33 206d months and ~3 m │ │ │ -0000c2d0: 6f6e 7468 7320 6f6c 640a 230a 2320 4966 onths old.#.# If │ │ │ -0000c2e0: 2074 6865 7265 2069 7320 6e6f 2062 6163 there is no bac │ │ │ -0000c2f0: 6b75 7020 666f 7220 6120 7370 6563 6966 kup for a specif │ │ │ -0000c300: 6965 6420 7469 6d65 7370 616e 2028 652e ied timespan (e. │ │ │ -0000c310: 672e 2062 6563 6175 7365 2074 6865 0a23 g. because the.# │ │ │ -0000c320: 206c 6173 7420 6261 636b 7570 2077 6173 last backup was │ │ │ -0000c330: 2064 6f6e 6520 6d6f 7265 2074 6861 6e20 done more than │ │ │ -0000c340: 3220 7765 656b 7320 6167 6f29 2074 6865 2 weeks ago) the │ │ │ -0000c350: 206e 6578 7420 6f6c 6465 7220 6261 636b next older back │ │ │ -0000c360: 7570 0a23 2077 696c 6c20 6265 2075 7365 up.# will be use │ │ │ -0000c370: 6420 666f 7220 7468 6973 2074 696d 6573 d for this times │ │ │ -0000c380: 7061 6e2e 0a3b 6b65 6570 5265 6c61 7469 pan..;keepRelati │ │ │ -0000c390: 7665 203d 0a0a 2320 7072 696e 7420 7072 ve =..# print pr │ │ │ -0000c3a0: 6f67 7265 7373 2072 6570 6f72 7420 6166 ogress report af │ │ │ -0000c3b0: 7465 7220 6561 6368 2027 6e75 6d62 6572 ter each 'number │ │ │ -0000c3c0: 2720 6669 6c65 730a 2320 4465 6661 756c ' files.# Defaul │ │ │ -0000c3d0: 7420 6973 2030 2c20 7768 6963 6820 6d65 t is 0, which me │ │ │ -0000c3e0: 616e 7320 6e6f 2072 6570 6f72 7473 2e0a ans no reports.. │ │ │ -0000c3f0: 2320 6164 6469 7469 6f6e 616c 2079 6f75 # additional you │ │ │ -0000c400: 206d 6179 2061 6464 2061 2074 696d 6520 may add a time │ │ │ -0000c410: 6672 616d 6520 6166 7465 7220 7768 6963 frame after whic │ │ │ -0000c420: 6820 6120 6d65 7373 6167 6520 6973 2070 h a message is p │ │ │ -0000c430: 7269 6e74 6564 0a23 2069 6620 796f 7520 rinted.# if you │ │ │ -0000c440: 7761 6e74 2074 6f20 7072 696e 7420 6120 want to print a │ │ │ -0000c450: 7265 706f 7274 2065 6163 6820 3130 3030 report each 1000 │ │ │ -0000c460: 2066 696c 6573 2061 6e64 2061 6674 6572 files and after │ │ │ -0000c470: 0a23 206f 6e65 206d 696e 7574 6520 616e .# one minute an │ │ │ -0000c480: 6420 3130 2073 6563 6f6e 6473 2c20 7573 d 10 seconds, us │ │ │ -0000c490: 653a 202d 5020 3130 3030 2c31 6d31 3073 e: -P 1000,1m10s │ │ │ -0000c4a0: 0a3b 7072 6f67 7265 7373 5265 706f 7274 .;progressReport │ │ │ -0000c4b0: 3d0a 0a23 2070 7269 6e74 2064 6570 7468 =..# print depth │ │ │ -0000c4c0: 206f 6620 6163 7475 616c 2072 6561 6465 of actual reade │ │ │ -0000c4d0: 6420 6469 7265 6374 6f72 7920 6475 7269 d directory duri │ │ │ -0000c4e0: 6e67 2062 6163 6b75 700a 2320 6465 6661 ng backup.# defa │ │ │ -0000c4f0: 756c 7420 6973 2027 6e6f 272c 2076 616c ult is 'no', val │ │ │ -0000c500: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an │ │ │ -0000c510: 6420 276e 6f27 0a3b 7072 696e 7444 6570 d 'no'.;printDep │ │ │ -0000c520: 7468 3d0a 0a23 2069 676e 6f72 6520 7265 th=..# ignore re │ │ │ -0000c530: 6164 2065 7272 6f72 7320 696e 2073 6f75 ad errors in sou │ │ │ -0000c540: 7263 6520 6469 7265 6374 6f72 793b 206e rce directory; n │ │ │ -0000c550: 6f74 2072 6561 6461 626c 650a 2320 6469 ot readable.# di │ │ │ -0000c560: 7265 6374 6f72 6965 7320 646f 6573 206e rectories does n │ │ │ -0000c570: 6f74 2063 6175 7365 2073 746f 7265 4261 ot cause storeBa │ │ │ -0000c580: 636b 7570 2e70 6c20 746f 2073 746f 7020 ckup.pl to stop │ │ │ -0000c590: 7072 6f63 6573 7369 6e67 0a23 2056 616c processing.# Val │ │ │ -0000c5a0: 7565 7320 6172 6520 2779 6573 2720 616e ues are 'yes' an │ │ │ -0000c5b0: 6420 276e 6f27 2e20 4465 6661 756c 7420 d 'no'. Default │ │ │ -0000c5c0: 6973 2027 6e6f 2720 7768 6963 6820 6d65 is 'no' which me │ │ │ -0000c5d0: 616e 7320 6e6f 740a 2320 746f 2069 676e ans not.# to ign │ │ │ -0000c5e0: 6f72 6520 7468 656d 0a3b 6967 6e6f 7265 ore them.;ignore │ │ │ -0000c5f0: 5265 6164 4572 726f 723d 0a0a 2320 6166 ReadError=..# af │ │ │ -0000c600: 7465 7220 6120 7375 6363 6573 7366 756c ter a successful │ │ │ -0000c610: 2062 6163 6b75 702c 2073 6574 2061 2073 backup, set a s │ │ │ -0000c620: 796d 626f 6c69 6320 6c69 6e6b 2074 6f0a ymbolic link to. │ │ │ -0000c630: 2320 7468 6174 2062 6163 6b75 7020 616e # that backup an │ │ │ -0000c640: 6420 6465 6c65 7465 2065 7869 7374 696e d delete existin │ │ │ -0000c650: 6720 6f6c 6465 7220 6c69 6e6b 7320 7769 g older links wi │ │ │ -0000c660: 7468 2074 6865 0a23 2073 616d 6520 6e61 th the.# same na │ │ │ -0000c670: 6d65 0a3b 6c69 6e6b 546f 5265 6365 6e74 me.;linkToRecent │ │ │ -0000c680: 3d0a 0a23 206e 616d 6520 6f66 2074 6865 =..# name of the │ │ │ -0000c690: 206c 6f67 2066 696c 6520 2864 6566 6175 log file (defau │ │ │ -0000c6a0: 6c74 2069 7320 5354 444f 5554 290a 3b6c lt is STDOUT).;l │ │ │ -0000c6b0: 6f67 4669 6c65 3d0a 0a23 2069 6620 796f ogFile=..# if yo │ │ │ -0000c6c0: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log │ │ │ -0000c6d0: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF │ │ │ -0000c6e0: 696c 6520 796f 7520 6361 6e0a 2320 6164 ile you can.# ad │ │ │ -0000c6f0: 6469 7469 6f6e 616c 6c79 2070 7269 6e74 ditionally print │ │ │ -0000c700: 2074 6865 206f 7574 7075 7420 746f 2053 the output to S │ │ │ -0000c710: 5444 4f55 5420 7769 7468 2074 6869 7320 TDOUT with this │ │ │ -0000c720: 666c 6167 0a23 2056 616c 7565 7320 6172 flag.# Values ar │ │ │ -0000c730: 6520 2779 6573 2720 616e 6420 276e 6f27 e 'yes' and 'no' │ │ │ -0000c740: 2e20 4465 6661 756c 7420 6973 2027 6e6f . Default is 'no │ │ │ -0000c750: 272e 0a3b 706c 7573 4c6f 6753 7464 6f75 '..;plusLogStdou │ │ │ -0000c760: 743d 0a0a 2320 6f75 7470 7574 2069 6e20 t=..# output in │ │ │ -0000c770: 6c6f 6766 696c 6520 7769 7468 6f75 7420 logfile without │ │ │ -0000c780: 7469 6d65 3a20 2779 6573 2720 6f72 2027 time: 'yes' or ' │ │ │ -0000c790: 6e6f 270a 2320 6465 6661 756c 7420 3d20 no'.# default = │ │ │ -0000c7a0: 6e6f 0a3b 7375 7070 7265 7373 5469 6d65 no.;suppressTime │ │ │ -0000c7b0: 3d0a 0a23 206d 6178 696d 616c 206c 656e =..# maximal len │ │ │ -0000c7c0: 6774 6820 6f66 206c 6f67 2066 696c 652c gth of log file, │ │ │ -0000c7d0: 2064 6566 6175 6c74 203d 2031 6536 0a3b default = 1e6.; │ │ │ -0000c7e0: 6d61 7846 696c 656c 656e 3d0a 0a23 206e maxFilelen=..# n │ │ │ -0000c7f0: 756d 6265 7220 6f66 206f 6c64 206c 6f67 umber of old log │ │ │ -0000c800: 2066 696c 6573 2c20 6465 6661 756c 7420 files, default │ │ │ -0000c810: 3d20 350a 3b6e 6f4f 664f 6c64 4669 6c65 = 5.;noOfOldFile │ │ │ -0000c820: 733d 0a0a 2320 7361 7665 206c 6f67 2066 s=..# save log f │ │ │ -0000c830: 696c 6573 2077 6974 6820 6461 7465 2061 iles with date a │ │ │ -0000c840: 6e64 2074 696d 6520 696e 7374 6561 6420 nd time instead │ │ │ -0000c850: 6f66 2064 656c 6574 696e 6720 7468 650a of deleting the. │ │ │ -0000c860: 2320 6f6c 6420 2877 6974 6820 5b2d 6e6f # old (with [-no │ │ │ -0000c870: 4f66 4f6c 6446 696c 6573 5d29 3a20 2779 OfOldFiles]): 'y │ │ │ -0000c880: 6573 2720 6f72 2027 6e6f 272c 2064 6566 es' or 'no', def │ │ │ -0000c890: 6175 6c74 203d 2027 6e6f 270a 3b73 6176 ault = 'no'.;sav │ │ │ -0000c8a0: 654c 6f67 733d 0a0a 2320 636f 6d70 7265 eLogs=..# compre │ │ │ -0000c8b0: 7373 2073 6176 6564 206c 6f67 2066 696c ss saved log fil │ │ │ -0000c8c0: 6573 2028 652e 672e 2077 6974 6820 2767 es (e.g. with 'g │ │ │ -0000c8d0: 7a69 7020 2d39 2729 0a23 2064 6566 6175 zip -9').# defau │ │ │ -0000c8e0: 6c74 2069 7320 2762 7a69 7032 270a 3b63 lt is 'bzip2'.;c │ │ │ -0000c8f0: 6f6d 7072 6573 7357 6974 683d 0a0a 2320 ompressWith=..# │ │ │ -0000c900: 7772 6974 6520 6c6f 6720 6669 6c65 2028 write log file ( │ │ │ -0000c910: 616c 736f 2920 696e 2074 6865 2062 6163 also) in the bac │ │ │ -0000c920: 6b75 7020 6469 7265 6374 6f72 793a 0a23 kup directory:.# │ │ │ -0000c930: 2027 7965 7327 206f 7220 276e 6f27 2c20 'yes' or 'no', │ │ │ -0000c940: 6465 6661 756c 7420 6973 2027 6e6f 270a default is 'no'. │ │ │ -0000c950: 2320 4265 2061 7761 7265 2074 6861 7420 # Be aware that │ │ │ -0000c960: 7468 6973 206c 6f67 2064 6f65 7320 6e6f this log does no │ │ │ -0000c970: 7420 636f 6e74 6169 6e20 616c 6c20 6572 t contain all er │ │ │ -0000c980: 726f 720a 2320 6d65 7373 6167 6573 206f ror.# messages o │ │ │ -0000c990: 6620 7468 6520 6f6e 6520 7370 6563 6966 f the one specif │ │ │ -0000c9a0: 6965 6420 7769 7468 202d 2d6c 6f67 4669 ied with --logFi │ │ │ -0000c9b0: 6c65 210a 2320 536f 6d65 2065 7272 6f72 le!.# Some error │ │ │ -0000c9c0: 7320 6172 6520 706f 7373 6962 6c65 2062 s are possible b │ │ │ -0000c9d0: 6566 6f72 6520 7468 6520 6261 636b 7570 efore the backup │ │ │ -0000c9e0: 0a23 2064 6972 6563 746f 7279 2069 7320 .# directory is │ │ │ -0000c9f0: 6372 6561 7465 642e 0a3b 6c6f 6749 6e42 created..;logInB │ │ │ -0000ca00: 6163 6b75 7044 6972 3d0a 0a23 2063 6f6d ackupDir=..# com │ │ │ -0000ca10: 7072 6573 7320 7468 6520 6c6f 6720 6669 press the log fi │ │ │ -0000ca20: 6c65 2069 6e20 7468 6520 6261 636b 7570 le in the backup │ │ │ -0000ca30: 2064 6972 6563 746f 7279 3a0a 2320 2779 directory:.# 'y │ │ │ -0000ca40: 6573 2720 6f72 2027 6e6f 272c 2064 6566 es' or 'no', def │ │ │ -0000ca50: 6175 6c74 2069 7320 276e 6f27 0a3b 636f ault is 'no'.;co │ │ │ -0000ca60: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku │ │ │ -0000ca70: 7044 6972 3d0a 0a23 2066 696c 656e 616d pDir=..# filenam │ │ │ -0000ca80: 6520 746f 2075 7365 2066 6f72 2077 7269 e to use for wri │ │ │ -0000ca90: 7469 6e67 2074 6865 2061 626f 7665 206c ting the above l │ │ │ -0000caa0: 6f67 2066 696c 652c 0a23 2064 6566 6175 og file,.# defau │ │ │ -0000cab0: 6c74 2069 7320 2724 6c6f 6749 6e42 6163 lt is '$logInBac │ │ │ -0000cac0: 6b75 7044 6972 4669 6c65 4e61 6d65 270a kupDirFileName'. │ │ │ -0000cad0: 3b6c 6f67 496e 4261 636b 7570 4469 7246 ;logInBackupDirF │ │ │ -0000cae0: 696c 654e 616d 653d 0a0a 454f 430a 2020 ileName=..EOC. │ │ │ -0000caf0: 2020 3b0a 0a0a 2670 7269 6e74 5665 7273 ;...&printVers │ │ │ -0000cb00: 696f 6e28 5c40 4152 4756 2c20 272d 5627 ion(\@ARGV, '-V' │ │ │ -0000cb10: 2c20 272d 2d76 6572 7369 6f6e 2729 3b0a , '--version');. │ │ │ -0000cb20: 0a6d 7920 2840 626c 6f63 6b52 756c 6573 .my (@blockRules │ │ │ -0000cb30: 4f70 7473 293b 0a7b 0a20 2020 206d 7920 Opts);.{. my │ │ │ -0000cb40: 2469 3b0a 2020 2020 666f 7265 6163 6820 $i;. foreach │ │ │ -0000cb50: 2469 2028 302e 2e24 6e6f 426c 6f63 6b52 $i (0..$noBlockR │ │ │ -0000cb60: 756c 6573 2d31 290a 2020 2020 7b0a 0970 ules-1). {..p │ │ │ -0000cb70: 7573 6820 4062 6c6f 636b 5275 6c65 734f ush @blockRulesO │ │ │ -0000cb80: 7074 732c 0a09 4f70 7469 6f6e 2d3e 6e65 pts,..Option->ne │ │ │ -0000cb90: 7728 272d 6e61 6d65 2720 3d3e 2022 6368 w('-name' => "ch │ │ │ -0000cba0: 6563 6b42 6c6f 636b 7352 756c 6524 6922 eckBlocksRule$i" │ │ │ -0000cbb0: 2c0a 0909 2020 2020 272d 636c 5f6f 7074 ,... '-cl_opt │ │ │ -0000cbc0: 696f 6e27 203d 3e20 222d 2d63 6865 636b ion' => "--check │ │ │ -0000cbd0: 426c 6f63 6b73 5275 6c65 2469 222c 0a09 BlocksRule$i",.. │ │ │ -0000cbe0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -0000cbf0: 3e20 2263 6865 636b 426c 6f63 6b73 5275 > "checkBlocksRu │ │ │ -0000cc00: 6c65 2469 222c 0a09 0920 2020 2027 2d71 le$i",... '-q │ │ │ -0000cc10: 756f 7465 4576 616c 2720 3d3e 2027 7965 uoteEval' => 'ye │ │ │ -0000cc20: 7327 292c 0a09 4f70 7469 6f6e 2d3e 6e65 s'),..Option->ne │ │ │ -0000cc30: 7728 272d 6e61 6d65 2720 3d3e 2022 6368 w('-name' => "ch │ │ │ -0000cc40: 6563 6b42 6c6f 636b 7342 5324 6922 2c0a eckBlocksBS$i",. │ │ │ -0000cc50: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000cc60: 6e27 203d 3e20 222d 2d63 6865 636b 426c n' => "--checkBl │ │ │ -0000cc70: 6f63 6b73 4253 2469 222c 0a09 0920 2020 ocksBS$i",... │ │ │ -0000cc80: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => "c │ │ │ -0000cc90: 6865 636b 426c 6f63 6b73 4253 2469 222c heckBlocksBS$i", │ │ │ -0000cca0: 0a09 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -0000ccb0: 2720 3d3e 2024 6368 6563 6b42 6c6f 636b ' => $checkBlock │ │ │ -0000ccc0: 7342 5364 6566 6175 6c74 292c 0a09 4f70 sBSdefault),..Op │ │ │ -0000ccd0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000cce0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ -0000ccf0: 7343 6f6d 7072 2469 222c 0a09 0920 2020 sCompr$i",... │ │ │ -0000cd00: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000cd10: 2022 2d2d 6368 6563 6b42 6c6f 636b 7343 "--checkBlocksC │ │ │ -0000cd20: 6f6d 7072 2469 222c 0a09 0920 2020 2027 ompr$i",... ' │ │ │ -0000cd30: 2d63 665f 6b65 7927 203d 3e20 2263 6865 -cf_key' => "che │ │ │ -0000cd40: 636b 426c 6f63 6b73 436f 6d70 7224 6922 ckBlocksCompr$i" │ │ │ -0000cd50: 2c0a 0909 2020 2020 272d 6465 6661 756c ,... '-defaul │ │ │ -0000cd60: 7427 203d 3e20 276e 6f27 2c0a 0909 2020 t' => 'no',... │ │ │ -0000cd70: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ -0000cd80: 275c 4163 6865 636b 5c5a 7c5c 4179 6573 '\Acheck\Z|\Ayes │ │ │ -0000cd90: 5c5a 7c5c 416e 6f5c 5a27 292c 0a09 4f70 \Z|\Ano\Z'),..Op │ │ │ -0000cda0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000cdb0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ -0000cdc0: 7352 6561 6424 6922 2c0a 0909 2020 2020 sRead$i",... │ │ │ -0000cdd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -0000cde0: 222d 2d63 6865 636b 426c 6f63 6b73 5265 "--checkBlocksRe │ │ │ -0000cdf0: 6164 2469 222c 0a09 0920 2020 2027 2d63 ad$i",... '-c │ │ │ -0000ce00: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => "check │ │ │ -0000ce10: 426c 6f63 6b73 5265 6164 2469 222c 0a09 BlocksRead$i",.. │ │ │ -0000ce20: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ -0000ce30: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op │ │ │ -0000ce40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000ce50: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ -0000ce60: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i",... │ │ │ -0000ce70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -0000ce80: 203d 3e20 222d 2d63 6865 636b 426c 6f63 => "--checkBloc │ │ │ -0000ce90: 6b73 5061 7261 6c6c 656c 2469 222c 0a09 ksParallel$i",.. │ │ │ -0000cea0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -0000ceb0: 3e20 2263 6865 636b 426c 6f63 6b73 5061 > "checkBlocksPa │ │ │ -0000cec0: 7261 6c6c 656c 2469 222c 0a09 0920 2020 rallel$i",... │ │ │ -0000ced0: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ -0000cee0: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ -0000cef0: 293b 0a0a 2020 2020 7d0a 7d0a 6d79 2028 );.. }.}.my ( │ │ │ -0000cf00: 4062 6c6f 636b 4465 7669 6365 734f 7074 @blockDevicesOpt │ │ │ -0000cf10: 7329 3b0a 7b0a 2020 2020 6d79 2024 693b s);.{. my $i; │ │ │ -0000cf20: 0a20 2020 2066 6f72 6561 6368 2024 6920 . foreach $i │ │ │ -0000cf30: 2830 2e2e 246d 6169 6e3a 3a6e 6f42 6c6f (0..$main::noBlo │ │ │ -0000cf40: 636b 4465 7669 6365 732d 3129 0a20 2020 ckDevices-1). │ │ │ -0000cf50: 207b 0a09 7075 7368 2040 626c 6f63 6b44 {..push @blockD │ │ │ -0000cf60: 6576 6963 6573 4f70 7473 2c0a 094f 7074 evicesOpts,..Opt │ │ │ -0000cf70: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -0000cf80: 203d 3e20 2263 6865 636b 4465 7669 6365 => "checkDevice │ │ │ -0000cf90: 7324 6922 2c0a 0909 2020 2020 272d 636c s$i",... '-cl │ │ │ -0000cfa0: 5f6f 7074 696f 6e27 203d 3e20 222d 2d63 _option' => "--c │ │ │ -0000cfb0: 6865 636b 4465 7669 6365 7324 6922 2c0a heckDevices$i",. │ │ │ -0000cfc0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -0000cfd0: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => "checkDevices │ │ │ -0000cfe0: 2469 222c 0a09 0920 2020 2027 2d6d 756c $i",... '-mul │ │ │ -0000cff0: 7469 706c 6527 203d 3e20 2779 6573 2729 tiple' => 'yes') │ │ │ -0000d000: 2c0a 094f 7074 696f 6e2d 3e6e 6577 2827 ,..Option->new(' │ │ │ -0000d010: 2d6e 616d 6527 203d 3e20 2263 6865 636b -name' => "check │ │ │ -0000d020: 4465 7669 6365 7344 6972 2469 222c 0a09 DevicesDir$i",.. │ │ │ -0000d030: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -0000d040: 2720 3d3e 2022 2d2d 6368 6563 6b44 6576 ' => "--checkDev │ │ │ -0000d050: 6963 6573 4469 7224 6922 2c0a 0909 2020 icesDir$i",... │ │ │ -0000d060: 2020 272d 6366 5f6b 6579 2720 3d3e 2022 '-cf_key' => " │ │ │ -0000d070: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$ │ │ │ -0000d080: 6922 2c0a 0909 2020 2020 272d 7061 7261 i",... '-para │ │ │ -0000d090: 6d27 203d 3e20 2779 6573 2729 2c0a 094f m' => 'yes'),..O │ │ │ -0000d0a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000d0b0: 6527 203d 3e20 2263 6865 636b 4465 7669 e' => "checkDevi │ │ │ -0000d0c0: 6365 7342 5324 6922 2c0a 0909 2020 2020 cesBS$i",... │ │ │ -0000d0d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -0000d0e0: 222d 2d63 6865 636b 4465 7669 6365 7342 "--checkDevicesB │ │ │ -0000d0f0: 5324 6922 2c0a 0909 2020 2020 272d 6366 S$i",... '-cf │ │ │ -0000d100: 5f6b 6579 2720 3d3e 2022 6368 6563 6b44 _key' => "checkD │ │ │ -0000d110: 6576 6963 6573 4253 2469 222c 0a09 0920 evicesBS$i",... │ │ │ -0000d120: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -0000d130: 2024 6368 6563 6b42 6c6f 636b 7342 5364 $checkBlocksBSd │ │ │ -0000d140: 6566 6175 6c74 292c 0a09 4f70 7469 6f6e efault),..Option │ │ │ -0000d150: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -0000d160: 2022 6368 6563 6b44 6576 6963 6573 436f "checkDevicesCo │ │ │ -0000d170: 6d70 7224 6922 2c0a 0909 2020 2020 272d mpr$i",... '- │ │ │ -0000d180: 636c 5f6f 7074 696f 6e27 203d 3e20 222d cl_option' => "- │ │ │ -0000d190: 2d63 6865 636b 4465 7669 6365 7343 6f6d -checkDevicesCom │ │ │ -0000d1a0: 7072 2469 222c 0a09 0920 2020 2027 2d63 pr$i",... '-c │ │ │ -0000d1b0: 665f 6b65 7927 203d 3e20 2263 6865 636b f_key' => "check │ │ │ -0000d1c0: 4465 7669 6365 7343 6f6d 7072 2469 222c DevicesCompr$i", │ │ │ -0000d1d0: 0a09 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -0000d1e0: 2720 3d3e 2027 6e6f 272c 0a09 0920 2020 ' => 'no',... │ │ │ -0000d1f0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => ' │ │ │ -0000d200: 5c41 6368 6563 6b5c 5a7c 5c41 7965 735c \Acheck\Z|\Ayes\ │ │ │ -0000d210: 5a7c 5c41 6e6f 5c5a 2729 2c0a 094f 7074 Z|\Ano\Z'),..Opt │ │ │ -0000d220: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -0000d230: 203d 3e20 2263 6865 636b 4465 7669 6365 => "checkDevice │ │ │ -0000d240: 7350 6172 616c 6c65 6c24 6922 2c0a 0909 sParallel$i",... │ │ │ -0000d250: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -0000d260: 203d 3e20 222d 2d63 6865 636b 4465 7669 => "--checkDevi │ │ │ -0000d270: 6365 7350 6172 616c 6c65 6c24 6922 2c0a cesParallel$i",. │ │ │ -0000d280: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -0000d290: 3d3e 2022 6368 6563 6b44 6576 6963 6573 => "checkDevices │ │ │ -0000d2a0: 5061 7261 6c6c 656c 2469 222c 0a09 0920 Parallel$i",... │ │ │ -0000d2b0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ -0000d2c0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ -0000d2d0: 275d 293b 0a20 2020 207d 0a7d 0a0a 2323 ']);. }.}..## │ │ │ -0000d2e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000d2f0: 2323 2121 2121 2121 2121 2121 2121 2121 ##!!!!!!!!!!!!!! │ │ │ -0000d300: 2121 0a6d 7920 2840 636f 6d70 7265 7373 !!.my (@compress │ │ │ -0000d310: 5275 6c65 7329 3b0a 7b0a 2020 2020 6d79 Rules);.{. my │ │ │ -0000d320: 2024 693b 0a0a 2020 2020 666f 7265 6163 $i;.. foreac │ │ │ -0000d330: 6820 2469 2028 302e 2e24 6d61 696e 3a3a h $i (0..$main:: │ │ │ -0000d340: 6e6f 436f 6d70 7265 7373 5275 6c65 732d noCompressRules- │ │ │ -0000d350: 3129 0a20 2020 207b 0a09 7075 7368 2040 1). {..push @ │ │ │ -0000d360: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,.. │ │ │ -0000d370: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000d380: 6d65 2720 3d3e 2022 636f 6d70 7265 7373 me' => "compress │ │ │ -0000d390: 2469 222c 0a09 0920 2020 2027 2d63 6c5f $i",... '-cl_ │ │ │ -0000d3a0: 6f70 7469 6f6e 2720 3d3e 2022 2d2d 636f option' => "--co │ │ │ -0000d3b0: 6d70 7265 7373 2469 222c 0a09 0920 2020 mpress$i",... │ │ │ -0000d3c0: 2027 2d63 665f 6b65 7927 203d 3e20 2263 '-cf_key' => "c │ │ │ -0000d3d0: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i",... │ │ │ -0000d3e0: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ -0000d3f0: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option │ │ │ -0000d400: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -0000d410: 2022 756e 636f 6d70 7265 7373 2469 222c "uncompress$i", │ │ │ -0000d420: 0a09 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -0000d430: 6f6e 2720 3d3e 2022 2d2d 756e 636f 6d70 on' => "--uncomp │ │ │ -0000d440: 7265 7373 2469 222c 0a09 0920 2020 2027 ress$i",... ' │ │ │ -0000d450: 2d63 665f 6b65 7927 203d 3e20 2275 6e63 -cf_key' => "unc │ │ │ -0000d460: 6f6d 7072 6573 7324 6922 2c0a 0909 2020 ompress$i",... │ │ │ -0000d470: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ -0000d480: 2027 7965 7327 292c 0a09 4f70 7469 6f6e 'yes'),..Option │ │ │ -0000d490: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -0000d4a0: 2022 706f 7374 6669 7824 6922 2c0a 0909 "postfix$i",... │ │ │ -0000d4b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -0000d4c0: 203d 3e20 222d 2d70 6f73 7466 6978 2469 => "--postfix$i │ │ │ -0000d4d0: 222c 0a09 0920 2020 2027 2d63 665f 6b65 ",... '-cf_ke │ │ │ -0000d4e0: 7927 203d 3e20 2270 6f73 7466 6978 2469 y' => "postfix$i │ │ │ -0000d4f0: 222c 0a09 0920 2020 2027 2d70 6172 616d ",... '-param │ │ │ -0000d500: 2720 3d3e 2027 7965 7327 292c 0a09 4f70 ' => 'yes'),..Op │ │ │ -0000d510: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000d520: 2720 3d3e 2022 636f 6d70 7265 7373 5275 ' => "compressRu │ │ │ -0000d530: 6c65 2469 222c 0a09 0920 2020 2027 2d63 le$i",... '-c │ │ │ -0000d540: 6c5f 6f70 7469 6f6e 2720 3d3e 2022 2d2d l_option' => "-- │ │ │ -0000d550: 636f 6d70 7265 7373 5275 6c65 2469 222c compressRule$i", │ │ │ -0000d560: 0a09 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -0000d570: 203d 3e20 2263 6f6d 7072 6573 7352 756c => "compressRul │ │ │ -0000d580: 6524 6922 2c0a 0909 2020 2020 272d 6d75 e$i",... '-mu │ │ │ -0000d590: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes' │ │ │ -0000d5a0: 293b 0a20 2020 207d 0a7d 0a0a 6d79 2024 );. }.}..my $ │ │ │ -0000d5b0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C │ │ │ -0000d5c0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new(' │ │ │ -0000d5d0: 2d61 6c6c 6f77 4c69 7374 7327 203d 3e20 -allowLists' => │ │ │ -0000d5e0: 2779 6573 272c 0a20 2020 2020 2020 2020 'yes',. │ │ │ -0000d5f0: 2020 2020 2020 2020 2020 2027 2d6c 6973 '-lis │ │ │ -0000d600: 744d 6170 7069 6e67 2720 3d3e 2027 6f74 tMapping' => 'ot │ │ │ -0000d610: 6865 7242 6163 6b75 7053 6572 6965 7327 herBackupSeries' │ │ │ -0000d620: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -0000d630: 2020 2020 2020 272d 636f 6e66 6967 4669 '-configFi │ │ │ -0000d640: 6c65 2720 3d3e 2027 2d66 272c 0a09 0920 le' => '-f',... │ │ │ -0000d650: 2020 2027 2d6c 6973 7427 203d 3e20 5b4f '-list' => [O │ │ │ -0000d660: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000d670: 6527 203d 3e20 2768 656c 7027 2c0a 0909 e' => 'help',... │ │ │ -0000d680: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -0000d690: 6f6e 2720 3d3e 2027 2d2d 6865 6c70 2729 on' => '--help') │ │ │ -0000d6a0: 2c0a 0a20 2020 2020 2020 2020 2020 2020 ,.. │ │ │ -0000d6b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000d6c0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -0000d6d0: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi │ │ │ -0000d6e0: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ -0000d6f0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000d700: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... │ │ │ -0000d710: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -0000d720: 2d2d 6669 6c65 272c 0a09 0909 0909 2020 --file',...... │ │ │ -0000d730: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y │ │ │ -0000d740: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ -0000d750: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not │ │ │ -0000d760: 205b 6765 6e65 7261 7465 5d27 292c 0a20 [generate]'),. │ │ │ -0000d770: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000d780: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ -0000d790: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000d7a0: 6527 203d 3e20 2767 656e 6572 6174 6527 e' => 'generate' │ │ │ -0000d7b0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000d7c0: 6f70 7469 6f6e 2720 3d3e 2027 2d67 272c option' => '-g', │ │ │ -0000d7d0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -0000d7e0: 6c69 6173 2720 3d3e 2027 2d2d 6765 6e65 lias' => '--gene │ │ │ -0000d7f0: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... │ │ │ -0000d800: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -0000d810: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -0000d820: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ -0000d830: 636f 6e66 6967 4669 6c65 5d27 292c 0a20 configFile]'),. │ │ │ -0000d840: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000d850: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ -0000d860: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000d870: 6527 203d 3e20 2770 7269 6e74 272c 0a09 e' => 'print',.. │ │ │ -0000d880: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -0000d890: 696f 6e27 203d 3e20 272d 2d70 7269 6e74 ion' => '--print │ │ │ -0000d8a0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -0000d8b0: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back │ │ │ -0000d8c0: 7570 4469 725d 2729 2c0a 2020 2020 2020 upDir]'),. │ │ │ -0000d8d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000d8e0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ -0000d8f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -0000d900: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',... │ │ │ -0000d910: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -0000d920: 6f6e 2720 3d3e 2027 2d62 272c 0a09 0909 on' => '-b',.... │ │ │ -0000d930: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -0000d940: 2720 3d3e 2027 2d2d 6261 636b 7570 4469 ' => '--backupDi │ │ │ -0000d950: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ -0000d960: 665f 6b65 7927 203d 3e20 2762 6163 6b75 f_key' => 'backu │ │ │ -0000d970: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ -0000d980: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -0000d990: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ -0000d9a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000d9b0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ -0000d9c0: 272d 6e61 6d65 2720 3d3e 2027 736f 7572 '-name' => 'sour │ │ │ -0000d9d0: 6365 4469 7227 2c0a 0909 0909 0920 2020 ceDir',...... │ │ │ -0000d9e0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000d9f0: 2027 2d73 272c 0a09 0909 0909 2020 2020 '-s',...... │ │ │ -0000da00: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -0000da10: 2d2d 736f 7572 6365 4469 7227 2c0a 0909 --sourceDir',... │ │ │ -0000da20: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -0000da30: 203d 3e20 2773 6f75 7263 6544 6972 272c => 'sourceDir', │ │ │ -0000da40: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -0000da50: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ -0000da60: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -0000da70: 6e61 6d65 2720 3d3e 2027 7365 7269 6573 name' => 'series │ │ │ -0000da80: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -0000da90: 5f6f 7074 696f 6e27 203d 3e20 272d 5327 _option' => '-S' │ │ │ -0000daa0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000dab0: 616c 6961 7327 203d 3e20 272d 2d73 6572 alias' => '--ser │ │ │ -0000dac0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... ' │ │ │ -0000dad0: 2d63 665f 6b65 7927 203d 3e20 2773 6572 -cf_key' => 'ser │ │ │ -0000dae0: 6965 7327 2c0a 0909 0909 0920 2020 2027 ies',...... ' │ │ │ -0000daf0: 2d64 6566 6175 6c74 2720 3d3e 2027 6465 -default' => 'de │ │ │ -0000db00: 6661 756c 7427 292c 0a09 0909 094f 7074 fault'),.....Opt │ │ │ -0000db10: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -0000db20: 203d 3e20 2763 6865 636b 436f 6d70 7227 => 'checkCompr' │ │ │ -0000db30: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000db40: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6368 option' => '--ch │ │ │ -0000db50: 6563 6b43 6f6d 7072 272c 0a09 0909 0909 eckCompr',...... │ │ │ -0000db60: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ -0000db70: 3d3e 2027 2d43 2729 2c0a 0909 0909 4f70 => '-C'),.....Op │ │ │ -0000db80: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000db90: 2720 3d3e 2027 746d 7064 6972 272c 0a09 ' => 'tmpdir',.. │ │ │ -0000dba0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -0000dbb0: 696f 6e27 203d 3e20 272d 5427 2c0a 0909 ion' => '-T',... │ │ │ -0000dbc0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -0000dbd0: 7327 203d 3e20 272d 2d74 6d70 6469 7227 s' => '--tmpdir' │ │ │ -0000dbe0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000dbf0: 6b65 7927 203d 3e20 2774 6d70 4469 7227 key' => 'tmpDir' │ │ │ -0000dc00: 2c0a 0909 0909 0920 2020 2027 2d64 6566 ,...... '-def │ │ │ -0000dc10: 6175 6c74 2720 3d3e 2024 746d 7064 6972 ault' => $tmpdir │ │ │ -0000dc20: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. │ │ │ -0000dc30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000dc40: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -0000dc50: 2d6e 616d 6527 203d 3e20 276f 7468 6572 -name' => 'other │ │ │ -0000dc60: 4261 636b 7570 5365 7269 6573 272c 0a09 BackupSeries',.. │ │ │ -0000dc70: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -0000dc80: 2720 3d3e 2027 6f74 6865 7242 6163 6b75 ' => 'otherBacku │ │ │ -0000dc90: 7053 6572 6965 7327 2c0a 0909 0909 0920 pSeries',...... │ │ │ -0000dca0: 2020 2027 2d6d 756c 7469 706c 6527 203d '-multiple' = │ │ │ -0000dcb0: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ -0000dcc0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000dcd0: 2720 3d3e 2027 6c6f 636b 4669 6c65 272c ' => 'lockFile', │ │ │ -0000dce0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -0000dcf0: 7074 696f 6e27 203d 3e20 272d 4c27 2c0a ption' => '-L',. │ │ │ -0000dd00: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ -0000dd10: 6961 7327 203d 3e20 272d 2d6c 6f63 6b46 ias' => '--lockF │ │ │ -0000dd20: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ -0000dd30: 2d63 665f 6b65 7927 203d 3e20 276c 6f63 -cf_key' => 'loc │ │ │ -0000dd40: 6b46 696c 6527 2c0a 0909 0909 0920 2020 kFile',...... │ │ │ -0000dd50: 2027 2d64 6566 6175 6c74 2720 3d3e 2024 '-default' => $ │ │ │ -0000dd60: 6c6f 636b 4669 6c65 292c 0a09 0909 094f lockFile),.....O │ │ │ -0000dd70: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000dd80: 6527 203d 3e20 2775 6e6c 6f63 6b42 6566 e' => 'unlockBef │ │ │ -0000dd90: 6f72 6544 656c 272c 0a09 0909 0909 2020 oreDel',...... │ │ │ -0000dda0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -0000ddb0: 3e20 272d 2d75 6e6c 6f63 6b42 6566 6f72 > '--unlockBefor │ │ │ -0000ddc0: 6544 656c 272c 0a09 0909 0909 2020 2020 eDel',...... │ │ │ -0000ddd0: 272d 6366 5f6b 6579 2720 3d3e 2027 756e '-cf_key' => 'un │ │ │ -0000dde0: 6c6f 636b 4265 666f 7265 4465 6c27 2c0a lockBeforeDel',. │ │ │ -0000ddf0: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param │ │ │ -0000de00: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',..... │ │ │ -0000de10: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' │ │ │ -0000de20: 3d3e 2027 5b6c 6f63 6b46 696c 655d 270a => '[lockFile]'. │ │ │ -0000de30: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),..... │ │ │ -0000de40: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000de50: 6d65 2720 3d3e 2027 6578 6365 7074 4469 me' => 'exceptDi │ │ │ -0000de60: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '- │ │ │ -0000de70: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -0000de80: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ -0000de90: 6c5f 616c 6961 7327 203d 3e20 272d 2d65 l_alias' => '--e │ │ │ -0000dea0: 7863 6570 7444 6972 7327 2c0a 0909 0909 xceptDirs',..... │ │ │ -0000deb0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -0000dec0: 3e20 2765 7863 6570 7444 6972 7327 2c0a > 'exceptDirs',. │ │ │ -0000ded0: 0909 0909 0920 2020 2027 2d6d 756c 7469 ..... '-multi │ │ │ -0000dee0: 706c 6527 203d 3e20 2779 6573 2729 2c0a ple' => 'yes'),. │ │ │ -0000def0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -0000df00: 272d 6e61 6d65 2720 3d3e 2027 696e 636c '-name' => 'incl │ │ │ -0000df10: 7564 6544 6972 7327 2c0a 0909 0909 0920 udeDirs',...... │ │ │ -0000df20: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000df30: 3d3e 2027 2d69 272c 0a09 0909 0909 2020 => '-i',...... │ │ │ -0000df40: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -0000df50: 2027 2d2d 696e 636c 7564 6544 6972 7327 '--includeDirs' │ │ │ -0000df60: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000df70: 6b65 7927 203d 3e20 2769 6e63 6c75 6465 key' => 'include │ │ │ -0000df80: 4469 7273 272c 0a09 0909 0909 2020 2020 Dirs',...... │ │ │ -0000df90: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => ' │ │ │ -0000dfa0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -0000dfb0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -0000dfc0: 3e20 2765 7863 6570 7452 756c 6527 2c0a > 'exceptRule',. │ │ │ -0000dfd0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -0000dfe0: 7469 6f6e 2720 3d3e 2027 2d2d 6578 6365 tion' => '--exce │ │ │ -0000dff0: 7074 5275 6c65 272c 0a09 0909 0909 2020 ptRule',...... │ │ │ -0000e000: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -0000e010: 6578 6365 7074 5275 6c65 272c 0a09 0909 exceptRule',.... │ │ │ -0000e020: 0909 2020 2020 272d 7175 6f74 6545 7661 .. '-quoteEva │ │ │ -0000e030: 6c27 203d 3e20 2779 6573 2729 2c0a 0909 l' => 'yes'),... │ │ │ -0000e040: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -0000e050: 6e61 6d65 2720 3d3e 2027 696e 636c 7564 name' => 'includ │ │ │ -0000e060: 6552 756c 6527 2c0a 0909 0909 0920 2020 eRule',...... │ │ │ -0000e070: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000e080: 2027 2d2d 696e 636c 7564 6552 756c 6527 '--includeRule' │ │ │ -0000e090: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000e0a0: 6b65 7927 203d 3e20 2769 6e63 6c75 6465 key' => 'include │ │ │ -0000e0b0: 5275 6c65 272c 0a09 0909 0909 2020 2020 Rule',...... │ │ │ -0000e0c0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => │ │ │ -0000e0d0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -0000e0e0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -0000e0f0: 3d3e 2027 7772 6974 6545 7863 6c75 6465 => 'writeExclude │ │ │ -0000e100: 4c6f 6727 2c0a 0909 0909 0920 2020 2027 Log',...... ' │ │ │ -0000e110: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -0000e120: 2d2d 7772 6974 6545 7863 6c75 6465 4c6f --writeExcludeLo │ │ │ -0000e130: 6727 2c0a 0909 0909 0920 2020 2027 2d63 g',...... '-c │ │ │ -0000e140: 665f 6b65 7927 203d 3e20 2777 7269 7465 f_key' => 'write │ │ │ -0000e150: 4578 636c 7564 654c 6f67 272c 0a09 0909 ExcludeLog',.... │ │ │ -0000e160: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ -0000e170: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ -0000e180: 276e 6f27 5d29 2c0a 0909 0920 2020 2020 'no']),.... │ │ │ -0000e190: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -0000e1a0: 2d6e 616d 6527 203d 3e20 2763 6f6e 7445 -name' => 'contE │ │ │ -0000e1b0: 7863 6570 7444 6972 7345 7272 272c 0a09 xceptDirsErr',.. │ │ │ -0000e1c0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -0000e1d0: 696f 6e27 203d 3e20 272d 2d63 6f6e 7445 ion' => '--contE │ │ │ -0000e1e0: 7863 6570 7444 6972 7345 7272 272c 0a09 xceptDirsErr',.. │ │ │ -0000e1f0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -0000e200: 2720 3d3e 2027 636f 6e74 4578 6365 7074 ' => 'contExcept │ │ │ -0000e210: 4469 7273 4572 7227 2c0a 0909 0909 0920 DirsErr',...... │ │ │ -0000e220: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ -0000e230: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ -0000e240: 275d 292c 0a09 0909 2020 2020 2020 2020 ']),.... │ │ │ -0000e250: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000e260: 6d65 2720 3d3e 2027 6578 6365 7074 5479 me' => 'exceptTy │ │ │ -0000e270: 7065 7327 2c0a 0909 0909 0920 2020 2027 pes',...... ' │ │ │ -0000e280: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -0000e290: 2d2d 6578 6365 7074 5479 7065 7327 2c0a --exceptTypes',. │ │ │ -0000e2a0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -0000e2b0: 7927 203d 3e20 2765 7863 6570 7454 7970 y' => 'exceptTyp │ │ │ -0000e2c0: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ -0000e2d0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes', │ │ │ -0000e2e0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -0000e2f0: 6572 6e27 203d 3e20 275c 415b 5362 6366 ern' => '\A[Sbcf │ │ │ -0000e300: 706c 5d2b 5c5a 2729 2c0a 0909 0920 2020 pl]+\Z'),.... │ │ │ -0000e310: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ -0000e320: 2827 2d6e 616d 6527 203d 3e20 2761 7263 ('-name' => 'arc │ │ │ -0000e330: 6869 7665 5479 7065 7327 2c0a 0909 0909 hiveTypes',..... │ │ │ -0000e340: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -0000e350: 2720 3d3e 2027 2d2d 6172 6368 6976 6554 ' => '--archiveT │ │ │ -0000e360: 7970 6573 272c 0a09 0909 0909 2020 2020 ypes',...... │ │ │ -0000e370: 272d 6366 5f6b 6579 2720 3d3e 2027 6172 '-cf_key' => 'ar │ │ │ -0000e380: 6368 6976 6554 7970 6573 272c 0a09 0909 chiveTypes',.... │ │ │ -0000e390: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ -0000e3a0: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... │ │ │ -0000e3b0: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ -0000e3c0: 275c 415b 5362 6370 6c5d 2b5c 5a27 2c0a '\A[Sbcpl]+\Z',. │ │ │ -0000e3d0: 0909 0909 0920 2020 2027 2d6f 6e6c 795f ..... '-only_ │ │ │ -0000e3e0: 6966 2720 3d3e 2027 5b73 7065 6369 616c if' => '[special │ │ │ -0000e3f0: 5479 7065 4172 6368 6976 6572 5d27 292c TypeArchiver]'), │ │ │ -0000e400: 0a09 0909 2020 2020 2020 2020 4f70 7469 .... Opti │ │ │ -0000e410: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -0000e420: 3d3e 2027 7370 6563 6961 6c54 7970 6541 => 'specialTypeA │ │ │ -0000e430: 7263 6869 7665 7227 2c0a 0909 0909 0920 rchiver',...... │ │ │ -0000e440: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000e450: 3d3e 2027 2d2d 7370 6563 6961 6c54 7970 => '--specialTyp │ │ │ -0000e460: 6541 7263 6869 7665 7227 2c0a 0909 0909 eArchiver',..... │ │ │ -0000e470: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -0000e480: 3e20 2773 7065 6369 616c 5479 7065 4172 > 'specialTypeAr │ │ │ -0000e490: 6368 6976 6572 272c 0a09 0909 0909 2020 chiver',...... │ │ │ -0000e4a0: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => │ │ │ -0000e4b0: 2763 7069 6f27 2c0a 0909 0909 0920 2020 'cpio',...... │ │ │ -0000e4c0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => ' │ │ │ -0000e4d0: 5c41 6370 696f 5c5a 7c5c 4174 6172 5c5a \Acpio\Z|\Atar\Z │ │ │ -0000e4e0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -0000e4f0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -0000e500: 6370 4973 476e 7527 2c0a 0909 0909 0920 cpIsGnu',...... │ │ │ -0000e510: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000e520: 3d3e 2027 2d2d 6370 4973 476e 7527 2c0a => '--cpIsGnu',. │ │ │ -0000e530: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -0000e540: 7927 203d 3e20 2763 7049 7347 6e75 272c y' => 'cpIsGnu', │ │ │ -0000e550: 0a09 0909 0909 2020 2020 272d 6366 5f6e ...... '-cf_n │ │ │ -0000e560: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye │ │ │ -0000e570: 7327 2c20 276e 6f27 5d29 2c0a 0909 0909 s', 'no']),..... │ │ │ -0000e580: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000e590: 6d65 2720 3d3e 2027 6c69 6e6b 5379 6d6c me' => 'linkSyml │ │ │ -0000e5a0: 696e 6b73 272c 0a09 0909 0909 2020 2020 inks',...... │ │ │ -0000e5b0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -0000e5c0: 272d 2d6c 696e 6b53 796d 6c69 6e6b 7327 '--linkSymlinks' │ │ │ -0000e5d0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000e5e0: 6b65 7927 203d 3e20 276c 696e 6b53 796d key' => 'linkSym │ │ │ -0000e5f0: 6c69 6e6b 7327 2c0a 0909 0909 0920 2020 links',...... │ │ │ -0000e600: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ -0000e610: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ -0000e620: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -0000e630: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p │ │ │ -0000e640: 7265 636f 6d6d 616e 6427 2c0a 0909 0909 recommand',..... │ │ │ -0000e650: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -0000e660: 2720 3d3e 2027 2d2d 7072 6563 6f6d 6d61 ' => '--precomma │ │ │ -0000e670: 6e64 272c 0a09 0909 0909 2020 2020 272d nd',...... '- │ │ │ -0000e680: 6366 5f6b 6579 2720 3d3e 2027 7072 6563 cf_key' => 'prec │ │ │ -0000e690: 6f6d 6d61 6e64 272c 0a09 0909 0909 2020 ommand',...... │ │ │ -0000e6a0: 2020 272d 7175 6f74 6545 7661 6c27 203d '-quoteEval' = │ │ │ -0000e6b0: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ -0000e6c0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000e6d0: 2720 3d3e 2027 706f 7374 636f 6d6d 616e ' => 'postcomman │ │ │ -0000e6e0: 6427 2c0a 0909 0909 0920 2020 2027 2d63 d',...... '-c │ │ │ -0000e6f0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -0000e700: 706f 7374 636f 6d6d 616e 6427 2c0a 0909 postcommand',... │ │ │ -0000e710: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -0000e720: 203d 3e20 2770 6f73 7463 6f6d 6d61 6e64 => 'postcommand │ │ │ -0000e730: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu │ │ │ -0000e740: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes │ │ │ -0000e750: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -0000e760: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -0000e770: 666f 6c6c 6f77 4c69 6e6b 7327 2c0a 0909 followLinks',... │ │ │ -0000e780: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -0000e790: 6f6e 2720 3d3e 2027 2d2d 666f 6c6c 6f77 on' => '--follow │ │ │ -0000e7a0: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... │ │ │ -0000e7b0: 2027 2d63 665f 6b65 7927 203d 3e20 2766 '-cf_key' => 'f │ │ │ -0000e7c0: 6f6c 6c6f 774c 696e 6b73 272c 0a09 0909 ollowLinks',.... │ │ │ -0000e7d0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -0000e7e0: 203d 3e20 302c 0a09 0909 0909 2020 2020 => 0,...... │ │ │ -0000e7f0: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\ │ │ │ -0000e800: 415c 642b 5c5a 2729 2c0a 0909 0909 4f70 A\d+\Z'),.....Op │ │ │ -0000e810: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000e820: 2720 3d3e 2027 7374 6179 496e 4669 6c65 ' => 'stayInFile │ │ │ -0000e830: 5379 7374 656d 272c 0a09 0909 0909 2020 System',...... │ │ │ -0000e840: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -0000e850: 3e20 272d 2d73 7461 7949 6e46 696c 6553 > '--stayInFileS │ │ │ -0000e860: 7973 7465 6d27 2c0a 0909 0909 0920 2020 ystem',...... │ │ │ -0000e870: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's │ │ │ -0000e880: 7461 7949 6e46 696c 6553 7973 7465 6d27 tayInFileSystem' │ │ │ -0000e890: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000e8a0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y │ │ │ -0000e8b0: 6573 272c 2027 6e6f 275d 292c 0a09 0909 es', 'no']),.... │ │ │ -0000e8c0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -0000e8d0: 616d 6527 203d 3e20 2768 6967 684c 6174 ame' => 'highLat │ │ │ -0000e8e0: 656e 6379 272c 0a09 0909 0909 2020 2020 ency',...... │ │ │ -0000e8f0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -0000e900: 272d 2d68 6967 684c 6174 656e 6379 272c '--highLatency', │ │ │ -0000e910: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ -0000e920: 6579 2720 3d3e 2027 6869 6768 4c61 7465 ey' => 'highLate │ │ │ -0000e930: 6e63 7927 2c0a 0909 0909 0920 2020 2027 ncy',...... ' │ │ │ -0000e940: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ -0000e950: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ -0000e960: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -0000e970: 2827 2d6e 616d 6527 203d 3e20 2769 676e ('-name' => 'ign │ │ │ -0000e980: 6f72 6550 6572 6d73 272c 0a09 0909 0909 orePerms',...... │ │ │ -0000e990: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -0000e9a0: 203d 3e20 272d 2d69 676e 6f72 6550 6572 => '--ignorePer │ │ │ -0000e9b0: 6d73 272c 0a09 0909 0909 2020 2020 272d ms',...... '- │ │ │ -0000e9c0: 6366 5f6b 6579 2720 3d3e 2027 6967 6e6f cf_key' => 'igno │ │ │ -0000e9d0: 7265 5065 726d 7327 2c0a 0909 0909 0920 rePerms',...... │ │ │ -0000e9e0: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ -0000e9f0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ -0000ea00: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option- │ │ │ -0000ea10: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -0000ea20: 276c 6174 654c 696e 6b73 272c 0a09 0909 'lateLinks',.... │ │ │ -0000ea30: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000ea40: 6e27 203d 3e20 272d 2d6c 6174 654c 696e n' => '--lateLin │ │ │ -0000ea50: 6b73 272c 0a09 0909 0909 2020 2020 272d ks',...... '- │ │ │ -0000ea60: 6366 5f6b 6579 2720 3d3e 2027 6c61 7465 cf_key' => 'late │ │ │ -0000ea70: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... │ │ │ -0000ea80: 2027 2d63 665f 6e6f 4f70 7453 6574 2720 '-cf_noOptSet' │ │ │ -0000ea90: 3d3e 205b 2779 6573 272c 2027 6e6f 275d => ['yes', 'no'] │ │ │ -0000eaa0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -0000eab0: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l │ │ │ -0000eac0: 6174 6543 6f6d 7072 6573 7327 2c0a 0909 ateCompress',... │ │ │ -0000ead0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -0000eae0: 6f6e 2720 3d3e 2027 2d2d 6c61 7465 436f on' => '--lateCo │ │ │ -0000eaf0: 6d70 7265 7373 272c 0a09 0909 0909 2020 mpress',...... │ │ │ -0000eb00: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => │ │ │ -0000eb10: 275b 6c61 7465 4c69 6e6b 735d 272c 0a09 '[lateLinks]',.. │ │ │ -0000eb20: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -0000eb30: 2720 3d3e 2027 6c61 7465 436f 6d70 7265 ' => 'lateCompre │ │ │ -0000eb40: 7373 272c 0a09 0909 0909 2020 2020 272d ss',...... '- │ │ │ -0000eb50: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => │ │ │ -0000eb60: 5b27 7965 7327 2c20 276e 6f27 5d29 2c0a ['yes', 'no']),. │ │ │ -0000eb70: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -0000eb80: 272d 6e61 6d65 2720 3d3e 2027 6175 746f '-name' => 'auto │ │ │ -0000eb90: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... │ │ │ -0000eba0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -0000ebb0: 3e20 272d 2d61 7574 6f72 6570 6169 7227 > '--autorepair' │ │ │ -0000ebc0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -0000ebd0: 6b65 7927 203d 3e20 2761 7574 6f72 6570 key' => 'autorep │ │ │ -0000ebe0: 6169 7227 2c0a 0909 0909 0920 2020 2027 air',...... ' │ │ │ -0000ebf0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -0000ec00: 6127 2c0a 0909 0909 0920 2020 2027 2d63 a',...... '-c │ │ │ -0000ec10: 665f 6e6f 4f70 7453 6574 2720 3d3e 205b f_noOptSet' => [ │ │ │ -0000ec20: 2779 6573 272c 2027 6e6f 275d 292c 0a09 'yes', 'no']),.. │ │ │ -0000ec30: 0909 0940 626c 6f63 6b52 756c 6573 4f70 ...@blockRulesOp │ │ │ -0000ec40: 7473 2c0a 0909 0909 4062 6c6f 636b 4465 ts,.....@blockDe │ │ │ -0000ec50: 7669 6365 734f 7074 732c 0a09 0909 094f vicesOpts,.....O │ │ │ -0000ec60: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000ec70: 6527 203d 3e20 2763 6865 636b 426c 6f63 e' => 'checkBloc │ │ │ -0000ec80: 6b73 5375 6666 6978 272c 0a09 0909 0909 ksSuffix',...... │ │ │ -0000ec90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -0000eca0: 203d 3e20 272d 2d63 6865 636b 426c 6f63 => '--checkBloc │ │ │ -0000ecb0: 6b73 5375 6666 6978 272c 0a09 0909 0909 ksSuffix',...... │ │ │ -0000ecc0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -0000ecd0: 2027 6368 6563 6b42 6c6f 636b 7353 7566 'checkBlocksSuf │ │ │ -0000ece0: 6669 7827 2c0a 0909 0909 0920 2020 2027 fix',...... ' │ │ │ -0000ecf0: 2d6d 756c 7469 706c 6527 203d 3e20 2779 -multiple' => 'y │ │ │ -0000ed00: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option │ │ │ -0000ed10: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -0000ed20: 2027 6368 6563 6b42 6c6f 636b 734d 696e 'checkBlocksMin │ │ │ -0000ed30: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... │ │ │ -0000ed40: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -0000ed50: 272d 2d63 6865 636b 426c 6f63 6b73 4d69 '--checkBlocksMi │ │ │ -0000ed60: 6e53 697a 6527 2c0a 0909 0909 0920 2020 nSize',...... │ │ │ -0000ed70: 2027 2d63 665f 6b65 7927 203d 3e20 2763 '-cf_key' => 'c │ │ │ -0000ed80: 6865 636b 426c 6f63 6b73 4d69 6e53 697a heckBlocksMinSiz │ │ │ -0000ed90: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d │ │ │ -0000eda0: 6566 6175 6c74 2720 3d3e 2027 3130 304d efault' => '100M │ │ │ -0000edb0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -0000edc0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -0000edd0: 6368 6563 6b42 6c6f 636b 7342 5327 2c0a checkBlocksBS',. │ │ │ -0000ede0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -0000edf0: 7469 6f6e 2720 3d3e 2027 2d2d 6368 6563 tion' => '--chec │ │ │ -0000ee00: 6b42 6c6f 636b 7342 5327 2c0a 0909 0909 kBlocksBS',..... │ │ │ -0000ee10: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -0000ee20: 3e20 2763 6865 636b 426c 6f63 6b73 4253 > 'checkBlocksBS │ │ │ -0000ee30: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -0000ee40: 6661 756c 7427 203d 3e20 2463 6865 636b fault' => $check │ │ │ -0000ee50: 426c 6f63 6b73 4253 6465 6661 756c 7429 BlocksBSdefault) │ │ │ -0000ee60: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -0000ee70: 7728 272d 6e61 6d65 2720 3d3e 2027 6368 w('-name' => 'ch │ │ │ -0000ee80: 6563 6b42 6c6f 636b 7343 6f6d 7072 272c eckBlocksCompr', │ │ │ -0000ee90: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -0000eea0: 7074 696f 6e27 203d 3e20 272d 2d63 6865 ption' => '--che │ │ │ -0000eeb0: 636b 426c 6f63 6b73 436f 6d70 7227 2c0a ckBlocksCompr',. │ │ │ -0000eec0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -0000eed0: 7927 203d 3e20 2763 6865 636b 426c 6f63 y' => 'checkBloc │ │ │ -0000eee0: 6b73 436f 6d70 7227 2c0a 0909 0909 0920 ksCompr',...... │ │ │ -0000eef0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -0000ef00: 2027 6e6f 272c 0a09 0909 0909 2020 2020 'no',...... │ │ │ -0000ef10: 272d 7061 7474 6572 6e27 203d 3e20 275c '-pattern' => '\ │ │ │ -0000ef20: 4163 6865 636b 5c5a 7c5c 4179 6573 5c5a Acheck\Z|\Ayes\Z │ │ │ -0000ef30: 7c5c 416e 6f5c 5a27 292c 0a09 0909 094f |\Ano\Z'),.....O │ │ │ -0000ef40: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -0000ef50: 6527 203d 3e20 2263 6865 636b 426c 6f63 e' => "checkBloc │ │ │ -0000ef60: 6b73 5061 7261 6c6c 656c 222c 0a09 0909 ksParallel",.... │ │ │ -0000ef70: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000ef80: 6e27 203d 3e20 222d 2d63 6865 636b 426c n' => "--checkBl │ │ │ -0000ef90: 6f63 6b73 5061 7261 6c6c 656c 222c 0a09 ocksParallel",.. │ │ │ -0000efa0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -0000efb0: 2720 3d3e 2022 6368 6563 6b42 6c6f 636b ' => "checkBlock │ │ │ -0000efc0: 7350 6172 616c 6c65 6c22 2c0a 0909 0909 sParallel",..... │ │ │ -0000efd0: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ -0000efe0: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ -0000eff0: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio │ │ │ -0000f000: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -0000f010: 3e20 2771 7565 7565 426c 6f63 6b27 2c0a > 'queueBlock',. │ │ │ -0000f020: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -0000f030: 7469 6f6e 2720 3d3e 2027 2d2d 7175 6575 tion' => '--queu │ │ │ -0000f040: 6542 6c6f 636b 272c 0a09 0909 0909 2020 eBlock',...... │ │ │ -0000f050: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -0000f060: 7175 6575 6542 6c6f 636b 272c 0a09 0909 queueBlock',.... │ │ │ -0000f070: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -0000f080: 203d 3e20 2471 7565 7565 426c 6f63 6b2c => $queueBlock, │ │ │ -0000f090: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -0000f0a0: 6572 6e27 203d 3e20 275c 415b 312d 395d ern' => '\A[1-9] │ │ │ -0000f0b0: 5c64 2a5c 5a27 292c 0a09 0909 094f 7074 \d*\Z'),.....Opt │ │ │ -0000f0c0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -0000f0d0: 203d 3e20 2773 6176 6552 414d 272c 0a09 => 'saveRAM',.. │ │ │ -0000f0e0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -0000f0f0: 696f 6e27 203d 3e20 272d 2d73 6176 6552 ion' => '--saveR │ │ │ -0000f100: 414d 272c 0a09 0909 0909 2020 2020 272d AM',...... '- │ │ │ -0000f110: 6366 5f6b 6579 2720 3d3e 2027 7361 7665 cf_key' => 'save │ │ │ -0000f120: 5241 4d27 2c0a 0909 0909 0920 2020 2027 RAM',...... ' │ │ │ -0000f130: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ -0000f140: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ -0000f150: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -0000f160: 2827 2d6e 616d 6527 203d 3e20 2763 6f6d ('-name' => 'com │ │ │ -0000f170: 7072 6573 7327 2c0a 0909 0909 0920 2020 press',...... │ │ │ -0000f180: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000f190: 2027 2d63 272c 0a09 0909 0909 2020 2020 '-c',...... │ │ │ -0000f1a0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -0000f1b0: 2d2d 636f 6d70 7265 7373 272c 0a09 0909 --compress',.... │ │ │ -0000f1c0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -0000f1d0: 3d3e 2027 636f 6d70 7265 7373 272c 0a09 => 'compress',.. │ │ │ -0000f1e0: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE │ │ │ -0000f1f0: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',.. │ │ │ -0000f200: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -0000f210: 7427 203d 3e20 5c40 636f 6d70 7265 7373 t' => \@compress │ │ │ -0000f220: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -0000f230: 6577 2827 2d6e 616d 6527 203d 3e20 2775 ew('-name' => 'u │ │ │ -0000f240: 6e63 6f6d 7072 6573 7327 2c0a 0909 0909 ncompress',..... │ │ │ -0000f250: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -0000f260: 2720 3d3e 2027 2d75 272c 0a09 0909 0909 ' => '-u',...... │ │ │ -0000f270: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ -0000f280: 3d3e 2027 2d2d 756e 636f 6d70 7265 7373 => '--uncompress │ │ │ -0000f290: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -0000f2a0: 5f6b 6579 2720 3d3e 2027 756e 636f 6d70 _key' => 'uncomp │ │ │ -0000f2b0: 7265 7373 272c 0a09 0909 0909 2020 2020 ress',...... │ │ │ -0000f2c0: 272d 7175 6f74 6545 7661 6c27 203d 3e20 '-quoteEval' => │ │ │ -0000f2d0: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ -0000f2e0: 272d 6465 6661 756c 7427 203d 3e20 5c40 '-default' => \@ │ │ │ -0000f2f0: 756e 636f 6d70 7265 7373 292c 0a09 0909 uncompress),.... │ │ │ -0000f300: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -0000f310: 616d 6527 203d 3e20 2770 6f73 7466 6978 ame' => 'postfix │ │ │ -0000f320: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -0000f330: 5f6f 7074 696f 6e27 203d 3e20 272d 7027 _option' => '-p' │ │ │ -0000f340: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000f350: 616c 6961 7327 203d 3e20 272d 2d70 6f73 alias' => '--pos │ │ │ -0000f360: 7466 6978 272c 0a09 0909 0909 2020 2020 tfix',...... │ │ │ -0000f370: 272d 6366 5f6b 6579 2720 3d3e 2027 706f '-cf_key' => 'po │ │ │ -0000f380: 7374 6669 7827 2c0a 0909 0909 0920 2020 stfix',...... │ │ │ -0000f390: 2027 2d64 6566 6175 6c74 2720 3d3e 2024 '-default' => $ │ │ │ -0000f3a0: 706f 7374 6669 7829 2c0a 2309 0909 0940 postfix),.#....@ │ │ │ -0000f3b0: 636f 6d70 7265 7373 5275 6c65 732c 0a09 compressRules,.. │ │ │ -0000f3c0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -0000f3d0: 2d6e 616d 6527 203d 3e20 276d 696e 436f -name' => 'minCo │ │ │ -0000f3e0: 6d70 7265 7373 5369 7a65 272c 0a09 0909 mpressSize',.... │ │ │ -0000f3f0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000f400: 6e27 203d 3e20 272d 2d6d 696e 436f 6d70 n' => '--minComp │ │ │ -0000f410: 7265 7373 5369 7a65 272c 0a09 0909 0909 ressSize',...... │ │ │ -0000f420: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -0000f430: 2027 6d69 6e43 6f6d 7072 6573 7353 697a 'minCompressSiz │ │ │ -0000f440: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d │ │ │ -0000f450: 6566 6175 6c74 2720 3d3e 2024 6d69 6e43 efault' => $minC │ │ │ -0000f460: 6f6d 7072 6573 7353 697a 652c 0a09 0909 ompressSize,.... │ │ │ -0000f470: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -0000f480: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\A\d+\Z'),. │ │ │ -0000f490: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -0000f4a0: 272d 6e61 6d65 2720 3d3e 2027 636f 6d70 '-name' => 'comp │ │ │ -0000f4b0: 7252 756c 6527 2c0a 0909 0909 0920 2020 rRule',...... │ │ │ -0000f4c0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -0000f4d0: 2027 2d2d 636f 6d70 7252 756c 6527 2c0a '--comprRule',. │ │ │ -0000f4e0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -0000f4f0: 7927 203d 3e20 2763 6f6d 7072 5275 6c65 y' => 'comprRule │ │ │ -0000f500: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu │ │ │ -0000f510: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes │ │ │ -0000f520: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -0000f530: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -0000f540: 6e6f 436f 6d70 7265 7373 272c 0a09 0909 noCompress',.... │ │ │ -0000f550: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000f560: 6e27 203d 3e20 272d 2d6e 6f43 6f6d 7072 n' => '--noCompr │ │ │ -0000f570: 6573 7327 2c0a 0909 0909 0920 2020 2027 ess',...... ' │ │ │ -0000f580: 2d63 665f 6b65 7927 203d 3e20 276e 6f43 -cf_key' => 'noC │ │ │ -0000f590: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... │ │ │ -0000f5a0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -0000f5b0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -0000f5c0: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\A │ │ │ -0000f5d0: 5b31 2d39 5d5c 642a 5c5a 2729 2c0a 0909 [1-9]\d*\Z'),... │ │ │ -0000f5e0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -0000f5f0: 6e61 6d65 2720 3d3e 2027 7175 6575 6543 name' => 'queueC │ │ │ -0000f600: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... │ │ │ -0000f610: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000f620: 3d3e 2027 2d2d 7175 6575 6543 6f6d 7072 => '--queueCompr │ │ │ -0000f630: 6573 7327 2c0a 0909 0909 0920 2020 2027 ess',...... ' │ │ │ -0000f640: 2d63 665f 6b65 7927 203d 3e20 2771 7565 -cf_key' => 'que │ │ │ -0000f650: 7565 436f 6d70 7265 7373 272c 0a09 0909 ueCompress',.... │ │ │ -0000f660: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -0000f670: 203d 3e20 2471 7565 7565 436f 6d70 7265 => $queueCompre │ │ │ -0000f680: 7373 2c0a 0909 0909 0920 2020 2027 2d70 ss,...... '-p │ │ │ -0000f690: 6174 7465 726e 2720 3d3e 2027 5c41 5b31 attern' => '\A[1 │ │ │ -0000f6a0: 2d39 5d5c 642a 5c5a 2729 2c0a 0909 0909 -9]\d*\Z'),..... │ │ │ -0000f6b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000f6c0: 6d65 2720 3d3e 2027 6e6f 436f 7079 272c me' => 'noCopy', │ │ │ -0000f6d0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -0000f6e0: 7074 696f 6e27 203d 3e20 272d 2d6e 6f43 ption' => '--noC │ │ │ -0000f6f0: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... ' │ │ │ -0000f700: 2d63 665f 6b65 7927 203d 3e20 276e 6f43 -cf_key' => 'noC │ │ │ -0000f710: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... ' │ │ │ -0000f720: 2d64 6566 6175 6c74 2720 3d3e 2024 6e6f -default' => $no │ │ │ -0000f730: 436f 7079 2c0a 0909 0909 0920 2020 2027 Copy,...... ' │ │ │ -0000f740: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\A │ │ │ -0000f750: 5b31 2d39 5d5c 642a 5c5a 2729 2c0a 0909 [1-9]\d*\Z'),... │ │ │ -0000f760: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -0000f770: 6e61 6d65 2720 3d3e 2027 7175 6575 6543 name' => 'queueC │ │ │ -0000f780: 6f70 7927 2c0a 0909 0909 0920 2020 2027 opy',...... ' │ │ │ -0000f790: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -0000f7a0: 2d2d 7175 6575 6543 6f70 7927 2c0a 0909 --queueCopy',... │ │ │ -0000f7b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -0000f7c0: 203d 3e20 2771 7565 7565 436f 7079 272c => 'queueCopy', │ │ │ -0000f7d0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -0000f7e0: 756c 7427 203d 3e20 2471 7565 7565 436f ult' => $queueCo │ │ │ -0000f7f0: 7079 2c0a 0909 0909 0920 2020 2027 2d70 py,...... '-p │ │ │ -0000f800: 6174 7465 726e 2720 3d3e 2027 5c41 5b31 attern' => '\A[1 │ │ │ -0000f810: 2d39 5d5c 642a 5c5a 2729 2c0a 0909 0909 -9]\d*\Z'),..... │ │ │ -0000f820: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -0000f830: 6d65 2720 3d3e 2027 636f 7079 4257 4c69 me' => 'copyBWLi │ │ │ -0000f840: 6d69 7427 2c0a 0909 0909 0920 2020 2027 mit',...... ' │ │ │ -0000f850: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -0000f860: 2d2d 636f 7079 4257 4c69 6d69 7427 2c0a --copyBWLimit',. │ │ │ -0000f870: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -0000f880: 7927 203d 3e20 2763 6f70 7942 574c 696d y' => 'copyBWLim │ │ │ -0000f890: 6974 272c 0a09 0909 0909 2020 2020 272d it',...... '- │ │ │ -0000f8a0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes', │ │ │ -0000f8b0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -0000f8c0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\A\d+\Z │ │ │ -0000f8d0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -0000f8e0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -0000f8f0: 7769 7468 5573 6572 4772 6f75 7053 7461 withUserGroupSta │ │ │ -0000f900: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ -0000f910: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -0000f920: 7769 7468 5573 6572 4772 6f75 7053 7461 withUserGroupSta │ │ │ -0000f930: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ -0000f940: 665f 6b65 7927 203d 3e20 2777 6974 6855 f_key' => 'withU │ │ │ -0000f950: 7365 7247 726f 7570 5374 6174 272c 0a09 serGroupStat',.. │ │ │ -0000f960: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO │ │ │ -0000f970: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes' │ │ │ -0000f980: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op │ │ │ -0000f990: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -0000f9a0: 2720 3d3e 2027 7573 6572 4772 6f75 7053 ' => 'userGroupS │ │ │ -0000f9b0: 7461 7446 696c 6527 2c0a 0909 0909 0920 tatFile',...... │ │ │ -0000f9c0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000f9d0: 3d3e 2027 2d2d 7573 6572 4772 6f75 7053 => '--userGroupS │ │ │ -0000f9e0: 7461 7446 696c 6527 2c0a 0909 0909 0920 tatFile',...... │ │ │ -0000f9f0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -0000fa00: 2775 7365 7247 726f 7570 5374 6174 4669 'userGroupStatFi │ │ │ -0000fa10: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '- │ │ │ -0000fa20: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ -0000fa30: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -0000fa40: 7728 272d 6e61 6d65 2720 3d3e 2027 6578 w('-name' => 'ex │ │ │ -0000fa50: 6365 7074 5375 6666 6978 272c 0a09 0909 ceptSuffix',.... │ │ │ -0000fa60: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000fa70: 6e27 203d 3e20 272d 2d65 7863 6570 7453 n' => '--exceptS │ │ │ -0000fa80: 7566 6669 7827 2c0a 0909 0909 0920 2020 uffix',...... │ │ │ -0000fa90: 2027 2d63 665f 6b65 7927 203d 3e20 2765 '-cf_key' => 'e │ │ │ -0000faa0: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',... │ │ │ -0000fab0: 0909 0920 2020 2027 2d6d 756c 7469 706c ... '-multipl │ │ │ -0000fac0: 6527 203d 3e20 2779 6573 272c 0a09 0909 e' => 'yes',.... │ │ │ -0000fad0: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -0000fae0: 203d 3e20 5c40 6578 6365 7074 5375 6666 => \@exceptSuff │ │ │ -0000faf0: 6978 292c 0a09 0909 094f 7074 696f 6e2d ix),.....Option- │ │ │ -0000fb00: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -0000fb10: 2763 6f6d 7072 6573 7353 7566 6669 7827 'compressSuffix' │ │ │ -0000fb20: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000fb30: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 636f option' => '--co │ │ │ -0000fb40: 6d70 7265 7373 5375 6666 6978 272c 0a09 mpressSuffix',.. │ │ │ -0000fb50: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -0000fb60: 2720 3d3e 2027 636f 6d70 7265 7373 5375 ' => 'compressSu │ │ │ -0000fb70: 6666 6978 272c 0a09 0909 0909 2020 2020 ffix',...... │ │ │ -0000fb80: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => ' │ │ │ -0000fb90: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -0000fba0: 2d64 6566 6175 6c74 2720 3d3e 205b 5d29 -default' => []) │ │ │ -0000fbb0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -0000fbc0: 7728 272d 6e61 6d65 2720 3d3e 2027 6164 w('-name' => 'ad │ │ │ -0000fbd0: 6445 7863 6570 7453 7566 6669 7827 2c0a dExceptSuffix',. │ │ │ -0000fbe0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -0000fbf0: 7469 6f6e 2720 3d3e 2027 2d2d 6164 6445 tion' => '--addE │ │ │ -0000fc00: 7863 6570 7453 7566 6669 7827 2c0a 0909 xceptSuffix',... │ │ │ -0000fc10: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -0000fc20: 203d 3e20 2761 6464 4578 6365 7074 5375 => 'addExceptSu │ │ │ -0000fc30: 6666 6978 272c 0a09 0909 0909 2020 2020 ffix',...... │ │ │ -0000fc40: 272d 6d75 6c74 6970 6c65 2720 3d3e 2027 '-multiple' => ' │ │ │ -0000fc50: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -0000fc60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -0000fc70: 3e20 2764 6f4e 6f74 436f 6d70 7265 7373 > 'doNotCompress │ │ │ -0000fc80: 4d44 3546 696c 6527 2c0a 0909 0909 0920 MD5File',...... │ │ │ -0000fc90: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -0000fca0: 3d3e 2027 2d2d 646f 4e6f 7443 6f6d 7072 => '--doNotCompr │ │ │ -0000fcb0: 6573 734d 4435 4669 6c65 272c 0a09 0909 essMD5File',.... │ │ │ -0000fcc0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -0000fcd0: 3d3e 2027 646f 4e6f 7443 6f6d 7072 6573 => 'doNotCompres │ │ │ -0000fce0: 734d 4435 4669 6c65 272c 0a09 0909 0909 sMD5File',...... │ │ │ -0000fcf0: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe │ │ │ -0000fd00: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n │ │ │ -0000fd10: 6f27 5d29 2c0a 2020 2020 2020 2020 2020 o']),. │ │ │ -0000fd20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000fd30: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne │ │ │ -0000fd40: 7728 272d 6e61 6d65 2720 3d3e 2027 6368 w('-name' => 'ch │ │ │ -0000fd50: 6d6f 644d 4435 4669 6c65 272c 0a09 0909 modMD5File',.... │ │ │ -0000fd60: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -0000fd70: 6e27 203d 3e20 272d 2d63 686d 6f64 4d44 n' => '--chmodMD │ │ │ -0000fd80: 3546 696c 6527 2c0a 0909 0909 0920 2020 5File',...... │ │ │ -0000fd90: 2027 2d63 665f 6b65 7927 203d 3e20 2763 '-cf_key' => 'c │ │ │ -0000fda0: 686d 6f64 4d44 3546 696c 6527 2c0a 0909 hmodMD5File',... │ │ │ -0000fdb0: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -0000fdc0: 2720 3d3e 2024 6368 6d6f 644d 4435 4669 ' => $chmodMD5Fi │ │ │ -0000fdd0: 6c65 2c0a 0909 0909 0920 2020 2027 2d70 le,...... '-p │ │ │ -0000fde0: 6174 7465 726e 2720 3d3e 2027 5c41 305b attern' => '\A0[ │ │ │ -0000fdf0: 302d 375d 7b33 2c34 7d5c 5a27 292c 0a09 0-7]{3,4}\Z'),.. │ │ │ -0000fe00: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -0000fe10: 2d6e 616d 6527 203d 3e20 2776 6572 626f -name' => 'verbo │ │ │ -0000fe20: 7365 272c 0a09 0909 0909 2020 2020 272d se',...... '- │ │ │ -0000fe30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -0000fe40: 7627 2c0a 0909 0909 0920 2020 2027 2d63 v',...... '-c │ │ │ -0000fe50: 6c5f 616c 6961 7327 203d 3e20 272d 2d76 l_alias' => '--v │ │ │ -0000fe60: 6572 626f 7365 272c 0a09 0909 0909 2020 erbose',...... │ │ │ -0000fe70: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -0000fe80: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... │ │ │ -0000fe90: 2020 2027 2d63 665f 6e6f 4f70 7453 6574 '-cf_noOptSet │ │ │ -0000fea0: 2720 3d3e 205b 2779 6573 272c 2027 6e6f ' => ['yes', 'no │ │ │ -0000feb0: 275d 292c 0a09 0909 094f 7074 696f 6e2d ']),.....Option- │ │ │ -0000fec0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -0000fed0: 2764 6562 7567 272c 0a09 0909 0909 2020 'debug',...... │ │ │ -0000fee0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -0000fef0: 3e20 272d 6427 2c0a 0909 0909 0920 2020 > '-d',...... │ │ │ -0000ff00: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -0000ff10: 272d 2d64 6562 7567 272c 0a09 0909 0909 '--debug',...... │ │ │ -0000ff20: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -0000ff30: 2027 6465 6275 6727 2c0a 0909 0909 0920 'debug',...... │ │ │ -0000ff40: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -0000ff50: 2030 2c0a 0909 0909 0920 2020 2027 2d70 0,...... '-p │ │ │ -0000ff60: 6174 7465 726e 2720 3d3e 2027 5c41 5b30 attern' => '\A[0 │ │ │ -0000ff70: 2d34 5d5c 5a27 292c 0a09 0909 094f 7074 -4]\Z'),.....Opt │ │ │ -0000ff80: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -0000ff90: 203d 3e20 2772 6573 6574 4174 696d 6527 => 'resetAtime' │ │ │ -0000ffa0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -0000ffb0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7265 option' => '--re │ │ │ -0000ffc0: 7365 7441 7469 6d65 272c 0a09 0909 0909 setAtime',...... │ │ │ -0000ffd0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -0000ffe0: 2027 7265 7365 7441 7469 6d65 272c 0a09 'resetAtime',.. │ │ │ -0000fff0: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO │ │ │ -00010000: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes' │ │ │ -00010010: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op │ │ │ -00010020: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00010030: 2720 3d3e 2027 646f 4e6f 7444 656c 6574 ' => 'doNotDelet │ │ │ -00010040: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ -00010050: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00010060: 646f 4e6f 7444 656c 6574 6527 2c0a 0909 doNotDelete',... │ │ │ -00010070: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -00010080: 203d 3e20 2764 6f4e 6f74 4465 6c65 7465 => 'doNotDelete │ │ │ -00010090: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -000100a0: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => [' │ │ │ -000100b0: 7965 7327 2c20 276e 6f27 5d29 2c0a 0909 yes', 'no']),... │ │ │ -000100c0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000100d0: 6e61 6d65 2720 3d3e 2027 6465 6c65 7465 name' => 'delete │ │ │ -000100e0: 4e6f 7446 696e 6973 6865 6444 6972 7327 NotFinishedDirs' │ │ │ -000100f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00010100: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6465 option' => '--de │ │ │ -00010110: 6c65 7465 4e6f 7446 696e 6973 6865 6444 leteNotFinishedD │ │ │ -00010120: 6972 7327 2c0a 0909 0909 0920 2020 2027 irs',...... ' │ │ │ -00010130: 2d63 665f 6b65 7927 203d 3e20 2764 656c -cf_key' => 'del │ │ │ -00010140: 6574 654e 6f74 4669 6e69 7368 6564 4469 eteNotFinishedDi │ │ │ -00010150: 7273 272c 0a09 0909 0909 2020 2020 272d rs',...... '- │ │ │ -00010160: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => │ │ │ -00010170: 5b27 7965 7327 2c20 276e 6f27 5d29 2c0a ['yes', 'no']),. │ │ │ -00010180: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00010190: 272d 6e61 6d65 2720 3d3e 2027 6d61 7848 '-name' => 'maxH │ │ │ -000101a0: 6172 644c 696e 6b73 272c 0a09 0909 0909 ardLinks',...... │ │ │ -000101b0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -000101c0: 203d 3e20 272d 2d6d 6178 4861 7264 4c69 => '--maxHardLi │ │ │ -000101d0: 6e6b 7327 2c0a 0909 0909 0920 2020 2027 nks',...... ' │ │ │ -000101e0: 2d63 665f 6b65 7927 203d 3e20 276d 6178 -cf_key' => 'max │ │ │ -000101f0: 4861 7264 4c69 6e6b 7327 2c0a 0909 0909 HardLinks',..... │ │ │ -00010200: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ -00010210: 3d3e 2030 2c0a 0909 0909 0920 2020 2027 => 0,...... ' │ │ │ -00010220: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\A │ │ │ -00010230: 5c64 2b5c 5a27 292c 0a09 0909 094f 7074 \d+\Z'),.....Opt │ │ │ -00010240: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00010250: 203d 3e20 276b 6565 7041 6c6c 272c 0a09 => 'keepAll',.. │ │ │ -00010260: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00010270: 696f 6e27 203d 3e20 272d 2d6b 6565 7041 ion' => '--keepA │ │ │ -00010280: 6c6c 272c 0a09 0909 0909 2020 2020 272d ll',...... '- │ │ │ -00010290: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep │ │ │ -000102a0: 416c 6c27 2c0a 0909 0909 0920 2020 2027 All',...... ' │ │ │ -000102b0: 2d64 6566 6175 6c74 2720 3d3e 2024 6b65 -default' => $ke │ │ │ -000102c0: 6570 416c 6c29 2c0a 0909 0909 4f70 7469 epAll),.....Opti │ │ │ -000102d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -000102e0: 3d3e 2027 6b65 6570 5765 656b 6461 7927 => 'keepWeekday' │ │ │ -000102f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00010300: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke │ │ │ -00010310: 6570 5765 656b 6461 7927 2c0a 0909 0909 epWeekday',..... │ │ │ -00010320: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00010330: 3e20 276b 6565 7057 6565 6b64 6179 272c > 'keepWeekday', │ │ │ -00010340: 0a09 0909 0909 2020 2020 272d 7175 6f74 ...... '-quot │ │ │ -00010350: 6545 7661 6c27 203d 3e20 2779 6573 2729 eEval' => 'yes') │ │ │ -00010360: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00010370: 7728 272d 6e61 6d65 2720 3d3e 2027 6b65 w('-name' => 'ke │ │ │ -00010380: 6570 4669 7273 744f 6659 6561 7227 2c0a epFirstOfYear',. │ │ │ -00010390: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000103a0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ -000103b0: 4669 7273 744f 6659 6561 7227 2c0a 0909 FirstOfYear',... │ │ │ -000103c0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -000103d0: 203d 3e20 276b 6565 7046 6972 7374 4f66 => 'keepFirstOf │ │ │ -000103e0: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... │ │ │ -000103f0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00010400: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00010410: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00010420: 6b65 6570 4c61 7374 4f66 5965 6172 272c keepLastOfYear', │ │ │ -00010430: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00010440: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ -00010450: 704c 6173 744f 6659 6561 7227 2c0a 0909 pLastOfYear',... │ │ │ -00010460: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -00010470: 203d 3e20 276b 6565 704c 6173 744f 6659 => 'keepLastOfY │ │ │ -00010480: 6561 7227 2c0a 0909 0909 0920 2020 2027 ear',...... ' │ │ │ -00010490: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -000104a0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -000104b0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ -000104c0: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth' │ │ │ -000104d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000104e0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke │ │ │ -000104f0: 6570 4669 7273 744f 664d 6f6e 7468 272c epFirstOfMonth', │ │ │ -00010500: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ -00010510: 6579 2720 3d3e 2027 6b65 6570 4669 7273 ey' => 'keepFirs │ │ │ -00010520: 744f 664d 6f6e 7468 272c 0a09 0909 0909 tOfMonth',...... │ │ │ -00010530: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00010540: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -00010550: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00010560: 3d3e 2027 6b65 6570 4c61 7374 4f66 4d6f => 'keepLastOfMo │ │ │ -00010570: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... ' │ │ │ -00010580: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00010590: 2d2d 6b65 6570 4c61 7374 4f66 4d6f 6e74 --keepLastOfMont │ │ │ -000105a0: 6827 2c0a 0909 0909 0920 2020 2027 2d63 h',...... '-c │ │ │ -000105b0: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL │ │ │ -000105c0: 6173 744f 664d 6f6e 7468 272c 0a09 0909 astOfMonth',.... │ │ │ -000105d0: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ -000105e0: 3e20 2779 6573 2729 2c0a 2020 2020 2020 > 'yes'),. │ │ │ -000105f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00010600: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ -00010610: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00010620: 2027 6669 7273 7444 6179 4f66 5765 656b 'firstDayOfWeek │ │ │ -00010630: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00010640: 5f6f 7074 696f 6e27 203d 3e20 272d 2d66 _option' => '--f │ │ │ -00010650: 6972 7374 4461 794f 6657 6565 6b27 2c0a irstDayOfWeek',. │ │ │ -00010660: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00010670: 7927 203d 3e20 2766 6972 7374 4461 794f y' => 'firstDayO │ │ │ -00010680: 6657 6565 6b27 2c0a 0909 0909 0920 2020 fWeek',...... │ │ │ -00010690: 2027 2d64 6566 6175 6c74 2720 3d3e 2027 '-default' => ' │ │ │ -000106a0: 5375 6e27 292c 0a09 0909 094f 7074 696f Sun'),.....Optio │ │ │ -000106b0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000106c0: 3e20 276b 6565 7046 6972 7374 4f66 5765 > 'keepFirstOfWe │ │ │ -000106d0: 656b 272c 0a09 0909 0909 2020 2020 272d ek',...... '- │ │ │ -000106e0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -000106f0: 2d6b 6565 7046 6972 7374 4f66 5765 656b -keepFirstOfWeek │ │ │ -00010700: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -00010710: 5f6b 6579 2720 3d3e 2027 6b65 6570 4669 _key' => 'keepFi │ │ │ -00010720: 7273 744f 6657 6565 6b27 2c0a 0909 0909 rstOfWeek',..... │ │ │ -00010730: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -00010740: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ -00010750: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00010760: 203d 3e20 276b 6565 704c 6173 744f 6657 => 'keepLastOfW │ │ │ -00010770: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... ' │ │ │ -00010780: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00010790: 2d2d 6b65 6570 4c61 7374 4f66 5765 656b --keepLastOfWeek │ │ │ -000107a0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -000107b0: 5f6b 6579 2720 3d3e 2027 6b65 6570 4c61 _key' => 'keepLa │ │ │ -000107c0: 7374 4f66 5765 656b 272c 0a09 0909 0909 stOfWeek',...... │ │ │ -000107d0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -000107e0: 2779 6573 2729 2c0a 2020 2020 2020 2020 'yes'),. │ │ │ -000107f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00010800: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00010810: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00010820: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',. │ │ │ -00010830: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00010840: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ -00010850: 4475 706c 6963 6174 6527 2c0a 0909 0909 Duplicate',..... │ │ │ -00010860: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00010870: 3e20 276b 6565 7044 7570 6c69 6361 7465 > 'keepDuplicate │ │ │ -00010880: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -00010890: 6661 756c 7427 203d 3e20 246b 6565 7044 fault' => $keepD │ │ │ -000108a0: 7570 6c69 6361 7465 292c 0a20 2020 2020 uplicate),. │ │ │ -000108b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000108c0: 2020 2020 2020 2020 2020 204f 7074 696f Optio │ │ │ -000108d0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000108e0: 3e20 276b 6565 704d 696e 4e75 6d62 6572 > 'keepMinNumber │ │ │ -000108f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00010900: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ -00010910: 6565 704d 696e 4e75 6d62 6572 272c 0a09 eepMinNumber',.. │ │ │ -00010920: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -00010930: 2720 3d3e 2027 6b65 6570 4d69 6e4e 756d ' => 'keepMinNum │ │ │ -00010940: 6265 7227 2c0a 0909 0909 0920 2020 2027 ber',...... ' │ │ │ -00010950: 2d64 6566 6175 6c74 2720 3d3e 2031 302c -default' => 10, │ │ │ -00010960: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -00010970: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\A\d+\Z │ │ │ -00010980: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ -00010990: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000109a0: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ -000109b0: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ -000109c0: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',..... │ │ │ -000109d0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -000109e0: 2720 3d3e 2027 2d2d 6b65 6570 4d61 784e ' => '--keepMaxN │ │ │ -000109f0: 756d 6265 7227 2c0a 0909 0909 0920 2020 umber',...... │ │ │ -00010a00: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k │ │ │ -00010a10: 6565 704d 6178 4e75 6d62 6572 272c 0a09 eepMaxNumber',.. │ │ │ -00010a20: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -00010a30: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... │ │ │ -00010a40: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ -00010a50: 275c 415c 642b 5c5a 2729 2c0a 2020 2020 '\A\d+\Z'),. │ │ │ -00010a60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00010a70: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ -00010a80: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00010a90: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative │ │ │ -00010aa0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00010ab0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ -00010ac0: 6565 7052 656c 6174 6976 6527 2c0a 0909 eepRelative',... │ │ │ -00010ad0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00010ae0: 7327 203d 3e20 272d 5227 2c0a 0909 0909 s' => '-R',..... │ │ │ -00010af0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00010b00: 3e20 276b 6565 7052 656c 6174 6976 6527 > 'keepRelative' │ │ │ -00010b10: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo │ │ │ -00010b20: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes' │ │ │ -00010b30: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ -00010b40: 616d 2720 3d3e 2027 7965 7327 292c 0a20 am' => 'yes'),. │ │ │ -00010b50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00010b60: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ -00010b70: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00010b80: 6527 203d 3e20 2769 676e 6f72 6552 6561 e' => 'ignoreRea │ │ │ -00010b90: 6445 7272 6f72 272c 0a09 0909 0909 2020 dError',...... │ │ │ -00010ba0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00010bb0: 3e20 272d 2d69 676e 6f72 6552 6561 6445 > '--ignoreReadE │ │ │ -00010bc0: 7272 6f72 272c 0a09 0909 0909 2020 2020 rror',...... │ │ │ -00010bd0: 272d 6366 5f6b 6579 2720 3d3e 2027 6967 '-cf_key' => 'ig │ │ │ -00010be0: 6e6f 7265 5265 6164 4572 726f 7227 2c0a noreReadError',. │ │ │ -00010bf0: 0909 0909 0920 2020 2027 2d63 665f 6e6f ..... '-cf_no │ │ │ -00010c00: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes │ │ │ -00010c10: 272c 2027 6e6f 275d 292c 0a09 0909 094f ', 'no']),.....O │ │ │ -00010c20: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00010c30: 6527 203d 3e20 2773 7570 7072 6573 7357 e' => 'suppressW │ │ │ -00010c40: 6172 6e69 6e67 272c 0a09 0909 0909 2020 arning',...... │ │ │ -00010c50: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00010c60: 3e20 272d 2d73 7570 7072 6573 7357 6172 > '--suppressWar │ │ │ -00010c70: 6e69 6e67 272c 0a09 0909 0909 2020 2020 ning',...... │ │ │ -00010c80: 272d 6366 5f6b 6579 2720 3d3e 2027 7375 '-cf_key' => 'su │ │ │ -00010c90: 7070 7265 7373 5761 726e 696e 6727 2c0a ppressWarning',. │ │ │ -00010ca0: 0909 0909 0920 2020 2027 2d6d 756c 7469 ..... '-multi │ │ │ -00010cb0: 706c 6527 203d 3e20 2779 6573 272c 0a09 ple' => 'yes',.. │ │ │ -00010cc0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ -00010cd0: 6e27 203d 3e0a 2020 275c 4165 7863 4469 n' =>. '\AexcDi │ │ │ -00010ce0: 725c 5a7c 5c41 6669 6c65 4368 616e 6765 r\Z|\AfileChange │ │ │ -00010cf0: 5c5a 7c5c 4163 7253 6572 6965 735c 5a7c \Z|\AcrSeries\Z| │ │ │ -00010d00: 5c41 6861 7368 436f 6c6c 6973 696f 6e5c \AhashCollision\ │ │ │ -00010d10: 5a7c 5c41 6669 6c65 4e61 6d65 5769 7468 Z|\AfileNameWith │ │ │ -00010d20: 4c69 6e65 4665 6564 7c5c 4175 7365 5f44 LineFeed|\Ause_D │ │ │ -00010d30: 425f 4669 6c65 5c5a 7c5c 4175 7365 5f4d B_File\Z|\Ause_M │ │ │ -00010d40: 4c44 424d 5c5a 7c5c 4175 7365 5f49 4f43 LDBM\Z|\Ause_IOC │ │ │ -00010d50: 6f6d 7072 6573 7342 7a69 7032 5c5a 7c5c ompressBzip2\Z|\ │ │ │ -00010d60: 416e 6f42 6163 6b75 7046 6f72 5065 7269 AnoBackupForPeri │ │ │ -00010d70: 6f64 5c5a 2729 2c0a 0909 0909 4f70 7469 od\Z'),.....Opti │ │ │ -00010d80: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00010d90: 3d3e 2027 7375 7070 7265 7373 496e 666f => 'suppressInfo │ │ │ -00010da0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00010db0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s │ │ │ -00010dc0: 7570 7072 6573 7349 6e66 6f27 2c0a 0909 uppressInfo',... │ │ │ -00010dd0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -00010de0: 203d 3e20 2773 7570 7072 6573 7349 6e66 => 'suppressInf │ │ │ -00010df0: 6f27 2c0a 0909 0909 0920 2020 2027 2d6d o',...... '-m │ │ │ -00010e00: 756c 7469 706c 6527 203d 3e20 2779 6573 ultiple' => 'yes │ │ │ -00010e10: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00010e20: 7474 6572 6e27 203d 3e0a 2020 275c 4172 ttern' =>. '\Ar │ │ │ -00010e30: 6561 6443 6865 636b 5375 6d73 5c5a 2729 eadCheckSums\Z') │ │ │ -00010e40: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00010e50: 7728 272d 6e61 6d65 2720 3d3e 2027 6c69 w('-name' => 'li │ │ │ -00010e60: 6e6b 546f 5265 6365 6e74 272c 0a09 0909 nkToRecent',.... │ │ │ -00010e70: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00010e80: 6e27 203d 3e20 272d 2d6c 696e 6b54 6f52 n' => '--linkToR │ │ │ -00010e90: 6563 656e 7427 2c0a 0909 0909 0920 2020 ecent',...... │ │ │ -00010ea0: 2027 2d63 665f 6b65 7927 203d 3e20 276c '-cf_key' => 'l │ │ │ -00010eb0: 696e 6b54 6f52 6563 656e 7427 2c0a 0909 inkToRecent',... │ │ │ -00010ec0: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ -00010ed0: 3d3e 2027 7965 7327 292c 0a09 0909 094f => 'yes'),.....O │ │ │ -00010ee0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00010ef0: 6527 203d 3e20 276c 6f67 4669 6c65 272c e' => 'logFile', │ │ │ -00010f00: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00010f10: 7074 696f 6e27 203d 3e20 272d 6c27 2c0a ption' => '-l',. │ │ │ -00010f20: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ -00010f30: 6961 7327 203d 3e20 272d 2d6c 6f67 4669 ias' => '--logFi │ │ │ -00010f40: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '- │ │ │ -00010f50: 6366 5f6b 6579 2720 3d3e 2027 6c6f 6746 cf_key' => 'logF │ │ │ -00010f60: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ -00010f70: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -00010f80: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -00010f90: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p │ │ │ -00010fa0: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',.. │ │ │ -00010fb0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00010fc0: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL │ │ │ -00010fd0: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',...... │ │ │ -00010fe0: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -00010ff0: 2027 706c 7573 4c6f 6753 7464 6f75 7427 'plusLogStdout' │ │ │ -00011000: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl │ │ │ -00011010: 795f 6966 2720 3d3e 2027 5b6c 6f67 4669 y_if' => '[logFi │ │ │ -00011020: 6c65 5d27 2c0a 0909 0909 0920 2020 2027 le]',...... ' │ │ │ -00011030: 2d63 665f 6e6f 4f70 7453 6574 2720 3d3e -cf_noOptSet' => │ │ │ -00011040: 205b 2779 6573 272c 2027 6e6f 275d 292c ['yes', 'no']), │ │ │ -00011050: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00011060: 2827 2d6e 616d 6527 203d 3e20 2773 7570 ('-name' => 'sup │ │ │ -00011070: 7072 6573 7354 696d 6527 2c0a 0909 0909 pressTime',..... │ │ │ -00011080: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00011090: 2720 3d3e 2027 2d2d 7375 7070 7265 7373 ' => '--suppress │ │ │ -000110a0: 5469 6d65 272c 0a09 0909 0909 2020 2020 Time',...... │ │ │ -000110b0: 272d 6366 5f6b 6579 2720 3d3e 2027 7375 '-cf_key' => 'su │ │ │ -000110c0: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',.... │ │ │ -000110d0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ -000110e0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ -000110f0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ -00011100: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00011110: 3d3e 2027 6d61 7846 696c 656c 656e 272c => 'maxFilelen', │ │ │ -00011120: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00011130: 7074 696f 6e27 203d 3e20 272d 6d27 2c0a ption' => '-m',. │ │ │ -00011140: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ -00011150: 6961 7327 203d 3e20 272d 2d6d 6178 4669 ias' => '--maxFi │ │ │ -00011160: 6c65 6c65 6e27 2c0a 0909 0909 0920 2020 lelen',...... │ │ │ -00011170: 2027 2d63 665f 6b65 7927 203d 3e20 276d '-cf_key' => 'm │ │ │ -00011180: 6178 4669 6c65 6c65 6e27 2c0a 0909 0909 axFilelen',..... │ │ │ -00011190: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ -000111a0: 3d3e 2031 6536 2c0a 0909 0909 0920 2020 => 1e6,...... │ │ │ -000111b0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => ' │ │ │ -000111c0: 5c41 5b65 5c64 5d2b 5c5a 272c 0a09 0909 \A[e\d]+\Z',.... │ │ │ -000111d0: 0909 2020 2020 272d 6f6e 6c79 5f69 6627 .. '-only_if' │ │ │ -000111e0: 203d 3e20 225b 6c6f 6746 696c 655d 2229 => "[logFile]") │ │ │ -000111f0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00011200: 7728 272d 6e61 6d65 2720 3d3e 2027 6e6f w('-name' => 'no │ │ │ -00011210: 4f66 4f6c 6446 696c 6573 272c 0a09 0909 OfOldFiles',.... │ │ │ -00011220: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00011230: 6e27 203d 3e20 272d 6e27 2c0a 0909 0909 n' => '-n',..... │ │ │ -00011240: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00011250: 203d 3e20 272d 2d6e 6f4f 664f 6c64 4669 => '--noOfOldFi │ │ │ -00011260: 6c65 7327 2c0a 0909 0909 0920 2020 2027 les',...... ' │ │ │ -00011270: 2d63 665f 6b65 7927 203d 3e20 276e 6f4f -cf_key' => 'noO │ │ │ -00011280: 664f 6c64 4669 6c65 7327 2c0a 0909 0909 fOldFiles',..... │ │ │ -00011290: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ -000112a0: 3d3e 2027 3527 2c0a 0909 0909 0920 2020 => '5',...... │ │ │ -000112b0: 2027 2d70 6174 7465 726e 2720 3d3e 2027 '-pattern' => ' │ │ │ -000112c0: 5c41 5c64 2b5c 5a27 2c0a 0909 0909 0920 \A\d+\Z',...... │ │ │ -000112d0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' => │ │ │ -000112e0: 225b 6c6f 6746 696c 655d 2229 2c0a 2020 "[logFile]"),. │ │ │ -000112f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00011300: 2020 2020 2020 2020 2020 2020 2020 4f70 Op │ │ │ -00011310: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00011320: 2720 3d3e 2027 7361 7665 4c6f 6773 272c ' => 'saveLogs', │ │ │ -00011330: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00011340: 7074 696f 6e27 203d 3e20 272d 2d73 6176 ption' => '--sav │ │ │ -00011350: 654c 6f67 7327 2c0a 0909 0909 0920 2020 eLogs',...... │ │ │ -00011360: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's │ │ │ -00011370: 6176 654c 6f67 7327 2c0a 0909 0909 0920 aveLogs',...... │ │ │ -00011380: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' => │ │ │ -00011390: 2022 5b6c 6f67 4669 6c65 5d22 2c0a 0909 "[logFile]",... │ │ │ -000113a0: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp │ │ │ -000113b0: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes', │ │ │ -000113c0: 2027 6e6f 275d 292c 0a20 2020 2020 2020 'no']),. │ │ │ -000113d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000113e0: 2020 2020 2020 2020 204f 7074 696f 6e2d Option- │ │ │ -000113f0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00011400: 2763 6f6d 7072 6573 7357 6974 6827 2c0a 'compressWith',. │ │ │ -00011410: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00011420: 7469 6f6e 2720 3d3e 2027 2d2d 636f 6d70 tion' => '--comp │ │ │ -00011430: 7265 7373 5769 7468 272c 0a09 0909 0909 ressWith',...... │ │ │ -00011440: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -00011450: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith', │ │ │ -00011460: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -00011470: 756c 7427 203d 3e20 2762 7a69 7032 272c ult' => 'bzip2', │ │ │ -00011480: 0a09 0909 0909 2020 2020 272d 7175 6f74 ...... '-quot │ │ │ -00011490: 6545 7661 6c27 203d 3e20 2779 6573 272c eEval' => 'yes', │ │ │ -000114a0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only │ │ │ -000114b0: 5f69 6627 203d 3e22 5b6c 6f67 4669 6c65 _if' =>"[logFile │ │ │ -000114c0: 5d22 292c 0a09 0909 094f 7074 696f 6e2d ]"),.....Option- │ │ │ -000114d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -000114e0: 276c 6f67 496e 4261 636b 7570 4469 7227 'logInBackupDir' │ │ │ -000114f0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00011500: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6c6f option' => '--lo │ │ │ -00011510: 6749 6e42 6163 6b75 7044 6972 272c 0a09 gInBackupDir',.. │ │ │ -00011520: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -00011530: 2720 3d3e 2027 6c6f 6749 6e42 6163 6b75 ' => 'logInBacku │ │ │ -00011540: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ -00011550: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ -00011560: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ -00011570: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00011580: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co │ │ │ -00011590: 6d70 7265 7373 4c6f 6749 6e42 6163 6b75 mpressLogInBacku │ │ │ -000115a0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ -000115b0: 272d 636c 5f6f 7074 696f 6e27 203d 3e0a '-cl_option' =>. │ │ │ -000115c0: 0909 0909 0920 2020 2027 2d2d 636f 6d70 ..... '--comp │ │ │ -000115d0: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD │ │ │ -000115e0: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '- │ │ │ -000115f0: 6366 5f6b 6579 2720 3d3e 2027 636f 6d70 cf_key' => 'comp │ │ │ -00011600: 7265 7373 4c6f 6749 6e42 6163 6b75 7044 ressLogInBackupD │ │ │ -00011610: 6972 272c 0a09 0909 0909 2020 2020 272d ir',...... '- │ │ │ -00011620: 6366 5f6e 6f4f 7074 5365 7427 203d 3e20 cf_noOptSet' => │ │ │ -00011630: 5b27 7965 7327 2c20 276e 6f27 5d2c 0a09 ['yes', 'no'],.. │ │ │ -00011640: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -00011650: 6627 203d 3e20 275b 6c6f 6749 6e42 6163 f' => '[logInBac │ │ │ -00011660: 6b75 7044 6972 5d27 292c 0a20 2020 2020 kupDir]'),. │ │ │ -00011670: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00011680: 2020 2020 2020 2020 2020 204f 7074 696f Optio │ │ │ -00011690: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000116a0: 3e20 276c 6f67 496e 4261 636b 7570 4469 > 'logInBackupDi │ │ │ -000116b0: 7246 696c 654e 616d 6527 2c0a 0909 0909 rFileName',..... │ │ │ -000116c0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -000116d0: 2720 3d3e 0a09 0909 0909 2020 2020 272d ' =>...... '- │ │ │ -000116e0: 2d6c 6f67 496e 4261 636b 7570 4469 7246 -logInBackupDirF │ │ │ -000116f0: 696c 654e 616d 6527 2c0a 0909 0909 0920 ileName',...... │ │ │ -00011700: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -00011710: 276c 6f67 496e 4261 636b 7570 4469 7246 'logInBackupDirF │ │ │ -00011720: 696c 654e 616d 6527 2c0a 0909 0909 0920 ileName',...... │ │ │ -00011730: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -00011740: 0a09 0909 0909 2020 2020 246c 6f67 496e ...... $logIn │ │ │ -00011750: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam │ │ │ -00011760: 652c 0a09 0909 0909 2020 2020 272d 6f6e e,...... '-on │ │ │ -00011770: 6c79 5f69 6627 203d 3e20 275b 6c6f 6749 ly_if' => '[logI │ │ │ -00011780: 6e42 6163 6b75 7044 6972 5d27 292c 0a09 nBackupDir]'),.. │ │ │ -00011790: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -000117a0: 2d6e 616d 6527 203d 3e20 2770 726f 6772 -name' => 'progr │ │ │ -000117b0: 6573 7352 6570 6f72 7427 2c0a 0909 0909 essReport',..... │ │ │ -000117c0: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -000117d0: 2720 3d3e 2027 2d2d 7072 6f67 7265 7373 ' => '--progress │ │ │ -000117e0: 5265 706f 7274 272c 0a09 0909 0909 2020 Report',...... │ │ │ -000117f0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00011800: 2027 2d50 272c 0a09 0909 0909 2020 2020 '-P',...... │ │ │ -00011810: 272d 6366 5f6b 6579 2720 3d3e 2027 7072 '-cf_key' => 'pr │ │ │ -00011820: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',.. │ │ │ -00011830: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -00011840: 7427 203d 3e20 3029 2c0a 0909 0909 4f70 t' => 0),.....Op │ │ │ -00011850: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00011860: 2720 3d3e 2027 7072 696e 7444 6570 7468 ' => 'printDepth │ │ │ -00011870: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00011880: 5f6f 7074 696f 6e27 203d 3e20 272d 2d70 _option' => '--p │ │ │ -00011890: 7269 6e74 4465 7074 6827 2c0a 0909 0909 rintDepth',..... │ │ │ -000118a0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -000118b0: 203d 3e20 272d 4427 2c0a 0909 0909 0920 => '-D',...... │ │ │ -000118c0: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -000118d0: 2770 7269 6e74 4465 7074 6827 2c0a 0909 'printDepth',... │ │ │ -000118e0: 0909 0920 2020 2027 2d63 665f 6e6f 4f70 ... '-cf_noOp │ │ │ -000118f0: 7453 6574 2720 3d3e 205b 2779 6573 272c tSet' => ['yes', │ │ │ -00011900: 2027 6e6f 275d 292c 0a23 2068 6964 6465 'no']),.# hidde │ │ │ -00011910: 6e20 6f70 7469 6f6e 730a 0909 0909 4f70 n options.....Op │ │ │ -00011920: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00011930: 2720 3d3e 2027 6d65 7267 6542 6163 6b75 ' => 'mergeBacku │ │ │ -00011940: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ -00011950: 272d 6366 5f6b 6579 2720 3d3e 2027 6d65 '-cf_key' => 'me │ │ │ -00011960: 7267 6542 6163 6b75 7044 6972 272c 0a09 rgeBackupDir',.. │ │ │ -00011970: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00011980: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -00011990: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000119a0: 6d65 2720 3d3e 2027 7072 696e 7441 6c6c me' => 'printAll │ │ │ -000119b0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -000119c0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d70 _option' => '--p │ │ │ -000119d0: 7269 6e74 416c 6c27 2c0a 0909 0909 0920 rintAll',...... │ │ │ -000119e0: 2020 2027 2d68 6964 6465 6e27 203d 3e20 '-hidden' => │ │ │ -000119f0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -00011a00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00011a10: 3d3e 2027 6d69 6e42 6c6f 636b 4c65 6e67 => 'minBlockLeng │ │ │ -00011a20: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ -00011a30: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00011a40: 2d6d 696e 426c 6f63 6b4c 656e 6774 6827 -minBlockLength' │ │ │ -00011a50: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00011a60: 6b65 7927 203d 3e20 276d 696e 426c 6f63 key' => 'minBloc │ │ │ -00011a70: 6b4c 656e 6774 6827 2c0a 0909 0909 0920 kLength',...... │ │ │ -00011a80: 2020 2027 2d68 6964 6465 6e27 203d 3e20 '-hidden' => │ │ │ -00011a90: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ -00011aa0: 272d 6465 6661 756c 7427 203d 3e20 2463 '-default' => $c │ │ │ -00011ab0: 6865 636b 426c 6f63 6b73 4253 6d69 6e2c heckBlocksBSmin, │ │ │ -00011ac0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -00011ad0: 6572 6e27 203d 3e20 275c 415c 642b 5c5a ern' => '\A\d+\Z │ │ │ -00011ae0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00011af0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00011b00: 746f 6461 794f 7074 272c 0a09 0909 0909 todayOpt',...... │ │ │ -00011b10: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00011b20: 203d 3e20 272d 2d74 6f64 6179 272c 0a09 => '--today',.. │ │ │ -00011b30: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -00011b40: 2720 3d3e 2027 746f 6461 7927 2c0a 0909 ' => 'today',... │ │ │ -00011b50: 0909 0920 2020 2027 2d68 6964 6465 6e27 ... '-hidden' │ │ │ -00011b60: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ -00011b70: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00011b80: 2779 6573 2729 2c0a 0a23 2069 676e 6f72 'yes'),..# ignor │ │ │ -00011b90: 6520 7370 6563 6966 6965 6420 7469 6d65 e specified time │ │ │ -00011ba0: 2077 6865 6e20 636f 6d70 6169 7269 6e67 when compairing │ │ │ -00011bb0: 2066 696c 6573 3b20 706f 7373 6962 6c65 files; possible │ │ │ -00011bc0: 0a23 2076 616c 7565 7320 6172 653a 2027 .# values are: ' │ │ │ -00011bd0: 6374 696d 6527 2c20 276d 7469 6d65 2720 ctime', 'mtime' │ │ │ -00011be0: 6f72 2027 6e6f 6e65 272c 2064 6566 6175 or 'none', defau │ │ │ -00011bf0: 6c74 2069 7320 276e 6f6e 6527 0a23 2053 lt is 'none'.# S │ │ │ -00011c00: 6574 7469 6e67 2074 6869 7320 7061 7261 etting this para │ │ │ -00011c10: 6d65 7465 7220 6f6e 6c79 206d 616b 6573 meter only makes │ │ │ -00011c20: 2073 656e 7365 2069 6e20 6d69 7865 640a sense in mixed. │ │ │ -00011c30: 2320 656e 7669 726f 6e6d 656e 7473 2c20 # environments, │ │ │ -00011c40: 7768 656e 206f 6e65 2074 696d 6520 6861 when one time ha │ │ │ -00011c50: 7320 7374 6f63 6861 7374 6963 2076 616c s stochastic val │ │ │ -00011c60: 7565 732e 0a20 2020 2020 2020 2020 2020 ues.. │ │ │ -00011c70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00011c80: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ -00011c90: 2827 2d6e 616d 6527 203d 3e20 2769 676e ('-name' => 'ign │ │ │ -00011ca0: 6f72 6554 696d 6527 2c0a 0909 0909 0920 oreTime',...... │ │ │ -00011cb0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00011cc0: 3d3e 2027 2d2d 6967 6e6f 7265 5469 6d65 => '--ignoreTime │ │ │ -00011cd0: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -00011ce0: 5f6b 6579 2720 3d3e 2027 6967 6e6f 7265 _key' => 'ignore │ │ │ -00011cf0: 5469 6d65 272c 0a09 0909 0909 2020 2020 Time',...... │ │ │ -00011d00: 272d 6465 6661 756c 7427 203d 3e20 276e '-default' => 'n │ │ │ -00011d10: 6f6e 6527 2c0a 0909 0909 0920 2020 2027 one',...... ' │ │ │ -00011d20: 2d70 6174 7465 726e 2720 3d3e 0a09 0909 -pattern' =>.... │ │ │ -00011d30: 0909 2020 2020 275c 416e 6f6e 655c 5a7c .. '\Anone\Z| │ │ │ -00011d40: 5c41 6374 696d 655c 5a7c 5c41 6d74 696d \Actime\Z|\Amtim │ │ │ -00011d50: 655c 5a27 292c 0a09 0909 094f 7074 696f e\Z'),.....Optio │ │ │ -00011d60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00011d70: 3e20 2773 746f 7041 6674 6572 4e6f 5265 > 'stopAfterNoRe │ │ │ -00011d80: 6164 4572 726f 7273 272c 0a09 0909 0909 adErrors',...... │ │ │ -00011d90: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00011da0: 203d 3e0a 0909 0909 0920 2020 2027 2d2d =>...... '-- │ │ │ -00011db0: 7374 6f70 4166 7465 724e 6f52 6561 6445 stopAfterNoReadE │ │ │ -00011dc0: 7272 6f72 7327 2c0a 0909 0909 0920 2020 rrors',...... │ │ │ -00011dd0: 2027 2d63 665f 6b65 7927 203d 3e0a 0909 '-cf_key' =>... │ │ │ -00011de0: 0909 0920 2020 2027 7374 6f70 4166 7465 ... 'stopAfte │ │ │ -00011df0: 724e 6f52 6561 6445 7272 6f72 7327 2c0a rNoReadErrors',. │ │ │ -00011e00: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde │ │ │ -00011e10: 6e27 203d 3e20 2779 6573 272c 0a09 0909 n' => 'yes',.... │ │ │ -00011e20: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -00011e30: 203d 3e20 3530 3029 2c0a 0909 0909 4f70 => 500),.....Op │ │ │ -00011e40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00011e50: 2720 3d3e 2027 696e 7465 726e 616c 5069 ' => 'internalPi │ │ │ -00011e60: 7065 4275 6653 697a 6527 2c0a 0909 0909 peBufSize',..... │ │ │ -00011e70: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00011e80: 2720 3d3e 0a09 0909 0909 2020 2020 272d ' =>...... '- │ │ │ -00011e90: 2d69 6e74 6572 6e61 6c50 6970 6542 7566 -internalPipeBuf │ │ │ -00011ea0: 5369 7a65 272c 0a09 0909 0909 2020 2020 Size',...... │ │ │ -00011eb0: 272d 6366 5f6b 6579 2720 3d3e 0a09 0909 '-cf_key' =>.... │ │ │ -00011ec0: 0909 2020 2020 2769 6e74 6572 6e61 6c50 .. 'internalP │ │ │ -00011ed0: 6970 6542 7566 5369 7a65 272c 0a09 0909 ipeBufSize',.... │ │ │ -00011ee0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' │ │ │ -00011ef0: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... │ │ │ -00011f00: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -00011f10: 2027 3136 4d27 292c 0a23 2075 7365 6420 '16M'),.# used │ │ │ -00011f20: 6279 2073 746f 7265 4261 636b 7570 4d6f by storeBackupMo │ │ │ -00011f30: 756e 742e 706c 0a09 0909 094f 7074 696f unt.pl.....Optio │ │ │ -00011f40: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00011f50: 3e20 2777 7269 7465 546f 4e61 6d65 6450 > 'writeToNamedP │ │ │ -00011f60: 6970 6527 2c0a 0909 0909 0920 2020 2027 ipe',...... ' │ │ │ -00011f70: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00011f80: 2d2d 7772 6974 6554 6f4e 616d 6564 5069 --writeToNamedPi │ │ │ -00011f90: 7065 272c 0a09 0909 0909 2020 2020 272d pe',...... '- │ │ │ -00011fa0: 7061 7261 6d27 203d 3e20 2779 6573 272c param' => 'yes', │ │ │ -00011fb0: 0a09 0909 0909 2020 2020 272d 6869 6464 ...... '-hidd │ │ │ -00011fc0: 656e 2720 3d3e 2027 7965 7327 292c 0a09 en' => 'yes'),.. │ │ │ -00011fd0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00011fe0: 2d6e 616d 6527 203d 3e20 2773 6b69 7053 -name' => 'skipS │ │ │ -00011ff0: 796e 6327 2c0a 0909 0909 0920 2020 2027 ync',...... ' │ │ │ -00012000: 2d68 6964 6465 6e27 203d 3e20 2779 6573 -hidden' => 'yes │ │ │ -00012010: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00012020: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s │ │ │ -00012030: 6b69 7053 796e 6327 290a 0909 0909 5d0a kipSync').....]. │ │ │ -00012040: 0909 2020 2020 293b 0a0a 0a24 4368 6563 .. );...$Chec │ │ │ -00012050: 6b50 6172 2d3e 6368 6563 6b28 272d 6172 kPar->check('-ar │ │ │ -00012060: 6776 2720 3d3e 205c 4041 5247 562c 0a20 gv' => \@ARGV,. │ │ │ -00012070: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00012080: 272d 6865 6c70 2720 3d3e 2024 4865 6c70 '-help' => $Help │ │ │ -00012090: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -000120a0: 2020 293b 0a0a 2320 4175 7377 6572 7475 );..# Auswertu │ │ │ -000120b0: 6e67 2064 6572 2050 6172 616d 6574 6572 ng der Parameter │ │ │ -000120c0: 0a6d 7920 2468 656c 7020 3d20 2443 6865 .my $help = $Che │ │ │ -000120d0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -000120e0: 686f 7574 5061 7228 2768 656c 7027 293b houtPar('help'); │ │ │ -000120f0: 0a0a 6469 6520 2224 4675 6c6c 4865 6c70 ..die "$FullHelp │ │ │ -00012100: 2220 6966 2024 6865 6c70 3b0a 0a6d 7920 " if $help;..my │ │ │ -00012110: 2463 6f6e 6669 6746 696c 6520 3d20 2443 $configFile = $C │ │ │ -00012120: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00012130: 6974 6850 6172 2827 636f 6e66 6967 4669 ithPar('configFi │ │ │ -00012140: 6c65 2729 3b0a 6d79 2024 6765 6e65 7261 le');.my $genera │ │ │ -00012150: 7465 436f 6e66 6967 4669 6c65 203d 2024 teConfigFile = $ │ │ │ -00012160: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00012170: 5769 7468 5061 7228 2767 656e 6572 6174 WithPar('generat │ │ │ -00012180: 6527 293b 0a6d 7920 2470 7269 6e74 203d e');.my $print = │ │ │ -00012190: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000121a0: 7074 5769 7468 6f75 7450 6172 2827 7072 ptWithoutPar('pr │ │ │ -000121b0: 696e 7427 293b 0a0a 6d79 2024 6261 636b int');..my $back │ │ │ -000121c0: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa │ │ │ -000121d0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -000121e0: 2827 6261 636b 7570 4469 7227 293b 0a6d ('backupDir');.m │ │ │ -000121f0: 7920 2473 6f75 7263 6544 6972 203d 2024 y $sourceDir = $ │ │ │ -00012200: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00012210: 5769 7468 5061 7228 2773 6f75 7263 6544 WithPar('sourceD │ │ │ -00012220: 6972 2729 3b0a 6d79 2024 7365 7269 6573 ir');.my $series │ │ │ -00012230: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00012240: 744f 7074 5769 7468 5061 7228 2773 6572 tOptWithPar('ser │ │ │ -00012250: 6965 7327 293b 0a6d 7920 2463 6865 636b ies');.my $check │ │ │ -00012260: 436f 6d70 7220 3d20 2443 6865 636b 5061 Compr = $CheckPa │ │ │ -00012270: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -00012280: 5061 7228 2763 6865 636b 436f 6d70 7227 Par('checkCompr' │ │ │ -00012290: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch │ │ │ -000122a0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000122b0: 7468 5061 7228 2774 6d70 6469 7227 293b thPar('tmpdir'); │ │ │ -000122c0: 0a24 6c6f 636b 4669 6c65 203d 2024 4368 .$lockFile = $Ch │ │ │ -000122d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000122e0: 7468 5061 7228 276c 6f63 6b46 696c 6527 thPar('lockFile' │ │ │ -000122f0: 293b 0a6d 7920 2475 6e6c 6f63 6b42 6566 );.my $unlockBef │ │ │ -00012300: 6f72 6544 656c 203d 2024 4368 6563 6b50 oreDel = $CheckP │ │ │ -00012310: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00012320: 7228 2775 6e6c 6f63 6b42 6566 6f72 6544 r('unlockBeforeD │ │ │ -00012330: 656c 2729 3b0a 6d79 2024 6578 6365 7074 el');.my $except │ │ │ -00012340: 4469 7273 203d 2024 4368 6563 6b50 6172 Dirs = $CheckPar │ │ │ -00012350: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00012360: 2765 7863 6570 7444 6972 7327 293b 0a6d 'exceptDirs');.m │ │ │ -00012370: 7920 2469 6e63 6c75 6465 4469 7273 203d y $includeDirs = │ │ │ -00012380: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00012390: 7074 5769 7468 5061 7228 2769 6e63 6c75 ptWithPar('inclu │ │ │ -000123a0: 6465 4469 7273 2729 3b0a 6d79 2024 6578 deDirs');.my $ex │ │ │ -000123b0: 6365 7074 5275 6c65 203d 2024 4368 6563 ceptRule = $Chec │ │ │ -000123c0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -000123d0: 5061 7228 2765 7863 6570 7452 756c 6527 Par('exceptRule' │ │ │ -000123e0: 293b 0a6d 7920 2469 6e63 6c75 6465 5275 );.my $includeRu │ │ │ -000123f0: 6c65 203d 2024 4368 6563 6b50 6172 2d3e le = $CheckPar-> │ │ │ -00012400: 6765 744f 7074 5769 7468 5061 7228 2769 getOptWithPar('i │ │ │ -00012410: 6e63 6c75 6465 5275 6c65 2729 3b0a 6d79 ncludeRule');.my │ │ │ -00012420: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo │ │ │ -00012430: 6720 3d20 2443 6865 636b 5061 722d 3e67 g = $CheckPar->g │ │ │ -00012440: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00012450: 2777 7269 7465 4578 636c 7564 654c 6f67 'writeExcludeLog │ │ │ -00012460: 2729 3b0a 6d79 2024 636f 6e74 4578 6365 ');.my $contExce │ │ │ -00012470: 7074 4469 7273 4572 7220 3d20 2443 6865 ptDirsErr = $Che │ │ │ -00012480: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00012490: 686f 7574 5061 7228 2763 6f6e 7445 7863 houtPar('contExc │ │ │ -000124a0: 6570 7444 6972 7345 7272 2729 3b0a 6d79 eptDirsErr');.my │ │ │ -000124b0: 2024 6578 6365 7074 5479 7065 7320 3d20 $exceptTypes = │ │ │ -000124c0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -000124d0: 7457 6974 6850 6172 2827 6578 6365 7074 tWithPar('except │ │ │ -000124e0: 5479 7065 7327 293b 0a24 6578 6365 7074 Types');.$except │ │ │ -000124f0: 5479 7065 7320 3d20 2727 2075 6e6c 6573 Types = '' unles │ │ │ -00012500: 7320 2465 7863 6570 7454 7970 6573 3b0a s $exceptTypes;. │ │ │ -00012510: 6d79 2024 6172 6368 6976 6554 7970 6573 my $archiveTypes │ │ │ -00012520: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00012530: 744f 7074 5769 7468 5061 7228 2761 7263 tOptWithPar('arc │ │ │ -00012540: 6869 7665 5479 7065 7327 293b 0a6d 7920 hiveTypes');.my │ │ │ -00012550: 2473 7065 6369 616c 5479 7065 4172 6368 $specialTypeArch │ │ │ -00012560: 6976 6572 203d 2024 4368 6563 6b50 6172 iver = $CheckPar │ │ │ -00012570: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00012580: 2773 7065 6369 616c 5479 7065 4172 6368 'specialTypeArch │ │ │ -00012590: 6976 6572 2729 3b0a 6d79 2024 676e 7563 iver');.my $gnuc │ │ │ -000125a0: 7020 3d20 2443 6865 636b 5061 722d 3e67 p = $CheckPar->g │ │ │ -000125b0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -000125c0: 2763 7049 7347 6e75 2729 3b0a 6d79 2024 'cpIsGnu');.my $ │ │ │ -000125d0: 6c69 6e6b 5379 6d6c 696e 6b73 203d 2024 linkSymlinks = $ │ │ │ -000125e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000125f0: 5769 7468 6f75 7450 6172 2827 6c69 6e6b WithoutPar('link │ │ │ -00012600: 5379 6d6c 696e 6b73 2729 3b0a 6d79 2024 Symlinks');.my $ │ │ │ -00012610: 7072 6563 6f6d 6d61 6e64 203d 2024 4368 precommand = $Ch │ │ │ -00012620: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00012630: 7468 5061 7228 2770 7265 636f 6d6d 616e thPar('precomman │ │ │ -00012640: 6427 293b 0a6d 7920 2470 6f73 7463 6f6d d');.my $postcom │ │ │ -00012650: 6d61 6e64 203d 2024 4368 6563 6b50 6172 mand = $CheckPar │ │ │ -00012660: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00012670: 2770 6f73 7463 6f6d 6d61 6e64 2729 3b0a 'postcommand');. │ │ │ -00012680: 6d79 2024 666f 6c6c 6f77 4c69 6e6b 7320 my $followLinks │ │ │ -00012690: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000126a0: 4f70 7457 6974 6850 6172 2827 666f 6c6c OptWithPar('foll │ │ │ -000126b0: 6f77 4c69 6e6b 7327 293b 0a6d 7920 2473 owLinks');.my $s │ │ │ -000126c0: 7461 7949 6e46 696c 6553 7973 7465 6d20 tayInFileSystem │ │ │ -000126d0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000126e0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s │ │ │ -000126f0: 7461 7949 6e46 696c 6553 7973 7465 6d27 tayInFileSystem' │ │ │ -00012700: 293b 0a6d 7920 2468 6967 684c 6174 656e );.my $highLaten │ │ │ -00012710: 6379 203d 2024 4368 6563 6b50 6172 2d3e cy = $CheckPar-> │ │ │ -00012720: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -00012730: 2827 6869 6768 4c61 7465 6e63 7927 293b ('highLatency'); │ │ │ -00012740: 0a24 6d61 696e 3a3a 6d69 6e43 6f70 7957 .$main::minCopyW │ │ │ -00012750: 6974 6846 6f72 6b20 3d20 3020 6966 2024 ithFork = 0 if $ │ │ │ -00012760: 6869 6768 4c61 7465 6e63 793b 0a6d 7920 highLatency;.my │ │ │ -00012770: 2469 676e 6f72 6550 6572 6d73 203d 2024 $ignorePerms = $ │ │ │ -00012780: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00012790: 5769 7468 6f75 7450 6172 2827 6967 6e6f WithoutPar('igno │ │ │ -000127a0: 7265 5065 726d 7327 293b 0a6d 7920 2470 rePerms');.my $p │ │ │ -000127b0: 7265 7365 7276 6550 6572 6d73 203d 206e reservePerms = n │ │ │ -000127c0: 6f74 2024 6967 6e6f 7265 5065 726d 733b ot $ignorePerms; │ │ │ -000127d0: 0a6d 7920 246c 6174 654c 696e 6b73 203d .my $lateLinks = │ │ │ -000127e0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000127f0: 7074 5769 7468 6f75 7450 6172 2827 6c61 ptWithoutPar('la │ │ │ -00012800: 7465 4c69 6e6b 7327 293b 0a6d 7920 246c teLinks');.my $l │ │ │ -00012810: 6174 6543 6f6d 7072 6573 7320 3d20 2443 ateCompress = $C │ │ │ -00012820: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00012830: 6974 686f 7574 5061 7228 276c 6174 6543 ithoutPar('lateC │ │ │ -00012840: 6f6d 7072 6573 7327 293b 0a6d 7920 2461 ompress');.my $a │ │ │ -00012850: 7574 6f72 6570 6169 7220 3d20 2443 6865 utorepair = $Che │ │ │ -00012860: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00012870: 686f 7574 5061 7228 2761 7574 6f72 6570 houtPar('autorep │ │ │ -00012880: 6169 7227 293b 0a6d 7920 2463 6865 636b air');.my $check │ │ │ -00012890: 426c 6f63 6b73 5375 6666 6978 203d 2024 BlocksSuffix = $ │ │ │ -000128a0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000128b0: 5769 7468 5061 7228 2263 6865 636b 426c WithPar("checkBl │ │ │ -000128c0: 6f63 6b73 5375 6666 6978 2229 3b0a 6d79 ocksSuffix");.my │ │ │ -000128d0: 2024 6368 6563 6b42 6c6f 636b 7353 7566 $checkBlocksSuf │ │ │ -000128e0: 6669 784d 696e 5369 7a65 203d 2024 4368 fixMinSize = $Ch │ │ │ -000128f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00012900: 7468 5061 7228 2263 6865 636b 426c 6f63 thPar("checkBloc │ │ │ -00012910: 6b73 4d69 6e53 697a 6522 293b 0a6d 7920 ksMinSize");.my │ │ │ -00012920: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff │ │ │ -00012930: 6978 4253 203d 2024 4368 6563 6b50 6172 ixBS = $CheckPar │ │ │ -00012940: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00012950: 2263 6865 636b 426c 6f63 6b73 4253 2229 "checkBlocksBS") │ │ │ -00012960: 3b0a 6d79 2024 6368 6563 6b42 6c6f 636b ;.my $checkBlock │ │ │ -00012970: 7343 6f6d 7072 203d 2024 4368 6563 6b50 sCompr = $CheckP │ │ │ -00012980: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00012990: 7228 2263 6865 636b 426c 6f63 6b73 436f r("checkBlocksCo │ │ │ -000129a0: 6d70 7222 293b 0a6d 7920 2463 6865 636b mpr");.my $check │ │ │ -000129b0: 426c 6f63 6b73 5061 7261 6c6c 656c 203d BlocksParallel = │ │ │ -000129c0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000129d0: 7074 5769 7468 6f75 7450 6172 2822 6368 ptWithoutPar("ch │ │ │ -000129e0: 6563 6b42 6c6f 636b 7350 6172 616c 6c65 eckBlocksParalle │ │ │ -000129f0: 6c22 293b 0a6d 7920 2840 6368 6563 6b42 l");.my (@checkB │ │ │ -00012a00: 6c6f 636b 7352 756c 652c 2040 6368 6563 locksRule, @chec │ │ │ -00012a10: 6b42 6c6f 636b 7342 532c 2040 6368 6563 kBlocksBS, @chec │ │ │ -00012a20: 6b42 6c6f 636b 7343 6f6d 7072 2c20 4063 kBlocksCompr, @c │ │ │ -00012a30: 6865 636b 426c 6f63 6b73 5265 6164 2c0a heckBlocksRead,. │ │ │ -00012a40: 2020 2020 4063 6865 636b 426c 6f63 6b73 @checkBlocks │ │ │ -00012a50: 5061 7261 6c6c 656c 293b 0a7b 0a20 2020 Parallel);.{. │ │ │ -00012a60: 206d 7920 2469 3b0a 2020 2020 666f 7265 my $i;. fore │ │ │ -00012a70: 6163 6820 2469 2028 302e 2e24 6e6f 426c ach $i (0..$noBl │ │ │ -00012a80: 6f63 6b52 756c 6573 2d31 290a 2020 2020 ockRules-1). │ │ │ -00012a90: 7b0a 0970 7573 6820 4063 6865 636b 426c {..push @checkBl │ │ │ -00012aa0: 6f63 6b73 5275 6c65 2c20 2443 6865 636b ocksRule, $Check │ │ │ -00012ab0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00012ac0: 6172 2822 6368 6563 6b42 6c6f 636b 7352 ar("checkBlocksR │ │ │ -00012ad0: 756c 6524 6922 293b 0a09 7075 7368 2040 ule$i");..push @ │ │ │ -00012ae0: 6368 6563 6b42 6c6f 636b 7342 532c 2024 checkBlocksBS, $ │ │ │ -00012af0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00012b00: 5769 7468 5061 7228 2263 6865 636b 426c WithPar("checkBl │ │ │ -00012b10: 6f63 6b73 4253 2469 2229 3b0a 0970 7573 ocksBS$i");..pus │ │ │ -00012b20: 6820 4063 6865 636b 426c 6f63 6b73 436f h @checkBlocksCo │ │ │ -00012b30: 6d70 722c 0a09 2443 6865 636b 5061 722d mpr,..$CheckPar- │ │ │ -00012b40: 3e67 6574 4f70 7457 6974 6850 6172 2822 >getOptWithPar(" │ │ │ -00012b50: 6368 6563 6b42 6c6f 636b 7343 6f6d 7072 checkBlocksCompr │ │ │ -00012b60: 2469 2229 3b0a 0970 7573 6820 4063 6865 $i");..push @che │ │ │ -00012b70: 636b 426c 6f63 6b73 5265 6164 2c20 2443 ckBlocksRead, $C │ │ │ -00012b80: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00012b90: 6974 6850 6172 2822 6368 6563 6b42 6c6f ithPar("checkBlo │ │ │ -00012ba0: 636b 7352 6561 6424 6922 293b 0a09 7075 cksRead$i");..pu │ │ │ -00012bb0: 7368 2040 6368 6563 6b42 6c6f 636b 7350 sh @checkBlocksP │ │ │ -00012bc0: 6172 616c 6c65 6c2c 0a09 2443 6865 636b arallel,..$Check │ │ │ -00012bd0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00012be0: 7574 5061 7228 2263 6865 636b 426c 6f63 utPar("checkBloc │ │ │ -00012bf0: 6b73 5061 7261 6c6c 656c 2469 2229 3b0a ksParallel$i");. │ │ │ -00012c00: 2020 2020 7d0a 7d0a 0a6d 7920 4063 686b }.}..my @chk │ │ │ -00012c10: 6465 7673 3b0a 6d79 2024 6368 6b64 6576 devs;.my $chkdev │ │ │ -00012c20: 7344 6972 3b0a 6d79 2024 6368 6b64 6576 sDir;.my $chkdev │ │ │ -00012c30: 7342 533b 0a6d 7920 2463 686b 6465 7673 sBS;.my $chkdevs │ │ │ -00012c40: 436f 6d70 723b 0a6d 7920 2463 686b 6465 Compr;.my $chkde │ │ │ -00012c50: 7673 5061 7261 6c6c 656c 3b0a 0a6d 7920 vsParallel;..my │ │ │ -00012c60: 2840 6368 6563 6b44 6576 6963 6573 2920 (@checkDevices) │ │ │ -00012c70: 3d20 2829 3b0a 6d79 2028 4063 6865 636b = ();.my (@check │ │ │ -00012c80: 4465 7669 6365 7344 6972 2920 3d20 2829 DevicesDir) = () │ │ │ -00012c90: 3b0a 6d79 2028 4063 6865 636b 4465 7669 ;.my (@checkDevi │ │ │ -00012ca0: 6365 7342 5329 203d 2028 293b 0a6d 7920 cesBS) = ();.my │ │ │ -00012cb0: 2840 6368 6563 6b44 6576 6963 6573 436f (@checkDevicesCo │ │ │ -00012cc0: 6d70 7229 203d 2028 293b 0a6d 7920 2840 mpr) = ();.my (@ │ │ │ -00012cd0: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara │ │ │ -00012ce0: 6c6c 656c 2920 3d20 2829 3b0a 6d79 2028 llel) = ();.my ( │ │ │ -00012cf0: 4063 6865 636b 4465 7669 6365 7349 6e64 @checkDevicesInd │ │ │ -00012d00: 6578 2920 3d20 2829 3b0a 7b20 2020 2020 ex) = ();.{ │ │ │ -00012d10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00012d20: 2020 2020 2020 2020 2020 2020 2023 2323 ### │ │ │ -00012d30: 2320 6e65 7565 2042 6572 6563 686e 756e # neue Berechnun │ │ │ -00012d40: 670a 2020 2020 666f 7220 286d 7920 2469 g. for (my $i │ │ │ -00012d50: 203d 2030 203b 2024 6920 3c20 246d 6169 = 0 ; $i < $mai │ │ │ -00012d60: 6e3a 3a6e 6f42 6c6f 636b 4465 7669 6365 n::noBlockDevice │ │ │ -00012d70: 7320 3b20 2469 2b2b 290a 2020 2020 7b0a s ; $i++). {. │ │ │ -00012d80: 0923 2052 6561 6420 7661 6c75 6573 2066 .# Read values f │ │ │ -00012d90: 726f 6d20 636f 6e66 6967 7572 6174 696f rom configuratio │ │ │ -00012da0: 6e63 6f6d 6d61 6e64 206c 696e 650a 096d ncommand line..m │ │ │ -00012db0: 7920 2478 203d 2024 4368 6563 6b50 6172 y $x = $CheckPar │ │ │ -00012dc0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00012dd0: 2263 6865 636b 4465 7669 6365 7324 6922 "checkDevices$i" │ │ │ -00012de0: 293b 0a09 6d79 2040 6368 6b64 6576 7320 );..my @chkdevs │ │ │ -00012df0: 3d20 6465 6669 6e65 6428 2478 2920 3f20 = defined($x) ? │ │ │ -00012e00: 4024 7820 3a20 2829 3b0a 0924 6368 6b64 @$x : ();..$chkd │ │ │ -00012e10: 6576 7344 6972 3d20 2443 6865 636b 5061 evsDir= $CheckPa │ │ │ -00012e20: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00012e30: 2822 6368 6563 6b44 6576 6963 6573 4469 ("checkDevicesDi │ │ │ -00012e40: 7224 6922 293b 0a23 0924 7820 3d20 2443 r$i");.#.$x = $C │ │ │ -00012e50: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00012e60: 6974 6850 6172 2822 6368 6563 6b44 6576 ithPar("checkDev │ │ │ -00012e70: 6963 6573 4469 7224 6922 293b 0a23 096d icesDir$i");.#.m │ │ │ -00012e80: 7920 2463 686b 6465 7673 4469 7220 3d20 y $chkdevsDir = │ │ │ -00012e90: 6465 6669 6e65 6428 2478 2920 3f20 2424 defined($x) ? $$ │ │ │ -00012ea0: 785b 305d 203a 2022 223b 2020 2320 7767 x[0] : ""; # wg │ │ │ -00012eb0: 2e20 6d75 6c74 6970 6c65 0a09 6d79 2024 . multiple..my $ │ │ │ -00012ec0: 6368 6b64 6576 7342 5320 3d20 2443 6865 chkdevsBS = $Che │ │ │ -00012ed0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00012ee0: 6850 6172 2822 6368 6563 6b44 6576 6963 hPar("checkDevic │ │ │ -00012ef0: 6573 4253 2469 2229 3b0a 096d 7920 2463 esBS$i");..my $c │ │ │ -00012f00: 686b 6465 7673 436f 6d70 7220 3d0a 0920 hkdevsCompr =.. │ │ │ -00012f10: 2020 2024 4368 6563 6b50 6172 2d3e 6765 $CheckPar->ge │ │ │ -00012f20: 744f 7074 5769 7468 5061 7228 2263 6865 tOptWithPar("che │ │ │ -00012f30: 636b 4465 7669 6365 7343 6f6d 7072 2469 ckDevicesCompr$i │ │ │ -00012f40: 2229 3b0a 096d 7920 2463 686b 6465 7673 ");..my $chkdevs │ │ │ -00012f50: 5061 7261 6c6c 656c 203d 200a 0920 2020 Parallel = .. │ │ │ -00012f60: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00012f70: 7074 5769 7468 6f75 7450 6172 2822 6368 ptWithoutPar("ch │ │ │ -00012f80: 6563 6b44 6576 6963 6573 5061 7261 6c6c eckDevicesParall │ │ │ -00012f90: 656c 2469 2229 3b0a 0924 6368 6b64 6576 el$i");..$chkdev │ │ │ -00012fa0: 7350 6172 616c 6c65 6c20 3d20 2463 686b sParallel = $chk │ │ │ -00012fb0: 6465 7673 5061 7261 6c6c 656c 203f 2031 devsParallel ? 1 │ │ │ -00012fc0: 203a 2030 3b0a 0a09 2463 686b 6465 7673 : 0;...$chkdevs │ │ │ -00012fd0: 4253 203d 2028 263a 3a72 6576 6572 7448 BS = (&::revertH │ │ │ -00012fe0: 756d 616e 5265 6164 6162 6c65 2824 6368 umanReadable($ch │ │ │ -00012ff0: 6b64 6576 7342 5329 295b 305d 3b0a 090a kdevsBS))[0];... │ │ │ -00013000: 0966 6f72 2028 6d79 2024 6a20 3d20 3020 .for (my $j = 0 │ │ │ -00013010: 3b20 246a 203c 2040 6368 6b64 6576 7320 ; $j < @chkdevs │ │ │ -00013020: 3b20 246a 2b2b 290a 097b 0a09 2020 2020 ; $j++)..{.. │ │ │ -00013030: 7075 7368 2040 6368 6563 6b44 6576 6963 push @checkDevic │ │ │ -00013040: 6573 2c24 6368 6b64 6576 735b 246a 5d3b es,$chkdevs[$j]; │ │ │ -00013050: 0a09 2020 2020 7075 7368 2040 6368 6563 .. push @chec │ │ │ -00013060: 6b44 6576 6963 6573 4469 722c 2024 6368 kDevicesDir, $ch │ │ │ -00013070: 6b64 6576 7344 6972 3b0a 0920 2020 2070 kdevsDir;.. p │ │ │ -00013080: 7573 6820 4063 6865 636b 4465 7669 6365 ush @checkDevice │ │ │ -00013090: 7342 532c 2463 686b 6465 7673 4253 3b0a sBS,$chkdevsBS;. │ │ │ -000130a0: 0920 2020 2070 7573 6820 4063 6865 636b . push @check │ │ │ -000130b0: 4465 7669 6365 7343 6f6d 7072 2c20 2463 DevicesCompr, $c │ │ │ -000130c0: 686b 6465 7673 436f 6d70 723b 0a09 2020 hkdevsCompr;.. │ │ │ -000130d0: 2020 7075 7368 2040 6368 6563 6b44 6576 push @checkDev │ │ │ -000130e0: 6963 6573 5061 7261 6c6c 656c 2c20 2463 icesParallel, $c │ │ │ -000130f0: 686b 6465 7673 5061 7261 6c6c 656c 3b3b hkdevsParallel;; │ │ │ -00013100: 0a09 2020 2020 7075 7368 2040 6368 6563 .. push @chec │ │ │ -00013110: 6b44 6576 6963 6573 496e 6465 782c 2024 kDevicesIndex, $ │ │ │ -00013120: 693b 0a09 7d0a 2020 2020 7d0a 7d0a 2370 i;..}. }.}.#p │ │ │ -00013130: 7269 6e74 2022 2d2d 2d2d 2d2d 2d2d 2d2d rint "---------- │ │ │ -00013140: 2d44 4556 4943 4553 2d2d 2d2d 2d2d 2d2d -DEVICES-------- │ │ │ -00013150: 2d2d 2d2d 2d2d 2d5c 6e22 3b0a 2370 7269 -------\n";.#pri │ │ │ -00013160: 6e74 206a 6f69 6e28 225c 7422 2c20 4063 nt join("\t", @c │ │ │ -00013170: 6865 636b 4465 7669 6365 7329 2c20 225c heckDevices), "\ │ │ │ -00013180: 746e 6577 5c6e 223b 0a23 7072 696e 7420 tnew\n";.#print │ │ │ -00013190: 6a6f 696e 2822 5c74 222c 2040 6368 6563 join("\t", @chec │ │ │ -000131a0: 6b44 6576 6963 6573 4469 7229 2c20 225c kDevicesDir), "\ │ │ │ -000131b0: 745c 746e 6577 5c6e 223b 0a23 7072 696e t\tnew\n";.#prin │ │ │ -000131c0: 7420 6a6f 696e 2822 5c74 5c74 222c 2040 t join("\t\t", @ │ │ │ -000131d0: 6368 6563 6b44 6576 6963 6573 4253 292c checkDevicesBS), │ │ │ -000131e0: 225c 745c 746e 6577 5c6e 223b 0a23 7072 "\t\tnew\n";.#pr │ │ │ -000131f0: 696e 7420 6a6f 696e 2822 5c74 5c74 222c int join("\t\t", │ │ │ -00013200: 2040 6368 6563 6b44 6576 6963 6573 436f @checkDevicesCo │ │ │ -00013210: 6d70 7229 2c20 225c 745c 746e 6577 5c6e mpr), "\t\tnew\n │ │ │ -00013220: 223b 0a23 7072 696e 7420 6a6f 696e 2822 ";.#print join(" │ │ │ -00013230: 5c74 5c74 222c 2040 6368 6563 6b44 6576 \t\t", @checkDev │ │ │ -00013240: 6963 6573 5061 7261 6c6c 656c 292c 2022 icesParallel), " │ │ │ -00013250: 5c74 5c74 6e65 775c 6e22 3b0a 2370 7269 \t\tnew\n";.#pri │ │ │ -00013260: 6e74 206a 6f69 6e28 225c 745c 7422 2c20 nt join("\t\t", │ │ │ -00013270: 4063 6865 636b 4465 7669 6365 7349 6e64 @checkDevicesInd │ │ │ -00013280: 6578 292c 2022 5c74 5c74 6e65 775c 6e22 ex), "\t\tnew\n" │ │ │ -00013290: 3b0a 0a0a 2370 7269 6e74 2022 2d2d 2d2d ;...#print "---- │ │ │ -000132a0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ---------------- │ │ │ -000132b0: 2d2d 2d2d 2d2d 5c6e 223b 0a23 7072 696e ------\n";.#prin │ │ │ -000132c0: 7420 2231 2063 6865 636b 4465 7669 6365 t "1 checkDevice │ │ │ -000132d0: 7320 3d20 4063 6865 636b 4465 7669 6365 s = @checkDevice │ │ │ -000132e0: 735c 6e22 3b0a 2370 7269 6e74 2022 3120 s\n";.#print "1 │ │ │ -000132f0: 6368 6563 6b44 6576 6963 6573 4469 7220 checkDevicesDir │ │ │ -00013300: 3d20 4063 6865 636b 4465 7669 6365 7344 = @checkDevicesD │ │ │ -00013310: 6972 5c6e 223b 0a23 7072 696e 7420 2231 ir\n";.#print "1 │ │ │ -00013320: 2063 6865 636b 4465 7669 6365 7342 5320 checkDevicesBS │ │ │ -00013330: 3d20 4063 6865 636b 4465 7669 6365 7342 = @checkDevicesB │ │ │ -00013340: 535c 6e22 3b0a 2370 7269 6e74 2022 3120 S\n";.#print "1 │ │ │ -00013350: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp │ │ │ -00013360: 7220 3d20 4063 6865 636b 4465 7669 6365 r = @checkDevice │ │ │ -00013370: 7343 6f6d 7072 5c6e 223b 0a23 7072 696e sCompr\n";.#prin │ │ │ -00013380: 7420 2231 2063 6865 636b 4465 7669 6365 t "1 checkDevice │ │ │ -00013390: 7350 6172 616c 6c65 6c20 3d20 4063 6865 sParallel = @che │ │ │ -000133a0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ -000133b0: 6c5c 6e22 3b0a 2370 7269 6e74 2022 3120 l\n";.#print "1 │ │ │ -000133c0: 6368 6563 6b44 6576 6963 6573 496e 6465 checkDevicesInde │ │ │ -000133d0: 7820 3d20 4063 6865 636b 4465 7669 6365 x = @checkDevice │ │ │ -000133e0: 7349 6e64 6578 5c6e 223b 0a0a 2471 7565 sIndex\n";..$que │ │ │ -000133f0: 7565 426c 6f63 6b20 3d20 2443 6865 636b ueBlock = $Check │ │ │ -00013400: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00013410: 6172 2827 7175 6575 6542 6c6f 636b 2729 ar('queueBlock') │ │ │ -00013420: 3b0a 6d79 2024 7361 7665 5241 4d20 3d20 ;.my $saveRAM = │ │ │ -00013430: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00013440: 7457 6974 686f 7574 5061 7228 2773 6176 tWithoutPar('sav │ │ │ -00013450: 6552 414d 2729 3b0a 6d79 2024 636f 6d70 eRAM');.my $comp │ │ │ -00013460: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar │ │ │ -00013470: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00013480: 2763 6f6d 7072 6573 7327 293b 0a6d 7920 'compress');.my │ │ │ -00013490: 2475 6e63 6f6d 7072 6573 7320 3d20 2443 $uncompress = $C │ │ │ -000134a0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -000134b0: 6974 6850 6172 2827 756e 636f 6d70 7265 ithPar('uncompre │ │ │ -000134c0: 7373 2729 3b0a 2470 6f73 7466 6978 203d ss');.$postfix = │ │ │ -000134d0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000134e0: 7074 5769 7468 5061 7228 2770 6f73 7466 ptWithPar('postf │ │ │ -000134f0: 6978 2729 3b0a 6d79 2024 6e6f 436f 6d70 ix');.my $noComp │ │ │ -00013500: 7265 7373 203d 2024 4368 6563 6b50 6172 ress = $CheckPar │ │ │ -00013510: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00013520: 276e 6f43 6f6d 7072 6573 7327 293b 0a24 'noCompress');.$ │ │ │ -00013530: 7175 6575 6543 6f6d 7072 6573 7320 3d20 queueCompress = │ │ │ -00013540: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00013550: 7457 6974 6850 6172 2827 7175 6575 6543 tWithPar('queueC │ │ │ -00013560: 6f6d 7072 6573 7327 293b 0a24 6e6f 436f ompress');.$noCo │ │ │ -00013570: 7079 203d 2024 4368 6563 6b50 6172 2d3e py = $CheckPar-> │ │ │ -00013580: 6765 744f 7074 5769 7468 5061 7228 276e getOptWithPar('n │ │ │ -00013590: 6f43 6f70 7927 293b 0a24 7175 6575 6543 oCopy');.$queueC │ │ │ -000135a0: 6f70 7920 3d20 2443 6865 636b 5061 722d opy = $CheckPar- │ │ │ -000135b0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -000135c0: 7175 6575 6543 6f70 7927 293b 0a6d 7920 queueCopy');.my │ │ │ -000135d0: 2463 6f70 7942 574c 696d 6974 203d 2024 $copyBWLimit = $ │ │ │ -000135e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000135f0: 5769 7468 5061 7228 2763 6f70 7942 574c WithPar('copyBWL │ │ │ -00013600: 696d 6974 2729 3b0a 6d79 2024 7769 7468 imit');.my $with │ │ │ -00013610: 5573 6572 4772 6f75 7053 7461 7420 3d20 UserGroupStat = │ │ │ -00013620: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00013630: 7457 6974 686f 7574 5061 7228 2777 6974 tWithoutPar('wit │ │ │ -00013640: 6855 7365 7247 726f 7570 5374 6174 2729 hUserGroupStat') │ │ │ -00013650: 3b0a 6d79 2024 7573 6572 4772 6f75 7053 ;.my $userGroupS │ │ │ -00013660: 7461 7446 696c 6520 3d20 2443 6865 636b tatFile = $Check │ │ │ -00013670: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00013680: 6172 2827 7573 6572 4772 6f75 7053 7461 ar('userGroupSta │ │ │ -00013690: 7446 696c 6527 293b 0a6d 7920 2465 7863 tFile');.my $exc │ │ │ -000136a0: 6570 7453 7566 6669 7820 3d20 2443 6865 eptSuffix = $Che │ │ │ -000136b0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -000136c0: 6850 6172 2827 6578 6365 7074 5375 6666 hPar('exceptSuff │ │ │ -000136d0: 6978 2729 3b0a 6d79 2024 636f 6d70 7265 ix');.my $compre │ │ │ -000136e0: 7373 5375 6666 6978 203d 2024 4368 6563 ssSuffix = $Chec │ │ │ -000136f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00013700: 5061 7228 2763 6f6d 7072 6573 7353 7566 Par('compressSuf │ │ │ -00013710: 6669 7827 293b 0a6d 7920 2461 6464 4578 fix');.my $addEx │ │ │ -00013720: 6365 7074 5375 6666 6978 203d 2024 4368 ceptSuffix = $Ch │ │ │ -00013730: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00013740: 7468 5061 7228 2761 6464 4578 6365 7074 thPar('addExcept │ │ │ -00013750: 5375 6666 6978 2729 3b0a 246d 696e 436f Suffix');.$minCo │ │ │ -00013760: 6d70 7265 7373 5369 7a65 203d 2024 4368 mpressSize = $Ch │ │ │ -00013770: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00013780: 7468 5061 7228 276d 696e 436f 6d70 7265 thPar('minCompre │ │ │ -00013790: 7373 5369 7a65 2729 3b0a 6d79 2024 636f ssSize');.my $co │ │ │ -000137a0: 6d70 7252 756c 6520 3d20 2443 6865 636b mprRule = $Check │ │ │ -000137b0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -000137c0: 6172 2827 636f 6d70 7252 756c 6527 293b ar('comprRule'); │ │ │ -000137d0: 0a6d 7920 2463 6f6d 7072 6573 734d 4435 .my $compressMD5 │ │ │ -000137e0: 4669 6c65 203d 2024 4368 6563 6b50 6172 File = $CheckPar │ │ │ -000137f0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00013800: 6172 2827 646f 4e6f 7443 6f6d 7072 6573 ar('doNotCompres │ │ │ -00013810: 734d 4435 4669 6c65 2729 0a20 2020 203f sMD5File'). ? │ │ │ -00013820: 2027 6e6f 2720 3a20 2779 6573 273b 0a24 'no' : 'yes';.$ │ │ │ -00013830: 6368 6d6f 644d 4435 4669 6c65 203d 2024 chmodMD5File = $ │ │ │ -00013840: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00013850: 5769 7468 5061 7228 2763 686d 6f64 4d44 WithPar('chmodMD │ │ │ -00013860: 3546 696c 6527 293b 0a6d 7920 2476 6572 5File');.my $ver │ │ │ -00013870: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar │ │ │ -00013880: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00013890: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m │ │ │ -000138a0: 7920 2464 6562 7567 203d 2024 4368 6563 y $debug = $Chec │ │ │ -000138b0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -000138c0: 5061 7228 2764 6562 7567 2729 3b0a 6d79 Par('debug');.my │ │ │ -000138d0: 2024 7265 7365 7441 7469 6d65 203d 2024 $resetAtime = $ │ │ │ -000138e0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000138f0: 5769 7468 6f75 7450 6172 2827 7265 7365 WithoutPar('rese │ │ │ -00013900: 7441 7469 6d65 2729 3b0a 6d79 2024 646f tAtime');.my $do │ │ │ -00013910: 4e6f 7444 656c 6574 6520 3d20 2443 6865 NotDelete = $Che │ │ │ -00013920: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00013930: 686f 7574 5061 7228 2764 6f4e 6f74 4465 houtPar('doNotDe │ │ │ -00013940: 6c65 7465 2729 3b0a 6d79 2024 6465 6c65 lete');.my $dele │ │ │ -00013950: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir │ │ │ -00013960: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g │ │ │ -00013970: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00013980: 2764 656c 6574 654e 6f74 4669 6e69 7368 'deleteNotFinish │ │ │ -00013990: 6564 4469 7273 2729 3b0a 6d79 2024 6d61 edDirs');.my $ma │ │ │ -000139a0: 7848 6172 644c 696e 6b73 203d 2024 4368 xHardLinks = $Ch │ │ │ -000139b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000139c0: 7468 5061 7228 276d 6178 4861 7264 4c69 thPar('maxHardLi │ │ │ -000139d0: 6e6b 7327 293b 0a24 6b65 6570 416c 6c20 nks');.$keepAll │ │ │ -000139e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000139f0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ -00013a00: 416c 6c27 293b 0a6d 7920 246b 6565 7057 All');.my $keepW │ │ │ -00013a10: 6565 6b64 6179 203d 2024 4368 6563 6b50 eekday = $CheckP │ │ │ -00013a20: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00013a30: 7228 276b 6565 7057 6565 6b64 6179 2729 r('keepWeekday') │ │ │ -00013a40: 3b0a 246b 6565 7057 6565 6b64 6179 203d ;.$keepWeekday = │ │ │ -00013a50: 2022 4024 6b65 6570 5765 656b 6461 7922 "@$keepWeekday" │ │ │ -00013a60: 2069 6620 6465 6669 6e65 6420 246b 6565 if defined $kee │ │ │ -00013a70: 7057 6565 6b64 6179 3b0a 6d79 2024 6b65 pWeekday;.my $ke │ │ │ -00013a80: 6570 4669 7273 744f 6659 6561 7220 3d20 epFirstOfYear = │ │ │ -00013a90: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00013aa0: 7457 6974 6850 6172 2827 6b65 6570 4669 tWithPar('keepFi │ │ │ -00013ab0: 7273 744f 6659 6561 7227 293b 0a6d 7920 rstOfYear');.my │ │ │ -00013ac0: 246b 6565 704c 6173 744f 6659 6561 7220 $keepLastOfYear │ │ │ -00013ad0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00013ae0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ -00013af0: 4c61 7374 4f66 5965 6172 2729 3b0a 6d79 LastOfYear');.my │ │ │ -00013b00: 2024 6b65 6570 4669 7273 744f 664d 6f6e $keepFirstOfMon │ │ │ -00013b10: 7468 203d 2024 4368 6563 6b50 6172 2d3e th = $CheckPar-> │ │ │ -00013b20: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k │ │ │ -00013b30: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth' │ │ │ -00013b40: 293b 0a6d 7920 246b 6565 704c 6173 744f );.my $keepLastO │ │ │ -00013b50: 664d 6f6e 7468 203d 2024 4368 6563 6b50 fMonth = $CheckP │ │ │ -00013b60: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00013b70: 7228 276b 6565 704c 6173 744f 664d 6f6e r('keepLastOfMon │ │ │ -00013b80: 7468 2729 3b0a 6d79 2024 6669 7273 7444 th');.my $firstD │ │ │ -00013b90: 6179 4f66 5765 656b 203d 2024 4368 6563 ayOfWeek = $Chec │ │ │ -00013ba0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00013bb0: 5061 7228 2766 6972 7374 4461 794f 6657 Par('firstDayOfW │ │ │ -00013bc0: 6565 6b27 293b 0a6d 7920 246b 6565 7046 eek');.my $keepF │ │ │ -00013bd0: 6972 7374 4f66 5765 656b 203d 2024 4368 irstOfWeek = $Ch │ │ │ -00013be0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00013bf0: 7468 5061 7228 276b 6565 7046 6972 7374 thPar('keepFirst │ │ │ -00013c00: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke │ │ │ -00013c10: 6570 4c61 7374 4f66 5765 656b 203d 2024 epLastOfWeek = $ │ │ │ -00013c20: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00013c30: 5769 7468 5061 7228 276b 6565 704c 6173 WithPar('keepLas │ │ │ -00013c40: 744f 6657 6565 6b27 293b 0a24 6b65 6570 tOfWeek');.$keep │ │ │ -00013c50: 4475 706c 6963 6174 6520 3d20 2443 6865 Duplicate = $Che │ │ │ -00013c60: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00013c70: 6850 6172 2827 6b65 6570 4475 706c 6963 hPar('keepDuplic │ │ │ -00013c80: 6174 6527 293b 0a6d 7920 246b 6565 704d ate');.my $keepM │ │ │ -00013c90: 696e 4e75 6d62 6572 203d 2024 4368 6563 inNumber = $Chec │ │ │ -00013ca0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00013cb0: 5061 7228 276b 6565 704d 696e 4e75 6d62 Par('keepMinNumb │ │ │ -00013cc0: 6572 2729 3b0a 6d79 2024 6b65 6570 4d61 er');.my $keepMa │ │ │ -00013cd0: 784e 756d 6265 7220 3d20 2443 6865 636b xNumber = $Check │ │ │ -00013ce0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00013cf0: 6172 2827 6b65 6570 4d61 784e 756d 6265 ar('keepMaxNumbe │ │ │ -00013d00: 7227 293b 0a6d 7920 246b 6565 7052 656c r');.my $keepRel │ │ │ -00013d10: 6174 6976 6520 3d20 2443 6865 636b 5061 ative = $CheckPa │ │ │ -00013d20: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00013d30: 2827 6b65 6570 5265 6c61 7469 7665 2729 ('keepRelative') │ │ │ -00013d40: 3b0a 6d79 2024 6967 6e6f 7265 5265 6164 ;.my $ignoreRead │ │ │ -00013d50: 4572 726f 7220 3d20 2443 6865 636b 5061 Error = $CheckPa │ │ │ -00013d60: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -00013d70: 5061 7228 2769 676e 6f72 6552 6561 6445 Par('ignoreReadE │ │ │ -00013d80: 7272 6f72 2729 3b0a 6d79 2024 7375 7070 rror');.my $supp │ │ │ -00013d90: 7265 7373 5761 726e 696e 6720 3d20 2443 ressWarning = $C │ │ │ -00013da0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00013db0: 6974 6850 6172 2827 7375 7070 7265 7373 ithPar('suppress │ │ │ -00013dc0: 5761 726e 696e 6727 293b 0a6d 7920 2473 Warning');.my $s │ │ │ -00013dd0: 7570 7072 6573 7349 6e66 6f20 3d20 2443 uppressInfo = $C │ │ │ -00013de0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00013df0: 6974 6850 6172 2827 7375 7070 7265 7373 ithPar('suppress │ │ │ -00013e00: 496e 666f 2729 3b0a 6d79 2024 6c69 6e6b Info');.my $link │ │ │ -00013e10: 546f 5265 6365 6e74 203d 2024 4368 6563 ToRecent = $Chec │ │ │ -00013e20: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00013e30: 5061 7228 276c 696e 6b54 6f52 6563 656e Par('linkToRecen │ │ │ -00013e40: 7427 293b 0a6d 7920 246c 6f67 4669 6c65 t');.my $logFile │ │ │ -00013e50: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00013e60: 744f 7074 5769 7468 5061 7228 276c 6f67 tOptWithPar('log │ │ │ -00013e70: 4669 6c65 2729 3b0a 6d79 2024 706c 7573 File');.my $plus │ │ │ -00013e80: 4c6f 6753 7464 6f75 7420 3d20 2443 6865 LogStdout = $Che │ │ │ -00013e90: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00013ea0: 686f 7574 5061 7228 2770 6c75 734c 6f67 houtPar('plusLog │ │ │ -00013eb0: 5374 646f 7574 2729 3b0a 6d79 2024 7769 Stdout');.my $wi │ │ │ -00013ec0: 7468 5469 6d65 203d 206e 6f74 2024 4368 thTime = not $Ch │ │ │ -00013ed0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00013ee0: 7468 6f75 7450 6172 2827 7375 7070 7265 thoutPar('suppre │ │ │ -00013ef0: 7373 5469 6d65 2729 3b0a 2477 6974 6854 ssTime');.$withT │ │ │ -00013f00: 696d 6520 3d20 2477 6974 6854 696d 6520 ime = $withTime │ │ │ -00013f10: 3f20 2779 6573 2720 3a20 276e 6f27 3b0a ? 'yes' : 'no';. │ │ │ -00013f20: 6d79 2024 6d61 7846 696c 656c 656e 203d my $maxFilelen = │ │ │ -00013f30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00013f40: 7074 5769 7468 5061 7228 276d 6178 4669 ptWithPar('maxFi │ │ │ -00013f50: 6c65 6c65 6e27 293b 0a6d 7920 246e 6f4f lelen');.my $noO │ │ │ -00013f60: 664f 6c64 4669 6c65 7320 3d20 2443 6865 fOldFiles = $Che │ │ │ -00013f70: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00013f80: 6850 6172 2827 6e6f 4f66 4f6c 6446 696c hPar('noOfOldFil │ │ │ -00013f90: 6573 2729 3b0a 6d79 2024 7361 7665 4c6f es');.my $saveLo │ │ │ -00013fa0: 6773 203d 2024 4368 6563 6b50 6172 2d3e gs = $CheckPar-> │ │ │ -00013fb0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -00013fc0: 2827 7361 7665 4c6f 6773 2729 203f 2027 ('saveLogs') ? ' │ │ │ -00013fd0: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my │ │ │ -00013fe0: 2463 6f6d 7072 6573 7357 6974 6820 3d20 $compressWith = │ │ │ -00013ff0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00014000: 7457 6974 6850 6172 2827 636f 6d70 7265 tWithPar('compre │ │ │ -00014010: 7373 5769 7468 2729 3b0a 6d79 2024 6c6f ssWith');.my $lo │ │ │ -00014020: 6749 6e42 6163 6b75 7044 6972 203d 2024 gInBackupDir = $ │ │ │ -00014030: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00014040: 5769 7468 6f75 7450 6172 2827 6c6f 6749 WithoutPar('logI │ │ │ -00014050: 6e42 6163 6b75 7044 6972 2729 3b0a 6d79 nBackupDir');.my │ │ │ -00014060: 2024 636f 6d70 7265 7373 4c6f 6749 6e42 $compressLogInB │ │ │ -00014070: 6163 6b75 7044 6972 203d 0a20 2443 6865 ackupDir =. $Che │ │ │ -00014080: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00014090: 686f 7574 5061 7228 2763 6f6d 7072 6573 houtPar('compres │ │ │ -000140a0: 734c 6f67 496e 4261 636b 7570 4469 7227 sLogInBackupDir' │ │ │ -000140b0: 293b 0a24 6c6f 6749 6e42 6163 6b75 7044 );.$logInBackupD │ │ │ -000140c0: 6972 4669 6c65 4e61 6d65 203d 0a20 2443 irFileName =. $C │ │ │ -000140d0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -000140e0: 6974 6850 6172 2827 6c6f 6749 6e42 6163 ithPar('logInBac │ │ │ -000140f0: 6b75 7044 6972 4669 6c65 4e61 6d65 2729 kupDirFileName') │ │ │ -00014100: 3b0a 6d79 2024 7072 6f67 7265 7373 5265 ;.my $progressRe │ │ │ -00014110: 706f 7274 203d 2024 4368 6563 6b50 6172 port = $CheckPar │ │ │ -00014120: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00014130: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport' │ │ │ -00014140: 293b 0a6d 7920 2470 7269 6e74 4465 7074 );.my $printDept │ │ │ -00014150: 6820 3d20 2443 6865 636b 5061 722d 3e67 h = $CheckPar->g │ │ │ -00014160: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00014170: 2770 7269 6e74 4465 7074 6827 293b 0a24 'printDepth');.$ │ │ │ -00014180: 7072 696e 7444 6570 7468 203d 2024 7072 printDepth = $pr │ │ │ -00014190: 696e 7444 6570 7468 203f 2027 7965 7327 intDepth ? 'yes' │ │ │ -000141a0: 203a 2027 6e6f 273b 0a6d 7920 2840 6f74 : 'no';.my (@ot │ │ │ -000141b0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries) │ │ │ -000141c0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -000141d0: 744c 6973 7450 6172 2829 3b0a 2320 6869 tListPar();.# hi │ │ │ -000141e0: 6464 656e 206f 7074 696f 6e73 0a6d 7920 dden options.my │ │ │ -000141f0: 2470 7269 6e74 416c 6c20 3d20 2443 6865 $printAll = $Che │ │ │ -00014200: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00014210: 686f 7574 5061 7228 2770 7269 6e74 416c houtPar('printAl │ │ │ -00014220: 6c27 293b 0a24 7072 696e 7420 3d20 3120 l');.$print = 1 │ │ │ -00014230: 6966 2024 7072 696e 7441 6c6c 3b0a 6d79 if $printAll;.my │ │ │ -00014240: 2024 6d69 6e42 6c6f 636b 4c65 6e67 7468 $minBlockLength │ │ │ -00014250: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00014260: 744f 7074 5769 7468 5061 7228 276d 696e tOptWithPar('min │ │ │ -00014270: 426c 6f63 6b4c 656e 6774 6827 293b 0a6d BlockLength');.m │ │ │ -00014280: 7920 2474 6f64 6179 4f70 7420 3d20 2443 y $todayOpt = $C │ │ │ -00014290: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -000142a0: 6974 6850 6172 2827 746f 6461 794f 7074 ithPar('todayOpt │ │ │ -000142b0: 2729 3b20 2023 2066 6f72 6d61 7420 6c69 '); # format li │ │ │ -000142c0: 6b65 0a20 2020 2020 2020 2020 2020 2020 ke. │ │ │ -000142d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000142e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000142f0: 2020 2020 2020 2020 2023 2062 6163 6b75 # backu │ │ │ -00014300: 7020 6469 7220 6e61 6d65 0a6d 7920 2469 p dir name.my $i │ │ │ -00014310: 676e 6f72 6554 696d 6520 3d20 2443 6865 gnoreTime = $Che │ │ │ -00014320: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00014330: 6850 6172 2827 6967 6e6f 7265 5469 6d65 hPar('ignoreTime │ │ │ -00014340: 2729 3b0a 6d79 2024 7374 6f70 4166 7465 ');.my $stopAfte │ │ │ -00014350: 724e 6f52 6561 6445 7272 6f72 7320 3d0a rNoReadErrors =. │ │ │ -00014360: 2020 2020 2443 6865 636b 5061 722d 3e67 $CheckPar->g │ │ │ -00014370: 6574 4f70 7457 6974 6850 6172 2827 7374 etOptWithPar('st │ │ │ -00014380: 6f70 4166 7465 724e 6f52 6561 6445 7272 opAfterNoReadErr │ │ │ -00014390: 6f72 7327 293b 0a6d 7920 2469 6e74 6572 ors');.my $inter │ │ │ -000143a0: 6e61 6c50 6970 6542 7566 5369 7a65 203d nalPipeBufSize = │ │ │ -000143b0: 0a20 2020 2024 4368 6563 6b50 6172 2d3e . $CheckPar-> │ │ │ -000143c0: 6765 744f 7074 5769 7468 5061 7228 2769 getOptWithPar('i │ │ │ -000143d0: 6e74 6572 6e61 6c50 6970 6542 7566 5369 nternalPipeBufSi │ │ │ -000143e0: 7a65 2729 3b0a 2469 6e74 6572 6e61 6c50 ze');.$internalP │ │ │ -000143f0: 6970 6542 7566 5369 7a65 203d 2028 263a ipeBufSize = (&: │ │ │ -00014400: 3a72 6576 6572 7448 756d 616e 5265 6164 :revertHumanRead │ │ │ -00014410: 6162 6c65 2824 696e 7465 726e 616c 5069 able($internalPi │ │ │ -00014420: 7065 4275 6653 697a 6529 295b 305d 3b0a peBufSize))[0];. │ │ │ -00014430: 6d79 2024 7772 6974 6554 6f4e 616d 6564 my $writeToNamed │ │ │ -00014440: 5069 7065 203d 2024 4368 6563 6b50 6172 Pipe = $CheckPar │ │ │ -00014450: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00014460: 2777 7269 7465 546f 4e61 6d65 6450 6970 'writeToNamedPip │ │ │ -00014470: 6527 293b 0a6d 7920 2473 6b69 7053 796e e');.my $skipSyn │ │ │ -00014480: 6320 3d20 2443 6865 636b 5061 722d 3e67 c = $CheckPar->g │ │ │ -00014490: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -000144a0: 2773 6b69 7053 796e 6327 293b 0a0a 0a75 'skipSync');...u │ │ │ -000144b0: 6e6c 6573 7320 2824 6e6f 436f 6d70 7265 nless ($noCompre │ │ │ -000144c0: 7373 290a 7b0a 2020 2020 6c6f 6361 6c20 ss).{. local │ │ │ -000144d0: 2a46 494c 453b 0a20 2020 2069 6620 286f *FILE;. if (o │ │ │ -000144e0: 7065 6e28 4649 4c45 2c20 222f 7072 6f63 pen(FILE, "/proc │ │ │ -000144f0: 2f63 7075 696e 666f 2229 290a 2020 2020 /cpuinfo")). │ │ │ -00014500: 7b0a 096d 7920 246c 3b0a 0924 6e6f 436f {..my $l;..$noCo │ │ │ -00014510: 6d70 7265 7373 203d 2031 3b0a 0977 6869 mpress = 1;..whi │ │ │ -00014520: 6c65 2028 246c 203d 203c 4649 4c45 3e29 le ($l = ) │ │ │ -00014530: 0a09 7b0a 0920 2020 2024 6e6f 436f 6d70 ..{.. $noComp │ │ │ -00014540: 7265 7373 2b2b 2069 6620 246c 203d 7e20 ress++ if $l =~ │ │ │ -00014550: 2f70 726f 6365 7373 6f72 2f3b 0a09 7d0a /processor/;..}. │ │ │ -00014560: 0963 6c6f 7365 2846 494c 4529 3b0a 2020 .close(FILE);. │ │ │ -00014570: 2020 7d0a 2020 2020 246e 6f43 6f6d 7072 }. $noCompr │ │ │ -00014580: 6573 7320 3d20 3220 6966 2024 6e6f 436f ess = 2 if $noCo │ │ │ -00014590: 6d70 7265 7373 203c 2032 3b0a 7d0a 0a28 mpress < 2;.}..( │ │ │ -000145a0: 4065 7863 6570 7453 7566 6669 7829 203d @exceptSuffix) = │ │ │ -000145b0: 2028 293b 0a70 7573 6820 4065 7863 6570 ();.push @excep │ │ │ -000145c0: 7453 7566 6669 782c 2028 4024 6578 6365 tSuffix, (@$exce │ │ │ -000145d0: 7074 5375 6666 6978 2920 6966 2064 6566 ptSuffix) if def │ │ │ -000145e0: 696e 6564 2024 6578 6365 7074 5375 6666 ined $exceptSuff │ │ │ -000145f0: 6978 3b0a 7075 7368 2040 6578 6365 7074 ix;.push @except │ │ │ -00014600: 5375 6666 6978 2c20 2840 2461 6464 4578 Suffix, (@$addEx │ │ │ -00014610: 6365 7074 5375 6666 6978 2920 6966 2064 ceptSuffix) if d │ │ │ -00014620: 6566 696e 6564 2024 6164 6445 7863 6570 efined $addExcep │ │ │ -00014630: 7453 7566 6669 783b 0a0a 0a69 6620 2824 tSuffix;...if ($ │ │ │ -00014640: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi │ │ │ -00014650: 6c65 290a 7b0a 2020 2020 6d79 2024 616e le).{. my $an │ │ │ -00014660: 7377 6572 203d 2027 7965 7327 3b0a 2020 swer = 'yes';. │ │ │ -00014670: 2020 6966 2028 2d65 2024 6765 6e65 7261 if (-e $genera │ │ │ -00014680: 7465 436f 6e66 6967 4669 6c65 290a 2020 teConfigFile). │ │ │ -00014690: 2020 7b0a 0964 6f0a 097b 0a09 2020 2020 {..do..{.. │ │ │ -000146a0: 7072 696e 7420 223c 2467 656e 6572 6174 print "<$generat │ │ │ -000146b0: 6543 6f6e 6669 6746 696c 653e 2061 6c72 eConfigFile> alr │ │ │ -000146c0: 6561 6479 2065 7869 7374 732e 204f 7665 eady exists. Ove │ │ │ -000146d0: 7277 7269 7465 3f5c 6e22 2c0a 0920 2020 rwrite?\n",.. │ │ │ -000146e0: 2022 7965 7320 2f20 6e6f 202d 3e20 223b "yes / no -> "; │ │ │ -000146f0: 0a09 2020 2020 2461 6e73 7765 7220 3d20 .. $answer = │ │ │ -00014700: 3c53 5444 494e 3e3b 0a09 2020 2020 6368 ;.. ch │ │ │ -00014710: 6f6d 7020 2461 6e73 7765 723b 0a09 7d20 omp $answer;..} │ │ │ -00014720: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n │ │ │ -00014730: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans │ │ │ -00014740: 7765 7220 6e65 2027 6e6f 2729 3b0a 2020 wer ne 'no');. │ │ │ -00014750: 2020 7d0a 2020 2020 6578 6974 2030 2069 }. exit 0 i │ │ │ -00014760: 6620 2461 6e73 7765 7220 6571 2027 6e6f f $answer eq 'no │ │ │ -00014770: 273b 0a0a 2020 2020 6c6f 6361 6c20 2a46 ';.. local *F │ │ │ -00014780: 494c 453b 0a20 2020 206f 7065 6e28 4649 ILE;. open(FI │ │ │ -00014790: 4c45 2c20 223e 2024 6765 6e65 7261 7465 LE, "> $generate │ │ │ -000147a0: 436f 6e66 6967 4669 6c65 2229 206f 720a ConfigFile") or. │ │ │ -000147b0: 0964 6965 2022 636f 756c 6420 6e6f 7420 .die "could not │ │ │ -000147c0: 7772 6974 6520 746f 203c 2467 656e 6572 write to <$gener │ │ │ -000147d0: 6174 6543 6f6e 6669 6746 696c 653e 223b ateConfigFile>"; │ │ │ -000147e0: 0a20 2020 2070 7269 6e74 2046 494c 4520 . print FILE │ │ │ -000147f0: 2474 656d 706c 6174 6543 6f6e 6669 6746 $templateConfigF │ │ │ -00014800: 696c 653b 0a20 2020 2063 6c6f 7365 2846 ile;. close(F │ │ │ -00014810: 494c 4529 3b0a 2020 2020 6578 6974 2030 ILE);. exit 0 │ │ │ -00014820: 3b0a 7d0a 0a69 6620 2824 7072 696e 7429 ;.}..if ($print) │ │ │ -00014830: 0a7b 0a20 2020 2024 7072 696e 7441 6c6c .{. $printAll │ │ │ -00014840: 203d 2024 7072 696e 7441 6c6c 203f 2027 = $printAll ? ' │ │ │ -00014850: 7965 7327 203a 2027 6e6f 273b 0a20 2020 yes' : 'no';. │ │ │ -00014860: 2024 4368 6563 6b50 6172 2d3e 7072 696e $CheckPar->prin │ │ │ -00014870: 7428 272d 7368 6f77 4869 6464 656e 2720 t('-showHidden' │ │ │ -00014880: 3d3e 2024 7072 696e 7441 6c6c 293b 0a20 => $printAll);. │ │ │ -00014890: 2020 2065 7869 7420 303b 0a7d 0a0a 2463 exit 0;.}..$c │ │ │ -000148a0: 686d 6f64 4d44 3546 696c 6520 3d20 6f63 hmodMD5File = oc │ │ │ -000148b0: 7420 2463 686d 6f64 4d44 3546 696c 653b t $chmodMD5File; │ │ │ -000148c0: 0a0a 6d79 2028 4070 6172 293b 0a69 6620 ..my (@par);.if │ │ │ -000148d0: 2824 6c6f 6746 696c 6529 0a7b 0a20 2020 ($logFile).{. │ │ │ -000148e0: 2070 7573 6820 4070 6172 2c20 2827 2d66 push @par, ('-f │ │ │ -000148f0: 696c 6527 203d 3e20 246c 6f67 4669 6c65 ile' => $logFile │ │ │ -00014900: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. │ │ │ -00014910: 7075 7368 2040 7061 722c 2028 272d 6669 push @par, ('-fi │ │ │ -00014920: 6c65 6465 7363 7269 7074 6f72 272c 202a ledescriptor', * │ │ │ -00014930: 5354 444f 5554 293b 0a7d 0a6d 7920 2824 STDOUT);.}.my ($ │ │ │ -00014940: 7072 4c6f 674b 696e 6429 203d 205b 2741 prLogKind) = ['A │ │ │ -00014950: 3a42 4547 494e 272c 0a09 0920 2020 275a :BEGIN',... 'Z │ │ │ -00014960: 3a45 4e44 272c 0a09 0920 2020 2749 3a49 :END',... 'I:I │ │ │ -00014970: 4e46 4f27 2c0a 0909 2020 2027 563a 5645 NFO',... 'V:VE │ │ │ -00014980: 5253 494f 4e27 2c0a 0909 2020 2027 573a RSION',... 'W: │ │ │ -00014990: 5741 524e 494e 4727 2c0a 0909 2020 2027 WARNING',... ' │ │ │ -000149a0: 453a 4552 524f 5227 2c0a 0909 2020 2027 E:ERROR',... ' │ │ │ -000149b0: 503a 5052 4f47 5245 5353 272c 0a09 0920 P:PROGRESS',... │ │ │ -000149c0: 2020 2753 3a53 5441 5449 5354 4943 272c 'S:STATISTIC', │ │ │ -000149d0: 0a09 0920 2020 2744 3a44 4542 5547 275d ... 'D:DEBUG'] │ │ │ -000149e0: 3b0a 6d79 2024 7072 4c6f 6731 203d 2070 ;.my $prLog1 = p │ │ │ -000149f0: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k │ │ │ -00014a00: 696e 6427 203d 3e20 2470 724c 6f67 4b69 ind' => $prLogKi │ │ │ -00014a10: 6e64 2c0a 0909 0920 2020 4070 6172 2c0a nd,.... @par,. │ │ │ -00014a20: 0909 0920 2020 272d 7769 7468 5469 6d65 ... '-withTime │ │ │ -00014a30: 2720 3d3e 2024 7769 7468 5469 6d65 2c0a ' => $withTime,. │ │ │ -00014a40: 0909 0920 2020 272d 6d61 7846 696c 656c ... '-maxFilel │ │ │ -00014a50: 656e 2720 3d3e 2024 6d61 7846 696c 656c en' => $maxFilel │ │ │ -00014a60: 656e 2c0a 0909 0920 2020 272d 6e6f 4f66 en,.... '-noOf │ │ │ -00014a70: 4f6c 6446 696c 6573 2720 3d3e 2024 6e6f OldFiles' => $no │ │ │ -00014a80: 4f66 4f6c 6446 696c 6573 2c0a 0909 0920 OfOldFiles,.... │ │ │ -00014a90: 2020 272d 7361 7665 4c6f 6773 2720 3d3e '-saveLogs' => │ │ │ -00014aa0: 2024 7361 7665 4c6f 6773 2c0a 0909 0920 $saveLogs,.... │ │ │ -00014ab0: 2020 272d 636f 6d70 7265 7373 5769 7468 '-compressWith │ │ │ -00014ac0: 2720 3d3e 2024 636f 6d70 7265 7373 5769 ' => $compressWi │ │ │ -00014ad0: 7468 2c0a 0909 0920 2020 272d 746d 7064 th,.... '-tmpd │ │ │ -00014ae0: 6972 2720 3d3e 2024 746d 7064 6972 293b ir' => $tmpdir); │ │ │ -00014af0: 0a24 7072 4c6f 6731 2d3e 7365 7453 746f .$prLog1->setSto │ │ │ -00014b00: 7041 744e 6f4d 6573 7361 6765 7328 272d pAtNoMessages('- │ │ │ -00014b10: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00014b20: 0920 2020 2020 272d 7374 6f70 4174 2720 . '-stopAt' │ │ │ -00014b30: 3d3e 2024 7374 6f70 4166 7465 724e 6f52 => $stopAfterNoR │ │ │ -00014b40: 6561 6445 7272 6f72 7329 3b0a 0a6d 7920 eadErrors);..my │ │ │ -00014b50: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo │ │ │ -00014b60: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new(' │ │ │ -00014b70: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr │ │ │ -00014b80: 4c6f 6731 5d29 3b0a 0a69 6620 2824 706c Log1]);..if ($pl │ │ │ -00014b90: 7573 4c6f 6753 7464 6f75 7429 0a7b 0a20 usLogStdout).{. │ │ │ -00014ba0: 2020 206d 7920 2470 203d 2070 7269 6e74 my $p = print │ │ │ -00014bb0: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind' │ │ │ -00014bc0: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,. │ │ │ -00014bd0: 0909 0920 2027 2d66 696c 6564 6573 6372 ... '-filedescr │ │ │ -00014be0: 6970 746f 7227 2c20 2a53 5444 4f55 542c iptor', *STDOUT, │ │ │ -00014bf0: 0a09 0909 2020 272d 746d 7064 6972 2720 .... '-tmpdir' │ │ │ -00014c00: 3d3e 2024 746d 7064 6972 293b 0a20 2020 => $tmpdir);. │ │ │ -00014c10: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p │ │ │ -00014c20: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]); │ │ │ -00014c30: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN │ │ │ -00014c40: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. │ │ │ -00014c50: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo │ │ │ -00014c60: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' = │ │ │ -00014c70: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,... │ │ │ -00014c80: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $ │ │ │ -00014c90: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -00014ca0: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil │ │ │ -00014cb0: 656c 656e 2720 3d3e 2030 2c0a 0909 0920 elen' => 0,.... │ │ │ -00014cc0: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $ │ │ │ -00014cd0: 746d 7064 6972 293b 0a20 2020 2024 7072 tmpdir);. $pr │ │ │ -00014ce0: 4c6f 672d 3e61 6464 2827 2d70 724c 6f67 Log->add('-prLog │ │ │ -00014cf0: 7327 203d 3e20 5b24 6e70 5d29 3b0a 7d0a s' => [$np]);.}. │ │ │ -00014d00: 0a24 6d61 696e 3a3a 5f5f 7072 4c6f 6720 .$main::__prLog │ │ │ -00014d10: 3d20 2470 724c 6f67 3b20 2020 2320 7573 = $prLog; # us │ │ │ -00014d20: 6564 2069 6e20 7275 6c65 730a 2470 724c ed in rules.$prL │ │ │ -00014d30: 6f67 2d3e 666f 726b 2824 7265 7129 3b0a og->fork($req);. │ │ │ -00014d40: 0a0a 2840 6d61 696e 3a3a 636c 6561 6e75 ..(@main::cleanu │ │ │ -00014d50: 7029 203d 2028 2470 724c 6f67 2c20 3129 p) = ($prLog, 1) │ │ │ -00014d60: 3b0a 0a6d 7920 2825 7375 7070 7265 7373 ;..my (%suppress │ │ │ -00014d70: 5761 726e 696e 6729 3b0a 7b0a 2020 2020 Warning);.{. │ │ │ -00014d80: 6d79 2024 733b 0a20 2020 2066 6f72 6561 my $s;. forea │ │ │ -00014d90: 6368 2024 7320 2840 2473 7570 7072 6573 ch $s (@$suppres │ │ │ -00014da0: 7357 6172 6e69 6e67 290a 2020 2020 7b0a sWarning). {. │ │ │ -00014db0: 0924 7375 7070 7265 7373 5761 726e 696e .$suppressWarnin │ │ │ -00014dc0: 677b 2473 7d20 3d20 313b 0a20 2020 207d g{$s} = 1;. } │ │ │ -00014dd0: 0a7d 0a6d 7920 2825 7375 7070 7265 7373 .}.my (%suppress │ │ │ -00014de0: 496e 666f 293b 0a7b 0a20 2020 206d 7920 Info);.{. my │ │ │ -00014df0: 2473 3b0a 2020 2020 666f 7265 6163 6820 $s;. foreach │ │ │ -00014e00: 2473 2028 4024 7375 7070 7265 7373 496e $s (@$suppressIn │ │ │ -00014e10: 666f 290a 2020 2020 7b0a 0924 7375 7070 fo). {..$supp │ │ │ -00014e20: 7265 7373 496e 666f 7b24 737d 203d 2031 ressInfo{$s} = 1 │ │ │ -00014e30: 3b0a 2020 2020 7d0a 7d0a 0a24 7072 4c6f ;. }.}..$prLo │ │ │ -00014e40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00014e50: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. │ │ │ -00014e60: 272d 7374 7227 203d 3e20 5b22 6d69 7373 '-str' => ["miss │ │ │ -00014e70: 696e 6720 7061 7261 6d73 2062 6163 6b75 ing params backu │ │ │ -00014e80: 7044 6972 2c20 736f 7572 6365 4469 722c pDir, sourceDir, │ │ │ -00014e90: 2073 6572 6965 735c 6e24 4865 6c70 225d series\n$Help"] │ │ │ -00014ea0: 2c0a 0920 2020 2020 2027 2d65 7869 7427 ,.. '-exit' │ │ │ -00014eb0: 203d 3e20 3129 0a20 2020 2075 6e6c 6573 => 1). unles │ │ │ -00014ec0: 7320 6465 6669 6e65 6420 2462 6163 6b75 s defined $backu │ │ │ -00014ed0: 7044 6972 2061 6e64 2064 6566 696e 6564 pDir and defined │ │ │ -00014ee0: 2024 736f 7572 6365 4469 7220 616e 6420 $sourceDir and │ │ │ -00014ef0: 6465 6669 6e65 6420 2473 6572 6965 733b defined $series; │ │ │ -00014f00: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00014f10: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00014f20: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00014f30: 3e20 5b22 6261 636b 7570 4469 7220 6469 > ["backupDir di │ │ │ -00014f40: 7265 6374 6f72 7920 3c24 6261 636b 7570 rectory <$backup │ │ │ -00014f50: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex │ │ │ -00014f60: 6973 745c 6e24 4865 6c70 225d 2c0a 0920 ist\n$Help"],.. │ │ │ -00014f70: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00014f80: 3129 0a20 2020 2075 6e6c 6573 7320 2d65 1). unless -e │ │ │ -00014f90: 2024 6261 636b 7570 4469 723b 0a0a 2470 $backupDir;..$p │ │ │ -00014fa0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00014fb0: 6e64 2720 3d3e 2027 4527 2c0a 0920 2020 nd' => 'E',.. │ │ │ -00014fc0: 2020 2027 2d73 7472 2720 3d3e 205b 2262 '-str' => ["b │ │ │ -00014fd0: 6163 6b75 7044 6972 206d 7573 7420 6265 ackupDir must be │ │ │ -00014fe0: 2074 6865 2074 6f70 206c 6576 656c 2064 the top level d │ │ │ -00014ff0: 6972 6563 746f 7279 2066 6f72 2061 6c6c irectory for all │ │ │ -00015000: 2079 6f75 7222 2c0a 0920 2020 2020 2022 your",.. " │ │ │ -00015010: 7374 6f72 6542 6163 6b75 7020 6261 636b storeBackup back │ │ │ -00015020: 7570 7320 6f6e 2074 6861 7420 7061 7274 ups on that part │ │ │ -00015030: 6974 696f 6e2e 2059 6f75 2063 616e 6e6f ition. You canno │ │ │ -00015040: 7420 7573 6520 272f 2720 666f 7220 7468 t use '/' for th │ │ │ -00015050: 6174 225d 2c0a 0920 2020 2020 2027 2d65 at"],.. '-e │ │ │ -00015060: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i │ │ │ -00015070: 6620 2462 6163 6b75 7044 6972 2065 7120 f $backupDir eq │ │ │ -00015080: 272f 273b 0a0a 2470 724c 6f67 2d3e 7072 '/';..$prLog->pr │ │ │ -00015090: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000150a0: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str │ │ │ -000150b0: 2720 3d3e 205b 2273 6f75 7263 6520 6469 ' => ["source di │ │ │ -000150c0: 7265 6374 6f72 7920 3c24 736f 7572 6365 rectory <$source │ │ │ -000150d0: 4469 723e 2064 6f65 7320 6e6f 7420 6578 Dir> does not ex │ │ │ -000150e0: 6973 7422 5d2c 0a09 2020 2020 2020 272d ist"],.. '- │ │ │ -000150f0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ -00015100: 756e 6c65 7373 2028 2d64 2024 736f 7572 unless (-d $sour │ │ │ -00015110: 6365 4469 7229 3b0a 0a6d 7920 2474 6172 ceDir);..my $tar │ │ │ -00015120: 6765 7444 6972 203d 2022 2462 6163 6b75 getDir = "$backu │ │ │ -00015130: 7044 6972 2f24 7365 7269 6573 223b 0a75 pDir/$series";.u │ │ │ -00015140: 6e6c 6573 7320 282d 6520 2474 6172 6765 nless (-e $targe │ │ │ -00015150: 7444 6972 290a 7b0a 2020 2020 2470 724c tDir).{. $prL │ │ │ -00015160: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00015170: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '- │ │ │ -00015180: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -00015190: 2063 7265 6174 6520 6469 7265 6374 6f72 create director │ │ │ -000151a0: 7920 666f 7220 7365 7269 6573 203c 2474 y for series <$t │ │ │ -000151b0: 6172 6765 7444 6972 3e22 5d2c 0a09 0920 argetDir>"],... │ │ │ -000151c0: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1).. │ │ │ -000151d0: 756e 6c65 7373 2026 3a3a 6d61 6b65 4469 unless &::makeDi │ │ │ -000151e0: 7250 6174 6843 6163 6865 2824 7461 7267 rPathCache($targ │ │ │ -000151f0: 6574 4469 722c 2024 7072 4c6f 6729 3b0a etDir, $prLog);. │ │ │ -00015200: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00015210: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ -00015220: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => │ │ │ -00015230: 5b22 6372 6561 7465 6420 6469 7265 6374 ["created direct │ │ │ -00015240: 6f72 7920 3c24 7461 7267 6574 4469 723e ory <$targetDir> │ │ │ -00015250: 225d 290a 0975 6e6c 6573 7320 6578 6973 "])..unless exis │ │ │ -00015260: 7473 2024 7375 7070 7265 7373 5761 726e ts $suppressWarn │ │ │ -00015270: 696e 677b 2763 7253 6572 6965 7327 7d3b ing{'crSeries'}; │ │ │ -00015280: 0a7d 0a0a 2470 724c 6f67 2d3e 7072 696e .}..$prLog->prin │ │ │ -00015290: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -000152a0: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -000152b0: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => ["cannot writ │ │ │ -000152c0: 6520 746f 2074 6172 6765 7420 6469 7265 e to target dire │ │ │ -000152d0: 6374 6f72 7920 3c24 7461 7267 6574 4469 ctory <$targetDi │ │ │ -000152e0: 723e 225d 2c0a 0920 2020 2020 2027 2d65 r>"],.. '-e │ │ │ -000152f0: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u │ │ │ -00015300: 6e6c 6573 7320 282d 7720 2474 6172 6765 nless (-w $targe │ │ │ -00015310: 7444 6972 293b 0a0a 2474 6172 6765 7444 tDir);..$targetD │ │ │ -00015320: 6972 203d 2026 3a3a 6162 736f 6c75 7465 ir = &::absolute │ │ │ -00015330: 5061 7468 2824 7461 7267 6574 4469 7229 Path($targetDir) │ │ │ -00015340: 3b0a 2473 6f75 7263 6544 6972 203d 2026 ;.$sourceDir = & │ │ │ -00015350: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($ │ │ │ -00015360: 736f 7572 6365 4469 7229 3b0a 2462 6163 sourceDir);.$bac │ │ │ -00015370: 6b75 7044 6972 203d 2026 3a3a 6162 736f kupDir = &::abso │ │ │ -00015380: 6c75 7465 5061 7468 2824 6261 636b 7570 lutePath($backup │ │ │ -00015390: 4469 7229 3b0a 0a24 6d61 696e 3a3a 736f Dir);..$main::so │ │ │ -000153a0: 7572 6365 4469 7220 3d20 2473 6f75 7263 urceDir = $sourc │ │ │ -000153b0: 6544 6972 3b0a 0a23 2063 6865 636b 2063 eDir;..# check c │ │ │ -000153c0: 6f6e 7369 7374 656e 6379 206f 6620 6f70 onsistency of op │ │ │ -000153d0: 7469 6f6e 7320 2761 7263 6869 7665 5479 tions 'archiveTy │ │ │ -000153e0: 7065 7327 2061 6e64 2027 7370 6563 6961 pes' and 'specia │ │ │ -000153f0: 6c54 7970 6541 7263 6869 7665 7227 0a69 lTypeArchiver'.i │ │ │ -00015400: 6620 2824 7370 6563 6961 6c54 7970 6541 f ($specialTypeA │ │ │ -00015410: 7263 6869 7665 7220 616e 640a 2020 2020 rchiver and. │ │ │ -00015420: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc │ │ │ -00015430: 6869 7665 7220 6571 2027 7461 7227 2061 hiver eq 'tar' a │ │ │ -00015440: 6e64 0a20 2020 2020 2461 7263 6869 7665 nd. $archive │ │ │ -00015450: 5479 7065 7320 3d7e 202f 532f 2920 616e Types =~ /S/) an │ │ │ -00015460: 6420 6e6f 740a 2020 2020 2465 7863 6570 d not. $excep │ │ │ -00015470: 7454 7970 6573 203d 7e20 2f53 2f29 0a7b tTypes =~ /S/).{ │ │ │ -00015480: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00015490: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000154a0: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ -000154b0: 0a20 205b 2270 6c65 6173 6520 7365 7420 . ["please set │ │ │ -000154c0: 2753 2720 666f 7220 6578 6365 7074 5479 'S' for exceptTy │ │ │ -000154d0: 7065 7320 7768 656e 2075 7369 6e67 2074 pes when using t │ │ │ -000154e0: 6172 2061 7320 7370 6563 6961 6c54 7970 ar as specialTyp │ │ │ -000154f0: 6541 7263 6869 7665 7222 5d2c 0a09 0920 eArchiver"],... │ │ │ -00015500: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);. │ │ │ -00015510: 7d0a 0a23 2063 6865 636b 2070 726f 6772 }..# check progr │ │ │ -00015520: 6573 7352 6570 6f72 7420 7365 7474 696e essReport settin │ │ │ -00015530: 6773 0a6d 7920 2470 726f 6772 6573 7344 gs.my $progressD │ │ │ -00015540: 656c 7461 5469 6d65 203d 2030 3b0a 6966 eltaTime = 0;.if │ │ │ -00015550: 2028 2470 726f 6772 6573 7352 6570 6f72 ($progressRepor │ │ │ -00015560: 7429 0a7b 0a20 2020 206d 7920 2824 636f t).{. my ($co │ │ │ -00015570: 756e 742c 2024 7429 3b0a 2020 2020 6966 unt, $t);. if │ │ │ -00015580: 2028 2470 726f 6772 6573 7352 6570 6f72 ($progressRepor │ │ │ -00015590: 7420 3d7e 202f 2c2f 290a 2020 2020 7b0a t =~ /,/). {. │ │ │ -000155a0: 0928 2463 6f75 6e74 2c20 2474 2920 3d20 .($count, $t) = │ │ │ -000155b0: 2470 726f 6772 6573 7352 6570 6f72 7420 $progressReport │ │ │ -000155c0: 3d7e 202f 5c41 282e 2a3f 292c 282e 2a29 =~ /\A(.*?),(.*) │ │ │ -000155d0: 5c5a 2f3b 0a09 2470 724c 6f67 2d3e 7072 \Z/;..$prLog->pr │ │ │ -000155e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000155f0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ -00015600: 7227 203d 3e20 5b22 7772 6f6e 6720 666f r' => ["wrong fo │ │ │ -00015610: 726d 6174 2066 6f72 206f 7074 696f 6e20 rmat for option │ │ │ -00015620: 7072 6f67 7265 7373 5265 706f 7274 2022 progressReport " │ │ │ -00015630: 202e 0a09 0909 0920 2274 696d 6520 7065 ...... "time pe │ │ │ -00015640: 7269 6f64 203c 2474 3e22 5d2c 0a09 0920 riod <$t>"],... │ │ │ -00015650: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00015660: 3129 0a09 2020 2020 756e 6c65 7373 2026 1).. unless & │ │ │ -00015670: 6461 7465 546f 6f6c 733a 3a63 6865 636b dateTools::check │ │ │ -00015680: 5374 7228 272d 7374 7227 203d 3e20 2474 Str('-str' => $t │ │ │ -00015690: 293b 0a09 2470 726f 6772 6573 7344 656c );..$progressDel │ │ │ -000156a0: 7461 5469 6d65 203d 2026 6461 7465 546f taTime = &dateTo │ │ │ -000156b0: 6f6c 733a 3a73 7472 546f 5365 6328 272d ols::strToSec('- │ │ │ -000156c0: 7374 7227 203d 3e20 2474 293b 0a20 2020 str' => $t);. │ │ │ -000156d0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ -000156e0: 7b0a 0924 636f 756e 7420 3d20 2470 726f {..$count = $pro │ │ │ -000156f0: 6772 6573 7352 6570 6f72 743b 0a20 2020 gressReport;. │ │ │ -00015700: 207d 0a20 2020 2024 7072 4c6f 672d 3e70 }. $prLog->p │ │ │ -00015710: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00015720: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ -00015730: 3d3e 205b 2263 6f75 6e74 6572 203c 2463 => ["counter <$c │ │ │ -00015740: 6f75 6e74 3e20 666f 7220 7072 6f67 7265 ount> for progre │ │ │ -00015750: 7373 2072 6570 6f72 7420 2220 2e0a 0909 ss report " .... │ │ │ -00015760: 0920 2020 2020 226d 7573 7420 6265 2061 . "must be a │ │ │ -00015770: 2070 6f73 6974 6976 6520 696e 7465 6765 positive intege │ │ │ -00015780: 7222 5d2c 0a09 0920 2027 2d65 7869 7427 r"],... '-exit' │ │ │ -00015790: 203d 3e20 3129 0a09 756e 6c65 7373 2024 => 1)..unless $ │ │ │ -000157a0: 636f 756e 7420 3d7e 202f 5c41 5c64 2b5c count =~ /\A\d+\ │ │ │ -000157b0: 5a2f 3b0a 2020 2020 2470 726f 6772 6573 Z/;. $progres │ │ │ -000157c0: 7352 6570 6f72 7420 3d20 2463 6f75 6e74 sReport = $count │ │ │ -000157d0: 3b0a 7d0a 2370 7269 6e74 2022 7072 6f67 ;.}.#print "prog │ │ │ -000157e0: 7265 7373 5265 706f 7274 3d3c 2470 726f ressReport=<$pro │ │ │ -000157f0: 6772 6573 7352 6570 6f72 743e 2c20 7072 gressReport>, pr │ │ │ -00015800: 6f67 7265 7373 4465 6c74 6154 696d 653d ogressDeltaTime= │ │ │ -00015810: 3c24 7072 6f67 7265 7373 4465 6c74 6154 <$progressDeltaT │ │ │ -00015820: 696d 653e 5c6e 223b 0a0a 0a24 6d61 696e ime>\n";...$main │ │ │ -00015830: 3a3a 494f 436f 6d70 7265 7373 4469 7265 ::IOCompressDire │ │ │ -00015840: 6374 203d 2030 3b0a 7b0a 2020 2020 2320 ct = 0;.{. # │ │ │ -00015850: 6275 696c 6420 6120 7275 6c65 2066 726f build a rule fro │ │ │ -00015860: 6d20 6f70 7469 6f6e 2063 6865 636b 426c m option checkBl │ │ │ -00015870: 6f63 6b73 5375 6666 6978 0a20 2020 2069 ocksSuffix. i │ │ │ -00015880: 6620 2864 6566 696e 6564 2824 6368 6563 f (defined($chec │ │ │ -00015890: 6b42 6c6f 636b 7353 7566 6669 7829 290a kBlocksSuffix)). │ │ │ -000158a0: 2020 2020 7b0a 096d 7920 2462 7320 3d20 {..my $bs = │ │ │ -000158b0: 2826 3a3a 7265 7665 7274 4875 6d61 6e52 (&::revertHumanR │ │ │ -000158c0: 6561 6461 626c 6528 2463 6865 636b 426c eadable($checkBl │ │ │ -000158d0: 6f63 6b73 5375 6666 6978 4253 2929 5b30 ocksSuffixBS))[0 │ │ │ -000158e0: 5d3b 0a09 2470 724c 6f67 2d3e 7072 696e ];..$prLog->prin │ │ │ -000158f0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00015900: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ -00015910: 203d 3e20 5b22 6368 6563 6b42 6c6f 636b => ["checkBlock │ │ │ -00015920: 7342 5320 746f 6f20 736d 616c 6c20 2220 sBS too small " │ │ │ -00015930: 2e20 0a09 0909 0920 2228 2463 6865 636b . ..... "($check │ │ │ -00015940: 426c 6f63 6b73 5375 6666 6978 4253 203c BlocksSuffixBS < │ │ │ -00015950: 2024 6368 6563 6b42 6c6f 636b 7342 536d $checkBlocksBSm │ │ │ -00015960: 696e 2922 5d2c 0a09 0920 2020 2020 2027 in)"],... ' │ │ │ -00015970: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. │ │ │ -00015980: 2020 6966 2024 6273 203c 2024 6368 6563 if $bs < $chec │ │ │ -00015990: 6b42 6c6f 636b 7342 536d 696e 3b0a 0970 kBlocksBSmin;..p │ │ │ -000159a0: 7573 6820 4063 6865 636b 426c 6f63 6b73 ush @checkBlocks │ │ │ -000159b0: 4253 2c20 2463 6865 636b 426c 6f63 6b73 BS, $checkBlocks │ │ │ -000159c0: 5375 6666 6978 4253 3b0a 0970 7573 6820 SuffixBS;..push │ │ │ -000159d0: 4063 6865 636b 426c 6f63 6b73 436f 6d70 @checkBlocksComp │ │ │ -000159e0: 722c 2024 6368 6563 6b42 6c6f 636b 7343 r, $checkBlocksC │ │ │ -000159f0: 6f6d 7072 3b0a 0970 7573 6820 4063 6865 ompr;..push @che │ │ │ -00015a00: 636b 426c 6f63 6b73 5275 6c65 2c0a 095b ckBlocksRule,..[ │ │ │ -00015a10: 2724 7369 7a65 203e 3d20 263a 3a53 495a '$size >= &::SIZ │ │ │ -00015a20: 4528 2227 202e 2024 6368 6563 6b42 6c6f E("' . $checkBlo │ │ │ -00015a30: 636b 7353 7566 6669 784d 696e 5369 7a65 cksSuffixMinSize │ │ │ -00015a40: 202e 2027 2229 2720 2c20 0a09 2027 616e . '")' , .. 'an │ │ │ -00015a50: 6427 2c0a 0920 2724 6669 6c65 203d 7e20 d',.. '$file =~ │ │ │ -00015a60: 2f27 202e 206a 6f69 6e28 275c 5a7c 272c /' . join('\Z|', │ │ │ -00015a70: 2040 2463 6865 636b 426c 6f63 6b73 5375 @$checkBlocksSu │ │ │ -00015a80: 6666 6978 2920 2e20 275c 5a2f 275d 3b0a ffix) . '\Z/'];. │ │ │ -00015a90: 0970 7573 6820 4063 6865 636b 426c 6f63 .push @checkBloc │ │ │ -00015aa0: 6b73 5265 6164 2c20 756e 6465 663b 0a09 ksRead, undef;.. │ │ │ -00015ab0: 7075 7368 2040 6368 6563 6b42 6c6f 636b push @checkBlock │ │ │ -00015ac0: 7350 6172 616c 6c65 6c2c 2024 6368 6563 sParallel, $chec │ │ │ -00015ad0: 6b42 6c6f 636b 7350 6172 616c 6c65 6c3b kBlocksParallel; │ │ │ -00015ae0: 0a20 2020 207d 0a0a 2020 2020 6d79 2024 . }.. my $ │ │ │ -00015af0: 693b 0a20 2020 2066 6f72 6561 6368 2024 i;. foreach $ │ │ │ -00015b00: 6920 2830 2e2e 4063 6865 636b 426c 6f63 i (0..@checkBloc │ │ │ -00015b10: 6b73 5275 6c65 2d31 290a 2020 2020 7b0a ksRule-1). {. │ │ │ -00015b20: 096e 6578 7420 756e 6c65 7373 2064 6566 .next unless def │ │ │ -00015b30: 696e 6564 2024 6368 6563 6b42 6c6f 636b ined $checkBlock │ │ │ -00015b40: 7352 756c 655b 2469 5d3b 0a0a 0975 6e6c sRule[$i];...unl │ │ │ -00015b50: 6573 7320 2864 6566 696e 6564 2024 6368 ess (defined $ch │ │ │ -00015b60: 6563 6b42 6c6f 636b 7342 535b 2469 5d29 eckBlocksBS[$i]) │ │ │ -00015b70: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog- │ │ │ -00015b80: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00015b90: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ -00015ba0: 7227 203d 3e0a 0909 0920 205b 2262 6c6f r' =>.... ["blo │ │ │ -00015bb0: 636b 2073 697a 6520 666f 7220 6f70 7469 ck size for opti │ │ │ -00015bc0: 6f6e 2063 6865 636b 426c 6f63 6b73 5275 on checkBlocksRu │ │ │ -00015bd0: 6c65 2469 2069 7320 6d69 7373 696e 6722 le$i is missing" │ │ │ -00015be0: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' │ │ │ -00015bf0: 3d3e 2031 293b 0a09 7d0a 0924 666c 6167 => 1);..}..$flag │ │ │ -00015c00: 426c 6f63 6b44 6576 6963 6520 3d20 313b BlockDevice = 1; │ │ │ -00015c10: 0a09 6d79 2024 6273 3b0a 0924 6273 203d ..my $bs;..$bs = │ │ │ -00015c20: 2024 6368 6563 6b42 6c6f 636b 7342 535b $checkBlocksBS[ │ │ │ -00015c30: 2469 5d20 3d0a 0920 2020 2028 263a 3a72 $i] =.. (&::r │ │ │ -00015c40: 6576 6572 7448 756d 616e 5265 6164 6162 evertHumanReadab │ │ │ -00015c50: 6c65 2824 6368 6563 6b42 6c6f 636b 7342 le($checkBlocksB │ │ │ -00015c60: 535b 2469 5d29 295b 305d 3b0a 0a09 2470 S[$i]))[0];...$p │ │ │ -00015c70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00015c80: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ -00015c90: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>... │ │ │ -00015ca0: 2020 2020 2020 5b22 6368 6563 6b42 6c6f ["checkBlo │ │ │ -00015cb0: 636b 7342 5324 6920 746f 6f20 736d 616c cksBS$i too smal │ │ │ -00015cc0: 6c20 2824 6273 203c 2024 6368 6563 6b42 l ($bs < $checkB │ │ │ -00015cd0: 6c6f 636b 7342 536d 696e 2922 5d2c 0a09 locksBSmin)"],.. │ │ │ -00015ce0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00015cf0: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs │ │ │ -00015d00: 203c 2024 6368 6563 6b42 6c6f 636b 7342 < $checkBlocksB │ │ │ -00015d10: 536d 696e 3b0a 0a09 2470 724c 6f67 2d3e Smin;...$prLog-> │ │ │ -00015d20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00015d30: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ -00015d40: 7374 7227 203d 3e0a 0909 2020 2020 2020 str' =>... │ │ │ -00015d50: 5b22 626c 6f63 6b20 7369 7a65 2066 6f72 ["block size for │ │ │ -00015d60: 2063 6865 636b 426c 6f63 6b73 5275 6c65 checkBlocksRule │ │ │ -00015d70: 2469 2069 7320 2220 2e20 2463 6865 636b $i is " . $check │ │ │ -00015d80: 426c 6f63 6b73 4253 5b24 695d 202e 0a09 BlocksBS[$i] ... │ │ │ -00015d90: 0920 2020 2020 2020 222c 206d 7573 7420 . ", must │ │ │ -00015da0: 6265 2024 6d69 6e42 6c6f 636b 4c65 6e67 be $minBlockLeng │ │ │ -00015db0: 7468 206f 7220 6d6f 7265 225d 2c0a 0909 th or more"],... │ │ │ -00015dc0: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00015dd0: 2031 290a 0920 2020 2069 6620 2462 7320 1).. if $bs │ │ │ -00015de0: 3c20 246d 696e 426c 6f63 6b4c 656e 6774 < $minBlockLengt │ │ │ -00015df0: 683b 0a0a 0924 7072 4c6f 672d 3e70 7269 h;...$prLog->pri │ │ │ -00015e00: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00015e10: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -00015e20: 2720 3d3e 0a09 0920 2020 2020 205b 2270 ' =>... ["p │ │ │ -00015e30: 6172 616d 6574 6572 203c 2462 733e 2066 arameter <$bs> f │ │ │ -00015e40: 6f72 206f 7074 696f 6e20 6368 6563 6b42 or option checkB │ │ │ -00015e50: 6c6f 636b 7342 5325 6920 6861 7320 7772 locksBS%i has wr │ │ │ -00015e60: 6f6e 6720 666f 726d 6174 225d 2c0a 0909 ong format"],... │ │ │ -00015e70: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00015e80: 2031 290a 0920 2020 2075 6e6c 6573 7320 1).. unless │ │ │ -00015e90: 6465 6669 6e65 6420 2462 733b 0a20 2020 defined $bs;. │ │ │ -00015ea0: 207d 0a0a 0a23 7072 696e 7420 222d 2d2d }...#print "--- │ │ │ -00015eb0: 2d2d 2d2d 2d2d 2d2d 2d2d 626c 6f63 6b73 ----------blocks │ │ │ -00015ec0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 -------------\n" │ │ │ -00015ed0: 3b0a 2370 7269 6e74 206a 6f69 6e28 225c ;.#print join("\ │ │ │ -00015ee0: 7422 2c20 2832 2c20 2463 6865 636b 426c t", (2, $checkBl │ │ │ -00015ef0: 6f63 6b73 5375 6666 6978 2929 2c20 225c ocksSuffix)), "\ │ │ │ -00015f00: 746e 6577 5c6e 223b 2020 2020 0a23 7072 tnew\n"; .#pr │ │ │ -00015f10: 696e 7420 6a6f 696e 2822 5c74 222c 2028 int join("\t", ( │ │ │ -00015f20: 2463 6865 636b 426c 6f63 6b73 5375 6666 $checkBlocksSuff │ │ │ -00015f30: 6978 4d69 6e53 697a 6529 292c 2022 5c74 ixMinSize)), "\t │ │ │ -00015f40: 6e65 775c 6e22 3b20 2020 200a 2370 7269 new\n"; .#pri │ │ │ -00015f50: 6e74 206a 6f69 6e28 225c 7422 2c20 2824 nt join("\t", ($ │ │ │ -00015f60: 6368 6563 6b42 6c6f 636b 7353 7566 6669 checkBlocksSuffi │ │ │ -00015f70: 7842 5329 292c 2022 5c74 6e65 775c 6e22 xBS)), "\tnew\n" │ │ │ -00015f80: 3b20 2020 200a 2370 7269 6e74 206a 6f69 ; .#print joi │ │ │ -00015f90: 6e28 225c 7422 2c20 2824 6368 6563 6b42 n("\t", ($checkB │ │ │ -00015fa0: 6c6f 636b 7343 6f6d 7072 2929 2c20 225c locksCompr)), "\ │ │ │ -00015fb0: 746e 6577 5c6e 223b 2020 2020 0a23 7072 tnew\n"; .#pr │ │ │ -00015fc0: 696e 7420 6a6f 696e 2822 5c74 222c 2028 int join("\t", ( │ │ │ -00015fd0: 2463 6865 636b 426c 6f63 6b73 5061 7261 $checkBlocksPara │ │ │ -00015fe0: 6c6c 656c 2929 2c20 225c 746e 6577 5c6e llel)), "\tnew\n │ │ │ -00015ff0: 223b 2020 2020 0a23 7072 696e 7420 222d "; .#print "- │ │ │ -00016000: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 626c 6f63 ------------bloc │ │ │ -00016010: 6b73 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c ks-------------\ │ │ │ -00016020: 6e22 3b0a 2370 7269 6e74 2022 6368 6563 n";.#print "chec │ │ │ -00016030: 6b42 6c6f 636b 7352 756c 6520 3d20 4063 kBlocksRule = @c │ │ │ -00016040: 6865 636b 426c 6f63 6b73 5275 6c65 5c6e heckBlocksRule\n │ │ │ -00016050: 223b 0a23 7072 696e 7420 2263 6865 636b ";.#print "check │ │ │ -00016060: 426c 6f63 6b73 436f 6d70 7220 3d20 4063 BlocksCompr = @c │ │ │ -00016070: 6865 636b 426c 6f63 6b73 436f 6d70 725c heckBlocksCompr\ │ │ │ -00016080: 6e22 3b0a 2370 7269 6e74 2022 6368 6563 n";.#print "chec │ │ │ -00016090: 6b42 6c6f 636b 7352 6561 6420 3d20 4063 kBlocksRead = @c │ │ │ -000160a0: 6865 636b 426c 6f63 6b73 5265 6164 5c6e heckBlocksRead\n │ │ │ -000160b0: 223b 0a23 7072 696e 7420 2263 6865 636b ";.#print "check │ │ │ -000160c0: 426c 6f63 6b73 5061 7261 6c6c 656c 203d BlocksParallel = │ │ │ -000160d0: 2040 6368 6563 6b42 6c6f 636b 7350 6172 @checkBlocksPar │ │ │ -000160e0: 616c 6c65 6c5c 6e22 3b0a 0a20 2020 200a allel\n";.. . │ │ │ -000160f0: 0a20 2020 206d 7920 2840 6368 6563 6b42 . my (@checkB │ │ │ -00016100: 6c6f 636b 7352 756c 652c 2040 6368 6b44 locksRule, @chkD │ │ │ -00016110: 6576 6963 6573 4469 722c 2040 6368 6b44 evicesDir, @chkD │ │ │ -00016120: 6576 6963 6573 4253 2c20 4063 686b 4465 evicesBS, @chkDe │ │ │ -00016130: 7669 6365 7343 6f6d 7072 2c0a 0940 6368 vicesCompr,..@ch │ │ │ -00016140: 6b44 6576 6963 6573 5061 7261 6c6c 656c kDevicesParallel │ │ │ -00016150: 293b 0a20 2020 2066 6f72 6561 6368 2024 );. foreach $ │ │ │ -00016160: 6920 2830 2e2e 4063 6865 636b 4465 7669 i (0..@checkDevi │ │ │ -00016170: 6365 732d 3129 0a20 2020 207b 0a09 6e65 ces-1). {..ne │ │ │ -00016180: 7874 2075 6e6c 6573 7320 2463 6865 636b xt unless $check │ │ │ -00016190: 4465 7669 6365 735b 2469 5d3b 0a09 6d79 Devices[$i];..my │ │ │ -000161a0: 2028 2475 6964 2c20 4067 6964 2920 3d20 ($uid, @gid) = │ │ │ -000161b0: 2026 3a3a 7569 645f 6769 6428 293b 0a09 &::uid_gid();.. │ │ │ -000161c0: 6966 2028 2475 6964 203e 2030 2061 6e64 if ($uid > 0 and │ │ │ -000161d0: 2024 6769 645b 305d 203e 2030 290a 097b $gid[0] > 0)..{ │ │ │ -000161e0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -000161f0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00016200: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ -00016210: 3d3e 0a09 0909 2020 5b22 796f 7520 6d75 =>.... ["you mu │ │ │ -00016220: 7374 2068 6176 6520 726f 6f74 2070 6572 st have root per │ │ │ -00016230: 6d69 7373 696f 6e73 2074 6f20 7573 6520 missions to use │ │ │ -00016240: 6f70 7469 6f6e 203c 6368 6563 6b44 6576 option "]);.. │ │ │ -00016260: 2065 7869 7420 313b 0a09 7d0a 090a 0975 exit 1;..}....u │ │ │ -00016270: 6e6c 6573 7320 2864 6566 696e 6564 2024 nless (defined $ │ │ │ -00016280: 6368 6563 6b44 6576 6963 6573 4253 5b24 checkDevicesBS[$ │ │ │ -00016290: 695d 290a 097b 0a09 2020 2020 2470 724c i])..{.. $prL │ │ │ -000162a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000162b0: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -000162c0: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -000162d0: 626c 6f63 6b20 7369 7a65 2066 6f72 206f block size for o │ │ │ -000162e0: 7074 696f 6e20 6368 6563 6b44 6576 6963 ption checkDevic │ │ │ -000162f0: 6573 2469 2069 7320 6d69 7373 696e 6722 es$i is missing" │ │ │ -00016300: 5d2c 0a09 0909 2020 272d 6578 6974 2720 ],.... '-exit' │ │ │ -00016310: 3d3e 2031 293b 0a09 7d0a 0924 666c 6167 => 1);..}..$flag │ │ │ -00016320: 426c 6f63 6b44 6576 6963 6520 3d20 313b BlockDevice = 1; │ │ │ -00016330: 0a09 6d79 2024 6273 3b0a 0924 6273 203d ..my $bs;..$bs = │ │ │ -00016340: 2024 6368 6563 6b44 6576 6963 6573 4253 $checkDevicesBS │ │ │ -00016350: 5b24 695d 203d 0a09 2020 2020 2826 3a3a [$i] =.. (&:: │ │ │ -00016360: 7265 7665 7274 4875 6d61 6e52 6561 6461 revertHumanReada │ │ │ -00016370: 626c 6528 2463 6865 636b 4465 7669 6365 ble($checkDevice │ │ │ -00016380: 7342 535b 2469 5d29 295b 305d 3b0a 0a09 sBS[$i]))[0];... │ │ │ -00016390: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -000163a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -000163b0: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ -000163c0: 0909 2020 2020 2020 5b22 6368 6563 6b44 .. ["checkD │ │ │ -000163d0: 6576 6963 6573 4253 2469 2074 6f6f 2073 evicesBS$i too s │ │ │ -000163e0: 6d61 6c6c 2028 2462 7320 3c20 2463 6865 mall ($bs < $che │ │ │ -000163f0: 636b 426c 6f63 6b73 4253 6d69 6e29 225d ckBlocksBSmin)"] │ │ │ -00016400: 2c0a 0909 2020 2020 2020 272d 6578 6974 ,... '-exit │ │ │ -00016410: 2720 3d3e 2031 290a 0920 2020 2069 6620 ' => 1).. if │ │ │ -00016420: 2462 7320 3c20 2463 6865 636b 426c 6f63 $bs < $checkBloc │ │ │ -00016430: 6b73 4253 6d69 6e3b 0a0a 0924 7072 4c6f ksBSmin;...$prLo │ │ │ -00016440: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00016450: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ -00016460: 2027 2d73 7472 2720 3d3e 0a09 0920 2020 '-str' =>... │ │ │ -00016470: 2020 205b 2262 6c6f 636b 2073 697a 6520 ["block size │ │ │ -00016480: 666f 7220 6368 6563 6b44 6576 6963 6573 for checkDevices │ │ │ -00016490: 2469 2069 7320 2220 2e20 2463 6865 636b $i is " . $check │ │ │ -000164a0: 4465 7669 6365 7342 535b 2469 5d20 2e0a DevicesBS[$i] .. │ │ │ -000164b0: 0909 2020 2020 2020 2022 2c20 6d75 7374 .. ", must │ │ │ -000164c0: 2062 6520 246d 696e 426c 6f63 6b4c 656e be $minBlockLen │ │ │ -000164d0: 6774 6820 6f72 206d 6f72 6522 5d2c 0a09 gth or more"],.. │ │ │ -000164e0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -000164f0: 3e20 3129 0a09 2020 2020 6966 2024 6273 > 1).. if $bs │ │ │ -00016500: 203c 2024 6d69 6e42 6c6f 636b 4c65 6e67 < $minBlockLeng │ │ │ -00016510: 7468 3b0a 0a09 2470 724c 6f67 2d3e 7072 th;...$prLog->pr │ │ │ -00016520: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00016530: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ -00016540: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [" │ │ │ -00016550: 7061 7261 6d65 7465 7220 3c24 6273 3e20 parameter <$bs> │ │ │ -00016560: 666f 7220 6f70 7469 6f6e 2063 6865 636b for option check │ │ │ -00016570: 4465 7669 6365 7342 5325 6920 6861 7320 DevicesBS%i has │ │ │ -00016580: 7772 6f6e 6720 666f 726d 6174 225d 2c0a wrong format"],. │ │ │ -00016590: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ -000165a0: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles │ │ │ -000165b0: 7320 6465 6669 6e65 6420 2462 733b 0a0a s defined $bs;.. │ │ │ -000165c0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -000165d0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000165e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000165f0: 0a09 0920 2020 2020 205b 226f 7074 696f ... ["optio │ │ │ -00016600: 6e20 6368 6563 6b44 6576 6963 6573 4469 n checkDevicesDi │ │ │ -00016610: 7224 6920 6e6f 7420 7365 7422 5d2c 0a09 r$i not set"],.. │ │ │ -00016620: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00016630: 3e20 3129 0a09 2020 2020 756e 6c65 7373 > 1).. unless │ │ │ -00016640: 2064 6566 696e 6564 2024 6368 6563 6b44 defined $checkD │ │ │ -00016650: 6576 6963 6573 4469 725b 2469 5d3b 0a0a evicesDir[$i];.. │ │ │ -00016660: 096d 7920 2464 6576 4c69 7374 203d 2024 .my $devList = $ │ │ │ -00016670: 6368 6563 6b44 6576 6963 6573 5b24 695d checkDevices[$i] │ │ │ -00016680: 3b0a 096d 7920 2464 6576 4469 7220 3d20 ;..my $devDir = │ │ │ -00016690: 2463 6865 636b 4465 7669 6365 7344 6972 $checkDevicesDir │ │ │ -000166a0: 5b24 695d 3b0a 096d 7920 246c 6173 7444 [$i];..my $lastD │ │ │ -000166b0: 6576 4469 7220 3d20 2463 6865 636b 4465 evDir = $checkDe │ │ │ -000166c0: 7669 6365 7344 6972 5b24 695d 3b0a 2020 vicesDir[$i];. │ │ │ -000166d0: 2020 7d0a 0a23 7072 696e 7420 2263 6865 }..#print "che │ │ │ -000166e0: 636b 4465 7669 6365 7320 3d20 4063 6865 ckDevices = @che │ │ │ -000166f0: 636b 4465 7669 6365 735c 6e22 3b0a 2370 ckDevices\n";.#p │ │ │ -00016700: 7269 6e74 2022 6368 6563 6b44 6576 6963 rint "checkDevic │ │ │ -00016710: 6573 4469 7220 3d20 4063 6865 636b 4465 esDir = @checkDe │ │ │ -00016720: 7669 6365 7344 6972 5c6e 223b 0a23 7072 vicesDir\n";.#pr │ │ │ -00016730: 696e 7420 2263 6865 636b 4465 7669 6365 int "checkDevice │ │ │ -00016740: 7342 5320 3d20 4063 6865 636b 4465 7669 sBS = @checkDevi │ │ │ -00016750: 6365 7342 535c 6e22 3b0a 2370 7269 6e74 cesBS\n";.#print │ │ │ -00016760: 2022 6368 6563 6b44 6576 6963 6573 436f "checkDevicesCo │ │ │ -00016770: 6d70 7220 3d20 4063 6865 636b 4465 7669 mpr = @checkDevi │ │ │ -00016780: 6365 7343 6f6d 7072 5c6e 223b 0a23 7072 cesCompr\n";.#pr │ │ │ -00016790: 696e 7420 2263 6865 636b 4465 7669 6365 int "checkDevice │ │ │ -000167a0: 7350 6172 616c 6c65 6c20 3d20 4063 6865 sParallel = @che │ │ │ -000167b0: 636b 4465 7669 6365 7350 6172 616c 6c65 ckDevicesParalle │ │ │ -000167c0: 6c5c 6e22 3b0a 0a20 2020 200a 2020 2020 l\n";.. . │ │ │ -000167d0: 6966 2028 2840 6368 6563 6b42 6c6f 636b if ((@checkBlock │ │ │ -000167e0: 7352 756c 6520 6f72 2040 6368 6563 6b44 sRule or @checkD │ │ │ -000167f0: 6576 6963 6573 2920 616e 640a 0924 636f evices) and..$co │ │ │ -00016800: 6d70 7265 7373 5b30 5d20 6571 2027 627a mpress[0] eq 'bz │ │ │ -00016810: 6970 3227 290a 2020 2020 7b0a 0965 7661 ip2'). {..eva │ │ │ -00016820: 6c20 2275 7365 2049 4f3a 3a43 6f6d 7072 l "use IO::Compr │ │ │ -00016830: 6573 733a 3a42 7a69 7032 2071 7728 627a ess::Bzip2 qw(bz │ │ │ -00016840: 6970 3229 223b 0a09 6966 2028 2440 290a ip2)";..if ($@). │ │ │ -00016850: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog-> │ │ │ -00016860: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00016870: 2027 5727 2c0a 0909 0920 2027 2d73 7472 'W',.... '-str │ │ │ -00016880: 2720 3d3e 0a09 0909 2020 5b22 706c 6561 ' =>.... ["plea │ │ │ -00016890: 7365 2069 6e73 7461 6c6c 2049 4f3a 3a43 se install IO::C │ │ │ -000168a0: 6f6d 7072 6573 733a 3a42 7a69 7032 2066 ompress::Bzip2 f │ │ │ -000168b0: 726f 6d20 2220 2e0a 0909 0920 2020 2243 rom " ..... "C │ │ │ -000168c0: 5041 4e20 666f 7220 6265 7474 6572 2070 PAN for better p │ │ │ -000168d0: 6572 666f 726d 616e 6365 225d 290a 0909 erformance"])... │ │ │ -000168e0: 756e 6c65 7373 2024 7375 7070 7265 7373 unless $suppress │ │ │ -000168f0: 5761 726e 696e 677b 2775 7365 5f49 4f43 Warning{'use_IOC │ │ │ -00016900: 6f6d 7072 6573 7342 7a69 7032 277d 3b0a ompressBzip2'};. │ │ │ -00016910: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. │ │ │ -00016920: 2024 6d61 696e 3a3a 494f 436f 6d70 7265 $main::IOCompre │ │ │ -00016930: 7373 4469 7265 6374 203d 2031 3b0a 097d ssDirect = 1;..} │ │ │ -00016940: 0a20 2020 207d 0a7d 0a0a 2470 724c 6f67 . }.}..$prLog │ │ │ -00016950: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00016960: 3d3e 2027 4127 2c0a 0920 2020 2020 2027 => 'A',.. ' │ │ │ -00016970: 2d73 7472 2720 3d3e 205b 2262 6163 6b69 -str' => ["backi │ │ │ -00016980: 6e67 2075 7020 6469 7265 6374 6f72 7920 ng up directory │ │ │ -00016990: 3c24 736f 7572 6365 4469 723e 2074 6f20 <$sourceDir> to │ │ │ -000169a0: 3c24 7461 7267 6574 4469 723e 225d 293b <$targetDir>"]); │ │ │ -000169b0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -000169c0: 2d6b 696e 6427 203d 3e20 2756 272c 0a09 -kind' => 'V',.. │ │ │ -000169d0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -000169e0: 5b22 7374 6f72 6542 6163 6b75 702e 706c ["storeBackup.pl │ │ │ -000169f0: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA │ │ │ -00016a00: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION"]);. │ │ │ -00016a10: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00016a20: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ -00016a30: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00016a40: 5b22 6f70 7469 6f6e 205c 2263 6f70 7942 ["option \"copyB │ │ │ -00016a50: 574c 696d 6974 5c22 2069 7320 6465 7072 WLimit\" is depr │ │ │ -00016a60: 6563 6174 6564 2c20 706c 6561 7365 2022 ecated, please " │ │ │ -00016a70: 202e 0a09 0909 2022 7265 6d6f 7665 2066 ..... "remove f │ │ │ -00016a80: 726f 6d20 796f 7572 2063 6f6e 6669 6775 rom your configu │ │ │ -00016a90: 7261 7469 6f6e 225d 290a 2020 2020 6966 ration"]). if │ │ │ -00016aa0: 2064 6566 696e 6564 2024 636f 7079 4257 defined $copyBW │ │ │ -00016ab0: 4c69 6d69 743b 0a0a 6576 616c 2022 7573 Limit;..eval "us │ │ │ -00016ac0: 6520 4442 5f46 696c 6522 3b0a 6966 2028 e DB_File";.if ( │ │ │ -00016ad0: 2440 290a 7b0a 2020 2020 2470 724c 6f67 $@).{. $prLog │ │ │ -00016ae0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00016af0: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st │ │ │ -00016b00: 7227 203d 3e20 5b22 706c 6561 7365 2069 r' => ["please i │ │ │ -00016b10: 6e73 7461 6c6c 2044 425f 4669 6c65 2066 nstall DB_File f │ │ │ -00016b20: 726f 6d20 2220 2e0a 0909 0920 2020 2020 rom " ..... │ │ │ -00016b30: 2243 5041 4e20 666f 7220 6265 7474 6572 "CPAN for better │ │ │ -00016b40: 2070 6572 666f 726d 616e 6365 225d 290a performance"]). │ │ │ -00016b50: 0975 6e6c 6573 7320 6578 6973 7473 2024 .unless exists $ │ │ │ -00016b60: 7375 7070 7265 7373 5761 726e 696e 677b suppressWarning{ │ │ │ -00016b70: 2775 7365 5f44 425f 4669 6c65 277d 3b0a 'use_DB_File'};. │ │ │ -00016b80: 7d0a 0a23 204f 532d 5479 7020 6665 7374 }..# OS-Typ fest │ │ │ -00016b90: 7374 656c 6c65 6e2c 2075 6d20 4152 475f stellen, um ARG_ │ │ │ -00016ba0: 4d41 5820 7a75 2073 6574 7a65 6e0a 2320 MAX zu setzen.# │ │ │ -00016bb0: 4465 6661 756c 7420 7769 7264 2076 6f72 Default wird vor │ │ │ -00016bc0: 7369 6368 7473 6861 6c62 6572 2061 7566 sichtshalber auf │ │ │ -00016bd0: 2034 204b 4220 6765 7365 747a 7421 0a7b 4 KB gesetzt!.{ │ │ │ -00016be0: 0a20 2020 206d 7920 2475 6e61 6d65 203d . my $uname = │ │ │ -00016bf0: 2066 6f72 6b50 726f 632d 3e6e 6577 2827 forkProc->new(' │ │ │ -00016c00: 2d65 7865 6327 203d 3e20 2775 6e61 6d65 -exec' => 'uname │ │ │ -00016c10: 272c 0a09 0909 2020 2020 2020 272d 6f75 ',.... '-ou │ │ │ -00016c20: 7452 616e 646f 6d27 203d 3e20 2224 746d tRandom' => "$tm │ │ │ -00016c30: 7064 6972 2f75 6e61 6d65 2d22 2c0a 0909 pdir/uname-",... │ │ │ -00016c40: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ -00016c50: 3d3e 2024 7072 4c6f 6729 3b0a 2020 2020 => $prLog);. │ │ │ -00016c60: 2475 6e61 6d65 2d3e 7761 6974 2829 3b0a $uname->wait();. │ │ │ -00016c70: 2020 2020 6d79 2024 6f75 7420 3d20 2475 my $out = $u │ │ │ -00016c80: 6e61 6d65 2d3e 6765 7453 5444 4f55 5428 name->getSTDOUT( │ │ │ -00016c90: 293b 0a20 2020 206d 7920 246f 7320 3d20 );. my $os = │ │ │ -00016ca0: 2727 3b0a 0a20 2020 2069 6620 2865 7869 '';.. if (exi │ │ │ -00016cb0: 7374 7320 2465 7865 6350 6172 616d 4c65 sts $execParamLe │ │ │ -00016cc0: 6e67 7468 7b24 246f 7574 5b30 5d7d 290a ngth{$$out[0]}). │ │ │ -00016cd0: 2020 2020 7b0a 0924 6d61 696e 3a3a 6578 {..$main::ex │ │ │ -00016ce0: 6563 5061 7261 6d4c 656e 6774 6820 3d20 ecParamLength = │ │ │ -00016cf0: 2465 7865 6350 6172 616d 4c65 6e67 7468 $execParamLength │ │ │ -00016d00: 7b24 246f 7574 5b30 5d7d 3b0a 0924 6f73 {$$out[0]};..$os │ │ │ -00016d10: 203d 2027 2028 2720 2e20 2424 6f75 745b = ' (' . $$out[ │ │ │ -00016d20: 305d 202e 2027 2927 3b0a 0a09 6966 2028 0] . ')';...if ( │ │ │ -00016d30: 2424 6f75 745b 305d 2065 7120 274c 696e $$out[0] eq 'Lin │ │ │ -00016d40: 7578 2720 616e 6420 6e6f 7420 2467 6e75 ux' and not $gnu │ │ │ -00016d50: 6370 290a 097b 0a09 2020 2020 2467 6e75 cp)..{.. $gnu │ │ │ -00016d60: 6370 203d 2031 3b0a 0920 2020 2024 7072 cp = 1;.. $pr │ │ │ -00016d70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00016d80: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ -00016d90: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [ │ │ │ -00016da0: 2273 6574 7469 6e67 206f 7074 696f 6e20 "setting option │ │ │ -00016db0: 2763 7049 7347 6e75 2720 6265 6361 7573 'cpIsGnu' becaus │ │ │ -00016dc0: 6520 4c69 6e75 7820 7379 7374 656d 2069 e Linux system i │ │ │ -00016dd0: 7320 7265 636f 676e 697a 6564 225d 293b s recognized"]); │ │ │ -00016de0: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p │ │ │ -00016df0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00016e00: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... │ │ │ -00016e10: 272d 7374 7227 203d 3e20 5b27 7365 7474 '-str' => ['sett │ │ │ -00016e20: 696e 6720 4152 475f 4d41 5820 746f 2027 ing ARG_MAX to ' │ │ │ -00016e30: 202e 2024 6d61 696e 3a3a 6578 6563 5061 . $main::execPa │ │ │ -00016e40: 7261 6d4c 656e 6774 6820 2e0a 0909 0920 ramLength ..... │ │ │ -00016e50: 2020 2020 246f 735d 293b 0a20 2020 2024 $os]);. $ │ │ │ -00016e60: 6f75 7420 3d20 2475 6e61 6d65 2d3e 6765 out = $uname->ge │ │ │ -00016e70: 7453 5444 4552 5228 293b 0a20 2020 2024 tSTDERR();. $ │ │ │ -00016e80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00016e90: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00016ea0: 2027 2d73 7472 2720 3d3e 205b 2253 5444 '-str' => ["STD │ │ │ -00016eb0: 4552 5220 6f66 203c 756e 616d 653e 3a22 ERR of :" │ │ │ -00016ec0: 2c20 4024 6f75 745d 290a 0969 6620 2840 , @$out])..if (@ │ │ │ -00016ed0: 246f 7574 203e 2030 293b 0a0a 2020 2020 $out > 0);.. │ │ │ -00016ee0: 2320 6368 6563 6b20 6966 2065 7874 6572 # check if exter │ │ │ -00016ef0: 6e61 6c20 7072 6f67 7261 6d73 2065 7869 nal programs exi │ │ │ -00016f00: 7374 2069 6e20 7061 7468 0a20 2020 206d st in path. m │ │ │ -00016f10: 7920 2840 6d69 7373 696e 6729 203d 0a09 y (@missing) =.. │ │ │ -00016f20: 263a 3a63 6865 636b 5072 6f67 4578 6973 &::checkProgExis │ │ │ -00016f30: 7473 2824 7072 4c6f 672c 2027 6d64 3573 ts($prLog, 'md5s │ │ │ -00016f40: 756d 272c 2027 6370 272c 2027 627a 6970 um', 'cp', 'bzip │ │ │ -00016f50: 3227 2c20 276d 6b6e 6f64 272c 0a09 0909 2', 'mknod',.... │ │ │ -00016f60: 2020 2027 6d6f 756e 7427 2c20 2463 6f6d 'mount', $com │ │ │ -00016f70: 7072 6573 735b 305d 2c20 2475 6e63 6f6d press[0], $uncom │ │ │ -00016f80: 7072 6573 735b 305d 293b 0a20 2020 2069 press[0]);. i │ │ │ -00016f90: 6620 2840 6d69 7373 696e 6729 0a20 2020 f (@missing). │ │ │ -00016fa0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin │ │ │ -00016fb0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00016fc0: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ -00016fd0: 203d 3e20 5b22 7468 6520 666f 6c6c 6f77 => ["the follow │ │ │ -00016fe0: 696e 6720 7072 6f67 7261 6d73 2061 7265 ing programs are │ │ │ -00016ff0: 206e 6f74 2069 6e20 5c24 5041 5448 3a22 not in \$PATH:" │ │ │ -00017000: 2c0a 0909 0909 2022 5c74 406d 6973 7369 ,..... "\t@missi │ │ │ -00017010: 6e67 222c 0a09 0909 0920 2270 6c65 6173 ng",..... "pleas │ │ │ -00017020: 6520 696e 7374 616c 6c20 6f72 2063 6865 e install or che │ │ │ -00017030: 636b 205c 2450 4154 4822 2c0a 0909 0909 ck \$PATH",..... │ │ │ -00017040: 2022 5c24 5041 5448 2069 7320 2220 2e20 "\$PATH is " . │ │ │ -00017050: 2445 4e56 7b27 5041 5448 277d 5d2c 0a09 $ENV{'PATH'}],.. │ │ │ -00017060: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00017070: 3e20 3129 3b0a 2020 2020 7d0a 7d0a 0a0a > 1);. }.}... │ │ │ -00017080: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00017090: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0920 kind' => 'I',.. │ │ │ -000170a0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -000170b0: 2270 7265 7365 7276 6520 5065 726d 7320 "preserve Perms │ │ │ -000170c0: 6973 206e 6f74 2073 6574 225d 290a 2020 is not set"]). │ │ │ -000170d0: 2020 6966 2024 7072 6573 6572 7665 5065 if $preservePe │ │ │ -000170e0: 726d 7320 6571 2027 6e6f 273b 0a0a 230a rms eq 'no';..#. │ │ │ -000170f0: 2320 696e 6974 6961 6c69 7365 2069 6e63 # initialise inc │ │ │ -00017100: 6c75 6465 2c20 6578 636c 7564 6520 616e lude, exclude an │ │ │ -00017110: 6420 6368 6563 6b42 6c6f 636b 7320 7275 d checkBlocks ru │ │ │ -00017120: 6c65 730a 230a 6d79 2024 6578 6352 756c les.#.my $excRul │ │ │ -00017130: 6520 3d20 6576 616c 496e 6f64 6552 756c e = evalInodeRul │ │ │ -00017140: 652d 3e6e 6577 2827 2d6c 696e 6527 203d e->new('-line' = │ │ │ -00017150: 3e20 2465 7863 6570 7452 756c 652c 0a09 > $exceptRule,.. │ │ │ -00017160: 0909 0920 272d 6b65 794e 616d 6527 203d ... '-keyName' = │ │ │ -00017170: 3e20 2765 7863 6570 7452 756c 6527 2c0a > 'exceptRule',. │ │ │ -00017180: 0909 0909 2027 2d64 6562 7567 2720 3d3e .... '-debug' => │ │ │ -00017190: 2024 6465 6275 672c 0a09 0909 0920 272d $debug,..... '- │ │ │ -000171a0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd │ │ │ -000171b0: 6972 2c0a 0909 0909 2027 2d70 724c 6f67 ir,..... '-prLog │ │ │ -000171c0: 2720 3d3e 2024 7072 4c6f 6729 3b0a 6d79 ' => $prLog);.my │ │ │ -000171d0: 2024 696e 6352 756c 6520 3d20 6576 616c $incRule = eval │ │ │ -000171e0: 496e 6f64 6552 756c 652d 3e6e 6577 2827 InodeRule->new(' │ │ │ -000171f0: 2d6c 696e 6527 203d 3e20 2469 6e63 6c75 -line' => $inclu │ │ │ -00017200: 6465 5275 6c65 2c0a 0909 0909 2027 2d6b deRule,..... '-k │ │ │ -00017210: 6579 4e61 6d65 2720 3d3e 2027 696e 636c eyName' => 'incl │ │ │ -00017220: 7564 6552 756c 6527 2c0a 0909 0909 2027 udeRule',..... ' │ │ │ -00017230: 2d64 6562 7567 2720 3d3e 2024 6465 6275 -debug' => $debu │ │ │ -00017240: 672c 0a09 0909 0920 272d 746d 7064 6972 g,..... '-tmpdir │ │ │ -00017250: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,... │ │ │ -00017260: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $ │ │ │ -00017270: 7072 4c6f 6729 3b0a 0a69 6620 2824 6368 prLog);..if ($ch │ │ │ -00017280: 6563 6b43 6f6d 7072 290a 7b0a 2020 2020 eckCompr).{. │ │ │ -00017290: 2463 6f6d 7072 5275 6c65 203d 2065 7661 $comprRule = eva │ │ │ -000172a0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new( │ │ │ -000172b0: 272d 6c69 6e65 2720 3d3e 0a09 2020 2020 '-line' =>.. │ │ │ -000172c0: 2020 205b 2724 7369 7a65 203e 2031 3032 ['$size > 102 │ │ │ -000172d0: 3427 2c20 2761 6e64 272c 2027 263a 3a43 4', 'and', '&::C │ │ │ -000172e0: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK │ │ │ -000172f0: 2824 6669 6c65 2927 5d2c 0a09 0909 0920 ($file)'],..... │ │ │ -00017300: 2020 2027 2d6b 6579 4e61 6d65 2720 3d3e '-keyName' => │ │ │ -00017310: 2027 636f 6d70 7252 756c 6527 2c0a 0909 'comprRule',... │ │ │ -00017320: 0909 2020 2020 272d 6465 6275 6727 203d .. '-debug' = │ │ │ -00017330: 3e20 2464 6562 7567 2c0a 0909 0909 2020 > $debug,..... │ │ │ -00017340: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $ │ │ │ -00017350: 746d 7064 6972 2c0a 0909 0909 2020 2020 tmpdir,..... │ │ │ -00017360: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -00017370: 6f67 293b 0a7d 0a65 6c73 6966 2028 2463 og);.}.elsif ($c │ │ │ -00017380: 6f6d 7072 5275 6c65 290a 7b0a 2020 2020 omprRule).{. │ │ │ -00017390: 2463 6f6d 7072 5275 6c65 203d 2065 7661 $comprRule = eva │ │ │ -000173a0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new( │ │ │ -000173b0: 272d 6c69 6e65 2720 3d3e 2024 636f 6d70 '-line' => $comp │ │ │ -000173c0: 7252 756c 652c 0a09 0909 0920 2020 2027 rRule,..... ' │ │ │ -000173d0: 2d6b 6579 4e61 6d65 2720 3d3e 2027 636f -keyName' => 'co │ │ │ -000173e0: 6d70 7252 756c 6527 2c0a 0909 0909 2020 mprRule',..... │ │ │ -000173f0: 2020 272d 6465 6275 6727 203d 3e20 2464 '-debug' => $d │ │ │ -00017400: 6562 7567 2c0a 0909 0909 2020 2020 272d ebug,..... '- │ │ │ -00017410: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd │ │ │ -00017420: 6972 2c0a 0909 0909 2020 2020 272d 7072 ir,..... '-pr │ │ │ -00017430: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -00017440: 2020 0a7d 0a65 6c73 650a 7b0a 2020 2020 .}.else.{. │ │ │ -00017450: 6d79 2028 4072 2920 3d20 2829 3b0a 0a20 my (@r) = ();.. │ │ │ -00017460: 2020 2070 7573 6820 4072 2c20 225c 2473 push @r, "\$s │ │ │ -00017470: 697a 6520 3e20 246d 696e 436f 6d70 7265 ize > $minCompre │ │ │ -00017480: 7373 5369 7a65 2061 6e64 2220 6966 2024 ssSize and" if $ │ │ │ -00017490: 6d69 6e43 6f6d 7072 6573 7353 697a 6520 minCompressSize │ │ │ -000174a0: 3e20 303b 0a0a 2020 2020 6d79 2024 6578 > 0;.. my $ex │ │ │ -000174b0: 6365 7074 5375 6666 6978 5061 7474 6572 ceptSuffixPatter │ │ │ -000174c0: 6e20 3d0a 096a 6f69 6e28 275c 5a7c 272c n =..join('\Z|', │ │ │ -000174d0: 2040 6578 6365 7074 5375 6666 6978 2920 @exceptSuffix) │ │ │ -000174e0: 2e20 275c 5a27 3b0a 0a20 2020 2070 7573 . '\Z';.. pus │ │ │ -000174f0: 6820 4072 2c20 226e 6f74 205c 2466 696c h @r, "not \$fil │ │ │ -00017500: 6520 3d7e 202f 2465 7863 6570 7453 7566 e =~ /$exceptSuf │ │ │ -00017510: 6669 7850 6174 7465 726e 2f69 2220 6966 fixPattern/i" if │ │ │ -00017520: 2040 6578 6365 7074 5375 6666 6978 3b0a @exceptSuffix;. │ │ │ -00017530: 0a20 2020 2069 6620 2824 636f 6d70 7265 . if ($compre │ │ │ -00017540: 7373 5375 6666 6978 290a 2020 2020 7b0a ssSuffix). {. │ │ │ -00017550: 0970 7573 6820 4072 2c20 2761 6e64 272c .push @r, 'and', │ │ │ -00017560: 2027 2827 3b0a 0a09 6d79 2024 636f 6d70 '(';...my $comp │ │ │ -00017570: 7253 7566 6669 7850 6174 7465 726e 203d rSuffixPattern = │ │ │ -00017580: 0a09 2020 2020 6a6f 696e 2827 5c5a 7c27 .. join('\Z|' │ │ │ -00017590: 2c20 4024 636f 6d70 7265 7373 5375 6666 , @$compressSuff │ │ │ -000175a0: 6978 2920 2e20 275c 5a27 3b0a 0970 7573 ix) . '\Z';..pus │ │ │ -000175b0: 6820 4072 2c20 225c 2466 696c 6520 3d7e h @r, "\$file =~ │ │ │ -000175c0: 202f 2463 6f6d 7072 5375 6666 6978 5061 /$comprSuffixPa │ │ │ -000175d0: 7474 6572 6e2f 6922 3b0a 0970 7573 6820 ttern/i";..push │ │ │ -000175e0: 4072 2c20 276f 7227 3b0a 0a09 7075 7368 @r, 'or';...push │ │ │ -000175f0: 2040 722c 2027 263a 3a43 4f4d 5052 4553 @r, '&::COMPRES │ │ │ -00017600: 5349 4f4e 5f43 4845 434b 2824 6669 6c65 SION_CHECK($file │ │ │ -00017610: 2927 3b0a 0a09 7075 7368 2040 722c 2027 )';...push @r, ' │ │ │ -00017620: 2927 3b0a 2020 2020 7d0a 0a20 2020 2024 )';. }.. $ │ │ │ -00017630: 636f 6d70 7252 756c 6520 3d20 6576 616c comprRule = eval │ │ │ -00017640: 496e 6f64 6552 756c 652d 3e6e 6577 2827 InodeRule->new(' │ │ │ -00017650: 2d6c 696e 6527 203d 3e20 5c40 722c 0a09 -line' => \@r,.. │ │ │ -00017660: 0909 0920 2020 2027 2d6b 6579 4e61 6d65 ... '-keyName │ │ │ -00017670: 2720 3d3e 2027 636f 6d70 7252 756c 6527 ' => 'comprRule' │ │ │ -00017680: 2c0a 0909 0909 2020 2020 272d 6465 6275 ,..... '-debu │ │ │ -00017690: 6727 203d 3e20 2464 6562 7567 2c0a 0909 g' => $debug,... │ │ │ -000176a0: 0909 2020 2020 272d 746d 7064 6972 2720 .. '-tmpdir' │ │ │ -000176b0: 3d3e 2024 746d 7064 6972 2c0a 0909 0909 => $tmpdir,..... │ │ │ -000176c0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ -000176d0: 2470 724c 6f67 293b 0a7d 0a24 7072 4c6f $prLog);.}.$prLo │ │ │ -000176e0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000176f0: 203d 3e20 2749 272c 0a09 2020 2020 2020 => 'I',.. │ │ │ -00017700: 272d 7374 7227 203d 3e20 5b22 636f 6d70 '-str' => ["comp │ │ │ -00017710: 7252 756c 6520 3d20 2220 2e0a 0909 0920 rRule = " ..... │ │ │ -00017720: 2463 6f6d 7072 5275 6c65 2d3e 6765 744c $comprRule->getL │ │ │ -00017730: 696e 6553 7472 696e 6728 295d 290a 2020 ineString()]). │ │ │ -00017740: 2020 6966 2024 636f 6d70 7252 756c 652d if $comprRule- │ │ │ -00017750: 3e68 6173 4c69 6e65 2829 3b0a 6d79 2024 >hasLine();.my $ │ │ │ -00017760: 6368 6252 756c 6520 3d20 6576 616c 496e chbRule = evalIn │ │ │ -00017770: 6f64 6552 756c 654d 756c 7469 706c 652d odeRuleMultiple- │ │ │ -00017780: 3e6e 6577 2827 2d6c 696e 6573 2720 3d3e >new('-lines' => │ │ │ -00017790: 205c 4063 6865 636b 426c 6f63 6b73 5275 \@checkBlocksRu │ │ │ -000177a0: 6c65 2c0a 0909 0909 0920 272d 626c 6f63 le,...... '-bloc │ │ │ -000177b0: 6b53 697a 6527 203d 3e20 5c40 6368 6563 kSize' => \@chec │ │ │ -000177c0: 6b42 6c6f 636b 7342 532c 0a09 0909 0909 kBlocksBS,...... │ │ │ -000177d0: 2027 2d62 6c6f 636b 436f 6d70 7265 7373 '-blockCompress │ │ │ -000177e0: 2720 3d3e 205c 4063 6865 636b 426c 6f63 ' => \@checkBloc │ │ │ -000177f0: 6b73 436f 6d70 722c 0a09 0909 0909 2027 ksCompr,...... ' │ │ │ -00017800: 2d62 6c6f 636b 5265 6164 2720 3d3e 205c -blockRead' => \ │ │ │ -00017810: 4063 6865 636b 426c 6f63 6b73 5265 6164 @checkBlocksRead │ │ │ -00017820: 2c0a 0909 0909 0920 272d 626c 6f63 6b50 ,...... '-blockP │ │ │ -00017830: 6172 616c 6c65 6c27 203d 3e0a 0909 0909 arallel' =>..... │ │ │ -00017840: 0920 5c40 6368 6563 6b42 6c6f 636b 7350 . \@checkBlocksP │ │ │ -00017850: 6172 616c 6c65 6c2c 0a09 0909 0909 2027 arallel,...... ' │ │ │ -00017860: 2d6b 6579 4e61 6d65 2720 3d3e 2027 6368 -keyName' => 'ch │ │ │ -00017870: 6563 6b42 6c6f 636b 7352 756c 6527 2c0a eckBlocksRule',. │ │ │ -00017880: 0909 0909 0920 272d 6465 6275 6727 203d ..... '-debug' = │ │ │ -00017890: 3e20 2464 6562 7567 2c0a 0909 0909 0920 > $debug,...... │ │ │ -000178a0: 272d 746d 7064 6972 2720 3d3e 2024 746d '-tmpdir' => $tm │ │ │ -000178b0: 7064 6972 2c0a 0909 0909 0920 272d 7072 pdir,...... '-pr │ │ │ -000178c0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -000178d0: 0a0a 0a6d 7920 2473 7461 7274 4461 7465 ...my $startDate │ │ │ -000178e0: 203d 2064 6174 6554 6f6f 6c73 2d3e 6e65 = dateTools->ne │ │ │ -000178f0: 7728 293b 0a0a 230a 2320 6f74 6865 7242 w();..#.# otherB │ │ │ -00017900: 6163 6b75 7053 6572 6965 7320 6572 6d69 ackupSeries ermi │ │ │ -00017910: 7474 656c 6e20 756e 6420 696e 206b 6f72 tteln und in kor │ │ │ -00017920: 7265 6b74 6572 2052 6569 6865 6e66 6f6c rekter Reihenfol │ │ │ -00017930: 6765 2073 6f72 7469 6572 656e 0a23 2028 ge sortieren.# ( │ │ │ -00017940: 6e65 7565 7374 6520 7a75 6c65 747a 7429 neueste zuletzt) │ │ │ -00017950: 2e20 4461 7320 6973 7420 7769 6368 7469 . Das ist wichti │ │ │ -00017960: 672c 2064 616d 6974 2063 7469 6d65 2065 g, damit ctime e │ │ │ -00017970: 7463 2e20 6569 6e65 7220 7a75 0a23 2073 tc. einer zu.# s │ │ │ -00017980: 6963 6865 726e 6465 6e20 4461 7465 6920 ichernden Datei │ │ │ -00017990: 6175 6368 2064 656e 206e 6575 6573 7465 auch den neueste │ │ │ -000179a0: 6e20 6172 6368 6976 6965 7274 656e 2044 n archivierten D │ │ │ -000179b0: 6174 656e 2076 6572 676c 6963 6865 6e0a aten verglichen. │ │ │ -000179c0: 2320 7769 7264 2e0a 230a 0a23 2063 6f6e # wird..#..# con │ │ │ -000179d0: 7369 6465 7220 6c61 7374 206f 6620 6261 sider last of ba │ │ │ -000179e0: 636b 7570 206f 6620 616c 6c20 7365 7269 ckup of all seri │ │ │ -000179f0: 6573 2069 6620 6e6f 7420 7370 6563 6966 es if not specif │ │ │ -00017a00: 6965 640a 2370 7269 6e74 2022 3120 6f74 ied.#print "1 ot │ │ │ -00017a10: 6865 7242 6163 6b75 7053 6572 6965 7320 herBackupSeries │ │ │ -00017a20: 3d20 5c6e 5c74 3c22 2c20 6a6f 696e 2822 = \n\t<", join(" │ │ │ -00017a30: 3e5c 6e5c 743c 222c 2040 6f74 6865 7242 >\n\t<", @otherB │ │ │ -00017a40: 6163 6b75 7053 6572 6965 7329 2c20 223e ackupSeries), "> │ │ │ -00017a50: 5c6e 223b 0a69 6620 2840 6f74 6865 7242 \n";.if (@otherB │ │ │ -00017a60: 6163 6b75 7053 6572 6965 7320 3d3d 2030 ackupSeries == 0 │ │ │ -00017a70: 290a 7b0a 2020 2020 666f 7265 6163 6820 ).{. foreach │ │ │ -00017a80: 6d79 2024 6420 2826 3a3a 7265 6164 416c my $d (&::readAl │ │ │ -00017a90: 6c42 6163 6b75 7053 6572 6965 7328 2462 lBackupSeries($b │ │ │ -00017aa0: 6163 6b75 7044 6972 2c20 2470 724c 6f67 ackupDir, $prLog │ │ │ -00017ab0: 2929 0a20 2020 207b 0a09 7075 7368 2040 )). {..push @ │ │ │ -00017ac0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ -00017ad0: 732c 2022 303a 2464 223b 0a20 2020 207d s, "0:$d";. } │ │ │ -00017ae0: 0a7d 0a65 6c73 6520 2020 2320 6576 616c .}.else # eval │ │ │ -00017af0: 7561 7465 202f 2072 6570 6c61 6365 2077 uate / replace w │ │ │ -00017b00: 696c 6463 6172 6473 2066 6f72 206f 7468 ildcards for oth │ │ │ -00017b10: 6572 4261 636b 7570 5365 7269 6573 0a7b erBackupSeries.{ │ │ │ -00017b20: 0a20 2020 206d 7920 2840 6e65 7742 6163 . my (@newBac │ │ │ -00017b30: 6b75 7053 6572 6965 7329 203d 2028 293b kupSeries) = (); │ │ │ -00017b40: 0a20 2020 206d 7920 2840 7375 6274 7261 . my (@subtra │ │ │ -00017b50: 6374 4261 636b 7570 5365 7269 6573 2920 ctBackupSeries) │ │ │ -00017b60: 3d20 2829 3b0a 2020 2020 666f 7265 6163 = ();. foreac │ │ │ -00017b70: 6820 6d79 2024 6420 2840 6f74 6865 7242 h my $d (@otherB │ │ │ -00017b80: 6163 6b75 7053 6572 6965 7329 0a20 2020 ackupSeries). │ │ │ -00017b90: 207b 0a09 6d79 2028 2472 616e 6765 2c20 {..my ($range, │ │ │ -00017ba0: 2473 293b 0a09 6d79 2024 6e20 3d20 2824 $s);..my $n = ($ │ │ │ -00017bb0: 7261 6e67 652c 2024 7329 203d 2024 6420 range, $s) = $d │ │ │ -00017bc0: 3d7e 202f 5c41 282e 2a3f 293a 282e 2a29 =~ /\A(.*?):(.*) │ │ │ -00017bd0: 5c5a 2f3b 0a09 2470 724c 6f67 2d3e 7072 \Z/;..$prLog->pr │ │ │ -00017be0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00017bf0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ -00017c00: 7227 203d 3e20 5b22 696e 7661 6c69 6420 r' => ["invalid │ │ │ -00017c10: 6f72 206e 6f20 7261 6e67 6520 696e 2070 or no range in p │ │ │ -00017c20: 6172 616d 203c 2464 3e2c 2065 7869 7469 aram <$d>, exiti │ │ │ -00017c30: 6e67 225d 2c0a 0909 2020 2020 2020 272d ng"],... '- │ │ │ -00017c40: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ -00017c50: 2075 6e6c 6573 7320 246e 203d 3d20 323b unless $n == 2; │ │ │ -00017c60: 0a0a 0969 6620 2824 7261 6e67 6520 3d7e ...if ($range =~ │ │ │ -00017c70: 202f 5c41 5c2d 282e 2a29 2f29 2020 2020 /\A\-(.*)/) │ │ │ -00017c80: 2020 2020 2320 7375 6274 7261 6374 0a09 # subtract.. │ │ │ -00017c90: 7b0a 0920 2020 206d 7920 2840 7362 7329 {.. my (@sbs) │ │ │ -00017ca0: 203d 2026 6576 616c 4578 6365 7074 696f = &evalExceptio │ │ │ -00017cb0: 6e4c 6973 7428 5b24 735d 2c20 2462 6163 nList([$s], $bac │ │ │ -00017cc0: 6b75 7044 6972 2c20 276f 7468 6572 4261 kupDir, 'otherBa │ │ │ -00017cd0: 636b 7570 5365 7269 6573 272c 0a09 0909 ckupSeries',.... │ │ │ -00017ce0: 0909 2020 2027 6176 6f69 6420 7365 7269 .. 'avoid seri │ │ │ -00017cf0: 6573 272c 2031 2c20 756e 6465 662c 2031 es', 1, undef, 1 │ │ │ -00017d00: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. │ │ │ -00017d10: 666f 7265 6163 6820 6d79 2024 6e65 7720 foreach my $new │ │ │ -00017d20: 2840 7362 7329 0a09 2020 2020 7b0a 0909 (@sbs).. {... │ │ │ -00017d30: 7075 7368 2040 7375 6274 7261 6374 4261 push @subtractBa │ │ │ -00017d40: 636b 7570 5365 7269 6573 2c20 2224 7261 ckupSeries, "$ra │ │ │ -00017d50: 6e67 653a 246e 6577 223b 0a09 2020 2020 nge:$new";.. │ │ │ -00017d60: 7d0a 097d 0a09 656c 7365 0a09 7b0a 0920 }..}..else..{.. │ │ │ -00017d70: 2020 206d 7920 2840 6e62 7329 203d 2026 my (@nbs) = & │ │ │ -00017d80: 6576 616c 4578 6365 7074 696f 6e4c 6973 evalExceptionLis │ │ │ -00017d90: 7428 5b24 735d 2c20 2462 6163 6b75 7044 t([$s], $backupD │ │ │ -00017da0: 6972 2c20 276f 7468 6572 4261 636b 7570 ir, 'otherBackup │ │ │ -00017db0: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... │ │ │ -00017dc0: 2027 636f 6e73 6964 6572 2073 6572 6965 'consider serie │ │ │ -00017dd0: 7327 2c20 302c 2075 6e64 6566 2c20 312c s', 0, undef, 1, │ │ │ -00017de0: 2024 7072 4c6f 6729 3b0a 0920 2020 2066 $prLog);.. f │ │ │ -00017df0: 6f72 6561 6368 206d 7920 246e 6577 2028 oreach my $new ( │ │ │ -00017e00: 406e 6273 290a 0920 2020 207b 0a09 0970 @nbs).. {...p │ │ │ -00017e10: 7573 6820 406e 6577 4261 636b 7570 5365 ush @newBackupSe │ │ │ -00017e20: 7269 6573 2c20 2224 7261 6e67 653a 246e ries, "$range:$n │ │ │ -00017e30: 6577 223b 0a09 2020 2020 7d0a 097d 0a20 ew";.. }..}. │ │ │ -00017e40: 2020 207d 0a20 2020 2023 2073 7562 7472 }. # subtr │ │ │ -00017e50: 6163 7420 4073 7562 7472 6163 7442 6163 act @subtractBac │ │ │ -00017e60: 6b75 7053 6572 6965 7320 6672 6f6d 2040 kupSeries from @ │ │ │ -00017e70: 6e65 7742 6163 6b75 7053 6572 6965 730a newBackupSeries. │ │ │ -00017e80: 2020 2020 6d79 2028 256e 6577 4261 636b my (%newBack │ │ │ -00017e90: 7570 5365 7269 6573 293b 0a20 2020 2066 upSeries);. f │ │ │ -00017ea0: 6f72 6561 6368 206d 7920 246e 2028 406e oreach my $n (@n │ │ │ -00017eb0: 6577 4261 636b 7570 5365 7269 6573 290a ewBackupSeries). │ │ │ -00017ec0: 2020 2020 7b0a 0924 6e20 3d7e 202f 5c41 {..$n =~ /\A │ │ │ -00017ed0: 282e 2a3f 293a 282e 2a29 5c5a 2f3b 0a09 (.*?):(.*)\Z/;.. │ │ │ -00017ee0: 246e 6577 4261 636b 7570 5365 7269 6573 $newBackupSeries │ │ │ -00017ef0: 7b24 327d 203d 2024 313b 0a20 2020 207d {$2} = $1;. } │ │ │ -00017f00: 0a20 2020 2066 6f72 6561 6368 206d 7920 . foreach my │ │ │ -00017f10: 2473 2028 4073 7562 7472 6163 7442 6163 $s (@subtractBac │ │ │ -00017f20: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). { │ │ │ -00017f30: 0a09 2473 203d 7e20 2f5c 4128 2e2a 3f29 ..$s =~ /\A(.*?) │ │ │ -00017f40: 3a28 2e2a 295c 5a2f 3b0a 0964 656c 6574 :(.*)\Z/;..delet │ │ │ -00017f50: 6520 246e 6577 4261 636b 7570 5365 7269 e $newBackupSeri │ │ │ -00017f60: 6573 7b24 327d 2069 6620 6465 6669 6e65 es{$2} if define │ │ │ -00017f70: 6420 246e 6577 4261 636b 7570 5365 7269 d $newBackupSeri │ │ │ -00017f80: 6573 7b24 327d 3b0a 2020 2020 7d0a 0a20 es{$2};. }.. │ │ │ -00017f90: 2020 2028 406f 7468 6572 4261 636b 7570 (@otherBackup │ │ │ -00017fa0: 5365 7269 6573 2920 3d20 2829 3b0a 2020 Series) = ();. │ │ │ -00017fb0: 2020 6d79 2028 4070 7229 3b0a 2020 2020 my (@pr);. │ │ │ -00017fc0: 666f 7265 6163 6820 6d79 2024 6e20 2873 foreach my $n (s │ │ │ -00017fd0: 6f72 7420 6b65 7973 2025 6e65 7742 6163 ort keys %newBac │ │ │ -00017fe0: 6b75 7053 6572 6965 7329 0a20 2020 207b kupSeries). { │ │ │ -00017ff0: 0a09 6d79 2024 7220 3d20 246e 6577 4261 ..my $r = $newBa │ │ │ -00018000: 636b 7570 5365 7269 6573 7b24 6e7d 3b0a ckupSeries{$n};. │ │ │ -00018010: 0924 7220 3d20 2431 2069 6620 2472 203d .$r = $1 if $r = │ │ │ -00018020: 7e20 2f5c 415c 2b28 2e2a 295c 5a2f 3b0a ~ /\A\+(.*)\Z/;. │ │ │ -00018030: 0970 7573 6820 406f 7468 6572 4261 636b .push @otherBack │ │ │ -00018040: 7570 5365 7269 6573 2c20 2224 723a 246e upSeries, "$r:$n │ │ │ -00018050: 223b 0a09 7075 7368 2040 7072 2c20 2220 ";..push @pr, " │ │ │ -00018060: 2020 2073 6572 6965 7320 3c24 6e3e 223b series <$n>"; │ │ │ -00018070: 0a20 2020 207d 0a20 2020 2069 6620 2840 . }. if (@ │ │ │ -00018080: 7072 290a 2020 2020 7b0a 0924 7072 4c6f pr). {..$prLo │ │ │ -00018090: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000180a0: 203d 3e20 2749 272c 0a09 0920 2020 2020 => 'I',... │ │ │ -000180b0: 2027 2d73 7472 2720 3d3e 205b 2272 6573 '-str' => ["res │ │ │ -000180c0: 756c 7469 6e67 2073 6572 6965 7320 746f ulting series to │ │ │ -000180d0: 2068 6172 6420 6c69 6e6b 222c 2040 7072 hard link", @pr │ │ │ -000180e0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el │ │ │ -000180f0: 7365 0a20 2020 207b 0a09 2470 724c 6f67 se. {..$prLog │ │ │ -00018100: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00018110: 3d3e 2027 5727 2c0a 0909 2020 2020 2020 => 'W',... │ │ │ -00018120: 272d 7374 7227 203d 3e20 5b22 6e6f 2073 '-str' => ["no s │ │ │ -00018130: 6572 6965 7320 7370 6563 6966 6965 6420 eries specified │ │ │ -00018140: 746f 2068 6172 6420 6c69 6e6b 225d 293b to hard link"]); │ │ │ -00018150: 0a20 2020 207d 0a7d 0a23 7072 696e 7420 . }.}.#print │ │ │ -00018160: 2232 206f 7468 6572 4261 636b 7570 5365 "2 otherBackupSe │ │ │ -00018170: 7269 6573 203d 205c 6e5c 743c 222c 206a ries = \n\t<", j │ │ │ -00018180: 6f69 6e28 223e 5c6e 5c74 3c22 2c20 406f oin(">\n\t<", @o │ │ │ -00018190: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries │ │ │ -000181a0: 292c 2022 3e5c 6e22 3b0a 0a6d 7920 2470 ), ">\n";..my $p │ │ │ -000181b0: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri │ │ │ -000181c0: 6573 203d 2075 6e64 6566 3b0a 6966 2028 es = undef;.if ( │ │ │ -000181d0: 406f 7468 6572 4261 636b 7570 5365 7269 @otherBackupSeri │ │ │ -000181e0: 6573 203e 2030 290a 7b0a 2020 2020 7075 es > 0).{. pu │ │ │ -000181f0: 7368 2040 6f74 6865 7242 6163 6b75 7053 sh @otherBackupS │ │ │ -00018200: 6572 6965 732c 2022 303a 2474 6172 6765 eries, "0:$targe │ │ │ -00018210: 7444 6972 223b 0a20 2020 206d 7920 2840 tDir";. my (@ │ │ │ -00018220: 6f62 642c 2024 6429 3b0a 0a20 2020 2023 obd, $d);.. # │ │ │ -00018230: 2056 6572 7a65 6963 686e 6973 7365 2065 Verzeichnisse e │ │ │ -00018240: 726d 6974 7465 6c6e 0a20 2020 2066 6f72 rmitteln. for │ │ │ -00018250: 6561 6368 2024 6420 2840 6f74 6865 7242 each $d (@otherB │ │ │ -00018260: 6163 6b75 7053 6572 6965 7329 0a20 2020 ackupSeries). │ │ │ -00018270: 207b 0a09 6966 2028 2464 203d 7e20 2f5c {..if ($d =~ /\ │ │ │ -00018280: 4128 616c 6c7c 5c64 2b7c 5c64 2b2d 5c64 A(all|\d+|\d+-\d │ │ │ -00018290: 2b29 3a28 2e2a 292f 290a 097b 0a09 2020 +):(.*)/)..{.. │ │ │ -000182a0: 2020 6d79 2024 6469 7220 3d20 2432 3b0a my $dir = $2;. │ │ │ -000182b0: 2020 2020 2020 2020 2020 2020 6d79 2024 my $ │ │ │ -000182c0: 7768 6174 203d 2024 313b 0a09 2020 2020 what = $1;.. │ │ │ -000182d0: 2464 6972 203d 2022 2462 6163 6b75 7044 $dir = "$backupD │ │ │ -000182e0: 6972 2f24 6469 7222 2075 6e6c 6573 7320 ir/$dir" unless │ │ │ -000182f0: 2464 6972 203d 7e20 2f5c 415c 2f2f 3b0a $dir =~ /\A\//;. │ │ │ -00018300: 0920 2020 206d 7920 2461 7362 6420 3d0a . my $asbd =. │ │ │ -00018310: 0909 616c 6c53 746f 7265 4261 636b 7570 ..allStoreBackup │ │ │ -00018320: 5365 7269 6573 2d3e 6e65 7728 272d 726f Series->new('-ro │ │ │ -00018330: 6f74 4469 7227 203d 3e20 2464 6972 2c0a otDir' => $dir,. │ │ │ -00018340: 0909 0909 0920 2027 2d63 6865 636b 5375 ..... '-checkSu │ │ │ -00018350: 6d46 696c 6527 203d 3e20 2463 6865 636b mFile' => $check │ │ │ -00018360: 5375 6d46 696c 652c 0a09 0909 0909 2020 SumFile,...... │ │ │ -00018370: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -00018380: 6f67 293b 0a23 0909 0909 0927 2d61 6273 og);.#.....'-abs │ │ │ -00018390: 5061 7468 2720 3d3e 2030 293b 0a20 2020 Path' => 0);. │ │ │ -000183a0: 2020 2020 2020 2020 206d 7920 2840 6429 my (@d) │ │ │ -000183b0: 203d 2073 6f72 7420 7b20 2462 2063 6d70 = sort { $b cmp │ │ │ -000183c0: 2024 6120 7d0a 0920 2020 2024 6173 6264 $a }.. $asbd │ │ │ -000183d0: 2d3e 6765 7441 6c6c 4669 6e69 7368 6564 ->getAllFinished │ │ │ -000183e0: 5769 7468 6f75 7441 6374 4261 636b 7570 WithoutActBackup │ │ │ -000183f0: 4469 7228 293b 0a09 2020 2020 2020 2320 Dir();.. # │ │ │ -00018400: 6669 6c74 6572 2077 616e 7465 6420 6469 filter wanted di │ │ │ -00018410: 7273 2061 6e64 2067 656e 6572 6174 6520 rs and generate │ │ │ -00018420: 6162 736f 6c75 7465 2070 6174 680a 2020 absolute path. │ │ │ -00018430: 2020 2020 2020 2020 2020 6966 2028 2477 if ($w │ │ │ -00018440: 6861 7420 6571 2022 616c 6c22 290a 0920 hat eq "all").. │ │ │ -00018450: 2020 207b 0a20 2020 2020 2020 2020 2020 {. │ │ │ -00018460: 2020 2020 2066 6f72 6561 6368 206d 7920 foreach my │ │ │ -00018470: 2478 2028 4064 290a 0909 7b0a 2020 2020 $x (@d)...{. │ │ │ -00018480: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018490: 7075 7368 2040 6f62 642c 205b 2464 6972 push @obd, [$dir │ │ │ -000184a0: 2c20 2478 5d3b 0a20 2020 2020 2020 2020 , $x];. │ │ │ -000184b0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. │ │ │ -000184c0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ -000184d0: 2020 2065 6c73 650a 0920 2020 207b 0a20 else.. {. │ │ │ -000184e0: 2020 2020 2020 2020 2020 2020 2020 206d m │ │ │ -000184f0: 7920 2824 6672 6f6d 2c20 2474 6f29 3b0a y ($from, $to);. │ │ │ -00018500: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018510: 6966 2028 2477 6861 7420 3d7e 202f 5e28 if ($what =~ /^( │ │ │ -00018520: 5c64 2b29 242f 290a 0909 7b0a 2020 2020 \d+)$/)...{. │ │ │ -00018530: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018540: 2466 726f 6d20 3d20 2474 6f20 3d20 2431 $from = $to = $1 │ │ │ -00018550: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -00018560: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ -00018570: 2020 2020 656c 7369 6620 2824 7768 6174 elsif ($what │ │ │ -00018580: 203d 7e20 2f5e 285c 642b 292d 285c 642b =~ /^(\d+)-(\d+ │ │ │ -00018590: 2924 2f29 0a09 097b 0a20 2020 2020 2020 )$/)...{. │ │ │ -000185a0: 2020 2020 2020 2020 2020 2020 2024 6672 $fr │ │ │ -000185b0: 6f6d 203d 2024 313b 0a20 2020 2020 2020 om = $1;. │ │ │ -000185c0: 2020 2020 2020 2020 2020 2020 2024 746f $to │ │ │ -000185d0: 203d 2024 323b 0a20 2020 2020 2020 2020 = $2;. │ │ │ -000185e0: 2020 2020 2020 207d 0a20 2020 2020 2020 }. │ │ │ -000185f0: 2020 2020 2020 2020 2066 6f72 6561 6368 foreach │ │ │ -00018600: 206d 7920 2469 2028 2466 726f 6d20 2e2e my $i ($from .. │ │ │ -00018610: 2024 746f 290a 0909 7b0a 2020 2020 2020 $to)...{. │ │ │ -00018620: 2020 2020 2020 2020 2020 2020 2020 6966 if │ │ │ -00018630: 2028 6578 6973 7473 2024 645b 2469 5d29 (exists $d[$i]) │ │ │ -00018640: 0a09 0920 2020 207b 0a20 2020 2020 2020 ... {. │ │ │ -00018650: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018660: 2070 7573 6820 406f 6264 2c20 5b24 6469 push @obd, [$di │ │ │ -00018670: 722c 2024 645b 2469 5d5d 3b0a 2020 2020 r, $d[$i]];. │ │ │ -00018680: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018690: 7d0a 2020 2020 2020 2020 2020 2020 2020 }. │ │ │ -000186a0: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ -000186b0: 7d0a 2020 2020 2020 2020 7d0a 2020 2020 }. }. │ │ │ -000186c0: 2020 2020 656c 7365 0a09 7b0a 2020 2020 else..{. │ │ │ -000186d0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog-> │ │ │ -000186e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -000186f0: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. │ │ │ -00018700: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018710: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [ │ │ │ -00018720: 2269 6e76 616c 6964 206f 7220 6e6f 2072 "invalid or no r │ │ │ -00018730: 616e 6765 2069 6e20 7061 7261 6d20 3c24 ange in param <$ │ │ │ -00018740: 643e 2c20 6578 6974 696e 6722 5d2c 0a20 d>, exiting"],. │ │ │ -00018750: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00018760: 2020 2020 2020 2020 2027 2d65 7869 7427 '-exit' │ │ │ -00018770: 203d 3e20 3129 3b0a 2020 2020 2020 2020 => 1);. │ │ │ -00018780: 7d0a 2020 2020 7d0a 0a20 2020 2023 2073 }. }.. # s │ │ │ -00018790: 6f72 7420 6e65 7765 7374 2062 6163 6b75 ort newest backu │ │ │ -000187a0: 7020 6669 7273 740a 2020 2020 2840 6f74 p first. (@ot │ │ │ -000187b0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries) │ │ │ -000187c0: 203d 2028 293b 0a20 2020 206d 7920 2825 = ();. my (% │ │ │ -000187d0: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ -000187e0: 7329 203d 2028 293b 0a20 2020 2066 6f72 s) = ();. for │ │ │ -000187f0: 6561 6368 2024 6420 2873 6f72 7420 7b20 each $d (sort { │ │ │ -00018800: 2462 2d3e 5b31 5d20 636d 7020 2461 2d3e $b->[1] cmp $a-> │ │ │ -00018810: 5b31 5d20 7d20 406f 6264 290a 2020 2020 [1] } @obd). │ │ │ -00018820: 7b0a 096d 7920 2462 6420 3d20 2464 2d3e {..my $bd = $d-> │ │ │ -00018830: 5b30 5d20 2e20 222f 2220 2e20 2464 2d3e [0] . "/" . $d-> │ │ │ -00018840: 5b31 5d3b 0a09 2462 6420 3d7e 2073 2f5c [1];..$bd =~ s/\ │ │ │ -00018850: 2f2b 2f5c 2f2f 673b 0a09 6966 2028 2d64 /+/\//g;..if (-d │ │ │ -00018860: 2024 6264 2061 6e64 206e 6f74 2065 7869 $bd and not exi │ │ │ -00018870: 7374 7320 246f 7468 6572 4261 636b 7570 sts $otherBackup │ │ │ -00018880: 5365 7269 6573 7b24 6264 7d29 0a09 7b0a Series{$bd})..{. │ │ │ -00018890: 0920 2020 2024 6f74 6865 7242 6163 6b75 . $otherBacku │ │ │ -000188a0: 7053 6572 6965 737b 2462 647d 203d 2031 pSeries{$bd} = 1 │ │ │ -000188b0: 3b20 2020 2320 646f 206e 6f74 2061 6c6c ; # do not all │ │ │ -000188c0: 6f77 2064 6f75 626c 6520 656e 7472 6965 ow double entrie │ │ │ -000188d0: 730a 0920 2020 2070 7573 6820 406f 7468 s.. push @oth │ │ │ -000188e0: 6572 4261 636b 7570 5365 7269 6573 2c20 erBackupSeries, │ │ │ -000188f0: 2462 643b 0a09 7d0a 2020 2020 7d0a 0a20 $bd;..}. }.. │ │ │ -00018900: 2020 2023 2066 696e 6420 7468 6520 7072 # find the pr │ │ │ -00018910: 6576 696f 7573 2065 6e74 7279 2066 726f evious entry fro │ │ │ -00018920: 6d20 7468 6520 6163 7475 616c 2062 6163 m the actual bac │ │ │ -00018930: 6b75 7020 7365 7269 6573 0a20 2020 2023 kup series. # │ │ │ -00018940: 2061 6e64 2073 6574 2069 7420 746f 2074 and set it to t │ │ │ -00018950: 6865 2062 6567 696e 6e69 6e67 2c20 736f he beginning, so │ │ │ -00018960: 2069 7420 7769 6c6c 2062 6520 7072 6566 it will be pref │ │ │ -00018970: 6572 6564 2066 6f72 206c 696e 6b69 6e67 ered for linking │ │ │ -00018980: 0a20 2020 2023 2074 6865 7265 666f 7265 . # therefore │ │ │ -00018990: 2077 6520 6d69 6e69 6d69 7a65 2074 6865 we minimize the │ │ │ -000189a0: 206e 756d 6265 7220 6f66 206d 6435 2073 number of md5 s │ │ │ -000189b0: 756d 7320 746f 2063 616c 6375 6c61 7465 ums to calculate │ │ │ -000189c0: 0a23 7072 696e 7420 2233 206f 7468 6572 .#print "3 other │ │ │ -000189d0: 4261 636b 7570 5365 7269 6573 203d 205c BackupSeries = \ │ │ │ -000189e0: 6e5c 743c 222c 206a 6f69 6e28 223e 5c6e n\t<", join(">\n │ │ │ -000189f0: 5c74 3c22 2c20 406f 7468 6572 4261 636b \t<", @otherBack │ │ │ -00018a00: 7570 5365 7269 6573 292c 2022 3e5c 6e22 upSeries), ">\n" │ │ │ -00018a10: 3b0a 2020 2020 2840 6f62 6429 203d 2028 ;. (@obd) = ( │ │ │ -00018a20: 293b 0a20 2020 2066 6f72 6561 6368 2024 );. foreach $ │ │ │ -00018a30: 6420 2840 6f74 6865 7242 6163 6b75 7053 d (@otherBackupS │ │ │ -00018a40: 6572 6965 7329 0a20 2020 207b 0a09 2464 eries). {..$d │ │ │ -00018a50: 203d 7e20 6d23 5c41 282e 2a29 2f23 3b0a =~ m#\A(.*)/#;. │ │ │ -00018a60: 0969 6620 2824 3120 2065 7120 2474 6172 .if ($1 eq $tar │ │ │ -00018a70: 6765 7444 6972 0a09 2020 2020 616e 6420 getDir.. and │ │ │ -00018a80: 6e6f 7420 2470 7265 7642 6163 6b75 704f not $prevBackupO │ │ │ -00018a90: 776e 5365 7269 6573 290a 097b 0a09 2020 wnSeries)..{.. │ │ │ -00018aa0: 2020 2470 7265 7642 6163 6b75 704f 776e $prevBackupOwn │ │ │ -00018ab0: 5365 7269 6573 203d 2024 643b 0a23 7072 Series = $d;.#pr │ │ │ -00018ac0: 696e 7420 222b 312b 2464 5c6e 223b 0a09 int "+1+$d\n";.. │ │ │ -00018ad0: 7d0a 0965 6c73 650a 097b 0a23 7072 696e }..else..{.#prin │ │ │ -00018ae0: 7420 222b 322b 2464 5c6e 223b 0a09 2020 t "+2+$d\n";.. │ │ │ -00018af0: 2020 7075 7368 2040 6f62 642c 2024 643b push @obd, $d; │ │ │ -00018b00: 0a09 7d0a 2020 2020 7d0a 2370 7269 6e74 ..}. }.#print │ │ │ -00018b10: 2022 2b33 2b24 7072 6576 4261 636b 7570 "+3+$prevBackup │ │ │ -00018b20: 4f77 6e53 6572 6965 735c 6e22 3b0a 2020 OwnSeries\n";. │ │ │ -00018b30: 2020 2320 6966 2024 7072 6576 4261 636b # if $prevBack │ │ │ -00018b40: 7570 4f77 6e53 6572 6965 7320 6973 2073 upOwnSeries is s │ │ │ -00018b50: 7469 6c6c 2075 6e64 6566 2c20 7468 6973 till undef, this │ │ │ -00018b60: 206d 6561 6e73 2074 6861 7420 7468 6520 means that the │ │ │ -00018b70: 7468 650a 2020 2020 2320 7265 6665 7265 the. # refere │ │ │ -00018b80: 6e63 6520 746f 2074 6865 2070 7265 7669 nce to the previ │ │ │ -00018b90: 6f75 7320 6261 636b 7570 2069 6e20 7468 ous backup in th │ │ │ -00018ba0: 6520 6f77 6e20 7365 7269 6573 2064 6f65 e own series doe │ │ │ -00018bb0: 7320 6e6f 7420 6578 6973 740a 2020 2020 s not exist. │ │ │ -00018bc0: 2320 7468 6973 206d 6561 6e73 2c20 7468 # this means, th │ │ │ -00018bd0: 6572 6520 6973 206e 6f20 7072 6576 696f ere is no previo │ │ │ -00018be0: 7573 2062 6163 6b75 702e 0a20 2020 2023 us backup.. # │ │ │ -00018bf0: 2028 7468 6520 6669 7273 7420 6261 636b (the first back │ │ │ -00018c00: 7570 7320 7374 6f72 6564 2069 6e20 406f ups stored in @o │ │ │ -00018c10: 7468 6572 4261 636b 7570 5365 7269 6573 therBackupSeries │ │ │ -00018c20: 205f 616c 7761 7973 5f20 6973 2074 6865 _always_ is the │ │ │ -00018c30: 0a20 2020 2023 2070 6174 6820 746f 2074 . # path to t │ │ │ -00018c40: 6865 2070 7265 7669 6f75 7320 6261 636b he previous back │ │ │ -00018c50: 7570 206f 6620 7468 6520 6f77 6e20 7365 up of the own se │ │ │ -00018c60: 7269 6573 290a 2020 2020 2840 6f74 6865 ries). (@othe │ │ │ -00018c70: 7242 6163 6b75 7053 6572 6965 7329 203d rBackupSeries) = │ │ │ -00018c80: 2028 2470 7265 7642 6163 6b75 704f 776e ($prevBackupOwn │ │ │ -00018c90: 5365 7269 6573 2c20 406f 6264 293b 0a7d Series, @obd);.} │ │ │ -00018ca0: 0a23 7072 696e 7420 2234 206f 7468 6572 .#print "4 other │ │ │ -00018cb0: 4261 636b 7570 5365 7269 6573 203d 205c BackupSeries = \ │ │ │ -00018cc0: 6e5c 743c 222c 206a 6f69 6e28 223e 5c6e n\t<", join(">\n │ │ │ -00018cd0: 5c74 3c22 2c20 406f 7468 6572 4261 636b \t<", @otherBack │ │ │ -00018ce0: 7570 5365 7269 6573 292c 2022 3e5c 6e22 upSeries), ">\n" │ │ │ -00018cf0: 3b0a 0a0a 6966 2028 2476 6572 626f 7365 ;...if ($verbose │ │ │ -00018d00: 2061 6e64 2040 6f74 6865 7242 6163 6b75 and @otherBacku │ │ │ -00018d10: 7053 6572 6965 7329 0a7b 0a20 2020 206d pSeries).{. m │ │ │ -00018d20: 7920 2840 6f62 6429 203d 2028 293b 0a20 y (@obd) = ();. │ │ │ -00018d30: 2020 206d 7920 246f 3b0a 2020 2020 666f my $o;. fo │ │ │ -00018d40: 7265 6163 6820 246f 2028 406f 7468 6572 reach $o (@other │ │ │ -00018d50: 4261 636b 7570 5365 7269 6573 290a 2020 BackupSeries). │ │ │ -00018d60: 2020 7b0a 0970 7573 6820 406f 6264 2c20 {..push @obd, │ │ │ -00018d70: 2220 2020 246f 223b 0a20 2020 207d 0a20 " $o";. }. │ │ │ -00018d80: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00018d90: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00018da0: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00018db0: 226f 7468 6572 4261 636b 7570 5365 7269 "otherBackupSeri │ │ │ -00018dc0: 6573 203d 222c 2040 6f62 645d 293b 0a7d es =", @obd]);.} │ │ │ -00018dd0: 0a0a 2370 7269 6e74 2022 3520 6f74 6865 ..#print "5 othe │ │ │ -00018de0: 7242 6163 6b75 7053 6572 6965 7320 3d20 rBackupSeries = │ │ │ -00018df0: 3c22 2c20 6a6f 696e 2827 3e3c 272c 2040 <", join('><', @ │ │ │ -00018e00: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ -00018e10: 7329 2c20 223e 5c6e 223b 0a0a 6d79 2024 s), ">\n";..my $ │ │ │ -00018e20: 616c 6c4c 696e 6b73 203d 206c 6174 654c allLinks = lateL │ │ │ -00018e30: 696e 6b73 2d3e 6e65 7728 272d 6469 7273 inks->new('-dirs │ │ │ -00018e40: 2720 3d3e 205b 2462 6163 6b75 7044 6972 ' => [$backupDir │ │ │ -00018e50: 5d2c 0a09 0909 2020 2020 2020 272d 6b69 ],.... '-ki │ │ │ -00018e60: 6e64 2720 3d3e 2027 7265 6375 7273 6976 nd' => 'recursiv │ │ │ -00018e70: 6553 6561 7263 6827 2c0a 0909 0920 2020 eSearch',.... │ │ │ -00018e80: 2020 2027 2d76 6572 626f 7365 2720 3d3e '-verbose' => │ │ │ -00018e90: 2024 7665 7262 6f73 652c 0a09 0909 2020 $verbose,.... │ │ │ -00018ea0: 2020 2020 272d 6175 746f 7265 7061 6972 '-autorepair │ │ │ -00018eb0: 2720 3d3e 2024 6175 746f 7265 7061 6972 ' => $autorepair │ │ │ -00018ec0: 2c0a 0909 0920 2020 2020 2027 2d70 724c ,.... '-prL │ │ │ -00018ed0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ -00018ee0: 2370 7269 6e74 2022 3620 6f74 6865 7242 #print "6 otherB │ │ │ -00018ef0: 6163 6b75 7053 6572 6965 7320 3d20 3c22 ackupSeries = <" │ │ │ -00018f00: 2c20 6a6f 696e 2827 3e3c 272c 2040 6f74 , join('><', @ot │ │ │ -00018f10: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries) │ │ │ -00018f20: 2c20 223e 5c6e 223b 0a75 6e6c 6573 7320 , ">\n";.unless │ │ │ -00018f30: 2824 6c61 7465 4c69 6e6b 7329 0a7b 0a20 ($lateLinks).{. │ │ │ -00018f40: 2020 2023 2063 6865 636b 2c20 6966 2064 # check, if d │ │ │ -00018f50: 6972 6563 746f 7269 6573 2077 6974 6820 irectories with │ │ │ -00018f60: 6c61 7465 4c69 6e6b 7320 6172 6520 7265 lateLinks are re │ │ │ -00018f70: 6665 7265 6e63 6564 2062 7920 6f74 6865 ferenced by othe │ │ │ -00018f80: 7242 6163 6b75 7053 6572 6965 730a 2020 rBackupSeries. │ │ │ -00018f90: 2020 6d79 2024 6f62 643b 0a20 2020 2066 my $obd;. f │ │ │ -00018fa0: 6f72 6561 6368 2024 6f62 6420 2840 6f74 oreach $obd (@ot │ │ │ -00018fb0: 6865 7242 6163 6b75 7053 6572 6965 7329 herBackupSeries) │ │ │ -00018fc0: 0a20 2020 207b 0a23 7072 696e 7420 2263 . {.#print "c │ │ │ -00018fd0: 6865 636b 696e 6720 6f74 6865 7242 6163 hecking otherBac │ │ │ -00018fe0: 6b75 6b70 4469 7273 3a5c 6e22 3b0a 0924 kukpDirs:\n";..$ │ │ │ -00018ff0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00019000: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00019010: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00019020: 2264 6972 6563 746f 7279 203c 246f 6264 "directory <$obd │ │ │ -00019030: 3e20 6861 7320 756e 7265 736f 6c76 6564 > has unresolved │ │ │ -00019040: 2022 202e 0a09 0909 0920 226c 696e 6b73 " ...... "links │ │ │ -00019050: 2028 6279 2070 6172 6d20 2d2d 6c61 7465 (by parm --late │ │ │ -00019060: 4c69 6e6b 7329 222c 0a09 0920 2020 2020 Links)",... │ │ │ -00019070: 2020 2020 2020 2020 2020 2020 2273 7461 "sta │ │ │ -00019080: 7274 203a 3a24 7374 6f72 6542 6163 6b75 rt ::$storeBacku │ │ │ -00019090: 7055 7064 6174 6542 6163 6b75 705f 7072 pUpdateBackup_pr │ │ │ -000190a0: 6720 2220 2e0a 0909 0909 2022 746f 2073 g " ...... "to s │ │ │ -000190b0: 6574 206c 696e 6b73 222c 0a09 0920 2020 et links",... │ │ │ -000190c0: 2020 2020 2020 2020 2020 2020 2020 226f "o │ │ │ -000190d0: 7220 7374 6172 7420 7374 6f72 6542 6163 r start storeBac │ │ │ -000190e0: 6b75 702e 706c 2077 6974 6820 2d2d 6c61 kup.pl with --la │ │ │ -000190f0: 7465 4c69 6e6b 7320 616e 6420 2220 2e0a teLinks and " .. │ │ │ -00019100: 0909 0909 2022 7265 736f 6c76 6520 6c61 .... "resolve la │ │ │ -00019110: 7465 7222 5d2c 0a09 0920 2020 2020 2027 ter"],... ' │ │ │ -00019120: 2d65 7869 7427 203d 3e20 3129 0a09 2020 -exit' => 1).. │ │ │ -00019130: 2020 6966 2024 616c 6c4c 696e 6b73 2d3e if $allLinks-> │ │ │ -00019140: 6368 6563 6b44 6972 2824 6f62 6429 3b0a checkDir($obd);. │ │ │ -00019150: 2020 2020 7d0a 7d0a 0a6d 7920 2461 6b74 }.}..my $akt │ │ │ -00019160: 4461 7465 203d 2064 6174 6554 6f6f 6c73 Date = dateTools │ │ │ -00019170: 2d3e 6e65 7728 293b 0a69 6620 2824 746f ->new();.if ($to │ │ │ -00019180: 6461 794f 7074 290a 7b0a 2020 2020 6966 dayOpt).{. if │ │ │ -00019190: 2028 2474 6f64 6179 4f70 7420 3d7e 202f ($todayOpt =~ / │ │ │ -000191a0: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \A(\d{4})\.(\d{2 │ │ │ -000191b0: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\.(\d{2})_(\d{ │ │ │ -000191c0: 327d 292e 285c 647b 327d 292e 285c 647b 2}).(\d{2}).(\d{ │ │ │ -000191d0: 327d 295c 5a2f 290a 2020 2020 7b0a 0924 2})\Z/). {..$ │ │ │ -000191e0: 616b 7444 6174 6520 3d20 6461 7465 546f aktDate = dateTo │ │ │ -000191f0: 6f6c 732d 3e6e 6577 2827 2d79 6561 7227 ols->new('-year' │ │ │ -00019200: 203d 3e20 2431 2c0a 0909 0909 2020 272d => $1,..... '- │ │ │ -00019210: 6d6f 6e74 6827 203d 3e20 2432 2c0a 0909 month' => $2,... │ │ │ -00019220: 0909 2020 272d 6461 7927 203d 3e20 2433 .. '-day' => $3 │ │ │ -00019230: 2c0a 0909 0909 2020 272d 686f 7572 2720 ,..... '-hour' │ │ │ -00019240: 3d3e 2024 342c 0a09 0909 0920 2027 2d6d => $4,..... '-m │ │ │ -00019250: 696e 2720 3d3e 2024 352c 0a09 0909 0920 in' => $5,..... │ │ │ -00019260: 2027 2d73 6563 2720 3d3e 2024 3629 3b0a '-sec' => $6);. │ │ │ -00019270: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00019280: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00019290: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000192a0: 0a09 0920 2020 2020 205b 2224 746f 6461 ... ["$toda │ │ │ -000192b0: 794f 7074 2028 6f70 7469 6f6e 2074 6f64 yOpt (option tod │ │ │ -000192c0: 6179 2920 6973 206e 6f74 2061 2076 616c ay) is not a val │ │ │ -000192d0: 6964 2064 6174 6522 5d2c 0a09 0920 2020 id date"],... │ │ │ -000192e0: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ -000192f0: 0a09 2020 2020 756e 6c65 7373 2024 616b .. unless $ak │ │ │ -00019300: 7444 6174 652d 3e69 7356 616c 6964 2829 tDate->isValid() │ │ │ -00019310: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print │ │ │ -00019320: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W', │ │ │ -00019330: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00019340: 3d3e 205b 2273 6574 7469 6e67 2074 6f64 => ["setting tod │ │ │ -00019350: 6179 2074 6f20 2220 2e0a 0909 0909 2024 ay to " ...... $ │ │ │ -00019360: 616b 7444 6174 652d 3e67 6574 4461 7465 aktDate->getDate │ │ │ -00019370: 5469 6d65 2829 5d29 3b0a 2020 2020 7d0a Time()]);. }. │ │ │ -00019380: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ -00019390: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -000193a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -000193b0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -000193c0: 5b22 666f 726d 6174 2065 7272 6f72 2061 ["format error a │ │ │ -000193d0: 7420 6f70 7469 6f6e 2074 6f64 6179 2c20 t option today, │ │ │ -000193e0: 6d75 7374 2062 6522 2c0a 0909 0909 2022 must be",..... " │ │ │ -000193f0: 2020 5959 5959 2e4d 4d2e 4444 5f48 482e YYYY.MM.DD_HH. │ │ │ -00019400: 4d4d 2e53 5322 5d2c 0a09 0920 2020 2020 MM.SS"],... │ │ │ -00019410: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);. │ │ │ -00019420: 2020 2020 7d0a 7d0a 0a24 6d61 696e 3a3a }.}..$main:: │ │ │ -00019430: 7374 6174 203d 2053 7461 7469 7374 6963 stat = Statistic │ │ │ -00019440: 2d3e 6e65 7728 272d 7374 6172 7444 6174 ->new('-startDat │ │ │ -00019450: 6527 203d 3e0a 0909 0920 2020 2020 2470 e' =>.... $p │ │ │ -00019460: 7265 636f 6d6d 616e 6420 3f20 2473 7461 recommand ? $sta │ │ │ -00019470: 7274 4461 7465 203a 2075 6e64 6566 2c0a rtDate : undef,. │ │ │ -00019480: 0909 0920 2020 2020 272d 616b 7444 6174 ... '-aktDat │ │ │ -00019490: 6527 203d 3e20 2461 6b74 4461 7465 2c0a e' => $aktDate,. │ │ │ -000194a0: 0909 0920 2020 2020 272d 7573 6572 4772 ... '-userGr │ │ │ -000194b0: 6f75 7053 7461 7446 696c 6527 203d 3e20 oupStatFile' => │ │ │ -000194c0: 2475 7365 7247 726f 7570 5374 6174 4669 $userGroupStatFi │ │ │ -000194d0: 6c65 2c0a 0909 0920 2020 2020 272d 6578 le,.... '-ex │ │ │ -000194e0: 6365 7074 5375 6666 6978 2720 3d3e 2024 ceptSuffix' => $ │ │ │ -000194f0: 6578 6365 7074 5375 6666 6978 2c0a 0909 exceptSuffix,... │ │ │ -00019500: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' = │ │ │ -00019510: 3e20 2470 724c 6f67 2c0a 0909 0920 2020 > $prLog,.... │ │ │ -00019520: 2020 272d 7072 6f67 7265 7373 5265 706f '-progressRepo │ │ │ -00019530: 7274 2720 3d3e 2024 7072 6f67 7265 7373 rt' => $progress │ │ │ -00019540: 5265 706f 7274 2c0a 0909 0920 2020 2020 Report,.... │ │ │ -00019550: 272d 7072 6f67 7265 7373 4465 6c74 6154 '-progressDeltaT │ │ │ -00019560: 696d 6527 203d 3e20 2470 726f 6772 6573 ime' => $progres │ │ │ -00019570: 7344 656c 7461 5469 6d65 2c0a 0909 0920 sDeltaTime,.... │ │ │ -00019580: 2020 2020 272d 7769 7468 5573 6572 4772 '-withUserGr │ │ │ -00019590: 6f75 7053 7461 7427 203d 3e20 2477 6974 oupStat' => $wit │ │ │ -000195a0: 6855 7365 7247 726f 7570 5374 6174 2c0a hUserGroupStat,. │ │ │ -000195b0: 0909 0920 2020 2020 272d 7573 6572 4772 ... '-userGr │ │ │ -000195c0: 6f75 7053 7461 7446 696c 6527 203d 3e20 oupStatFile' => │ │ │ -000195d0: 2475 7365 7247 726f 7570 5374 6174 4669 $userGroupStatFi │ │ │ -000195e0: 6c65 2c0a 0909 0920 2020 2020 272d 636f le,.... '-co │ │ │ -000195f0: 6d70 7265 7373 2720 3d3e 2024 636f 6d70 mpress' => $comp │ │ │ -00019600: 7265 7373 293b 0a0a 0a23 0a23 2063 6865 ress);...#.# che │ │ │ -00019610: 636b 2069 6620 616c 6c20 6578 6365 7074 ck if all except │ │ │ -00019620: 4469 7273 2061 6e64 2069 6e63 6c75 6465 Dirs and include │ │ │ -00019630: 4469 7273 2061 7265 2072 656c 6174 6976 Dirs are relativ │ │ │ -00019640: 6520 5061 7468 730a 230a 7b0a 2020 2020 e Paths.#.{. │ │ │ -00019650: 6d79 2024 6572 726f 7220 3d20 303b 0a20 my $error = 0;. │ │ │ -00019660: 2020 206d 7920 2464 3b0a 2020 2020 666f my $d;. fo │ │ │ -00019670: 7265 6163 6820 2464 2028 4024 6578 6365 reach $d (@$exce │ │ │ -00019680: 7074 4469 7273 290a 2020 2020 7b0a 0969 ptDirs). {..i │ │ │ -00019690: 6620 2824 6420 3d7e 202f 5c41 5c2f 2f6f f ($d =~ /\A\//o │ │ │ -000196a0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog │ │ │ -000196b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000196c0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ -000196d0: 7472 2720 3d3e 0a09 0909 2020 5b22 6578 tr' =>.... ["ex │ │ │ -000196e0: 6365 7074 4469 7220 3c24 643e 2069 7320 ceptDir <$d> is │ │ │ -000196f0: 6e6f 7420 6120 7265 6c61 7469 7665 2070 not a relative p │ │ │ -00019700: 6174 6821 225d 293b 0a09 2020 2020 2465 ath!"]);.. $e │ │ │ -00019710: 7272 6f72 203d 2031 3b0a 097d 0a20 2020 rror = 1;..}. │ │ │ -00019720: 207d 0a20 2020 2066 6f72 6561 6368 2024 }. foreach $ │ │ │ -00019730: 6420 2840 2469 6e63 6c75 6465 4469 7273 d (@$includeDirs │ │ │ -00019740: 290a 2020 2020 7b0a 0969 6620 2824 6420 ). {..if ($d │ │ │ -00019750: 3d7e 202f 5c41 5c2f 2f6f 290a 097b 0a09 =~ /\A\//o)..{.. │ │ │ -00019760: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00019770: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00019780: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -00019790: 0a09 0909 2020 5b22 696e 636c 7564 6544 .... ["includeD │ │ │ -000197a0: 6972 203c 2464 3e20 6973 206e 6f74 2061 ir <$d> is not a │ │ │ -000197b0: 2072 656c 6174 6976 6520 7061 7468 2122 relative path!" │ │ │ -000197c0: 5d29 3b0a 0920 2020 2024 6572 726f 7220 ]);.. $error │ │ │ -000197d0: 3d20 313b 0a09 7d0a 2020 2020 7d0a 2020 = 1;..}. }. │ │ │ -000197e0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -000197f0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00019800: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -00019810: 6578 6974 696e 6722 5d2c 0a09 0920 2027 exiting"],... ' │ │ │ -00019820: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if │ │ │ -00019830: 2024 6572 726f 723b 0a7d 0a0a 230a 2320 $error;.}..#.# │ │ │ -00019840: 6578 6365 7074 696f 6e2d 2075 6e64 2069 exception- und i │ │ │ -00019850: 6e63 6c75 6465 2d20 4c69 7374 6520 c3bc nclude- Liste .. │ │ │ -00019860: 6265 7270 72c3 bc66 656e 2075 6e64 2065 berpr..fen und e │ │ │ -00019870: 7661 6c75 6965 7265 6e0a 2320 2b20 6368 valuieren.# + ch │ │ │ -00019880: 6563 6b42 6c6f 636b 7352 756c 6520 0a23 eckBlocksRule .# │ │ │ -00019890: 0a6d 7920 2840 6578 6365 7074 4469 7273 .my (@exceptDirs │ │ │ -000198a0: 2920 3d20 2665 7661 6c45 7863 6570 7469 ) = &evalExcepti │ │ │ -000198b0: 6f6e 4c69 7374 2824 6578 6365 7074 4469 onList($exceptDi │ │ │ -000198c0: 7273 2c20 2473 6f75 7263 6544 6972 2c0a rs, $sourceDir,. │ │ │ -000198d0: 0909 0909 2020 2027 6578 6365 7074 4469 .... 'exceptDi │ │ │ -000198e0: 7227 2c20 2765 7863 6c75 6469 6e67 272c r', 'excluding', │ │ │ -000198f0: 0a09 0909 0920 2020 2020 2024 636f 6e74 ..... $cont │ │ │ -00019900: 4578 6365 7074 4469 7273 4572 722c 2075 ExceptDirsErr, u │ │ │ -00019910: 6e64 6566 2c20 302c 2024 7072 4c6f 6729 ndef, 0, $prLog) │ │ │ -00019920: 3b0a 6d79 2028 4069 6e63 6c75 6465 4469 ;.my (@includeDi │ │ │ -00019930: 7273 2920 3d20 2665 7661 6c45 7863 6570 rs) = &evalExcep │ │ │ -00019940: 7469 6f6e 4c69 7374 2824 696e 636c 7564 tionList($includ │ │ │ -00019950: 6544 6972 732c 2024 736f 7572 6365 4469 eDirs, $sourceDi │ │ │ -00019960: 722c 0a09 0909 0920 2020 2027 696e 636c r,..... 'incl │ │ │ -00019970: 7564 6544 6972 272c 2027 696e 636c 7564 udeDir', 'includ │ │ │ -00019980: 696e 6727 2c0a 0909 0909 2020 2020 2020 ing',..... │ │ │ -00019990: 2024 636f 6e74 4578 6365 7074 4469 7273 $contExceptDirs │ │ │ -000199a0: 4572 722c 2075 6e64 6566 2c20 302c 2024 Err, undef, 0, $ │ │ │ -000199b0: 7072 4c6f 6729 3b0a 2470 724c 6f67 2d3e prLog);.$prLog-> │ │ │ -000199c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -000199d0: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s │ │ │ -000199e0: 7472 2720 3d3e 205b 2265 7863 6570 7452 tr' => ["exceptR │ │ │ -000199f0: 756c 6520 3d20 2220 2e20 2465 7863 5275 ule = " . $excRu │ │ │ -00019a00: 6c65 2d3e 6765 744c 696e 6553 7472 696e le->getLineStrin │ │ │ -00019a10: 6728 295d 290a 2020 2020 6966 2024 6578 g()]). if $ex │ │ │ -00019a20: 6365 7074 5275 6c65 3b0a 2470 724c 6f67 ceptRule;.$prLog │ │ │ -00019a30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00019a40: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. ' │ │ │ -00019a50: 2d73 7472 2720 3d3e 205b 2269 6e63 6c75 -str' => ["inclu │ │ │ -00019a60: 6465 5275 6c65 203d 2022 202e 2024 696e deRule = " . $in │ │ │ -00019a70: 6352 756c 652d 3e67 6574 4c69 6e65 5374 cRule->getLineSt │ │ │ -00019a80: 7269 6e67 2829 5d29 0a20 2020 2069 6620 ring()]). if │ │ │ -00019a90: 2469 6e63 6c75 6465 5275 6c65 3b0a 2470 $includeRule;.$p │ │ │ -00019aa0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00019ab0: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. │ │ │ -00019ac0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -00019ad0: 6865 636b 426c 6f63 6b73 5275 6c65 203d heckBlocksRule = │ │ │ -00019ae0: 203c 220a 0909 0920 2e20 2463 6862 5275 <".... . $chbRu │ │ │ -00019af0: 6c65 2d3e 6765 744c 696e 6553 7472 696e le->getLineStrin │ │ │ -00019b00: 6728 2920 2e20 223e 225d 290a 2020 2020 g() . ">"]). │ │ │ -00019b10: 6966 2024 6368 6252 756c 652d 3e68 6173 if $chbRule->has │ │ │ -00019b20: 4c69 6e65 2829 3b0a 7b0a 2020 2020 6d79 Line();.{. my │ │ │ -00019b30: 2024 693b 0a20 2020 2066 6f72 6561 6368 $i;. foreach │ │ │ -00019b40: 2024 6920 2830 2e2e 4063 6865 636b 4465 $i (0..@checkDe │ │ │ -00019b50: 7669 6365 732d 3129 0a20 2020 207b 0a09 vices-1). {.. │ │ │ -00019b60: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00019b70: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ -00019b80: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ -00019b90: 0909 2020 2020 2020 5b22 7361 7669 6e67 .. ["saving │ │ │ -00019ba0: 2064 6576 6963 6520 2220 2e20 2463 6865 device " . $che │ │ │ -00019bb0: 636b 4465 7669 6365 7349 6e64 6578 5b24 ckDevicesIndex[$ │ │ │ -00019bc0: 695d 202e 0a09 0920 2020 2020 2020 2220 i] .... " │ │ │ -00019bd0: 3c22 202e 2024 6368 6563 6b44 6576 6963 <" . $checkDevic │ │ │ -00019be0: 6573 5b24 695d 202e 2022 3e20 2d3e 2022 es[$i] . "> -> " │ │ │ -00019bf0: 202e 0a09 0920 2020 2020 2020 2463 6865 .... $che │ │ │ -00019c00: 636b 4465 7669 6365 7344 6972 5b24 695d ckDevicesDir[$i] │ │ │ -00019c10: 202e 2022 2028 626c 6f63 6b20 7369 7a65 . " (block size │ │ │ -00019c20: 203d 2022 202e 0a09 0920 2020 2020 2020 = " .... │ │ │ -00019c30: 2463 6865 636b 4465 7669 6365 7342 535b $checkDevicesBS[ │ │ │ -00019c40: 2469 5d20 2e20 222c 2022 202e 0a09 0920 $i] . ", " .... │ │ │ -00019c50: 2020 2020 2020 2763 6f6d 7072 6573 7369 'compressi │ │ │ -00019c60: 6f6e 3a20 2720 2e20 2463 6865 636b 4465 on: ' . $checkDe │ │ │ -00019c70: 7669 6365 7343 6f6d 7072 5b24 695d 202e vicesCompr[$i] . │ │ │ -00019c80: 2027 2927 5d29 3b0a 2020 2020 7d0a 7d0a ')']);. }.}. │ │ │ -00019c90: 0a0a 230a 2320 6368 6563 6b20 6966 2062 ..#.# check if b │ │ │ -00019ca0: 6163 6b75 7044 6972 2069 7320 6120 7375 ackupDir is a su │ │ │ -00019cb0: 6264 6972 206f 6620 736f 7572 6365 4469 bdir of sourceDi │ │ │ -00019cc0: 720a 230a 6d79 2024 7461 7267 6574 496e r.#.my $targetIn │ │ │ -00019cd0: 536f 7572 6365 203d 2030 3b0a 6966 2028 Source = 0;.if ( │ │ │ -00019ce0: 263a 3a69 7353 7562 4469 7228 2473 6f75 &::isSubDir($sou │ │ │ -00019cf0: 7263 6544 6972 2c20 2474 6172 6765 7444 rceDir, $targetD │ │ │ -00019d00: 6972 2929 2020 2020 2320 6c69 6567 7420 ir)) # liegt │ │ │ -00019d10: 6472 696e 210a 7b0a 2020 2020 2474 6172 drin!.{. $tar │ │ │ -00019d20: 6765 7449 6e53 6f75 7263 6520 3d20 313b getInSource = 1; │ │ │ -00019d30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00019d40: 2023 2041 6e6e 6168 6d65 3a20 6573 2067 # Annahme: es g │ │ │ -00019d50: 6962 7420 6b65 696e 6520 4175 736e 6168 ibt keine Ausnah │ │ │ -00019d60: 6d65 0a20 2020 2069 6620 2840 6578 6365 me. if (@exce │ │ │ -00019d70: 7074 4469 7273 203e 2030 2920 2020 2020 ptDirs > 0) │ │ │ -00019d80: 2020 2020 2020 2020 2020 2020 2320 7465 # te │ │ │ -00019d90: 7374 656e 2c20 6f62 2076 6965 6c6c 6569 sten, ob viellei │ │ │ -00019da0: 6368 7420 696d 2076 6f6d 0a20 2020 207b cht im vom. { │ │ │ -00019db0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00019dc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00019dd0: 2020 2020 2320 4261 636b 7570 2061 7573 # Backup aus │ │ │ -00019de0: 6765 6e6f 6d6d 656e 656e 2054 7265 650a genommenen Tree. │ │ │ -00019df0: 096d 7920 2465 3b0a 0966 6f72 6561 6368 .my $e;..foreach │ │ │ -00019e00: 2024 6520 2840 6578 6365 7074 4469 7273 $e (@exceptDirs │ │ │ -00019e10: 290a 097b 0a09 2020 2020 6966 2028 263a )..{.. if (&: │ │ │ -00019e20: 3a69 7353 7562 4469 7228 2465 2c20 2474 :isSubDir($e, $t │ │ │ -00019e30: 6172 6765 7444 6972 2929 0a09 2020 2020 argetDir)).. │ │ │ -00019e40: 7b0a 0909 2474 6172 6765 7449 6e53 6f75 {...$targetInSou │ │ │ -00019e50: 7263 6520 3d20 303b 2020 2020 2023 2064 rce = 0; # d │ │ │ -00019e60: 6f63 6820 4175 736e 6168 6d65 2067 6566 och Ausnahme gef │ │ │ -00019e70: 756e 6465 6e0a 0909 2470 724c 6f67 2d3e unden...$prLog-> │ │ │ -00019e80: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00019e90: 2027 4927 2c0a 0909 0920 2020 2020 2027 'I',.... ' │ │ │ -00019ea0: 2d73 7472 2720 3d3e 0a09 0909 2020 2020 -str' =>.... │ │ │ -00019eb0: 2020 5b22 7461 7267 6574 2064 6972 6563 ["target direc │ │ │ -00019ec0: 746f 7279 203c 2474 6172 6765 7444 6972 tory <$targetDir │ │ │ -00019ed0: 3e20 6973 2069 6e20 2220 2e0a 0909 0920 > is in " ..... │ │ │ -00019ee0: 2020 2020 2020 2265 7863 6570 7469 6f6e "exception │ │ │ -00019ef0: 203c 2465 3e20 6f66 2073 6f75 7263 6520 <$e> of source │ │ │ -00019f00: 6469 7265 6374 6f72 7920 2220 2e0a 0909 directory " .... │ │ │ -00019f10: 0920 2020 2020 2020 223c 2473 6f75 7263 . "<$sourc │ │ │ -00019f20: 6544 6972 3e2c 206f 6b22 5d29 3b0a 0909 eDir>, ok"]);... │ │ │ -00019f30: 6c61 7374 3b0a 0920 2020 207d 0a09 7d0a last;.. }..}. │ │ │ -00019f40: 2020 2020 7d0a 2020 2020 6966 2028 2474 }. if ($t │ │ │ -00019f50: 6172 6765 7449 6e53 6f75 7263 6520 3d3d argetInSource == │ │ │ -00019f60: 2031 2061 6e64 0a09 4069 6e63 6c75 6465 1 and..@include │ │ │ -00019f70: 4469 7273 203e 2030 2920 2020 2020 2020 Dirs > 0) │ │ │ -00019f80: 2020 2020 2023 2063 6865 636b 2c20 6966 # check, if │ │ │ -00019f90: 206e 6f74 2069 6e20 696e 636c 7564 6520 not in include │ │ │ -00019fa0: 7061 7468 730a 2020 2020 7b0a 096d 7920 paths. {..my │ │ │ -00019fb0: 2469 3b0a 096d 7920 2474 6172 6765 7449 $i;..my $targetI │ │ │ -00019fc0: 6e53 6f75 7263 6520 3d20 303b 2020 2020 nSource = 0; │ │ │ -00019fd0: 2020 2320 6173 7375 6d70 7469 6f6e 3a20 # assumption: │ │ │ -00019fe0: 7461 7267 6574 2069 7320 6e6f 7420 696e target is not in │ │ │ -00019ff0: 2073 6f75 7263 650a 0966 6f72 6561 6368 source..foreach │ │ │ -0001a000: 2024 6920 2840 696e 636c 7564 6544 6972 $i (@includeDir │ │ │ -0001a010: 7329 0a09 7b0a 0920 2020 2069 6620 2826 s)..{.. if (& │ │ │ -0001a020: 3a3a 6973 5375 6244 6972 2824 692c 2024 ::isSubDir($i, $ │ │ │ -0001a030: 7461 7267 6574 4469 7229 290a 0920 2020 targetDir)).. │ │ │ -0001a040: 207b 0a09 0924 7461 7267 6574 496e 536f {...$targetInSo │ │ │ -0001a050: 7572 6365 203d 2031 3b0a 0909 6c61 7374 urce = 1;...last │ │ │ -0001a060: 3b0a 0920 2020 207d 0a09 7d0a 2020 2020 ;.. }..}. │ │ │ -0001a070: 7d0a 7d0a 2470 724c 6f67 2d3e 7072 696e }.}.$prLog->prin │ │ │ -0001a080: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -0001a090: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -0001a0a0: 3d3e 0a09 2020 2020 2020 5b22 6261 636b =>.. ["back │ │ │ -0001a0b0: 7570 2064 6972 6563 746f 7279 203c 2474 up directory <$t │ │ │ -0001a0c0: 6172 6765 7444 6972 3e20 6361 6e6e 6f74 argetDir> cannot │ │ │ -0001a0d0: 2062 6520 7061 7274 206f 6620 7468 6520 be part of the │ │ │ -0001a0e0: 2220 2e0a 0920 2020 2020 2020 2273 6f75 " ... "sou │ │ │ -0001a0f0: 7263 6520 6469 7265 6374 6f72 7920 3c24 rce directory <$ │ │ │ -0001a100: 736f 7572 6365 4469 723e 222c 0a09 2020 sourceDir>",.. │ │ │ -0001a110: 2020 2020 2022 6465 6669 6e65 2061 6e20 "define an │ │ │ -0001a120: 6578 6365 7074 696f 6e20 7769 7468 202d exception with - │ │ │ -0001a130: 2d65 7863 6570 7444 6972 7320 6f72 2063 -exceptDirs or c │ │ │ -0001a140: 686f 6f73 6520 616e 6f74 6865 7220 2220 hoose another " │ │ │ -0001a150: 2e0a 0920 2020 2020 2020 2274 6172 6765 ... "targe │ │ │ -0001a160: 7420 6469 7265 6374 6f72 7922 5d2c 0a09 t directory"],.. │ │ │ -0001a170: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -0001a180: 2031 290a 2020 2020 6966 2028 2474 6172 1). if ($tar │ │ │ -0001a190: 6765 7449 6e53 6f75 7263 6529 3b0a 0a23 getInSource);..# │ │ │ -0001a1a0: 0a23 2063 6865 636b 2069 6620 616c 6c20 .# check if all │ │ │ -0001a1b0: 6578 6365 7074 4469 7273 2061 7265 2073 exceptDirs are s │ │ │ -0001a1c0: 7562 6469 7265 6374 6f72 6965 7320 6f66 ubdirectories of │ │ │ -0001a1d0: 2069 6e63 6c75 6465 4469 7273 206f 720a includeDirs or. │ │ │ -0001a1e0: 2320 6765 6e65 7261 7465 2061 2077 6172 # generate a war │ │ │ -0001a1f0: 6e69 6e67 0a23 2061 6c73 6f20 6368 6563 ning.# also chec │ │ │ -0001a200: 6b20 666f 7220 7361 6d65 2064 6972 6563 k for same direc │ │ │ -0001a210: 746f 7269 6573 2069 6e20 696e 636c 7564 tories in includ │ │ │ -0001a220: 6544 6972 7320 616e 6420 6578 636c 7564 eDirs and exclud │ │ │ -0001a230: 6544 6972 730a 230a 6d79 2024 5361 6d65 eDirs.#.my $Same │ │ │ -0001a240: 496e 636c 4578 636c 203d 2030 3b0a 6966 InclExcl = 0;.if │ │ │ -0001a250: 2028 4065 7863 6570 7444 6972 7320 616e (@exceptDirs an │ │ │ -0001a260: 6420 4069 6e63 6c75 6465 4469 7273 2061 d @includeDirs a │ │ │ -0001a270: 6e64 206e 6f74 2065 7869 7374 7320 2473 nd not exists $s │ │ │ -0001a280: 7570 7072 6573 7357 6172 6e69 6e67 7b27 uppressWarning{' │ │ │ -0001a290: 6578 6344 6972 277d 290a 7b0a 2020 2020 excDir'}).{. │ │ │ -0001a2a0: 6d79 2024 653b 0a20 2020 2066 6f72 6561 my $e;. forea │ │ │ -0001a2b0: 6368 2024 6520 2840 6578 6365 7074 4469 ch $e (@exceptDi │ │ │ -0001a2c0: 7273 290a 2020 2020 7b0a 096d 7920 2469 rs). {..my $i │ │ │ -0001a2d0: 3b0a 096d 7920 2469 7349 6e20 3d20 303b ;..my $isIn = 0; │ │ │ -0001a2e0: 0a09 666f 7265 6163 6820 2469 2028 4069 ..foreach $i (@i │ │ │ -0001a2f0: 6e63 6c75 6465 4469 7273 290a 097b 0a09 ncludeDirs)..{.. │ │ │ -0001a300: 2020 2020 6966 2028 2469 2065 7120 2465 if ($i eq $e │ │ │ -0001a310: 2920 2020 2020 2023 2073 616d 6520 6469 ) # same di │ │ │ -0001a320: 7265 6374 6f72 7920 6368 6f73 656e 2066 rectory chosen f │ │ │ -0001a330: 6f72 2069 6e63 6c75 6465 2061 6e64 2065 or include and e │ │ │ -0001a340: 7863 6c75 6465 0a09 2020 2020 7b0a 0909 xclude.. {... │ │ │ -0001a350: 2453 616d 6549 6e63 6c45 7863 6c20 3d20 $SameInclExcl = │ │ │ -0001a360: 313b 0a09 0924 7072 4c6f 672d 3e70 7269 1;...$prLog->pri │ │ │ -0001a370: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -0001a380: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -0001a390: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ -0001a3a0: 2263 6f6e 6669 6775 7261 7469 6f6e 2065 "configuration e │ │ │ -0001a3b0: 7272 6f72 3a20 3c24 693e 2063 686f 7365 rror: <$i> chose │ │ │ -0001a3c0: 6e20 2220 2e0a 0909 0920 2020 2020 2020 n " ..... │ │ │ -0001a3d0: 2266 6f72 206f 7074 696f 6e73 2069 6e63 "for options inc │ │ │ -0001a3e0: 6c75 6465 4469 7273 2061 6e64 2065 7863 ludeDirs and exc │ │ │ -0001a3f0: 6c75 6465 4469 7273 225d 293b 0a09 2020 ludeDirs"]);.. │ │ │ -0001a400: 2020 7d0a 0920 2020 2069 6620 2826 3a3a }.. if (&:: │ │ │ -0001a410: 6973 5375 6244 6972 2824 692c 2024 6529 isSubDir($i, $e) │ │ │ -0001a420: 290a 0920 2020 207b 0a09 0924 6973 496e ).. {...$isIn │ │ │ -0001a430: 203d 2031 3b0a 0909 6c61 7374 3b0a 0920 = 1;...last;.. │ │ │ -0001a440: 2020 207d 0a09 7d0a 0924 7072 4c6f 672d }..}..$prLog- │ │ │ -0001a450: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0001a460: 3e20 2757 272c 0a09 0920 2020 2020 2027 > 'W',... ' │ │ │ -0001a470: 2d73 7472 2720 3d3e 205b 2265 7863 6570 -str' => ["excep │ │ │ -0001a480: 7420 6469 7220 3c24 653e 2069 7320 6e6f t dir <$e> is no │ │ │ -0001a490: 7420 7061 7274 206f 6620 7468 6520 6261 t part of the ba │ │ │ -0001a4a0: 636b 7570 225d 290a 0920 2020 2075 6e6c ckup"]).. unl │ │ │ -0001a4b0: 6573 7320 2469 7349 6e3b 0a20 2020 207d ess $isIn;. } │ │ │ -0001a4c0: 0a7d 0a65 7869 7420 3120 6966 2024 5361 .}.exit 1 if $Sa │ │ │ -0001a4d0: 6d65 496e 636c 4578 636c 3b0a 0a23 0a23 meInclExcl;..#.# │ │ │ -0001a4e0: 206c 6f63 6b20 6669 6c65 20c3 bc62 6572 lock file ..ber │ │ │ -0001a4f0: 7072 c3bc 6665 6e0a 230a 3a3a 6368 6563 pr..fen.#.::chec │ │ │ -0001a500: 6b4c 6f63 6b46 696c 6528 246c 6f63 6b46 kLockFile($lockF │ │ │ -0001a510: 696c 652c 2024 7072 4c6f 6729 3b0a 0a23 ile, $prLog);..# │ │ │ -0001a520: 2070 7265 7061 7265 2065 7863 6570 7454 prepare exceptT │ │ │ -0001a530: 7970 6573 0a6d 7920 2825 6578 5479 7065 ypes.my (%exType │ │ │ -0001a540: 732c 2024 6574 293b 0a66 6f72 6561 6368 s, $et);.foreach │ │ │ -0001a550: 2024 6574 2028 7370 6c69 7428 2f2f 2c20 $et (split(//, │ │ │ -0001a560: 2465 7863 6570 7454 7970 6573 207c 7c20 $exceptTypes || │ │ │ -0001a570: 2222 2929 0a7b 0a20 2020 2024 6578 5479 "")).{. $exTy │ │ │ -0001a580: 7065 737b 2465 747d 203d 2030 3b20 2020 pes{$et} = 0; │ │ │ -0001a590: 2020 2020 2020 2320 7468 6973 2069 7320 # this is │ │ │ -0001a5a0: 6120 666c 6167 2061 6e64 2061 6e64 2061 a flag and and a │ │ │ -0001a5b0: 6c73 6f20 6120 636f 756e 7465 720a 7d0a lso a counter.}. │ │ │ -0001a5c0: 0a23 0a23 2073 6574 2065 6e76 6972 6f6e .#.# set environ │ │ │ -0001a5d0: 6d65 6e74 2076 6172 6961 626c 6573 0a23 ment variables.# │ │ │ -0001a5e0: 0a24 454e 567b 2753 5442 555f 736f 7572 .$ENV{'STBU_sour │ │ │ -0001a5f0: 6365 4469 7227 7d20 3d20 2473 6f75 7263 ceDir'} = $sourc │ │ │ -0001a600: 6544 6972 3b0a 2445 4e56 7b27 5354 4255 eDir;.$ENV{'STBU │ │ │ -0001a610: 5f62 6163 6b75 7044 6972 277d 203d 2024 _backupDir'} = $ │ │ │ -0001a620: 6261 636b 7570 4469 723b 0a24 454e 567b backupDir;.$ENV{ │ │ │ -0001a630: 2753 5442 555f 7365 7269 6573 277d 203d 'STBU_series'} = │ │ │ -0001a640: 2024 7365 7269 6573 3b0a 2445 4e56 7b27 $series;.$ENV{' │ │ │ -0001a650: 5354 4255 5f74 6d70 6469 7227 7d20 3d20 STBU_tmpdir'} = │ │ │ -0001a660: 2474 6d70 6469 723b 0a24 454e 567b 2753 $tmpdir;.$ENV{'S │ │ │ -0001a670: 5442 555f 6c6f 636b 4669 6c65 277d 203d TBU_lockFile'} = │ │ │ -0001a680: 2024 6c6f 636b 4669 6c65 3b0a 2445 4e56 $lockFile;.$ENV │ │ │ -0001a690: 7b27 5354 4255 5f66 6f6c 6c6f 774c 696e {'STBU_followLin │ │ │ -0001a6a0: 6b73 277d 203d 2024 666f 6c6c 6f77 4c69 ks'} = $followLi │ │ │ -0001a6b0: 6e6b 733b 0a24 454e 567b 2753 5442 555f nks;.$ENV{'STBU_ │ │ │ -0001a6c0: 6c61 7465 4c69 6e6b 7327 7d20 3d20 246c lateLinks'} = $l │ │ │ -0001a6d0: 6174 654c 696e 6b73 3b0a 2445 4e56 7b27 ateLinks;.$ENV{' │ │ │ -0001a6e0: 5354 4255 5f6c 6174 6543 6f6d 7072 6573 STBU_lateCompres │ │ │ -0001a6f0: 732c 277d 203d 2024 6c61 7465 436f 6d70 s,'} = $lateComp │ │ │ -0001a700: 7265 7373 2c3b 0a24 454e 567b 2753 5442 ress,;.$ENV{'STB │ │ │ -0001a710: 555f 7665 7262 6f73 6527 7d20 3d20 2476 U_verbose'} = $v │ │ │ -0001a720: 6572 626f 7365 3b0a 2445 4e56 7b27 5354 erbose;.$ENV{'ST │ │ │ -0001a730: 4255 5f64 6f4e 6f74 4465 6c65 7465 277d BU_doNotDelete'} │ │ │ -0001a740: 203d 2024 646f 4e6f 7444 656c 6574 653b = $doNotDelete; │ │ │ -0001a750: 0a24 454e 567b 2753 5442 555f 6465 6c65 .$ENV{'STBU_dele │ │ │ -0001a760: 7465 4e6f 7446 696e 6973 6865 6444 6972 teNotFinishedDir │ │ │ -0001a770: 7327 7d20 3d20 2464 656c 6574 654e 6f74 s'} = $deleteNot │ │ │ -0001a780: 4669 6e69 7368 6564 4469 7273 3b0a 2445 FinishedDirs;.$E │ │ │ -0001a790: 4e56 7b27 5354 4255 5f6c 6f67 4669 6c65 NV{'STBU_logFile │ │ │ -0001a7a0: 277d 203d 2024 6c6f 6746 696c 653b 0a24 '} = $logFile;.$ │ │ │ -0001a7b0: 454e 567b 2753 5442 555f 6c6f 6749 6e42 ENV{'STBU_logInB │ │ │ -0001a7c0: 6163 6b75 7044 6972 277d 203d 2024 6c6f ackupDir'} = $lo │ │ │ -0001a7d0: 6749 6e42 6163 6b75 7044 6972 3b0a 2445 gInBackupDir;.$E │ │ │ -0001a7e0: 4e56 7b27 6c6f 6749 6e42 6163 6b75 7044 NV{'logInBackupD │ │ │ -0001a7f0: 6972 4669 6c65 4e61 6d65 277d 203d 2024 irFileName'} = $ │ │ │ -0001a800: 6c6f 6749 6e42 6163 6b75 7044 6972 4669 logInBackupDirFi │ │ │ -0001a810: 6c65 4e61 6d65 3b0a 0a23 0a23 2070 7265 leName;..#.# pre │ │ │ -0001a820: 636f 6d6d 616e 6420 6175 7366 c3bc 6872 command ausf..hr │ │ │ -0001a830: 656e 0a23 0a69 6620 2864 6566 696e 6564 en.#.if (defined │ │ │ -0001a840: 2024 7072 6563 6f6d 6d61 6e64 290a 7b0a $precommand).{. │ │ │ -0001a850: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -0001a860: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ -0001a870: 2c0a 0909 2020 272d 7374 7227 203d 3e20 ,... '-str' => │ │ │ -0001a880: 5b22 7374 6172 7469 6e67 2070 7265 2063 ["starting pre c │ │ │ -0001a890: 6f6d 6d61 6e64 203c 4024 7072 6563 6f6d ommand <@$precom │ │ │ -0001a8a0: 6d61 6e64 3e20 2e2e 2e22 5d29 3b0a 2020 mand> ..."]);. │ │ │ -0001a8b0: 2020 6d79 2028 2470 7265 436f 6d6d 2c20 my ($preComm, │ │ │ -0001a8c0: 4070 7265 5061 7261 6d29 203d 2028 4024 @preParam) = (@$ │ │ │ -0001a8d0: 7072 6563 6f6d 6d61 6e64 293b 0a20 2020 precommand);. │ │ │ -0001a8e0: 206d 7920 2470 7265 636f 203d 2066 6f72 my $preco = for │ │ │ -0001a8f0: 6b50 726f 632d 3e6e 6577 2827 2d65 7865 kProc->new('-exe │ │ │ -0001a900: 6327 203d 3e20 2470 7265 436f 6d6d 2c0a c' => $preComm,. │ │ │ -0001a910: 0909 0920 2020 2020 2027 2d70 6172 616d ... '-param │ │ │ -0001a920: 2720 3d3e 205c 4070 7265 5061 7261 6d2c ' => \@preParam, │ │ │ -0001a930: 0a09 0909 2020 2020 2020 272d 776f 726b .... '-work │ │ │ -0001a940: 696e 6744 6972 2720 3d3e 2027 2e27 2c0a ingDir' => '.',. │ │ │ -0001a950: 0909 0920 2020 2020 2027 2d6f 7574 5261 ... '-outRa │ │ │ -0001a960: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => "$tmpdi │ │ │ -0001a970: 722f 7072 6563 6f6d 6d2d 222c 0a09 0909 r/precomm-",.... │ │ │ -0001a980: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ -0001a990: 3e20 2470 724c 6f67 293b 0a20 2020 2024 > $prLog);. $ │ │ │ -0001a9a0: 7072 6563 6f2d 3e77 6169 7428 293b 0a20 preco->wait();. │ │ │ -0001a9b0: 2020 206d 7920 246f 7574 203d 2024 7072 my $out = $pr │ │ │ -0001a9c0: 6563 6f2d 3e67 6574 5354 444f 5554 2829 eco->getSTDOUT() │ │ │ -0001a9d0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ -0001a9e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -0001a9f0: 5727 2c0a 0909 2020 272d 7374 7227 203d W',... '-str' = │ │ │ -0001aa00: 3e20 5b22 5354 444f 5554 206f 6620 3c40 > ["STDOUT of <@ │ │ │ -0001aa10: 2470 7265 636f 6d6d 616e 643e 3a22 2c20 $precommand>:", │ │ │ -0001aa20: 4024 6f75 745d 290a 0969 6620 2840 246f @$out])..if (@$o │ │ │ -0001aa30: 7574 203e 2030 293b 0a20 2020 2024 6f75 ut > 0);. $ou │ │ │ -0001aa40: 7420 3d20 2470 7265 636f 2d3e 6765 7453 t = $preco->getS │ │ │ -0001aa50: 5444 4552 5228 293b 0a20 2020 2024 7072 TDERR();. $pr │ │ │ -0001aa60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0001aa70: 6427 203d 3e20 2745 272c 0a09 0920 2027 d' => 'E',... ' │ │ │ -0001aa80: 2d73 7472 2720 3d3e 205b 2253 5444 4552 -str' => ["STDER │ │ │ -0001aa90: 5220 6f66 203c 4024 7072 6563 6f6d 6d61 R of <@$precomma │ │ │ -0001aaa0: 6e64 3e3a 222c 2040 246f 7574 5d29 0a09 nd>:", @$out]).. │ │ │ -0001aab0: 6966 2028 4024 6f75 7420 3e20 3029 3b0a if (@$out > 0);. │ │ │ -0001aac0: 0a20 2020 206d 7920 2473 7461 7475 7320 . my $status │ │ │ -0001aad0: 3d20 2470 7265 636f 2d3e 6765 7428 272d = $preco->get('- │ │ │ -0001aae0: 7768 6174 2720 3d3e 2027 7374 6174 7573 what' => 'status │ │ │ -0001aaf0: 2729 3b0a 2020 2020 6966 2028 2473 7461 ');. if ($sta │ │ │ -0001ab00: 7475 7320 3d3d 2030 290a 2020 2020 7b0a tus == 0). {. │ │ │ -0001ab10: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0001ab20: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -0001ab30: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -0001ab40: 0a09 0920 2020 2020 205b 2270 7265 2063 ... ["pre c │ │ │ -0001ab50: 6f6d 6d61 6e64 203c 4024 7072 6563 6f6d ommand <@$precom │ │ │ -0001ab60: 6d61 6e64 3e20 6669 6e69 7368 6564 2077 mand> finished w │ │ │ -0001ab70: 6974 6820 7374 6174 7573 2030 225d 293b ith status 0"]); │ │ │ -0001ab80: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -0001ab90: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -0001aba0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001abb0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -0001abc0: 7472 2720 3d3e 205b 2270 7265 2063 6f6d tr' => ["pre com │ │ │ -0001abd0: 6d61 6e64 203c 4024 7072 6563 6f6d 6d61 mand <@$precomma │ │ │ -0001abe0: 6e64 3e20 6669 6e69 7368 6564 2077 6974 nd> finished wit │ │ │ -0001abf0: 6820 2220 2e0a 0909 0909 2022 7374 6174 h " ...... "stat │ │ │ -0001ac00: 7573 2024 7374 6174 7573 2c20 6578 6974 us $status, exit │ │ │ -0001ac10: 696e 6722 5d29 3b0a 0975 6e6c 696e 6b20 ing"]);..unlink │ │ │ -0001ac20: 246c 6f63 6b46 696c 6520 6966 2024 6c6f $lockFile if $lo │ │ │ -0001ac30: 636b 4669 6c65 3b0a 0965 7869 7420 313b ckFile;..exit 1; │ │ │ -0001ac40: 0a20 2020 207d 0a7d 0a0a 0a23 0a23 2045 . }.}...#.# E │ │ │ -0001ac50: 727a 6575 6765 6e20 6465 7220 6265 6ec3 rzeugen der ben. │ │ │ -0001ac60: b674 6967 7465 6e20 4f62 6a65 6b74 650a .tigten Objekte. │ │ │ -0001ac70: 230a 6d79 2024 6164 6d69 6e44 6972 7320 #.my $adminDirs │ │ │ -0001ac80: 3d20 6164 6d69 6e44 6972 6563 746f 7269 = adminDirectori │ │ │ -0001ac90: 6573 2d3e 6e65 7728 272d 7461 7267 6574 es->new('-target │ │ │ -0001aca0: 4469 7227 203d 3e20 2474 6172 6765 7444 Dir' => $targetD │ │ │ -0001acb0: 6972 2c0a 0909 0909 2020 2020 2020 272d ir,..... '- │ │ │ -0001acc0: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' => │ │ │ -0001acd0: 2024 6368 6563 6b53 756d 4669 6c65 2c0a $checkSumFile,. │ │ │ -0001ace0: 0909 0909 2020 2020 2020 272d 746d 7064 .... '-tmpd │ │ │ -0001acf0: 6972 2720 3d3e 2024 746d 7064 6972 2c0a ir' => $tmpdir,. │ │ │ -0001ad00: 0909 0909 2020 2020 2020 272d 6368 6d6f .... '-chmo │ │ │ -0001ad10: 644d 4435 4669 6c65 2720 3d3e 2024 6368 dMD5File' => $ch │ │ │ -0001ad20: 6d6f 644d 4435 4669 6c65 2c0a 0909 0909 modMD5File,..... │ │ │ -0001ad30: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ -0001ad40: 3e20 2470 724c 6f67 2c0a 0909 0909 2020 > $prLog,..... │ │ │ -0001ad50: 2020 2020 272d 616b 7444 6174 6527 203d '-aktDate' = │ │ │ -0001ad60: 3e20 2461 6b74 4461 7465 2c0a 0909 0909 > $aktDate,..... │ │ │ -0001ad70: 2020 2020 2020 272d 6465 6275 674d 6f64 '-debugMod │ │ │ -0001ad80: 6527 203d 3e20 2464 6562 7567 293b 0a0a e' => $debug);.. │ │ │ -0001ad90: 2370 7269 6e74 2022 6163 7475 616c 2064 #print "actual d │ │ │ -0001ada0: 6972 2066 6f72 2074 6869 7320 6261 636b ir for this back │ │ │ -0001adb0: 7570 3a20 2b22 2e20 2024 6164 6d69 6e44 up: +". $adminD │ │ │ -0001adc0: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir() │ │ │ -0001add0: 2c20 225c 6e22 3b0a 0a6d 7920 2469 6e64 , "\n";..my $ind │ │ │ -0001ade0: 6578 4469 7220 3d20 696e 6465 7844 6972 exDir = indexDir │ │ │ -0001adf0: 2d3e 6e65 7728 293b 0a0a 6d79 2024 616b ->new();..my $ak │ │ │ -0001ae00: 7446 696c 656e 616d 6520 3d0a 2020 2020 tFilename =. │ │ │ -0001ae10: 616b 7446 696c 656e 616d 652d 3e6e 6577 aktFilename->new │ │ │ -0001ae20: 2827 2d69 6e66 6f46 696c 6527 203d 3e20 ('-infoFile' => │ │ │ -0001ae30: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA │ │ │ -0001ae40: 6b74 496e 666f 4669 6c65 2829 2c0a 0909 ktInfoFile(),... │ │ │ -0001ae50: 2020 2020 2027 2d62 6c6f 636b 4368 6563 '-blockChec │ │ │ -0001ae60: 6b53 756d 4669 6c65 2720 3d3e 0a09 0920 kSumFile' =>... │ │ │ -0001ae70: 2020 2020 2461 646d 696e 4469 7273 2d3e $adminDirs-> │ │ │ -0001ae80: 6765 7441 6b74 4469 7228 2920 2e20 222f getAktDir() . "/ │ │ │ -0001ae90: 2462 6c6f 636b 4368 6563 6b53 756d 4669 $blockCheckSumFi │ │ │ -0001aea0: 6c65 222c 0a09 0920 2020 2020 272d 636f le",... '-co │ │ │ -0001aeb0: 6d70 7265 7373 4d44 3546 696c 6527 203d mpressMD5File' = │ │ │ -0001aec0: 3e20 2463 6f6d 7072 6573 734d 4435 4669 > $compressMD5Fi │ │ │ -0001aed0: 6c65 2c0a 0909 2020 2020 2027 2d73 6f75 le,... '-sou │ │ │ -0001aee0: 7263 6544 6972 2720 3d3e 2024 736f 7572 rceDir' => $sour │ │ │ -0001aef0: 6365 4469 722c 0a09 0920 2020 2020 272d ceDir,... '- │ │ │ -0001af00: 666f 6c6c 6f77 4c69 6e6b 7327 203d 3e20 followLinks' => │ │ │ -0001af10: 2466 6f6c 6c6f 774c 696e 6b73 2c0a 0909 $followLinks,... │ │ │ -0001af20: 2020 2020 2027 2d63 6f6d 7072 6573 7327 '-compress' │ │ │ -0001af30: 203d 3e20 2463 6f6d 7072 6573 732c 0a09 => $compress,.. │ │ │ -0001af40: 0920 2020 2020 272d 756e 636f 6d70 7265 . '-uncompre │ │ │ -0001af50: 7373 2720 3d3e 2024 756e 636f 6d70 7265 ss' => $uncompre │ │ │ -0001af60: 7373 2c0a 0909 2020 2020 2027 2d70 6f73 ss,... '-pos │ │ │ -0001af70: 7466 6978 2720 3d3e 2024 706f 7374 6669 tfix' => $postfi │ │ │ -0001af80: 782c 0a09 0920 2020 2020 272d 636f 6d70 x,... '-comp │ │ │ -0001af90: 7252 756c 6527 203d 3e20 2463 6f6d 7072 rRule' => $compr │ │ │ -0001afa0: 5275 6c65 2c0a 0909 2020 2020 2027 2d65 Rule,... '-e │ │ │ -0001afb0: 7863 6570 7452 756c 6527 203d 3e20 2465 xceptRule' => $e │ │ │ -0001afc0: 7863 5275 6c65 2c0a 0909 2020 2020 2027 xcRule,... ' │ │ │ -0001afd0: 2d69 6e63 6c75 6465 5275 6c65 2720 3d3e -includeRule' => │ │ │ -0001afe0: 2024 696e 6352 756c 652c 0a09 0920 2020 $incRule,... │ │ │ -0001aff0: 2020 272d 7772 6974 6545 7863 6c75 6465 '-writeExclude │ │ │ -0001b000: 4c6f 6727 203d 3e20 2477 7269 7465 4578 Log' => $writeEx │ │ │ -0001b010: 636c 7564 654c 6f67 2c0a 0909 2020 2020 cludeLog,... │ │ │ -0001b020: 2027 2d65 7863 6570 7454 7970 6573 2720 '-exceptTypes' │ │ │ -0001b030: 3d3e 2024 6578 6365 7074 5479 7065 732c => $exceptTypes, │ │ │ -0001b040: 0a09 0920 2020 2020 272d 7370 6563 6961 ... '-specia │ │ │ -0001b050: 6c54 7970 6541 7263 6869 7665 7227 203d lTypeArchiver' = │ │ │ -0001b060: 3e20 2473 7065 6369 616c 5479 7065 4172 > $specialTypeAr │ │ │ -0001b070: 6368 6976 6572 2c0a 0909 2020 2020 2027 chiver,... ' │ │ │ -0001b080: 2d61 7263 6869 7665 5479 7065 7327 203d -archiveTypes' = │ │ │ -0001b090: 3e20 2461 7263 6869 7665 5479 7065 732c > $archiveTypes, │ │ │ -0001b0a0: 0a09 0920 2020 2020 272d 6368 6563 6b42 ... '-checkB │ │ │ -0001b0b0: 6c6f 636b 7352 756c 6527 203d 3e20 5c40 locksRule' => \@ │ │ │ -0001b0c0: 6368 6563 6b42 6c6f 636b 7352 756c 652c checkBlocksRule, │ │ │ -0001b0d0: 0a09 0920 2020 2020 272d 6368 6563 6b42 ... '-checkB │ │ │ -0001b0e0: 6c6f 636b 7342 5327 203d 3e20 5c40 6368 locksBS' => \@ch │ │ │ -0001b0f0: 6563 6b42 6c6f 636b 7342 532c 0a09 0920 eckBlocksBS,... │ │ │ -0001b100: 2020 2020 272d 6368 6563 6b42 6c6f 636b '-checkBlock │ │ │ -0001b110: 7343 6f6d 7072 2720 3d3e 205c 4063 6865 sCompr' => \@che │ │ │ -0001b120: 636b 426c 6f63 6b73 436f 6d70 722c 0a09 ckBlocksCompr,.. │ │ │ -0001b130: 0920 2020 2020 272d 6368 6563 6b42 6c6f . '-checkBlo │ │ │ -0001b140: 636b 7352 6561 6427 203d 3e20 5c40 6368 cksRead' => \@ch │ │ │ -0001b150: 6563 6b42 6c6f 636b 7352 6561 642c 0a09 eckBlocksRead,.. │ │ │ -0001b160: 0920 2020 2020 272d 6368 6563 6b44 6576 . '-checkDev │ │ │ -0001b170: 6963 6573 2720 3d3e 205c 4063 6865 636b ices' => \@check │ │ │ -0001b180: 4465 7669 6365 732c 0a09 0920 2020 2020 Devices,... │ │ │ -0001b190: 272d 6368 6563 6b44 6576 6963 6573 4469 '-checkDevicesDi │ │ │ -0001b1a0: 7227 203d 3e20 5c40 6368 6563 6b44 6576 r' => \@checkDev │ │ │ -0001b1b0: 6963 6573 4469 722c 0a09 0920 2020 2020 icesDir,... │ │ │ -0001b1c0: 272d 6368 6563 6b44 6576 6963 6573 4253 '-checkDevicesBS │ │ │ -0001b1d0: 2720 3d3e 205c 4063 6865 636b 4465 7669 ' => \@checkDevi │ │ │ -0001b1e0: 6365 7342 532c 0a09 0920 2020 2020 272d cesBS,... '- │ │ │ -0001b1f0: 6368 6563 6b44 6576 6963 6573 436f 6d70 checkDevicesComp │ │ │ -0001b200: 7227 203d 3e20 5c40 6368 6563 6b44 6576 r' => \@checkDev │ │ │ -0001b210: 6963 6573 436f 6d70 722c 0a09 0920 2020 icesCompr,... │ │ │ -0001b220: 2020 272d 6c61 7465 4c69 6e6b 7327 203d '-lateLinks' = │ │ │ -0001b230: 3e20 246c 6174 654c 696e 6b73 2c0a 0909 > $lateLinks,... │ │ │ -0001b240: 2020 2020 2027 2d6c 6f67 496e 4261 636b '-logInBack │ │ │ -0001b250: 7570 4469 7227 203d 3e20 246c 6f67 496e upDir' => $logIn │ │ │ -0001b260: 4261 636b 7570 4469 722c 0a09 0920 2020 BackupDir,... │ │ │ -0001b270: 2020 272d 636f 6d70 7265 7373 4c6f 6749 '-compressLogI │ │ │ -0001b280: 6e42 6163 6b75 7044 6972 2720 3d3e 2024 nBackupDir' => $ │ │ │ -0001b290: 636f 6d70 7265 7373 4c6f 6749 6e42 6163 compressLogInBac │ │ │ -0001b2a0: 6b75 7044 6972 2c0a 0909 2020 2020 2027 kupDir,... ' │ │ │ -0001b2b0: 2d6c 6f67 496e 4261 636b 7570 4469 7246 -logInBackupDirF │ │ │ -0001b2c0: 696c 654e 616d 6527 203d 3e20 246c 6f67 ileName' => $log │ │ │ -0001b2d0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -0001b2e0: 616d 652c 0a09 0920 2020 2020 272d 6578 ame,... '-ex │ │ │ -0001b2f0: 6365 7074 4469 7273 2720 3d3e 205c 4065 ceptDirs' => \@e │ │ │ -0001b300: 7863 6570 7444 6972 732c 0a09 0920 2020 xceptDirs,... │ │ │ -0001b310: 2020 272d 696e 636c 7564 6544 6972 7327 '-includeDirs' │ │ │ -0001b320: 203d 3e20 5c40 696e 636c 7564 6544 6972 => \@includeDir │ │ │ -0001b330: 732c 0a09 0920 2020 2020 272d 616b 7444 s,... '-aktD │ │ │ -0001b340: 6174 6527 203d 3e20 2461 6b74 4461 7465 ate' => $aktDate │ │ │ -0001b350: 2c0a 0909 2020 2020 2027 2d63 686d 6f64 ,... '-chmod │ │ │ -0001b360: 4d44 3546 696c 6527 203d 3e20 2463 686d MD5File' => $chm │ │ │ -0001b370: 6f64 4d44 3546 696c 652c 0a09 0920 2020 odMD5File,... │ │ │ -0001b380: 2020 272d 696e 6465 7844 6972 2720 3d3e '-indexDir' => │ │ │ -0001b390: 2024 696e 6465 7844 6972 2c0a 0909 2020 $indexDir,... │ │ │ -0001b3a0: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ -0001b3b0: 7072 4c6f 6729 3b0a 0a6d 7920 2473 6574 prLog);..my $set │ │ │ -0001b3c0: 5265 7365 7444 6972 5469 6d65 7346 696c ResetDirTimesFil │ │ │ -0001b3d0: 6520 3d20 263a 3a75 6e69 7146 696c 654e e = &::uniqFileN │ │ │ -0001b3e0: 616d 6528 2224 746d 7064 6972 2f73 746f ame("$tmpdir/sto │ │ │ -0001b3f0: 7265 4261 636b 7570 2d64 6972 732e 2424 reBackup-dirs.$$ │ │ │ -0001b400: 2229 3b0a 6d79 2024 7365 7452 6573 6574 ");.my $setReset │ │ │ -0001b410: 4469 7254 696d 6573 203d 0a20 2020 2073 DirTimes =. s │ │ │ -0001b420: 6574 5265 7365 7444 6972 5469 6d65 732d etResetDirTimes- │ │ │ -0001b430: 3e6e 6577 2827 2d74 6d70 4469 7227 203d >new('-tmpDir' = │ │ │ -0001b440: 3e20 2474 6d70 6469 722c 0a09 0909 2020 > $tmpdir,.... │ │ │ -0001b450: 272d 736f 7572 6365 4469 7227 203d 3e20 '-sourceDir' => │ │ │ -0001b460: 2473 6f75 7263 6544 6972 2c0a 0909 0920 $sourceDir,.... │ │ │ -0001b470: 2027 2d74 6172 6765 7444 6972 2720 3d3e '-targetDir' => │ │ │ -0001b480: 2024 6164 6d69 6e44 6972 732d 3e67 6574 $adminDirs->get │ │ │ -0001b490: 416b 7444 6972 2829 2c0a 0909 0920 2027 AktDir(),.... ' │ │ │ -0001b4a0: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ -0001b4b0: 672c 0a09 0909 2020 272d 7372 6474 6627 g,.... '-srdtf' │ │ │ -0001b4c0: 203d 3e20 2473 6574 5265 7365 7444 6972 => $setResetDir │ │ │ -0001b4d0: 5469 6d65 7346 696c 652c 0a09 0909 2020 TimesFile,.... │ │ │ -0001b4e0: 272d 646f 4e6f 7468 696e 6727 203d 3e20 '-doNothing' => │ │ │ -0001b4f0: 246c 6174 654c 696e 6b73 203f 2031 203a $lateLinks ? 1 : │ │ │ -0001b500: 2030 2c0a 0909 0920 2027 2d72 6573 6574 0,.... '-reset │ │ │ -0001b510: 4174 696d 6527 203d 3e20 2472 6573 6574 Atime' => $reset │ │ │ -0001b520: 4174 696d 652c 0a09 0909 2020 272d 7072 Atime,.... '-pr │ │ │ -0001b530: 6573 6572 7665 5065 726d 7327 203d 3e20 eservePerms' => │ │ │ -0001b540: 2470 7265 7365 7276 6550 6572 6d73 293b $preservePerms); │ │ │ -0001b550: 0a23 7072 696e 7420 2261 6374 7561 6c20 .#print "actual │ │ │ -0001b560: 6261 636b 7570 2064 6972 203d 2022 2c20 backup dir = ", │ │ │ -0001b570: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA │ │ │ -0001b580: 6b74 4469 7228 292c 225c 6e22 3b0a 6d79 ktDir(),"\n";.my │ │ │ -0001b590: 2024 7072 4c6f 6732 203d 2075 6e64 6566 $prLog2 = undef │ │ │ -0001b5a0: 3b0a 6966 2028 246c 6f67 496e 4261 636b ;.if ($logInBack │ │ │ -0001b5b0: 7570 4469 7229 2020 2020 2020 2320 6175 upDir) # au │ │ │ -0001b5c0: 6368 2069 6e20 4261 636b 7570 4469 7273 ch in BackupDirs │ │ │ -0001b5d0: 2068 6572 696e 6c6f 6767 656e 0a7b 0a20 herinloggen.{. │ │ │ -0001b5e0: 2020 2024 6c6f 6749 6e42 6163 6b75 7044 $logInBackupD │ │ │ -0001b5f0: 6972 4669 6c65 4e61 6d65 203d 0a09 2461 irFileName =..$a │ │ │ -0001b600: 646d 696e 4469 7273 2d3e 6765 7441 6b74 dminDirs->getAkt │ │ │ -0001b610: 4469 7228 2920 2e20 222f 246c 6f67 496e Dir() . "/$logIn │ │ │ -0001b620: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam │ │ │ -0001b630: 6522 2c0a 2020 2020 2470 724c 6f67 3220 e",. $prLog2 │ │ │ -0001b640: 3d20 7072 696e 744c 6f67 2d3e 6e65 7728 = printLog->new( │ │ │ -0001b650: 272d 6b69 6e64 2720 3d3e 2024 7072 4c6f '-kind' => $prLo │ │ │ -0001b660: 674b 696e 642c 0a09 0909 2020 2020 272d gKind,.... '- │ │ │ -0001b670: 6669 6c65 2720 3d3e 2024 6c6f 6749 6e42 file' => $logInB │ │ │ -0001b680: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName │ │ │ -0001b690: 2c0a 0909 0920 2020 2027 2d77 6974 6854 ,.... '-withT │ │ │ -0001b6a0: 696d 6527 203d 3e20 2779 6573 272c 0a09 ime' => 'yes',.. │ │ │ -0001b6b0: 0909 2020 2020 272d 6d61 7846 696c 656c .. '-maxFilel │ │ │ -0001b6c0: 656e 2720 3d3e 2030 2c0a 0909 0920 2020 en' => 0,.... │ │ │ -0001b6d0: 2027 2d6e 6f4f 664f 6c64 4669 6c65 7327 '-noOfOldFiles' │ │ │ -0001b6e0: 203d 3e20 312c 0a09 0909 2020 2020 272d => 1,.... '- │ │ │ -0001b6f0: 746d 7064 6972 2720 3d3e 2024 746d 7064 tmpdir' => $tmpd │ │ │ -0001b700: 6972 293b 0a20 2020 2024 7072 4c6f 672d ir);. $prLog- │ │ │ -0001b710: 3e61 6464 2827 2d70 724c 6f67 7327 203d >add('-prLogs' = │ │ │ -0001b720: 3e20 5b24 7072 4c6f 6732 5d29 3b0a 7d0a > [$prLog2]);.}. │ │ │ -0001b730: 0a6d 7920 2464 656c 4f6c 6420 3d0a 2020 .my $delOld =. │ │ │ -0001b740: 2020 6465 6c65 7465 4f6c 6442 6163 6b75 deleteOldBacku │ │ │ -0001b750: 7044 6972 732d 3e6e 6577 2827 2d74 6172 pDirs->new('-tar │ │ │ -0001b760: 6765 7444 6972 2720 3d3e 2024 7461 7267 getDir' => $targ │ │ │ -0001b770: 6574 4469 722c 0a09 0909 2020 2020 2027 etDir,.... ' │ │ │ -0001b780: 2d64 6f4e 6f74 4465 6c65 7465 2720 3d3e -doNotDelete' => │ │ │ -0001b790: 2024 646f 4e6f 7444 656c 6574 652c 0a09 $doNotDelete,.. │ │ │ -0001b7a0: 0909 2020 2020 2027 2d64 656c 6574 654e .. '-deleteN │ │ │ -0001b7b0: 6f74 4669 6e69 7368 6564 4469 7273 2720 otFinishedDirs' │ │ │ -0001b7c0: 3d3e 2024 6465 6c65 7465 4e6f 7446 696e => $deleteNotFin │ │ │ -0001b7d0: 6973 6865 6444 6972 732c 0a09 0909 2020 ishedDirs,.... │ │ │ -0001b7e0: 2020 2027 2d63 6865 636b 5375 6d46 696c '-checkSumFil │ │ │ -0001b7f0: 6527 203d 3e20 2463 6865 636b 5375 6d46 e' => $checkSumF │ │ │ -0001b800: 696c 652c 0a09 0909 2020 2020 2027 2d61 ile,.... '-a │ │ │ -0001b810: 6374 4261 636b 7570 4469 7227 203d 3e20 ctBackupDir' => │ │ │ -0001b820: 2461 646d 696e 4469 7273 2d3e 6765 7441 $adminDirs->getA │ │ │ -0001b830: 6b74 4469 7228 292c 0a09 0909 2020 2020 ktDir(),.... │ │ │ -0001b840: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr │ │ │ -0001b850: 4c6f 672c 0a09 0909 2020 2020 2027 2d74 Log,.... '-t │ │ │ -0001b860: 6f64 6179 2720 3d3e 2024 616b 7444 6174 oday' => $aktDat │ │ │ -0001b870: 652c 0a09 0909 2020 2020 2027 2d6b 6565 e,.... '-kee │ │ │ -0001b880: 7046 6972 7374 4f66 5965 6172 2720 3d3e pFirstOfYear' => │ │ │ -0001b890: 2024 6b65 6570 4669 7273 744f 6659 6561 $keepFirstOfYea │ │ │ -0001b8a0: 722c 0a09 0909 2020 2020 2027 2d6b 6565 r,.... '-kee │ │ │ -0001b8b0: 704c 6173 744f 6659 6561 7227 203d 3e20 pLastOfYear' => │ │ │ -0001b8c0: 246b 6565 704c 6173 744f 6659 6561 722c $keepLastOfYear, │ │ │ -0001b8d0: 0a09 0909 2020 2020 2027 2d6b 6565 7046 .... '-keepF │ │ │ -0001b8e0: 6972 7374 4f66 4d6f 6e74 6827 203d 3e20 irstOfMonth' => │ │ │ -0001b8f0: 246b 6565 7046 6972 7374 4f66 4d6f 6e74 $keepFirstOfMont │ │ │ -0001b900: 682c 0a09 0909 2020 2020 2027 2d6b 6565 h,.... '-kee │ │ │ -0001b910: 704c 6173 744f 664d 6f6e 7468 2720 3d3e pLastOfMonth' => │ │ │ -0001b920: 2024 6b65 6570 4c61 7374 4f66 4d6f 6e74 $keepLastOfMont │ │ │ -0001b930: 682c 0a09 0909 2020 2020 2027 2d66 6972 h,.... '-fir │ │ │ -0001b940: 7374 4461 794f 6657 6565 6b27 203d 3e20 stDayOfWeek' => │ │ │ -0001b950: 2466 6972 7374 4461 794f 6657 6565 6b2c $firstDayOfWeek, │ │ │ -0001b960: 0a09 0909 2020 2020 2027 2d6b 6565 7046 .... '-keepF │ │ │ -0001b970: 6972 7374 4f66 5765 656b 2720 3d3e 2024 irstOfWeek' => $ │ │ │ -0001b980: 6b65 6570 4669 7273 744f 6657 6565 6b2c keepFirstOfWeek, │ │ │ -0001b990: 0a09 0909 2020 2020 2027 2d6b 6565 704c .... '-keepL │ │ │ -0001b9a0: 6173 744f 6657 6565 6b27 203d 3e20 246b astOfWeek' => $k │ │ │ -0001b9b0: 6565 704c 6173 744f 6657 6565 6b2c 0a09 eepLastOfWeek,.. │ │ │ -0001b9c0: 0909 2020 2020 2027 2d6b 6565 7041 6c6c .. '-keepAll │ │ │ -0001b9d0: 2720 3d3e 2024 6b65 6570 416c 6c2c 0a09 ' => $keepAll,.. │ │ │ -0001b9e0: 0909 2020 2020 2027 2d6b 6565 7052 656c .. '-keepRel │ │ │ -0001b9f0: 6174 6976 6527 203d 3e20 246b 6565 7052 ative' => $keepR │ │ │ -0001ba00: 656c 6174 6976 652c 0a09 0909 2020 2020 elative,.... │ │ │ -0001ba10: 2027 2d6b 6565 7057 6565 6b64 6179 2720 '-keepWeekday' │ │ │ -0001ba20: 3d3e 2024 6b65 6570 5765 656b 6461 792c => $keepWeekday, │ │ │ -0001ba30: 0a09 0909 2020 2020 2027 2d6b 6565 7044 .... '-keepD │ │ │ -0001ba40: 7570 6c69 6361 7465 2720 3d3e 2024 6b65 uplicate' => $ke │ │ │ -0001ba50: 6570 4475 706c 6963 6174 652c 0a09 0909 epDuplicate,.... │ │ │ -0001ba60: 2020 2020 2027 2d6b 6565 704d 696e 4e75 '-keepMinNu │ │ │ -0001ba70: 6d62 6572 2720 3d3e 2024 6b65 6570 4d69 mber' => $keepMi │ │ │ -0001ba80: 6e4e 756d 6265 722c 0a09 0909 2020 2020 nNumber,.... │ │ │ -0001ba90: 2027 2d6b 6565 704d 6178 4e75 6d62 6572 '-keepMaxNumber │ │ │ -0001baa0: 2720 3d3e 2024 6b65 6570 4d61 784e 756d ' => $keepMaxNum │ │ │ -0001bab0: 6265 722c 0a09 0909 2020 2020 2027 2d73 ber,.... '-s │ │ │ -0001bac0: 7461 7444 656c 4f6c 6442 6163 6b75 7044 tatDelOldBackupD │ │ │ -0001bad0: 6972 7327 203d 3e20 246d 6169 6e3a 3a73 irs' => $main::s │ │ │ -0001bae0: 7461 742c 0a09 0909 2020 2020 2027 2d6c tat,.... '-l │ │ │ -0001baf0: 6174 654c 696e 6b73 5061 7261 6d27 203d ateLinksParam' = │ │ │ -0001bb00: 3e20 246c 6174 654c 696e 6b73 2c0a 0909 > $lateLinks,... │ │ │ -0001bb10: 0920 2020 2020 272d 616c 6c4c 696e 6b73 . '-allLinks │ │ │ -0001bb20: 2720 3d3e 2024 616c 6c4c 696e 6b73 2c0a ' => $allLinks,. │ │ │ -0001bb30: 0909 0920 2020 2020 272d 7375 7070 7265 ... '-suppre │ │ │ -0001bb40: 7373 5761 726e 696e 6727 203d 3e20 5c25 ssWarning' => \% │ │ │ -0001bb50: 7375 7070 7265 7373 5761 726e 696e 670a suppressWarning. │ │ │ -0001bb60: 0909 0920 2020 2020 293b 0a24 6465 6c4f ... );.$delO │ │ │ -0001bb70: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups │ │ │ -0001bb80: 2829 3b0a 6d79 2024 6f6c 6446 696c 656e ();.my $oldFilen │ │ │ -0001bb90: 616d 6520 3d0a 2020 2020 6f6c 6446 696c ame =. oldFil │ │ │ -0001bba0: 656e 616d 652d 3e6e 6577 2827 2d64 626d ename->new('-dbm │ │ │ -0001bbb0: 4261 7365 4e61 6d65 2720 3d3e 2022 2474 BaseName' => "$t │ │ │ -0001bbc0: 6d70 6469 722f 6462 6d22 2c0a 0909 2020 mpdir/dbm",... │ │ │ -0001bbd0: 2020 2027 2d69 6e64 6578 4469 7227 203d '-indexDir' = │ │ │ -0001bbe0: 3e20 2469 6e64 6578 4469 722c 0a09 0920 > $indexDir,... │ │ │ -0001bbf0: 2020 2020 272d 7072 6f67 7265 7373 5265 '-progressRe │ │ │ -0001bc00: 706f 7274 2720 3d3e 2024 7072 6f67 7265 port' => $progre │ │ │ -0001bc10: 7373 5265 706f 7274 2c0a 0909 2020 2020 ssReport,... │ │ │ -0001bc20: 2027 2d61 6b74 4469 7227 203d 3e20 2461 '-aktDir' => $a │ │ │ -0001bc30: 646d 696e 4469 7273 2d3e 6765 7441 6b74 dminDirs->getAkt │ │ │ -0001bc40: 4469 7228 292c 0a09 0920 2020 2020 272d Dir(),... '- │ │ │ -0001bc50: 6f74 6865 7242 6163 6b75 7053 6572 6965 otherBackupSerie │ │ │ -0001bc60: 7327 203d 3e20 5c40 6f74 6865 7242 6163 s' => \@otherBac │ │ │ -0001bc70: 6b75 7053 6572 6965 732c 0a09 0920 2020 kupSeries,... │ │ │ -0001bc80: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ -0001bc90: 724c 6f67 2c0a 0909 2020 2020 2027 2d63 rLog,... '-c │ │ │ -0001bca0: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => │ │ │ -0001bcb0: 2463 6865 636b 5375 6d46 696c 652c 0a09 $checkSumFile,.. │ │ │ -0001bcc0: 0920 2020 2020 272d 6465 6275 674d 6f64 . '-debugMod │ │ │ -0001bcd0: 6527 203d 3e20 2464 6562 7567 2c0a 0909 e' => $debug,... │ │ │ -0001bce0: 2020 2020 2027 2d73 6176 6552 414d 2720 '-saveRAM' │ │ │ -0001bcf0: 3d3e 2024 7361 7665 5241 4d2c 0a09 0920 => $saveRAM,... │ │ │ -0001bd00: 2020 2020 272d 666c 6167 426c 6f63 6b44 '-flagBlockD │ │ │ -0001bd10: 6576 6963 6527 203d 3e20 2466 6c61 6742 evice' => $flagB │ │ │ -0001bd20: 6c6f 636b 4465 7669 6365 2c0a 0909 2020 lockDevice,... │ │ │ -0001bd30: 2020 2027 2d73 7570 7072 6573 7349 6e66 '-suppressInf │ │ │ -0001bd40: 6f27 203d 3e20 5c25 7375 7070 7265 7373 o' => \%suppress │ │ │ -0001bd50: 496e 666f 2c0a 0909 2020 2020 2027 2d74 Info,... '-t │ │ │ -0001bd60: 6d70 6469 7227 203d 3e20 2474 6d70 6469 mpdir' => $tmpdi │ │ │ -0001bd70: 720a 2020 2020 293b 0a0a 2461 6b74 4669 r. );..$aktFi │ │ │ -0001bd80: 6c65 6e61 6d65 2d3e 7365 7444 424d 6d64 lename->setDBMmd │ │ │ -0001bd90: 3528 246f 6c64 4669 6c65 6e61 6d65 2d3e 5($oldFilename-> │ │ │ -0001bda0: 6765 7444 424d 6d64 3528 2929 3b0a 0a24 getDBMmd5());..$ │ │ │ -0001bdb0: 7772 6974 6545 7863 6c75 6465 4c6f 6720 writeExcludeLog │ │ │ -0001bdc0: 3d20 2461 646d 696e 4469 7273 2d3e 6765 = $adminDirs->ge │ │ │ -0001bdd0: 7441 6b74 4469 7228 2920 2e20 222f 2e73 tAktDir() . "/.s │ │ │ -0001bde0: 746f 7265 4261 636b 7570 2e6e 6f74 5361 toreBackup.notSa │ │ │ -0001bdf0: 7665 642e 627a 3222 0a20 2020 2069 6620 ved.bz2". if │ │ │ -0001be00: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog │ │ │ -0001be10: 3b0a 0a6d 7920 2472 6561 6444 6972 416e ;..my $readDirAn │ │ │ -0001be20: 6443 6865 636b 203d 0a20 2020 2072 6561 dCheck =. rea │ │ │ -0001be30: 6444 6972 4368 6563 6b53 697a 6554 696d dDirCheckSizeTim │ │ │ -0001be40: 652d 3e6e 6577 2827 2d61 646d 696e 4469 e->new('-adminDi │ │ │ -0001be50: 7273 2720 3d3e 2024 6164 6d69 6e44 6972 rs' => $adminDir │ │ │ -0001be60: 732c 0a09 0909 2020 2020 2020 272d 6f6c s,.... '-ol │ │ │ -0001be70: 6446 696c 656e 616d 6527 203d 3e20 246f dFilename' => $o │ │ │ -0001be80: 6c64 4669 6c65 6e61 6d65 2c0a 0909 0920 ldFilename,.... │ │ │ -0001be90: 2020 2020 2027 2d61 6b74 4669 6c65 6e61 '-aktFilena │ │ │ -0001bea0: 6d65 2720 3d3e 2024 616b 7446 696c 656e me' => $aktFilen │ │ │ -0001beb0: 616d 652c 0a09 0909 2020 2020 2020 272d ame,.... '- │ │ │ -0001bec0: 6469 7227 203d 3e20 2473 6f75 7263 6544 dir' => $sourceD │ │ │ -0001bed0: 6972 2c0a 0909 0920 2020 2020 2027 2d66 ir,.... '-f │ │ │ -0001bee0: 6f6c 6c6f 774c 696e 6b73 2720 3d3e 2024 ollowLinks' => $ │ │ │ -0001bef0: 666f 6c6c 6f77 4c69 6e6b 732c 0a09 0909 followLinks,.... │ │ │ -0001bf00: 2020 2020 2020 272d 7374 6179 496e 4669 '-stayInFi │ │ │ -0001bf10: 6c65 5379 7374 656d 2720 3d3e 2024 7374 leSystem' => $st │ │ │ -0001bf20: 6179 496e 4669 6c65 5379 7374 656d 2c0a ayInFileSystem,. │ │ │ -0001bf30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0001bf40: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -0001bf50: 6370 4973 476e 7527 203d 3e20 2824 676e cpIsGnu' => ($gn │ │ │ -0001bf60: 7563 7020 6f72 2024 7370 6563 6961 6c54 ucp or $specialT │ │ │ -0001bf70: 7970 6541 7263 6869 7665 7229 2c0a 0909 ypeArchiver),... │ │ │ -0001bf80: 0920 2020 2020 2027 2d65 7863 6570 7444 . '-exceptD │ │ │ -0001bf90: 6972 7327 203d 3e20 5b40 6578 6365 7074 irs' => [@except │ │ │ -0001bfa0: 4469 7273 5d2c 0a09 0909 2020 2020 2020 Dirs],.... │ │ │ -0001bfb0: 272d 696e 636c 7564 6544 6972 7327 203d '-includeDirs' = │ │ │ -0001bfc0: 3e20 5b40 696e 636c 7564 6544 6972 735d > [@includeDirs] │ │ │ -0001bfd0: 2c0a 0909 0920 2020 2020 2027 2d77 7269 ,.... '-wri │ │ │ -0001bfe0: 7465 4578 636c 7564 654c 6f67 2720 3d3e teExcludeLog' => │ │ │ -0001bff0: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo │ │ │ -0001c000: 672c 0a09 0909 2020 2020 2020 272d 616b g,.... '-ak │ │ │ -0001c010: 7444 6972 2720 3d3e 2024 6164 6d69 6e44 tDir' => $adminD │ │ │ -0001c020: 6972 732d 3e67 6574 416b 7444 6972 2829 irs->getAktDir() │ │ │ -0001c030: 2c0a 0909 0920 2020 2020 2027 2d70 6f73 ,.... '-pos │ │ │ -0001c040: 7466 6978 2720 3d3e 2024 706f 7374 6669 tfix' => $postfi │ │ │ -0001c050: 782c 0a09 0909 2020 2020 2020 272d 6578 x,.... '-ex │ │ │ -0001c060: 6365 7074 5275 6c65 2720 3d3e 2024 6578 ceptRule' => $ex │ │ │ -0001c070: 6352 756c 652c 0a09 0909 2020 2020 2020 cRule,.... │ │ │ -0001c080: 272d 696e 636c 7564 6552 756c 6527 203d '-includeRule' = │ │ │ -0001c090: 3e20 2469 6e63 5275 6c65 2c0a 0909 0920 > $incRule,.... │ │ │ -0001c0a0: 2020 2020 2027 2d63 6865 636b 426c 6f63 '-checkBloc │ │ │ -0001c0b0: 6b73 5275 6c65 2720 3d3e 2024 6368 6252 ksRule' => $chbR │ │ │ -0001c0c0: 756c 652c 0a09 0909 2020 2020 2020 272d ule,.... '- │ │ │ -0001c0d0: 6578 5479 7065 7327 203d 3e20 5c25 6578 exTypes' => \%ex │ │ │ -0001c0e0: 5479 7065 732c 0a09 0909 2020 2020 2020 Types,.... │ │ │ -0001c0f0: 272d 7265 7365 7441 7469 6d65 2720 3d3e '-resetAtime' => │ │ │ -0001c100: 2024 7265 7365 7441 7469 6d65 2c0a 0909 $resetAtime,... │ │ │ -0001c110: 0920 2020 2020 2027 2d64 6562 7567 4d6f . '-debugMo │ │ │ -0001c120: 6465 2720 3d3e 2024 6465 6275 672c 0a09 de' => $debug,.. │ │ │ -0001c130: 0909 2020 2020 2020 272d 7665 7262 6f73 .. '-verbos │ │ │ -0001c140: 6527 203d 3e20 2476 6572 626f 7365 2c0a e' => $verbose,. │ │ │ -0001c150: 0909 0920 2020 2020 2027 2d74 6d70 6469 ... '-tmpdi │ │ │ -0001c160: 7227 203d 3e20 2474 6d70 6469 722c 0a09 r' => $tmpdir,.. │ │ │ -0001c170: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog' │ │ │ -0001c180: 203d 3e20 2470 724c 6f67 2c0a 0909 0920 => $prLog,.... │ │ │ -0001c190: 2020 2020 2027 2d69 676e 6f72 6552 6561 '-ignoreRea │ │ │ -0001c1a0: 6445 7272 6f72 2720 3d3e 2024 6967 6e6f dError' => $igno │ │ │ -0001c1b0: 7265 5265 6164 4572 726f 722c 0a09 0909 reReadError,.... │ │ │ -0001c1c0: 2020 2020 2020 272d 6967 6e6f 7265 5469 '-ignoreTi │ │ │ -0001c1d0: 6d65 2720 3d3e 2024 6967 6e6f 7265 5469 me' => $ignoreTi │ │ │ -0001c1e0: 6d65 2c0a 0909 0920 2020 2020 2027 2d70 me,.... '-p │ │ │ -0001c1f0: 7269 6e74 4465 7074 6827 203d 3e20 2470 rintDepth' => $p │ │ │ -0001c200: 7269 6e74 4465 7074 6829 3b0a 0a6d 7920 rintDepth);..my │ │ │ -0001c210: 2470 6172 466f 726b 436f 7079 203d 2070 $parForkCopy = p │ │ │ -0001c220: 6172 616c 6c65 6c46 6f72 6b2d 3e6e 6577 arallelFork->new │ │ │ -0001c230: 2827 2d6d 6178 5061 7261 6c6c 656c 2720 ('-maxParallel' │ │ │ -0001c240: 3d3e 2024 6e6f 436f 7079 2c0a 0909 0909 => $noCopy,..... │ │ │ -0001c250: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ -0001c260: 2470 724c 6f67 293b 0a6d 7920 2470 6172 $prLog);.my $par │ │ │ -0001c270: 466f 726b 436f 6d70 7220 3d20 7061 7261 ForkCompr = para │ │ │ -0001c280: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('- │ │ │ -0001c290: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => │ │ │ -0001c2a0: 246e 6f43 6f6d 7072 6573 732c 0a09 0909 $noCompress,.... │ │ │ -0001c2b0: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' = │ │ │ -0001c2c0: 3e20 2470 724c 6f67 293b 0a6d 7920 2470 > $prLog);.my $p │ │ │ -0001c2d0: 6172 466f 726b 426c 6f63 6b20 3d20 7061 arForkBlock = pa │ │ │ -0001c2e0: 7261 6c6c 656c 466f 726b 2d3e 6e65 7728 rallelFork->new( │ │ │ -0001c2f0: 272d 6d61 7850 6172 616c 6c65 6c27 203d '-maxParallel' = │ │ │ -0001c300: 3e20 312c 0a09 0909 0920 2020 2020 272d > 1,..... '- │ │ │ -0001c310: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0001c320: 293b 0a0a 2320 6f70 7469 6f6e 2073 6176 );..# option sav │ │ │ -0001c330: 6552 414d 2066 6f72 2072 756c 6520 6675 eRAM for rule fu │ │ │ -0001c340: 6e63 7469 6f6e 7320 6d61 696e 3a3a 4d41 nctions main::MA │ │ │ -0001c350: 524b 5f44 4952 2061 6e64 206d 6169 6e3a RK_DIR and main: │ │ │ -0001c360: 3a4d 4152 4b5f 4449 525f 5245 430a 6d79 :MARK_DIR_REC.my │ │ │ -0001c370: 2024 7374 6275 4558 434c 6669 6c65 6e61 $stbuEXCLfilena │ │ │ -0001c380: 6d65 203d 2075 6e64 6566 3b0a 6d79 2024 me = undef;.my $ │ │ │ -0001c390: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen │ │ │ -0001c3a0: 616d 6520 3d20 756e 6465 663b 0a6d 7920 ame = undef;.my │ │ │ -0001c3b0: 2473 7462 7549 4e43 4c52 4543 6669 6c65 $stbuINCLRECfile │ │ │ -0001c3c0: 6e61 6d65 203d 2075 6e64 6566 3b0a 6d79 name = undef;.my │ │ │ -0001c3d0: 2024 6d61 6b65 4469 7250 6174 6846 696c $makeDirPathFil │ │ │ -0001c3e0: 656e 616d 6520 3d20 756e 6465 663b 0a69 ename = undef;.i │ │ │ -0001c3f0: 6620 2824 7361 7665 5241 4d29 0a7b 0a09 f ($saveRAM).{.. │ │ │ -0001c400: 2473 7462 7545 5843 4c66 696c 656e 616d $stbuEXCLfilenam │ │ │ -0001c410: 6520 3d20 263a 3a75 6e69 7146 696c 654e e = &::uniqFileN │ │ │ -0001c420: 616d 6528 2224 746d 7064 6972 2f73 7462 ame("$tmpdir/stb │ │ │ -0001c430: 7545 5843 4c2e 2424 2e22 293b 0a09 256d uEXCL.$$.");..%m │ │ │ -0001c440: 6169 6e3a 3a4d 4152 4b5f 4449 525f 4361 ain::MARK_DIR_Ca │ │ │ -0001c450: 6368 6520 3d20 2829 3b0a 2309 7469 6528 che = ();.#.tie( │ │ │ -0001c460: 256d 6169 6e3a 3a4d 4152 4b5f 4449 525f %main::MARK_DIR_ │ │ │ -0001c470: 4361 6368 652c 2022 4442 5f46 696c 6522 Cache, "DB_File" │ │ │ -0001c480: 2c20 2473 7462 7545 5843 4c66 696c 656e , $stbuEXCLfilen │ │ │ -0001c490: 616d 652c 0a23 0920 2020 204f 5f43 5245 ame,.#. O_CRE │ │ │ -0001c4a0: 4154 7c4f 5f52 4457 522c 2030 3630 3029 AT|O_RDWR, 0600) │ │ │ -0001c4b0: 206f 720a 0964 626d 6f70 656e 2825 6d61 or..dbmopen(%ma │ │ │ -0001c4c0: 696e 3a3a 4d41 524b 5f44 4952 5f43 6163 in::MARK_DIR_Cac │ │ │ -0001c4d0: 6865 2c20 2473 7462 7545 5843 4c66 696c he, $stbuEXCLfil │ │ │ -0001c4e0: 656e 616d 652c 2030 3630 3029 206f 720a ename, 0600) or. │ │ │ -0001c4f0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -0001c500: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -0001c510: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -0001c520: 3d3e 205b 2263 616e 6e6f 7420 7772 6974 => ["cannot writ │ │ │ -0001c530: 6520 746f 2024 7374 6275 4558 434c 6669 e to $stbuEXCLfi │ │ │ -0001c540: 6c65 6e61 6d65 225d 2c0a 0909 0920 2020 lename"],.... │ │ │ -0001c550: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ -0001c560: 3b0a 0a09 2473 7462 7545 5843 4c52 4543 ;...$stbuEXCLREC │ │ │ -0001c570: 6669 6c65 6e61 6d65 203d 2026 3a3a 756e filename = &::un │ │ │ -0001c580: 6971 4669 6c65 4e61 6d65 2822 2474 6d70 iqFileName("$tmp │ │ │ -0001c590: 6469 722f 7374 6275 4558 434c 5245 432e dir/stbuEXCLREC. │ │ │ -0001c5a0: 2424 2e22 293b 0a09 256d 6169 6e3a 3a4d $$.");..%main::M │ │ │ -0001c5b0: 4152 4b5f 4449 525f 5245 435f 4361 6368 ARK_DIR_REC_Cach │ │ │ -0001c5c0: 6520 3d20 2829 3b0a 2309 7469 6528 256d e = ();.#.tie(%m │ │ │ -0001c5d0: 6169 6e3a 3a4d 4152 4b5f 4449 525f 5245 ain::MARK_DIR_RE │ │ │ -0001c5e0: 435f 4361 6368 652c 2022 4442 5f46 696c C_Cache, "DB_Fil │ │ │ -0001c5f0: 6522 2c20 2473 7462 7545 5843 4c52 4543 e", $stbuEXCLREC │ │ │ -0001c600: 6669 6c65 6e61 6d65 2c0a 2309 2020 2020 filename,.#. │ │ │ -0001c610: 4f5f 4352 4541 547c 4f5f 5244 5752 2c20 O_CREAT|O_RDWR, │ │ │ -0001c620: 3036 3030 2920 6f72 0a09 6462 6d6f 7065 0600) or..dbmope │ │ │ -0001c630: 6e28 256d 6169 6e3a 3a4d 4152 4b5f 4449 n(%main::MARK_DI │ │ │ -0001c640: 525f 5245 435f 4361 6368 652c 2024 7374 R_REC_Cache, $st │ │ │ -0001c650: 6275 4558 434c 5245 4366 696c 656e 616d buEXCLRECfilenam │ │ │ -0001c660: 652c 2030 3630 3029 206f 720a 0909 2470 e, 0600) or...$p │ │ │ -0001c670: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0001c680: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -0001c690: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -0001c6a0: 2263 616e 6e6f 7420 7772 6974 6520 746f "cannot write to │ │ │ -0001c6b0: 2024 7374 6275 4558 434c 5245 4366 696c $stbuEXCLRECfil │ │ │ -0001c6c0: 656e 616d 6522 5d2c 0a09 0909 2020 2020 ename"],.... │ │ │ -0001c6d0: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1); │ │ │ -0001c6e0: 0a0a 0924 7374 6275 494e 434c 5245 4366 ...$stbuINCLRECf │ │ │ -0001c6f0: 696c 656e 616d 6520 3d20 263a 3a75 6e69 ilename = &::uni │ │ │ -0001c700: 7146 696c 654e 616d 6528 2224 746d 7064 qFileName("$tmpd │ │ │ -0001c710: 6972 2f73 7462 7549 4e43 4c52 4543 2e24 ir/stbuINCLREC.$ │ │ │ -0001c720: 242e 2229 3b0a 0925 6d61 696e 3a3a 4d41 $.");..%main::MA │ │ │ -0001c730: 524b 5f44 4952 5f49 4e43 4c5f 5245 435f RK_DIR_INCL_REC_ │ │ │ -0001c740: 4361 6368 6520 3d20 2829 3b0a 2309 7469 Cache = ();.#.ti │ │ │ -0001c750: 6528 256d 6169 6e3a 3a4d 4152 4b5f 4449 e(%main::MARK_DI │ │ │ -0001c760: 525f 494e 434c 5f52 4543 5f43 6163 6865 R_INCL_REC_Cache │ │ │ -0001c770: 2c20 2244 425f 4669 6c65 222c 2024 7374 , "DB_File", $st │ │ │ -0001c780: 6275 494e 434c 5245 4366 696c 656e 616d buINCLRECfilenam │ │ │ -0001c790: 652c 0a23 0920 2020 204f 5f43 5245 4154 e,.#. O_CREAT │ │ │ -0001c7a0: 7c4f 5f52 4457 522c 2030 3630 3029 206f |O_RDWR, 0600) o │ │ │ -0001c7b0: 720a 0964 626d 6f70 656e 2825 6d61 696e r..dbmopen(%main │ │ │ -0001c7c0: 3a3a 4d41 524b 5f44 4952 5f49 4e43 4c5f ::MARK_DIR_INCL_ │ │ │ -0001c7d0: 5245 435f 4361 6368 652c 2024 7374 6275 REC_Cache, $stbu │ │ │ -0001c7e0: 494e 434c 5245 4366 696c 656e 616d 652c INCLRECfilename, │ │ │ -0001c7f0: 2030 3630 3029 206f 720a 0909 2470 724c 0600) or...$prL │ │ │ -0001c800: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0001c810: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ -0001c820: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -0001c830: 616e 6e6f 7420 7772 6974 6520 746f 2024 annot write to $ │ │ │ -0001c840: 7374 6275 494e 434c 5245 4366 696c 656e stbuINCLRECfilen │ │ │ -0001c850: 616d 6522 5d2c 0a09 0909 2020 2020 2020 ame"],.... │ │ │ -0001c860: 272d 6578 6974 2720 3d3e 2031 293b 0a0a '-exit' => 1);.. │ │ │ -0001c870: 0924 6d61 6b65 4469 7250 6174 6846 696c .$makeDirPathFil │ │ │ -0001c880: 656e 616d 6520 3d20 263a 3a75 6e69 7146 ename = &::uniqF │ │ │ -0001c890: 696c 654e 616d 6528 2224 746d 7064 6972 ileName("$tmpdir │ │ │ -0001c8a0: 2f73 7462 754d 616b 6544 6972 2e24 242e /stbuMakeDir.$$. │ │ │ -0001c8b0: 2229 3b0a 0925 6d61 696e 3a3a 6d61 6b65 ");..%main::make │ │ │ -0001c8c0: 4469 7250 6174 6843 6163 6865 203d 2028 DirPathCache = ( │ │ │ -0001c8d0: 293b 0a09 6462 6d6f 7065 6e28 256d 6169 );..dbmopen(%mai │ │ │ -0001c8e0: 6e3a 3a6d 616b 6544 6972 5061 7468 4361 n::makeDirPathCa │ │ │ -0001c8f0: 6368 652c 2024 6d61 6b65 4469 7250 6174 che, $makeDirPat │ │ │ -0001c900: 6846 696c 656e 616d 652c 2030 3630 3029 hFilename, 0600) │ │ │ -0001c910: 206f 720a 0909 2470 724c 6f67 2d3e 7072 or...$prLog->pr │ │ │ -0001c920: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -0001c930: 4527 2c0a 0909 0920 2020 2020 2027 2d73 E',.... '-s │ │ │ -0001c940: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -0001c950: 7772 6974 6520 746f 2024 6d61 6b65 4469 write to $makeDi │ │ │ -0001c960: 7250 6174 6846 696c 656e 616d 6522 5d2c rPathFilename"], │ │ │ -0001c970: 0a09 0909 2020 2020 2020 272d 6578 6974 .... '-exit │ │ │ -0001c980: 2720 3d3e 2031 293b 0a7d 0a0a 0a23 2073 ' => 1);.}...# s │ │ │ -0001c990: 6967 6e61 6c20 6861 6e64 6c69 6e67 0a28 ignal handling.( │ │ │ -0001c9a0: 406d 6169 6e3a 3a63 6c65 616e 7570 2920 @main::cleanup) │ │ │ -0001c9b0: 3d20 2020 2020 2023 204f 626a 656b 7465 = # Objekte │ │ │ -0001c9c0: 2076 6572 66c3 bc67 6261 7220 6d61 6368 verf..gbar mach │ │ │ -0001c9d0: 656e 0a20 2020 2028 2470 724c 6f67 2c20 en. ($prLog, │ │ │ -0001c9e0: 302c 2024 6f6c 6446 696c 656e 616d 652c 0, $oldFilename, │ │ │ -0001c9f0: 2024 616b 7446 696c 656e 616d 652c 2024 $aktFilename, $ │ │ │ -0001ca00: 7061 7246 6f72 6b43 6f70 792c 2024 7061 parForkCopy, $pa │ │ │ -0001ca10: 7246 6f72 6b43 6f6d 7072 2c20 2474 6d70 rForkCompr, $tmp │ │ │ -0001ca20: 6469 722c 0a20 2020 2020 2473 6574 5265 dir,. $setRe │ │ │ -0001ca30: 7365 7444 6972 5469 6d65 7346 696c 652c setDirTimesFile, │ │ │ -0001ca40: 2024 6c6f 636b 4669 6c65 2c20 2473 7462 $lockFile, $stb │ │ │ -0001ca50: 7545 5843 4c66 696c 656e 616d 652c 2024 uEXCLfilename, $ │ │ │ -0001ca60: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen │ │ │ -0001ca70: 616d 652c 0a20 2020 2020 246d 616b 6544 ame,. $makeD │ │ │ -0001ca80: 6972 5061 7468 4669 6c65 6e61 6d65 293b irPathFilename); │ │ │ -0001ca90: 0a24 5349 477b 494e 547d 203d 205c 2663 .$SIG{INT} = \&c │ │ │ -0001caa0: 6c65 616e 7570 3b0a 2453 4947 7b54 4552 leanup;.$SIG{TER │ │ │ -0001cab0: 4d7d 203d 205c 2663 6c65 616e 7570 3b0a M} = \&cleanup;. │ │ │ -0001cac0: 0a0a 6d79 2024 6669 666f 436f 7079 203d ..my $fifoCopy = │ │ │ -0001cad0: 2066 6966 6f51 7565 7565 2d3e 6e65 7728 fifoQueue->new( │ │ │ -0001cae0: 272d 6d61 784c 656e 6774 6827 203d 3e20 '-maxLength' => │ │ │ -0001caf0: 2471 7565 7565 436f 7079 2c0a 0909 0920 $queueCopy,.... │ │ │ -0001cb00: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ -0001cb10: 2024 7072 4c6f 6729 3b0a 6d79 2024 6669 $prLog);.my $fi │ │ │ -0001cb20: 666f 436f 6d70 7220 3d20 6669 666f 5175 foCompr = fifoQu │ │ │ -0001cb30: 6575 652d 3e6e 6577 2827 2d6d 6178 4c65 eue->new('-maxLe │ │ │ -0001cb40: 6e67 7468 2720 3d3e 2024 7175 6575 6543 ngth' => $queueC │ │ │ -0001cb50: 6f6d 7072 6573 732c 0a09 0909 2020 2020 ompress,.... │ │ │ -0001cb60: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ -0001cb70: 7072 4c6f 6729 3b0a 6d79 2024 6669 666f prLog);.my $fifo │ │ │ -0001cb80: 426c 6f63 6b20 3d20 6669 666f 5175 6575 Block = fifoQueu │ │ │ -0001cb90: 652d 3e6e 6577 2827 2d6d 6178 4c65 6e67 e->new('-maxLeng │ │ │ -0001cba0: 7468 2720 3d3e 2024 7175 6575 6542 6c6f th' => $queueBlo │ │ │ -0001cbb0: 636b 2c0a 0909 0920 2020 2020 2020 272d ck,.... '- │ │ │ -0001cbc0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0001cbd0: 293b 0a0a 6d79 2024 7363 6865 6475 6c65 );..my $schedule │ │ │ -0001cbe0: 7220 3d0a 2020 2020 5363 6865 6475 6c65 r =. Schedule │ │ │ -0001cbf0: 722d 3e6e 6577 2827 2d61 6b74 4669 6c65 r->new('-aktFile │ │ │ -0001cc00: 6e61 6d65 2720 3d3e 2024 616b 7446 696c name' => $aktFil │ │ │ -0001cc10: 656e 616d 652c 0a09 0920 2020 272d 6f6c ename,... '-ol │ │ │ -0001cc20: 6446 696c 656e 616d 6527 203d 3e20 246f dFilename' => $o │ │ │ -0001cc30: 6c64 4669 6c65 6e61 6d65 2c0a 0909 2020 ldFilename,... │ │ │ -0001cc40: 2027 2d66 6f6c 6c6f 774c 696e 6b73 2720 '-followLinks' │ │ │ -0001cc50: 3d3e 2024 666f 6c6c 6f77 4c69 6e6b 732c => $followLinks, │ │ │ -0001cc60: 0a09 0920 2020 272d 7072 6576 4261 636b ... '-prevBack │ │ │ -0001cc70: 7570 4f77 6e53 6572 6965 7327 203d 3e20 upOwnSeries' => │ │ │ -0001cc80: 2470 7265 7642 6163 6b75 704f 776e 5365 $prevBackupOwnSe │ │ │ -0001cc90: 7269 6573 2c0a 0909 2020 2027 2d72 6561 ries,... '-rea │ │ │ -0001cca0: 6444 6972 416e 6443 6865 636b 2720 3d3e dDirAndCheck' => │ │ │ -0001ccb0: 2024 7265 6164 4469 7241 6e64 4368 6563 $readDirAndChec │ │ │ -0001ccc0: 6b2c 0a09 0920 2020 272d 7365 7452 6573 k,... '-setRes │ │ │ -0001ccd0: 6574 4469 7254 696d 6573 2720 3d3e 2024 etDirTimes' => $ │ │ │ -0001cce0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes │ │ │ -0001ccf0: 2c0a 0909 2020 2027 2d70 6172 466f 726b ,... '-parFork │ │ │ -0001cd00: 436f 7079 2720 3d3e 2024 7061 7246 6f72 Copy' => $parFor │ │ │ -0001cd10: 6b43 6f70 792c 0a09 0920 2020 272d 6669 kCopy,... '-fi │ │ │ -0001cd20: 666f 436f 7079 2720 3d3e 2024 6669 666f foCopy' => $fifo │ │ │ -0001cd30: 436f 7079 2c0a 0909 2020 2027 2d70 6172 Copy,... '-par │ │ │ -0001cd40: 466f 726b 436f 6d70 7227 203d 3e20 2470 ForkCompr' => $p │ │ │ -0001cd50: 6172 466f 726b 436f 6d70 722c 0a09 0920 arForkCompr,... │ │ │ -0001cd60: 2020 272d 6e6f 436f 6d70 7265 7373 2720 '-noCompress' │ │ │ -0001cd70: 3d3e 2024 6e6f 436f 6d70 7265 7373 2c0a => $noCompress,. │ │ │ -0001cd80: 0909 2020 2027 2d62 6c6f 636b 4368 6563 .. '-blockChec │ │ │ -0001cd90: 6b53 756d 4669 6c65 2720 3d3e 2024 626c kSumFile' => $bl │ │ │ -0001cda0: 6f63 6b43 6865 636b 5375 6d46 696c 652c ockCheckSumFile, │ │ │ -0001cdb0: 0a09 0920 2020 272d 7061 7246 6f72 6b42 ... '-parForkB │ │ │ -0001cdc0: 6c6f 636b 2720 3d3e 2024 7061 7246 6f72 lock' => $parFor │ │ │ -0001cdd0: 6b42 6c6f 636b 2c0a 0909 2020 2027 2d66 kBlock,... '-f │ │ │ -0001cde0: 6966 6f42 6c6f 636b 2720 3d3e 2024 6669 ifoBlock' => $fi │ │ │ -0001cdf0: 666f 426c 6f63 6b2c 0a09 0920 2020 272d foBlock,... '- │ │ │ -0001ce00: 636f 6d70 7265 7373 2720 3d3e 2024 636f compress' => $co │ │ │ -0001ce10: 6d70 7265 7373 2c0a 0909 2020 2027 2d70 mpress,... '-p │ │ │ -0001ce20: 6f73 7466 6978 2720 3d3e 2024 706f 7374 ostfix' => $post │ │ │ -0001ce30: 6669 782c 0a09 0920 2020 272d 6669 666f fix,... '-fifo │ │ │ -0001ce40: 436f 6d70 7227 203d 3e20 2466 6966 6f43 Compr' => $fifoC │ │ │ -0001ce50: 6f6d 7072 2c0a 0909 2020 2027 2d63 6f6d ompr,... '-com │ │ │ -0001ce60: 7072 5275 6c65 2720 3d3e 2024 636f 6d70 prRule' => $comp │ │ │ -0001ce70: 7252 756c 652c 0a09 0920 2020 272d 7461 rRule,... '-ta │ │ │ -0001ce80: 7267 6574 4469 7227 203d 3e20 2461 646d rgetDir' => $adm │ │ │ -0001ce90: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi │ │ │ -0001cea0: 7228 292c 0a09 0920 2020 272d 616b 7449 r(),... '-aktI │ │ │ -0001ceb0: 6e66 6f46 696c 6527 203d 3e20 2463 6865 nfoFile' => $che │ │ │ -0001cec0: 636b 5375 6d46 696c 652c 0a09 0920 2020 ckSumFile,... │ │ │ -0001ced0: 272d 7265 7365 7441 7469 6d65 2720 3d3e '-resetAtime' => │ │ │ -0001cee0: 2024 7265 7365 7441 7469 6d65 2c0a 0909 $resetAtime,... │ │ │ -0001cef0: 2020 2027 2d74 6d70 6469 7227 203d 3e20 '-tmpdir' => │ │ │ -0001cf00: 2474 6d70 6469 722c 0a09 0920 2020 272d $tmpdir,... '- │ │ │ -0001cf10: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0001cf20: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -0001cf30: 2020 2020 2027 2d63 7049 7347 6e75 2720 '-cpIsGnu' │ │ │ -0001cf40: 3d3e 2024 676e 7563 702c 0a09 0920 2020 => $gnucp,... │ │ │ -0001cf50: 272d 6c69 6e6b 5379 6d6c 696e 6b73 2720 '-linkSymlinks' │ │ │ -0001cf60: 3d3e 2024 6c69 6e6b 5379 6d6c 696e 6b73 => $linkSymlinks │ │ │ -0001cf70: 2c0a 0909 2020 2027 2d6c 6174 654c 696e ,... '-lateLin │ │ │ -0001cf80: 6b73 2720 3d3e 2024 6c61 7465 4c69 6e6b ks' => $lateLink │ │ │ -0001cf90: 732c 0a09 0920 2020 272d 6c61 7465 436f s,... '-lateCo │ │ │ -0001cfa0: 6d70 7265 7373 2720 3d3e 2024 6c61 7465 mpress' => $late │ │ │ -0001cfb0: 436f 6d70 7265 7373 2c0a 0909 2020 2027 Compress,... ' │ │ │ -0001cfc0: 2d73 7570 7072 6573 7357 6172 6e69 6e67 -suppressWarning │ │ │ -0001cfd0: 2720 3d3e 205c 2573 7570 7072 6573 7357 ' => \%suppressW │ │ │ -0001cfe0: 6172 6e69 6e67 2c0a 2020 2020 2020 2020 arning,. │ │ │ -0001cff0: 2020 2020 2020 2020 2020 2027 2d70 7265 '-pre │ │ │ -0001d000: 7365 7276 6550 6572 6d73 2720 3d3e 2024 servePerms' => $ │ │ │ -0001d010: 7072 6573 6572 7665 5065 726d 732c 0a09 preservePerms,.. │ │ │ -0001d020: 0920 2020 272d 696e 7465 726e 616c 5069 . '-internalPi │ │ │ -0001d030: 7065 4275 6653 697a 6527 203d 3e20 2469 peBufSize' => $i │ │ │ -0001d040: 6e74 6572 6e61 6c50 6970 6542 7566 5369 nternalPipeBufSi │ │ │ -0001d050: 7a65 2c0a 0909 2020 2027 2d64 6562 7567 ze,... '-debug │ │ │ -0001d060: 4d6f 6465 2720 3d3e 2024 6465 6275 6729 Mode' => $debug) │ │ │ -0001d070: 3b0a 0a24 6d61 696e 3a3a 7469 6e79 5761 ;..$main::tinyWa │ │ │ -0001d080: 6974 5363 6865 6475 6c65 7220 3d20 7469 itScheduler = ti │ │ │ -0001d090: 6e79 5761 6974 5363 6865 6475 6c65 722d nyWaitScheduler- │ │ │ -0001d0a0: 3e6e 6577 2827 2d66 6972 7374 4661 7374 >new('-firstFast │ │ │ -0001d0b0: 2720 3d3e 2031 2c0a 0909 0909 0909 2020 ' => 1,....... │ │ │ -0001d0c0: 272d 6d61 7857 6169 7454 696d 6527 203d '-maxWaitTime' = │ │ │ -0001d0d0: 3e20 2e32 2c0a 0909 0909 0909 2020 272d > .2,....... '- │ │ │ -0001d0e0: 6e6f 4f66 5761 6974 5374 6570 7327 203d noOfWaitSteps' = │ │ │ -0001d0f0: 3e20 3130 302c 0a09 0909 0909 2020 2020 > 100,...... │ │ │ -0001d100: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ -0001d110: 3e20 2470 724c 6f67 2c0a 0909 0909 0920 > $prLog,...... │ │ │ -0001d120: 2020 2020 2020 2020 2027 2d64 6562 7567 '-debug │ │ │ -0001d130: 2720 3d3e 2024 6465 6275 6729 3b0a 0a7b ' => $debug);..{ │ │ │ -0001d140: 0a20 2020 206d 7920 2469 3b0a 2020 2020 . my $i;. │ │ │ -0001d150: 666f 7265 6163 6820 2469 2028 302e 2e40 foreach $i (0..@ │ │ │ -0001d160: 6368 6563 6b44 6576 6963 6573 2d31 290a checkDevices-1). │ │ │ -0001d170: 2020 2020 7b0a 0924 6669 666f 426c 6f63 {..$fifoBloc │ │ │ -0001d180: 6b2d 3e61 6464 2827 2d76 616c 7565 2720 k->add('-value' │ │ │ -0001d190: 3d3e 205b 2764 6576 6963 6527 2c20 2463 => ['device', $c │ │ │ -0001d1a0: 6865 636b 4465 7669 6365 735b 2469 5d2c heckDevices[$i], │ │ │ -0001d1b0: 0a09 0909 0920 2020 2020 2463 6865 636b ..... $check │ │ │ -0001d1c0: 4465 7669 6365 7344 6972 5b24 695d 2c20 DevicesDir[$i], │ │ │ -0001d1d0: 2463 6865 636b 4465 7669 6365 7342 535b $checkDevicesBS[ │ │ │ -0001d1e0: 2469 5d2c 0a09 0909 0920 2020 2020 2463 $i],..... $c │ │ │ -0001d1f0: 6865 636b 4465 7669 6365 7343 6f6d 7072 heckDevicesCompr │ │ │ -0001d200: 5b24 695d 2c0a 0909 0909 2020 2020 2024 [$i],..... $ │ │ │ -0001d210: 6368 6563 6b44 6576 6963 6573 5061 7261 checkDevicesPara │ │ │ -0001d220: 6c6c 656c 5b24 695d 5d29 3b0a 2020 2020 llel[$i]]);. │ │ │ -0001d230: 7d0a 7d0a 0a24 7363 6865 6475 6c65 722d }.}..$scheduler- │ │ │ -0001d240: 3e6e 6f72 6d61 6c4f 7065 7261 7469 6f6e >normalOperation │ │ │ -0001d250: 2829 3b20 2020 2320 6469 6520 6569 6765 (); # die eige │ │ │ -0001d260: 6e74 6c69 6368 6520 5665 7261 7262 6569 ntliche Verarbei │ │ │ -0001d270: 7475 6e67 0a0a 2473 6574 5265 7365 7444 tung..$setResetD │ │ │ -0001d280: 6972 5469 6d65 732d 3e77 7269 7465 5469 irTimes->writeTi │ │ │ -0001d290: 6d65 7328 293b 2023 2073 6574 2061 7469 mes(); # set ati │ │ │ -0001d2a0: 6d65 2c20 6d74 696d 6520 666f 7220 6469 me, mtime for di │ │ │ -0001d2b0: 7265 6374 6f72 6965 730a 0a24 616b 7446 rectories..$aktF │ │ │ -0001d2c0: 696c 656e 616d 652d 3e63 6c6f 7365 496e ilename->closeIn │ │ │ -0001d2d0: 666f 4669 6c65 2829 3b0a 246f 6c64 4669 foFile();.$oldFi │ │ │ -0001d2e0: 6c65 6e61 6d65 2d3e 7265 6164 4442 4d46 lename->readDBMF │ │ │ -0001d2f0: 696c 6573 5369 7a65 2829 3b0a 246f 6c64 ilesSize();.$old │ │ │ -0001d300: 4669 6c65 6e61 6d65 2d3e 6465 6c44 424d Filename->delDBM │ │ │ -0001d310: 4669 6c65 7328 293b 2020 2020 2023 2064 Files(); # d │ │ │ -0001d320: 626d 2066 696c 6573 206c c3b6 7363 6865 bm files l..sche │ │ │ -0001d330: 6e0a 0a69 6620 2824 7374 6275 4558 434c n..if ($stbuEXCL │ │ │ -0001d340: 6669 6c65 6e61 6d65 290a 7b0a 2320 2020 filename).{.# │ │ │ -0001d350: 2075 6e74 6965 2025 6d61 696e 3a3a 4d41 untie %main::MA │ │ │ -0001d360: 524b 5f44 4952 5f43 6163 6865 3b0a 2020 RK_DIR_Cache;. │ │ │ -0001d370: 2020 6462 6d63 6c6f 7365 2825 6d61 696e dbmclose(%main │ │ │ -0001d380: 3a3a 4d41 524b 5f44 4952 5f43 6163 6865 ::MARK_DIR_Cache │ │ │ -0001d390: 293b 0a20 2020 2075 6e6c 696e 6b20 2473 );. unlink $s │ │ │ -0001d3a0: 7462 7545 5843 4c66 696c 656e 616d 653b tbuEXCLfilename; │ │ │ -0001d3b0: 0a7d 0a69 6620 2824 7374 6275 4558 434c .}.if ($stbuEXCL │ │ │ -0001d3c0: 5245 4366 696c 656e 616d 6529 0a7b 0a23 RECfilename).{.# │ │ │ -0001d3d0: 2020 2020 756e 7469 6520 256d 6169 6e3a untie %main: │ │ │ -0001d3e0: 3a4d 4152 4b5f 4449 525f 5245 435f 4361 :MARK_DIR_REC_Ca │ │ │ -0001d3f0: 6368 653b 0a20 2020 2064 626d 636c 6f73 che;. dbmclos │ │ │ -0001d400: 6528 256d 6169 6e3a 3a4d 4152 4b5f 4449 e(%main::MARK_DI │ │ │ -0001d410: 525f 5245 435f 4361 6368 6529 3b0a 2020 R_REC_Cache);. │ │ │ -0001d420: 2020 756e 6c69 6e6b 2024 7374 6275 4558 unlink $stbuEX │ │ │ -0001d430: 434c 5245 4366 696c 656e 616d 653b 0a7d CLRECfilename;.} │ │ │ -0001d440: 0a69 6620 2824 7374 6275 494e 434c 5245 .if ($stbuINCLRE │ │ │ -0001d450: 4366 696c 656e 616d 6529 0a7b 0a23 2020 Cfilename).{.# │ │ │ -0001d460: 2020 756e 7469 6520 256d 6169 6e3a 3a4d untie %main::M │ │ │ -0001d470: 4152 4b5f 4449 525f 494e 434c 5f43 6163 ARK_DIR_INCL_Cac │ │ │ -0001d480: 6865 3b0a 2020 2020 6462 6d63 6c6f 7365 he;. dbmclose │ │ │ -0001d490: 2825 6d61 696e 3a3a 4d41 524b 5f44 4952 (%main::MARK_DIR │ │ │ -0001d4a0: 5f49 4e43 4c5f 4361 6368 6529 3b0a 2020 _INCL_Cache);. │ │ │ -0001d4b0: 2020 756e 6c69 6e6b 2024 7374 6275 494e unlink $stbuIN │ │ │ -0001d4c0: 434c 5245 4366 696c 656e 616d 653b 0a7d CLRECfilename;.} │ │ │ -0001d4d0: 0a69 6620 2824 6d61 6b65 4469 7250 6174 .if ($makeDirPat │ │ │ -0001d4e0: 6846 696c 656e 616d 6529 0a7b 0a20 2020 hFilename).{. │ │ │ -0001d4f0: 2064 626d 636c 6f73 6528 256d 6169 6e3a dbmclose(%main: │ │ │ -0001d500: 3a6d 616b 6544 6972 5061 7468 4361 6368 :makeDirPathCach │ │ │ -0001d510: 6529 3b0a 2020 2020 756e 6c69 6e6b 2024 e);. unlink $ │ │ │ -0001d520: 6d61 6b65 4469 7250 6174 6846 696c 656e makeDirPathFilen │ │ │ -0001d530: 616d 653b 0a7d 0a0a 0a75 6e6c 6573 7320 ame;.}...unless │ │ │ -0001d540: 2824 736b 6970 5379 6e63 290a 7b0a 2020 ($skipSync).{. │ │ │ -0001d550: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -0001d560: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -0001d570: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -0001d580: 7379 6e63 696e 6720 2e2e 2e22 5d29 3b0a syncing ..."]);. │ │ │ -0001d590: 2020 2020 7379 7374 656d 2022 2f62 696e system "/bin │ │ │ -0001d5a0: 2f73 796e 6322 3b0a 7d0a 0a0a 7b6d 7920 /sync";.}...{my │ │ │ -0001d5b0: 2458 5858 5858 203d 2024 6d61 696e 3a3a $XXXXX = $main:: │ │ │ -0001d5c0: 6669 6e69 7368 6564 466c 6167 3b7d 2020 finishedFlag;} │ │ │ -0001d5d0: 2023 2074 6f20 6d61 6b65 2070 6572 6c20 # to make perl │ │ │ -0001d5e0: 6861 7070 790a 6d79 2024 6669 6e69 7368 happy.my $finish │ │ │ -0001d5f0: 6564 203d 2024 6164 6d69 6e44 6972 732d ed = $adminDirs- │ │ │ -0001d600: 3e67 6574 416b 7444 6972 2829 202e 2022 >getAktDir() . " │ │ │ -0001d610: 2f24 6d61 696e 3a3a 6669 6e69 7368 6564 /$main::finished │ │ │ -0001d620: 466c 6167 223b 0a6c 6f63 616c 202a 4649 Flag";.local *FI │ │ │ -0001d630: 4c45 3b0a 263a 3a63 6865 636b 4465 6c53 LE;.&::checkDelS │ │ │ -0001d640: 796d 4c69 6e6b 2822 2466 696e 6973 6865 ymLink("$finishe │ │ │ -0001d650: 6422 2c20 2470 724c 6f67 2c20 3078 3031 d", $prLog, 0x01 │ │ │ -0001d660: 293b 0a6f 7065 6e28 4649 4c45 2c20 223e );.open(FILE, "> │ │ │ -0001d670: 222c 2022 2466 696e 6973 6865 6422 2920 ", "$finished") │ │ │ -0001d680: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p │ │ │ -0001d690: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001d6a0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ -0001d6b0: 3d3e 205b 2263 616e 6e6f 7420 6f70 656e => ["cannot open │ │ │ -0001d6c0: 203c 2466 696e 6973 6865 643e 225d 2c0a <$finished>"],. │ │ │ -0001d6d0: 0909 2020 272d 6164 6427 203d 3e20 5b5f .. '-add' => [_ │ │ │ -0001d6e0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_ │ │ │ -0001d6f0: 5f5d 2c0a 0909 2020 272d 6578 6974 2720 _],... '-exit' │ │ │ -0001d700: 3d3e 2031 293b 0a46 494c 452d 3e61 7574 => 1);.FILE->aut │ │ │ -0001d710: 6f66 6c75 7368 2831 293b 0a63 6c6f 7365 oflush(1);.close │ │ │ -0001d720: 2846 494c 4529 206f 720a 2020 2020 2470 (FILE) or. $p │ │ │ -0001d730: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0001d740: 6e64 2720 3d3e 2022 4522 2c0a 0909 2020 nd' => "E",... │ │ │ -0001d750: 272d 7374 7227 203d 3e20 5b22 636f 756c '-str' => ["coul │ │ │ -0001d760: 646e 2774 2063 6c6f 7365 203c 2466 696e dn't close <$fin │ │ │ -0001d770: 6973 6865 643e 3a20 2421 225d 293b 0a63 ished>: $!"]);.c │ │ │ -0001d780: 686d 6f64 2030 3634 342c 2024 6669 6e69 hmod 0644, $fini │ │ │ -0001d790: 7368 6564 3b0a 0a69 6620 2824 6c69 6e6b shed;..if ($link │ │ │ -0001d7a0: 546f 5265 6365 6e74 290a 7b0a 2020 2020 ToRecent).{. │ │ │ -0001d7b0: 6966 2028 2d6c 2022 2474 6172 6765 7444 if (-l "$targetD │ │ │ -0001d7c0: 6972 2f24 6c69 6e6b 546f 5265 6365 6e74 ir/$linkToRecent │ │ │ -0001d7d0: 2229 0a20 2020 207b 0a09 756e 6c69 6e6b "). {..unlink │ │ │ -0001d7e0: 2022 2474 6172 6765 7444 6972 2f24 6c69 "$targetDir/$li │ │ │ -0001d7f0: 6e6b 546f 5265 6365 6e74 223b 0a0a 096d nkToRecent";...m │ │ │ -0001d800: 7920 2824 5f64 2c20 246c 696e 6b29 203d y ($_d, $link) = │ │ │ -0001d810: 2026 3a3a 7370 6c69 7446 696c 6544 6972 &::splitFileDir │ │ │ -0001d820: 2824 6164 6d69 6e44 6972 732d 3e67 6574 ($adminDirs->get │ │ │ -0001d830: 416b 7444 6972 2829 293b 0a09 2470 724c AktDir());..$prL │ │ │ -0001d840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0001d850: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... │ │ │ -0001d860: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ -0001d870: 6e6e 6f74 2063 7265 6174 6520 7379 6d6c nnot create syml │ │ │ -0001d880: 696e 6b20 6c69 6e6b 546f 5265 6365 6e74 ink linkToRecent │ │ │ -0001d890: 2022 202e 0a09 0909 0920 223c 246c 696e " ...... "<$lin │ │ │ -0001d8a0: 6b54 6f52 6563 656e 743e 225d 290a 0920 kToRecent>"]).. │ │ │ -0001d8b0: 2020 2075 6e6c 6573 7320 7379 6d6c 696e unless symlin │ │ │ -0001d8c0: 6b20 246c 696e 6b2c 2022 2474 6172 6765 k $link, "$targe │ │ │ -0001d8d0: 7444 6972 2f24 6c69 6e6b 546f 5265 6365 tDir/$linkToRece │ │ │ -0001d8e0: 6e74 223b 0a20 2020 207d 0a20 2020 2065 nt";. }. e │ │ │ -0001d8f0: 6c73 6966 2028 2d65 2022 2474 6172 6765 lsif (-e "$targe │ │ │ -0001d900: 7444 6972 2f24 6c69 6e6b 546f 5265 6365 tDir/$linkToRece │ │ │ -0001d910: 6e74 2229 0a20 2020 207b 0a09 2470 724c nt"). {..$prL │ │ │ -0001d920: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0001d930: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... │ │ │ -0001d940: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ -0001d950: 6e6e 6f74 2064 656c 6574 6520 3c24 6c69 nnot delete <$li │ │ │ -0001d960: 6e6b 546f 5265 6365 6e74 3e20 2220 2e0a nkToRecent> " .. │ │ │ -0001d970: 0909 0909 2022 286f 7074 696f 6e20 6c69 .... "(option li │ │ │ -0001d980: 6e6b 546f 5265 6365 6e74 293a 2022 202e nkToRecent): " . │ │ │ -0001d990: 0a09 0909 0920 2269 7320 6e6f 7420 6120 ..... "is not a │ │ │ -0001d9a0: 7379 6d62 6f6c 6963 206c 696e 6b20 2220 symbolic link " │ │ │ -0001d9b0: 2e0a 0909 0909 2022 6f72 206e 6f20 7065 ...... "or no pe │ │ │ -0001d9c0: 726d 6973 7369 6f6e 7322 5d29 3b0a 2020 rmissions"]);. │ │ │ -0001d9d0: 2020 7d0a 2020 2020 656c 7365 2020 2020 }. else │ │ │ -0001d9e0: 2320 646f 6573 206e 6f74 2065 7869 7374 # does not exist │ │ │ -0001d9f0: 2c20 6372 6561 7465 2061 206e 6577 206f , create a new o │ │ │ -0001da00: 6e65 0a20 2020 207b 0a09 6d79 2028 245f ne. {..my ($_ │ │ │ -0001da10: 642c 2024 6c69 6e6b 2920 3d20 263a 3a73 d, $link) = &::s │ │ │ -0001da20: 706c 6974 4669 6c65 4469 7228 2461 646d plitFileDir($adm │ │ │ -0001da30: 696e 4469 7273 2d3e 6765 7441 6b74 4469 inDirs->getAktDi │ │ │ -0001da40: 7228 2929 3b0a 0924 7072 4c6f 672d 3e70 r());..$prLog->p │ │ │ -0001da50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001da60: 2757 272c 0a09 0920 2020 2020 2027 2d73 'W',... '-s │ │ │ -0001da70: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -0001da80: 6372 6561 7465 2073 796d 6c69 6e6b 206c create symlink l │ │ │ -0001da90: 696e 6b54 6f52 6563 656e 7420 2220 2e0a inkToRecent " .. │ │ │ -0001daa0: 0909 0909 2022 3c24 6c69 6e6b 546f 5265 .... "<$linkToRe │ │ │ -0001dab0: 6365 6e74 3e22 5d29 0a09 2020 2020 756e cent>"]).. un │ │ │ -0001dac0: 6c65 7373 2073 796d 6c69 6e6b 2024 6c69 less symlink $li │ │ │ -0001dad0: 6e6b 2c20 2224 7461 7267 6574 4469 722f nk, "$targetDir/ │ │ │ -0001dae0: 246c 696e 6b54 6f52 6563 656e 7422 3b0a $linkToRecent";. │ │ │ -0001daf0: 2020 2020 7d0a 7d0a 0a0a 230a 2320 6a65 }.}...#.# je │ │ │ -0001db00: 747a 7420 6e6f 6368 2061 6c74 6520 4261 tzt noch alte Ba │ │ │ -0001db10: 636b 7570 7320 6cc3 b673 6368 656e 0a23 ckups l..schen.# │ │ │ -0001db20: 0a24 6465 6c4f 6c64 2d3e 6465 6c65 7465 .$delOld->delete │ │ │ -0001db30: 4261 636b 7570 7328 293b 0a0a 0a23 0a23 Backups();...#.# │ │ │ -0001db40: 2070 6f73 7463 6f6d 6d61 6e64 2061 7573 postcommand aus │ │ │ -0001db50: 66c3 bc68 7265 6e0a 230a 0a69 6620 2864 f..hren.#..if (d │ │ │ -0001db60: 6566 696e 6564 2024 706f 7374 636f 6d6d efined $postcomm │ │ │ -0001db70: 616e 6429 0a7b 0a20 2020 2024 7072 4c6f and).{. $prLo │ │ │ -0001db80: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0001db90: 203d 3e20 2749 272c 0a09 0920 2027 2d73 => 'I',... '-s │ │ │ -0001dba0: 7472 2720 3d3e 205b 2273 7461 7274 696e tr' => ["startin │ │ │ -0001dbb0: 6720 706f 7374 2063 6f6d 6d61 6e64 203c g post command < │ │ │ -0001dbc0: 4024 706f 7374 636f 6d6d 616e 643e 202e @$postcommand> . │ │ │ -0001dbd0: 2e2e 225d 293b 0a20 2020 206d 7920 2824 .."]);. my ($ │ │ │ -0001dbe0: 706f 7374 436f 6d6d 2c20 4070 6f73 7450 postComm, @postP │ │ │ -0001dbf0: 6172 616d 2920 3d20 2840 2470 6f73 7463 aram) = (@$postc │ │ │ -0001dc00: 6f6d 6d61 6e64 293b 0a20 2020 206d 7920 ommand);. my │ │ │ -0001dc10: 2470 6f73 7463 6f20 3d20 666f 726b 5072 $postco = forkPr │ │ │ -0001dc20: 6f63 2d3e 6e65 7728 272d 6578 6563 2720 oc->new('-exec' │ │ │ -0001dc30: 3d3e 2024 706f 7374 436f 6d6d 2c0a 0909 => $postComm,... │ │ │ -0001dc40: 0920 2020 2020 2027 2d70 6172 616d 2720 . '-param' │ │ │ -0001dc50: 3d3e 205c 4070 6f73 7450 6172 616d 2c0a => \@postParam,. │ │ │ -0001dc60: 0909 0920 2020 2020 2027 2d77 6f72 6b69 ... '-worki │ │ │ -0001dc70: 6e67 4469 7227 203d 3e20 272e 272c 0a09 ngDir' => '.',.. │ │ │ -0001dc80: 0909 2020 2020 2020 272d 6f75 7452 616e .. '-outRan │ │ │ -0001dc90: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => "$tmpdir │ │ │ -0001dca0: 2f70 6f73 7463 6f6d 6d2d 222c 0a09 0909 /postcomm-",.... │ │ │ -0001dcb0: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ -0001dcc0: 3e20 2470 724c 6f67 293b 0a20 2020 2024 > $prLog);. $ │ │ │ -0001dcd0: 706f 7374 636f 2d3e 7761 6974 2829 3b0a postco->wait();. │ │ │ -0001dce0: 2020 2020 6d79 2024 6f75 7420 3d20 2470 my $out = $p │ │ │ -0001dcf0: 6f73 7463 6f2d 3e67 6574 5354 444f 5554 ostco->getSTDOUT │ │ │ -0001dd00: 2829 3b0a 2020 2020 2470 724c 6f67 2d3e ();. $prLog-> │ │ │ -0001dd10: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0001dd20: 2027 5727 2c0a 0909 2020 272d 7374 7227 'W',... '-str' │ │ │ -0001dd30: 203d 3e20 5b22 5354 444f 5554 206f 6620 => ["STDOUT of │ │ │ -0001dd40: 3c40 2470 6f73 7463 6f6d 6d61 6e64 3e3a <@$postcommand>: │ │ │ -0001dd50: 222c 2040 246f 7574 5d29 0a09 6966 2028 ", @$out])..if ( │ │ │ -0001dd60: 4024 6f75 7420 3e20 3029 3b0a 2020 2020 @$out > 0);. │ │ │ -0001dd70: 246f 7574 203d 2024 706f 7374 636f 2d3e $out = $postco-> │ │ │ -0001dd80: 6765 7453 5444 4552 5228 293b 0a20 2020 getSTDERR();. │ │ │ -0001dd90: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -0001dda0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -0001ddb0: 0920 2027 2d73 7472 2720 3d3e 205b 2253 . '-str' => ["S │ │ │ -0001ddc0: 5444 4552 5220 6f66 203c 4024 706f 7374 TDERR of <@$post │ │ │ -0001ddd0: 636f 6d6d 616e 643e 3a22 2c20 4024 6f75 command>:", @$ou │ │ │ -0001dde0: 745d 290a 0969 6620 2840 246f 7574 203e t])..if (@$out > │ │ │ -0001ddf0: 2030 293b 0a0a 2020 2020 6d79 2024 7374 0);.. my $st │ │ │ -0001de00: 6174 7573 203d 2024 706f 7374 636f 2d3e atus = $postco-> │ │ │ -0001de10: 6765 7428 272d 7768 6174 2720 3d3e 2027 get('-what' => ' │ │ │ -0001de20: 7374 6174 7573 2729 3b0a 2020 2020 6966 status');. if │ │ │ -0001de30: 2028 2473 7461 7475 7320 3d3d 2030 290a ($status == 0). │ │ │ -0001de40: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -0001de50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001de60: 2749 272c 0a09 0920 2020 2020 2027 2d73 'I',... '-s │ │ │ -0001de70: 7472 2720 3d3e 0a09 0920 2020 2020 205b tr' =>... [ │ │ │ -0001de80: 2270 6f73 7420 636f 6d6d 616e 6420 3c40 "post command <@ │ │ │ -0001de90: 2470 6f73 7463 6f6d 6d61 6e64 3e20 6669 $postcommand> fi │ │ │ -0001dea0: 6e69 7368 6564 2077 6974 6820 7374 6174 nished with stat │ │ │ -0001deb0: 7573 2030 225d 293b 0a20 2020 207d 0a20 us 0"]);. }. │ │ │ -0001dec0: 2020 2065 6c73 650a 2020 2020 7b0a 0924 else. {..$ │ │ │ -0001ded0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -0001dee0: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -0001def0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -0001df00: 2270 6f73 7420 636f 6d6d 616e 6420 3c40 "post command <@ │ │ │ -0001df10: 2470 6f73 7463 6f6d 6d61 6e64 3e20 6669 $postcommand> fi │ │ │ -0001df20: 6e69 7368 6564 2022 202e 0a09 0909 0920 nished " ...... │ │ │ -0001df30: 2277 6974 6820 7374 6174 7573 2024 7374 "with status $st │ │ │ -0001df40: 6174 7573 225d 293b 0a09 756e 6c69 6e6b atus"]);..unlink │ │ │ -0001df50: 2024 6c6f 636b 4669 6c65 2069 6620 246c $lockFile if $l │ │ │ -0001df60: 6f63 6b46 696c 653b 0a09 6578 6974 2031 ockFile;..exit 1 │ │ │ -0001df70: 3b0a 2020 2020 7d0a 7d0a 0a23 206c 6f63 ;. }.}..# loc │ │ │ -0001df80: 6b20 6669 6c65 206c c3b6 7363 6865 6e0a k file l..schen. │ │ │ -0001df90: 6966 2028 246c 6f63 6b46 696c 6520 616e if ($lockFile an │ │ │ -0001dfa0: 6420 2475 6e6c 6f63 6b42 6566 6f72 6544 d $unlockBeforeD │ │ │ -0001dfb0: 656c 290a 7b0a 2020 2020 2470 724c 6f67 el).{. $prLog │ │ │ -0001dfc0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -0001dfd0: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st │ │ │ -0001dfe0: 7227 203d 3e20 5b22 7265 6d6f 7669 6e67 r' => ["removing │ │ │ -0001dff0: 206c 6f63 6b20 6669 6c65 203c 246c 6f63 lock file <$loc │ │ │ -0001e000: 6b46 696c 653e 225d 293b 0a20 2020 2075 kFile>"]);. u │ │ │ -0001e010: 6e6c 696e 6b20 246c 6f63 6b46 696c 653b nlink $lockFile; │ │ │ -0001e020: 0a20 2020 2024 6c6f 636b 4669 6c65 203d . $lockFile = │ │ │ -0001e030: 2075 6e64 6566 3b0a 7d0a 0a0a 2320 4772 undef;.}...# Gr │ │ │ -0001e040: c3b6 c39f 6520 766f 6e20 2e6d 6435 4368 ....e von .md5Ch │ │ │ -0001e050: 6563 6b53 756d 2d44 6174 6569 206e 6f63 eckSum-Datei noc │ │ │ -0001e060: 6820 66c3 bc72 2053 7461 7469 7374 696b h f..r Statistik │ │ │ -0001e070: 2062 6572 c3bc 636b 7369 6368 7469 6765 ber..cksichtige │ │ │ -0001e080: 6e0a 246d 6169 6e3a 3a73 7461 742d 3e73 n.$main::stat->s │ │ │ -0001e090: 6574 5369 7a65 4d44 3543 6865 636b 5375 etSizeMD5CheckSu │ │ │ -0001e0a0: 6d28 2461 646d 696e 4469 7273 2d3e 6765 m($adminDirs->ge │ │ │ -0001e0b0: 7441 6b74 496e 666f 4669 6c65 2829 2c0a tAktInfoFile(),. │ │ │ -0001e0c0: 0909 0909 2463 6f6d 7072 6573 734d 4435 ....$compressMD5 │ │ │ -0001e0d0: 4669 6c65 293b 0a24 6d61 696e 3a3a 7374 File);.$main::st │ │ │ -0001e0e0: 6174 2d3e 7365 7455 7365 6453 697a 6551 at->setUsedSizeQ │ │ │ -0001e0f0: 7565 7565 7328 2466 6966 6f43 6f70 792d ueues($fifoCopy- │ │ │ -0001e100: 3e67 6574 4d61 7855 7365 644c 656e 6774 >getMaxUsedLengt │ │ │ -0001e110: 6828 292c 0a09 0909 2020 2020 2020 2024 h(),.... $ │ │ │ -0001e120: 6669 666f 436f 6d70 722d 3e67 6574 4d61 fifoCompr->getMa │ │ │ -0001e130: 7855 7365 644c 656e 6774 6828 2929 3b0a xUsedLength());. │ │ │ -0001e140: 246d 6169 6e3a 3a73 7461 742d 3e70 7269 $main::stat->pri │ │ │ -0001e150: 6e74 2827 2d65 7854 7970 6573 2720 3d3e nt('-exTypes' => │ │ │ -0001e160: 205c 2565 7854 7970 6573 293b 0a0a 2320 \%exTypes);..# │ │ │ -0001e170: 6c6f 636b 2066 696c 6520 6cc3 b673 6368 lock file l..sch │ │ │ -0001e180: 656e 0a69 6620 2824 6c6f 636b 4669 6c65 en.if ($lockFile │ │ │ -0001e190: 290a 7b0a 2020 2020 2470 724c 6f67 2d3e ).{. $prLog-> │ │ │ -0001e1a0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0001e1b0: 2027 4927 2c0a 0909 2020 272d 7374 7227 'I',... '-str' │ │ │ -0001e1c0: 203d 3e20 5b22 7265 6d6f 7669 6e67 206c => ["removing l │ │ │ -0001e1d0: 6f63 6b20 6669 6c65 203c 246c 6f63 6b46 ock file <$lockF │ │ │ -0001e1e0: 696c 653e 225d 293b 0a20 2020 2075 6e6c ile>"]);. unl │ │ │ -0001e1f0: 696e 6b20 246c 6f63 6b46 696c 653b 0a7d ink $lockFile;.} │ │ │ -0001e200: 0a0a 6966 2028 2463 6f6d 7072 6573 734c ..if ($compressL │ │ │ -0001e210: 6f67 496e 4261 636b 7570 4469 7229 2020 ogInBackupDir) │ │ │ -0001e220: 2020 2020 2020 2020 2020 2023 206c 6f67 # log │ │ │ -0001e230: 2066 696c 6520 696d 2042 6163 6b75 7044 file im BackupD │ │ │ -0001e240: 6972 206e 6f63 680a 7b20 2020 2020 2020 ir noch.{ │ │ │ -0001e250: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0001e260: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0001e270: 2023 206b 6f6d 7072 696d 6965 7265 6e0a # komprimieren. │ │ │ -0001e280: 2020 2020 2470 724c 6f67 2d3e 7375 6228 $prLog->sub( │ │ │ -0001e290: 272d 7072 4c6f 6773 2720 3d3e 205b 2470 '-prLogs' => [$p │ │ │ -0001e2a0: 724c 6f67 325d 293b 0a20 2020 206d 7920 rLog2]);. my │ │ │ -0001e2b0: 2463 6f6d 7072 6573 734c 6f67 203d 2066 $compressLog = f │ │ │ -0001e2c0: 6f72 6b50 726f 632d 3e6e 6577 2827 2d65 orkProc->new('-e │ │ │ -0001e2d0: 7865 6327 203d 3e20 2762 7a69 7032 272c xec' => 'bzip2', │ │ │ -0001e2e0: 0a09 0909 0920 2020 2027 2d70 6172 616d ..... '-param │ │ │ -0001e2f0: 2720 3d3e 205b 246c 6f67 496e 4261 636b ' => [$logInBack │ │ │ -0001e300: 7570 4469 7246 696c 654e 616d 655d 2c0a upDirFileName],. │ │ │ -0001e310: 0909 0909 2020 2020 272d 6f75 7452 616e .... '-outRan │ │ │ -0001e320: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => "$tmpdir │ │ │ -0001e330: 2f63 6f6d 7072 4c6f 672d 222c 0a09 0909 /comprLog-",.... │ │ │ -0001e340: 0920 2020 2027 2d70 724c 6f67 2720 3d3e . '-prLog' => │ │ │ -0001e350: 2024 7072 4c6f 6729 3b0a 2020 2020 2463 $prLog);. $c │ │ │ -0001e360: 6f6d 7072 6573 734c 6f67 2d3e 7761 6974 ompressLog->wait │ │ │ -0001e370: 2829 3b0a 7d0a 0a6d 7920 2465 6e63 203d ();.}..my $enc = │ │ │ -0001e380: 2024 7072 4c6f 672d 3e65 6e63 6f75 6e74 $prLog->encount │ │ │ -0001e390: 6572 6564 2827 2d6b 696e 6427 203d 3e20 ered('-kind' => │ │ │ -0001e3a0: 2757 2729 3b0a 6d79 2024 5320 3d20 2465 'W');.my $S = $e │ │ │ -0001e3b0: 6e63 203e 2031 203f 2027 5327 203a 2027 nc > 1 ? 'S' : ' │ │ │ -0001e3c0: 273b 0a24 7072 4c6f 672d 3e70 7269 6e74 ';.$prLog->print │ │ │ -0001e3d0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W', │ │ │ -0001e3e0: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0001e3f0: 3e20 5b22 2d2d 2024 656e 6320 5741 524e > ["-- $enc WARN │ │ │ -0001e400: 494e 4724 5320 4f43 4355 5252 4544 2044 ING$S OCCURRED D │ │ │ -0001e410: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP │ │ │ -0001e420: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --"]). if $ │ │ │ -0001e430: 656e 633b 0a0a 2465 6e63 203d 2024 7072 enc;..$enc = $pr │ │ │ -0001e440: 4c6f 672d 3e65 6e63 6f75 6e74 6572 6564 Log->encountered │ │ │ -0001e450: 2827 2d6b 696e 6427 203d 3e20 2745 2729 ('-kind' => 'E') │ │ │ -0001e460: 3b0a 2453 203d 2024 656e 6320 3e20 3120 ;.$S = $enc > 1 │ │ │ -0001e470: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL │ │ │ -0001e480: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0001e490: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. │ │ │ -0001e4a0: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => ["-- │ │ │ -0001e4b0: 2465 6e63 2045 5252 4f52 2453 204f 4343 $enc ERROR$S OCC │ │ │ -0001e4c0: 5552 5245 4420 4455 5249 4e47 2054 4845 URRED DURING THE │ │ │ -0001e4d0: 2042 4143 4b55 5021 202d 2d22 5d29 0a20 BACKUP! --"]). │ │ │ -0001e4e0: 2020 2069 6620 2465 6e63 3b0a 0a0a 6966 if $enc;...if │ │ │ -0001e4f0: 2028 2470 724c 6f67 2d3e 656e 636f 756e ($prLog->encoun │ │ │ -0001e500: 7465 7265 6428 272d 6b69 6e64 2720 3d3e tered('-kind' => │ │ │ -0001e510: 2022 4522 2929 0a7b 0a20 2020 2024 7072 "E")).{. $pr │ │ │ -0001e520: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0001e530: 6427 203d 3e20 275a 272c 0a09 0920 2027 d' => 'Z',... ' │ │ │ -0001e540: 2d73 7472 2720 3d3e 205b 2262 6163 6b69 -str' => ["backi │ │ │ -0001e550: 6e67 2075 7020 6469 7265 6374 6f72 7920 ng up directory │ │ │ -0001e560: 3c24 736f 7572 6365 4469 723e 2074 6f20 <$sourceDir> to │ │ │ -0001e570: 3c22 202e 0a09 0909 2020 2020 2024 6164 <" ..... $ad │ │ │ -0001e580: 6d69 6e44 6972 732d 3e67 6574 416b 7444 minDirs->getAktD │ │ │ -0001e590: 6972 2829 202e 2022 3e22 5d29 3b0a 2020 ir() . ">"]);. │ │ │ -0001e5a0: 2020 6578 6974 2031 3b0a 7d0a 656c 7365 exit 1;.}.else │ │ │ -0001e5b0: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p │ │ │ -0001e5c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001e5d0: 275a 272c 0a09 0920 2027 2d73 7472 2720 'Z',... '-str' │ │ │ -0001e5e0: 3d3e 205b 2262 6163 6b69 6e67 2075 7020 => ["backing up │ │ │ -0001e5f0: 6469 7265 6374 6f72 7920 3c24 736f 7572 directory <$sour │ │ │ -0001e600: 6365 4469 723e 2074 6f20 3c22 202e 0a09 ceDir> to <" ... │ │ │ -0001e610: 0909 2020 2020 2024 6164 6d69 6e44 6972 .. $adminDir │ │ │ -0001e620: 732d 3e67 6574 416b 7444 6972 2829 202e s->getAktDir() . │ │ │ -0001e630: 2022 3e22 5d29 3b0a 2020 2020 6578 6974 ">"]);. exit │ │ │ -0001e640: 2030 3b0a 7d0a 0a0a 2323 2323 2323 2323 0;.}...######## │ │ │ -0001e650: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0001e660: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0001e670: 2323 2323 2323 2323 2323 0a73 7562 2063 ##########.sub c │ │ │ -0001e680: 6c65 616e 7570 0a7b 0a20 2020 206d 7920 leanup.{. my │ │ │ -0001e690: 2473 6967 6e61 6d65 203d 2073 6869 6674 $signame = shift │ │ │ -0001e6a0: 3b0a 2020 2020 6d79 2024 6578 6974 203d ;. my $exit = │ │ │ -0001e6b0: 2028 7368 6966 7428 2920 7c7c 2031 293b (shift() || 1); │ │ │ -0001e6c0: 0a0a 2020 2020 6d79 2028 2470 724c 6f67 .. my ($prLog │ │ │ -0001e6d0: 2c20 246f 6e6c 794c 6174 654c 696e 6b43 , $onlyLateLinkC │ │ │ -0001e6e0: 6865 636b 2c20 246f 6c64 4669 6c65 6e61 heck, $oldFilena │ │ │ -0001e6f0: 6d65 2c20 2461 6b74 4669 6c65 6e61 6d65 me, $aktFilename │ │ │ -0001e700: 2c20 2470 6172 466f 726b 436f 7079 2c0a , $parForkCopy,. │ │ │ -0001e710: 0924 7061 7246 6f72 6b43 6f6d 7072 2c20 .$parForkCompr, │ │ │ -0001e720: 2474 6d70 6469 722c 2024 7365 7452 6573 $tmpdir, $setRes │ │ │ -0001e730: 6574 4469 7254 696d 6573 4669 6c65 2c20 etDirTimesFile, │ │ │ -0001e740: 246c 6f63 6b46 696c 652c 0a09 2473 7462 $lockFile,..$stb │ │ │ -0001e750: 7545 5843 4c66 696c 656e 616d 652c 2024 uEXCLfilename, $ │ │ │ -0001e760: 7374 6275 4558 434c 5245 4366 696c 656e stbuEXCLRECfilen │ │ │ -0001e770: 616d 652c 2024 6d61 6b65 4469 7250 6174 ame, $makeDirPat │ │ │ -0001e780: 6846 696c 656e 616d 6529 0a09 3d20 2840 hFilename)..= (@ │ │ │ -0001e790: 6d61 696e 3a3a 636c 6561 6e75 7029 3b0a main::cleanup);. │ │ │ -0001e7a0: 0a20 2020 2075 6e6c 696e 6b20 246c 6f63 . unlink $loc │ │ │ -0001e7b0: 6b46 696c 6520 6966 2024 6c6f 636b 4669 kFile if $lockFi │ │ │ -0001e7c0: 6c65 3b0a 0a20 2020 2024 6d61 696e 3a3a le;.. $main:: │ │ │ -0001e7d0: 656e 644f 6653 746f 7265 4261 636b 7570 endOfStoreBackup │ │ │ -0001e7e0: 203d 2031 3b0a 0a20 2020 2069 6620 2824 = 1;.. if ($ │ │ │ -0001e7f0: 7369 676e 616d 6529 0a20 2020 207b 0a20 signame). {. │ │ │ -0001e800: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p │ │ │ -0001e810: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0001e820: 2745 272c 0a20 2020 2020 2020 2020 2020 'E',. │ │ │ -0001e830: 2020 2020 2020 2020 2020 2027 2d73 7472 '-str │ │ │ -0001e840: 2720 3d3e 205b 2263 6175 6768 7420 7369 ' => ["caught si │ │ │ -0001e850: 676e 616c 2024 7369 676e 616d 652c 2074 gnal $signame, t │ │ │ -0001e860: 6572 6d69 6e61 7469 6e67 225d 293b 0a20 erminating"]);. │ │ │ -0001e870: 2020 207d 0a0a 2020 2020 756e 6c65 7373 }.. unless │ │ │ -0001e880: 2028 246f 6e6c 794c 6174 654c 696e 6b43 ($onlyLateLinkC │ │ │ -0001e890: 6865 636b 290a 2020 2020 7b0a 0923 2044 heck). {..# D │ │ │ -0001e8a0: 6174 6569 656e 2073 6368 6c69 65c3 9f65 ateien schlie..e │ │ │ -0001e8b0: 6e2c 2061 7566 72c3 a475 6d65 6e0a 0924 n, aufr..umen..$ │ │ │ -0001e8c0: 616b 7446 696c 656e 616d 652d 3e64 656c aktFilename->del │ │ │ -0001e8d0: 496e 666f 4669 6c65 2829 3b0a 0924 6f6c InfoFile();..$ol │ │ │ -0001e8e0: 6446 696c 656e 616d 652d 3e64 656c 4442 dFilename->delDB │ │ │ -0001e8f0: 4d46 696c 6573 2829 3b20 2020 2020 2320 MFiles(); # │ │ │ -0001e900: 6462 6d20 6669 6c65 7320 6cc3 b673 6368 dbm files l..sch │ │ │ -0001e910: 656e 0a09 756e 6c69 6e6b 2024 7365 7452 en..unlink $setR │ │ │ -0001e920: 6573 6574 4469 7254 696d 6573 4669 6c65 esetDirTimesFile │ │ │ -0001e930: 3b0a 0a09 2320 6c61 7566 656e 6465 2050 ;...# laufende P │ │ │ -0001e940: 726f 7a65 7373 6520 6162 7363 6869 65c3 rozesse abschie. │ │ │ -0001e950: 9f65 6e0a 0924 7061 7246 6f72 6b43 6f70 .en..$parForkCop │ │ │ -0001e960: 792d 3e73 6967 6e61 6c28 272d 7661 6c75 y->signal('-valu │ │ │ -0001e970: 6527 203d 3e20 3229 3b0a 0924 7061 7246 e' => 2);..$parF │ │ │ -0001e980: 6f72 6b43 6f6d 7072 2d3e 7369 676e 616c orkCompr->signal │ │ │ -0001e990: 2827 2d76 616c 7565 2720 3d3e 2032 293b ('-value' => 2); │ │ │ -0001e9a0: 0a0a 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -0001e9b0: 2827 2d6b 696e 6427 203d 3e20 275a 272c ('-kind' => 'Z', │ │ │ -0001e9c0: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -0001e9d0: 3d3e 205b 2262 6163 6b69 6e67 2075 7020 => ["backing up │ │ │ -0001e9e0: 6469 7265 6374 6f72 7920 3c24 736f 7572 directory <$sour │ │ │ -0001e9f0: 6365 4469 723e 225d 293b 0a20 2020 207d ceDir>"]);. } │ │ │ -0001ea00: 0a0a 2020 2020 6966 2028 2473 7462 7545 .. if ($stbuE │ │ │ -0001ea10: 5843 4c66 696c 656e 616d 6529 0a20 2020 XCLfilename). │ │ │ -0001ea20: 207b 0a23 0975 6e74 6965 2025 6d61 696e {.#.untie %main │ │ │ -0001ea30: 3a3a 4d41 524b 5f44 4952 5f43 6163 6865 ::MARK_DIR_Cache │ │ │ -0001ea40: 3b0a 0964 626d 636c 6f73 6528 256d 6169 ;..dbmclose(%mai │ │ │ -0001ea50: 6e3a 3a4d 4152 4b5f 4449 525f 4361 6368 n::MARK_DIR_Cach │ │ │ -0001ea60: 6529 3b0a 0975 6e6c 696e 6b20 2473 7462 e);..unlink $stb │ │ │ -0001ea70: 7545 5843 4c66 696c 656e 616d 653b 0a20 uEXCLfilename;. │ │ │ -0001ea80: 2020 207d 0a20 2020 2069 6620 2824 7374 }. if ($st │ │ │ -0001ea90: 6275 4558 434c 5245 4366 696c 656e 616d buEXCLRECfilenam │ │ │ -0001eaa0: 6529 0a20 2020 207b 0a23 0975 6e74 6965 e). {.#.untie │ │ │ -0001eab0: 2025 6d61 696e 3a3a 4d41 524b 5f44 4952 %main::MARK_DIR │ │ │ -0001eac0: 5f52 4543 5f43 6163 6865 3b0a 0964 626d _REC_Cache;..dbm │ │ │ -0001ead0: 636c 6f73 6528 256d 6169 6e3a 3a4d 4152 close(%main::MAR │ │ │ -0001eae0: 4b5f 4449 525f 5245 435f 4361 6368 6529 K_DIR_REC_Cache) │ │ │ -0001eaf0: 3b0a 0975 6e6c 696e 6b20 2473 7462 7545 ;..unlink $stbuE │ │ │ -0001eb00: 5843 4c52 4543 6669 6c65 6e61 6d65 3b0a XCLRECfilename;. │ │ │ -0001eb10: 2020 2020 7d0a 2020 2020 6966 2028 2473 }. if ($s │ │ │ -0001eb20: 7462 7549 4e43 4c52 4543 6669 6c65 6e61 tbuINCLRECfilena │ │ │ -0001eb30: 6d65 290a 2020 2020 7b0a 2309 756e 7469 me). {.#.unti │ │ │ -0001eb40: 6520 256d 6169 6e3a 3a4d 4152 4b5f 4449 e %main::MARK_DI │ │ │ -0001eb50: 525f 494e 434c 5f43 6163 6865 3b0a 0964 R_INCL_Cache;..d │ │ │ -0001eb60: 626d 636c 6f73 6528 256d 6169 6e3a 3a4d bmclose(%main::M │ │ │ -0001eb70: 4152 4b5f 4449 525f 494e 434c 5f43 6163 ARK_DIR_INCL_Cac │ │ │ -0001eb80: 6865 293b 0a09 756e 6c69 6e6b 2024 7374 he);..unlink $st │ │ │ -0001eb90: 6275 494e 434c 5245 4366 696c 656e 616d buINCLRECfilenam │ │ │ -0001eba0: 653b 0a20 2020 207d 0a0a 2020 2020 6966 e;. }.. if │ │ │ -0001ebb0: 2028 246d 616b 6544 6972 5061 7468 4669 ($makeDirPathFi │ │ │ -0001ebc0: 6c65 6e61 6d65 290a 2020 2020 7b0a 0964 lename). {..d │ │ │ -0001ebd0: 626d 636c 6f73 6528 256d 6169 6e3a 3a6d bmclose(%main::m │ │ │ -0001ebe0: 616b 6544 6972 5061 7468 4361 6368 6529 akeDirPathCache) │ │ │ -0001ebf0: 3b0a 0975 6e6c 696e 6b20 246d 616b 6544 ;..unlink $makeD │ │ │ -0001ec00: 6972 5061 7468 4669 6c65 6e61 6d65 3b0a irPathFilename;. │ │ │ -0001ec10: 2020 2020 7d0a 0a20 2020 2065 7869 7420 }.. exit │ │ │ -0001ec20: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...##### │ │ │ -0001ec30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0001ec40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0001ec50: 2323 230a 7375 6220 6361 6c63 426c 6f63 ###.sub calcBloc │ │ │ -0001ec60: 6b4d 4435 5375 6d73 0a7b 0a20 2020 206d kMD5Sums.{. m │ │ │ -0001ec70: 7920 2473 6f75 7263 6544 6972 203d 2073 y $sourceDir = s │ │ │ -0001ec80: 6869 6674 3b0a 2020 2020 6d79 2024 7461 hift;. my $ta │ │ │ -0001ec90: 7267 6574 4469 7220 3d20 7368 6966 743b rgetDir = shift; │ │ │ -0001eca0: 0a20 2020 206d 7920 2472 656c 5061 7468 . my $relPath │ │ │ -0001ecb0: 203d 2073 6869 6674 3b20 2020 2020 2020 = shift; │ │ │ -0001ecc0: 2020 2023 2072 656c 6174 6976 6520 7061 # relative pa │ │ │ -0001ecd0: 7468 2069 6e20 6261 636b 7570 2069 6e63 th in backup inc │ │ │ -0001ece0: 6c2e 2066 696c 650a 2020 2020 6d79 2024 l. file. my $ │ │ │ -0001ecf0: 626c 6f63 6b53 697a 6520 3d20 7368 6966 blockSize = shif │ │ │ -0001ed00: 743b 0a20 2020 206d 7920 2463 6f6d 7072 t;. my $compr │ │ │ -0001ed10: 6573 7342 6c6f 636b 203d 2073 6869 6674 essBlock = shift │ │ │ -0001ed20: 3b20 2020 2023 2027 6327 206f 6465 7220 ; # 'c' oder │ │ │ -0001ed30: 2775 2720 2863 6f6d 7072 6573 732c 2075 'u' (compress, u │ │ │ -0001ed40: 6e63 6f6d 7072 6573 7329 0a20 2020 206d ncompress). m │ │ │ -0001ed50: 7920 2462 6c6f 636b 5265 6164 203d 2073 y $blockRead = s │ │ │ -0001ed60: 6869 6674 3b20 2020 2020 2020 2023 2070 hift; # p │ │ │ -0001ed70: 6f69 6e74 6572 2074 6f20 6c69 7374 0a20 ointer to list. │ │ │ -0001ed80: 2020 206d 7920 2463 6f6d 7072 6573 7343 my $compressC │ │ │ -0001ed90: 6f6d 6d61 6e64 203d 2073 6869 6674 3b0a ommand = shift;. │ │ │ -0001eda0: 2020 2020 6d79 2024 636f 6d70 7265 7373 my $compress │ │ │ -0001edb0: 4f70 7469 6f6e 7320 3d20 7368 6966 743b Options = shift; │ │ │ -0001edc0: 0a20 2020 206d 7920 2470 6f73 7466 6978 . my $postfix │ │ │ -0001edd0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -0001ede0: 2024 6f6c 6446 696c 656e 616d 6520 3d20 $oldFilename = │ │ │ -0001edf0: 7368 6966 743b 2020 2020 2020 2320 706f shift; # po │ │ │ -0001ee00: 696e 7465 7220 746f 206f 626a 6563 740a inter to object. │ │ │ -0001ee10: 2020 2020 6d79 2024 6c61 7465 4c69 6e6b my $lateLink │ │ │ -0001ee20: 7320 3d20 7368 6966 743b 0a20 2020 206d s = shift;. m │ │ │ -0001ee30: 7920 246c 6174 6543 6f6d 7072 6573 7320 y $lateCompress │ │ │ -0001ee40: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -0001ee50: 246e 6f43 6f6d 7072 6573 7320 3d20 7368 $noCompress = sh │ │ │ -0001ee60: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL │ │ │ -0001ee70: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. │ │ │ -0001ee80: 6d79 2024 746d 7066 696c 6520 3d20 7368 my $tmpfile = sh │ │ │ -0001ee90: 6966 743b 0a20 2020 206d 7920 2462 6c6f ift;. my $blo │ │ │ -0001eea0: 636b 4368 6563 6b53 756d 4669 6c65 203d ckCheckSumFile = │ │ │ -0001eeb0: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $ │ │ │ -0001eec0: 6374 696d 6520 3d20 7368 6966 743b 0a20 ctime = shift;. │ │ │ -0001eed0: 2020 206d 7920 246d 7469 6d65 203d 2073 my $mtime = s │ │ │ -0001eee0: 6869 6674 3b0a 2020 2020 6d79 2024 696e hift;. my $in │ │ │ -0001eef0: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz │ │ │ -0001ef00: 6520 3d20 7368 6966 743b 0a0a 0a23 7072 e = shift;...#pr │ │ │ -0001ef10: 696e 7420 2263 616c 634d 4435 426c 6f63 int "calcMD5Bloc │ │ │ -0001ef20: 6b53 756d 735c 6e22 3b0a 2370 7269 6e74 kSums\n";.#print │ │ │ -0001ef30: 2022 5c74 736f 7572 6365 4469 7220 3d20 "\tsourceDir = │ │ │ -0001ef40: 3c24 736f 7572 6365 4469 723e 5c6e 223b <$sourceDir>\n"; │ │ │ -0001ef50: 0a23 7072 696e 7420 225c 7474 6172 6765 .#print "\ttarge │ │ │ -0001ef60: 7444 6972 203d 203c 2474 6172 6765 7444 tDir = <$targetD │ │ │ -0001ef70: 6972 3e5c 6e22 3b0a 2370 7269 6e74 2022 ir>\n";.#print " │ │ │ -0001ef80: 5c74 7265 6c50 6174 6820 3d20 3c24 7265 \trelPath = <$re │ │ │ -0001ef90: 6c50 6174 683e 5c6e 223b 0a23 7072 696e lPath>\n";.#prin │ │ │ -0001efa0: 7420 225c 7462 6c6f 636b 5369 7a65 203d t "\tblockSize = │ │ │ -0001efb0: 203c 2462 6c6f 636b 5369 7a65 3e5c 6e22 <$blockSize>\n" │ │ │ -0001efc0: 3b0a 2370 7269 6e74 2022 5c74 746d 7066 ;.#print "\ttmpf │ │ │ -0001efd0: 696c 6520 3d20 3c24 746d 7066 696c 653e ile = <$tmpfile> │ │ │ -0001efe0: 5c6e 223b 0a23 7072 696e 7420 225c 7463 \n";.#print "\tc │ │ │ -0001eff0: 6f6d 7072 6573 7342 6c6f 636b 203d 203c ompressBlock = < │ │ │ -0001f000: 2463 6f6d 7072 6573 7342 6c6f 636b 3e5c $compressBlock>\ │ │ │ -0001f010: 6e22 3b0a 2370 7269 6e74 2022 5c74 6c61 n";.#print "\tla │ │ │ -0001f020: 7465 436f 6d70 7265 7373 203d 203c 246c teCompress = <$l │ │ │ -0001f030: 6174 6543 6f6d 7072 6573 733e 5c6e 2220 ateCompress>\n" │ │ │ -0001f040: 6966 2024 6c61 7465 436f 6d70 7265 7373 if $lateCompress │ │ │ -0001f050: 3b0a 0a20 2020 2024 3020 3d20 2270 6572 ;.. $0 = "per │ │ │ -0001f060: 6c6d 6435 626c 6f63 6b20 2472 656c 5061 lmd5block $relPa │ │ │ -0001f070: 7468 223b 0a0a 0a20 2020 206d 7920 246d th";... my $m │ │ │ -0001f080: 616e 6167 654e 6577 426c 6f63 6b20 3d0a anageNewBlock =. │ │ │ -0001f090: 096d 616e 6167 654e 6577 426c 6f63 6b4d .manageNewBlockM │ │ │ -0001f0a0: 4435 746f 4669 6c65 6e61 6d65 2d3e 6e65 D5toFilename->ne │ │ │ -0001f0b0: 7728 272d 6f6c 6446 696c 656e 616d 6527 w('-oldFilename' │ │ │ -0001f0c0: 203d 3e20 246f 6c64 4669 6c65 6e61 6d65 => $oldFilename │ │ │ -0001f0d0: 2c0a 0909 0909 0920 272d 6469 7227 203d ,...... '-dir' = │ │ │ -0001f0e0: 3e20 2474 6172 6765 7444 6972 2c0a 0909 > $targetDir,... │ │ │ -0001f0f0: 0909 0920 272d 7265 6c50 6174 6827 203d ... '-relPath' = │ │ │ -0001f100: 3e20 2472 656c 5061 7468 2c0a 0909 0909 > $relPath,..... │ │ │ -0001f110: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p │ │ │ -0001f120: 724c 6f67 293b 0a0a 2020 2020 2320 6578 rLog);.. # ex │ │ │ -0001f130: 706c 616e 6174 696f 6e73 3a0a 2020 2020 planations:. │ │ │ -0001f140: 2323 2024 6c61 7465 4c69 6e6b 730a 2020 ## $lateLinks. │ │ │ -0001f150: 2020 2323 2020 6966 2064 6566 696e 6564 ## if defined │ │ │ -0001f160: 2c20 7772 6974 6520 6c61 7465 4c69 6e6b , write lateLink │ │ │ -0001f170: 730a 2020 2020 2323 2024 6c61 7465 436f s. ## $lateCo │ │ │ -0001f180: 6d70 7265 7373 0a20 2020 2023 2320 2066 mpress. ## f │ │ │ -0001f190: 726f 6d20 6f70 7469 6f6e 0a20 2020 2023 rom option. # │ │ │ -0001f1a0: 2320 2464 6972 6563 740a 2020 2020 2323 # $direct. ## │ │ │ -0001f1b0: 2020 3d3d 2030 202d 3e20 666f 726b 2066 == 0 -> fork f │ │ │ -0001f1c0: 6f72 2063 6f6d 7072 6573 7369 6f6e 202f or compression / │ │ │ -0001f1d0: 203d 3d20 3120 2d3e 2063 6f6d 7072 6573 == 1 -> compres │ │ │ -0001f1e0: 7320 696e 2070 6572 6c0a 0a20 2020 206d s in perl.. m │ │ │ -0001f1f0: 7920 2463 6f6d 7072 4368 6563 6b3b 0a20 y $comprCheck;. │ │ │ -0001f200: 2020 2069 6620 2824 636f 6d70 7265 7373 if ($compress │ │ │ -0001f210: 426c 6f63 6b20 6571 2027 6e6f 2729 0a20 Block eq 'no'). │ │ │ -0001f220: 2020 207b 0a09 2463 6f6d 7072 6573 7342 {..$compressB │ │ │ -0001f230: 6c6f 636b 203d 2027 7527 3b0a 0924 636f lock = 'u';..$co │ │ │ -0001f240: 6d70 7243 6865 636b 203d 2075 6e64 6566 mprCheck = undef │ │ │ -0001f250: 3b0a 2020 2020 7d0a 2020 2020 656c 7369 ;. }. elsi │ │ │ -0001f260: 6620 2824 636f 6d70 7265 7373 426c 6f63 f ($compressBloc │ │ │ -0001f270: 6b20 6571 2027 7965 7327 290a 2020 2020 k eq 'yes'). │ │ │ -0001f280: 7b0a 0924 636f 6d70 7265 7373 426c 6f63 {..$compressBloc │ │ │ -0001f290: 6b20 3d20 2763 273b 0a09 2463 6f6d 7072 k = 'c';..$compr │ │ │ -0001f2a0: 4368 6563 6b20 3d20 756e 6465 663b 0a20 Check = undef;. │ │ │ -0001f2b0: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ -0001f2c0: 2020 7b0a 0924 636f 6d70 7265 7373 426c {..$compressBl │ │ │ -0001f2d0: 6f63 6b20 3d20 2763 273b 2020 2020 2320 ock = 'c'; # │ │ │ -0001f2e0: 6265 6361 7573 6520 6966 2064 6570 656e because if depen │ │ │ -0001f2f0: 6465 6e79 206f 6620 6c61 7465 436f 6d70 deny of lateComp │ │ │ -0001f300: 7265 7373 0a09 2020 2020 2020 2020 2020 ress.. │ │ │ -0001f310: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -0001f320: 2028 7365 6520 6265 6c6f 7729 0a09 2463 (see below)..$c │ │ │ -0001f330: 6f6d 7072 4368 6563 6b20 3d20 313b 0a20 omprCheck = 1;. │ │ │ -0001f340: 2020 207d 0a0a 2020 2020 246c 6174 6543 }.. $lateC │ │ │ -0001f350: 6f6d 7072 6573 7320 3d20 756e 6465 6620 ompress = undef │ │ │ -0001f360: 6966 2024 636f 6d70 7265 7373 426c 6f63 if $compressBloc │ │ │ -0001f370: 6b20 6571 2027 7527 3b20 2023 206d 7573 k eq 'u'; # mus │ │ │ -0001f380: 7420 6e6f 7420 6265 2063 6f6d 7072 6573 t not be compres │ │ │ -0001f390: 7365 640a 0a20 2020 206d 7920 2824 6e6f sed.. my ($no │ │ │ -0001f3a0: 5761 726e 696e 6773 2c20 246e 6f45 7272 Warnings, $noErr │ │ │ -0001f3b0: 6f72 7329 203d 2028 302c 2030 293b 0a20 ors) = (0, 0);. │ │ │ -0001f3c0: 2020 206d 7920 2824 6e6f 426c 6f63 6b43 my ($noBlockC │ │ │ -0001f3d0: 6f6d 7072 4368 6563 6b43 6f6d 7072 2c20 omprCheckCompr, │ │ │ -0001f3e0: 246e 6f42 6c6f 636b 436f 6d70 7243 6865 $noBlockComprChe │ │ │ -0001f3f0: 636b 4370 2920 3d20 2830 2c20 3029 3b0a ckCp) = (0, 0);. │ │ │ -0001f400: 0a20 2020 206d 7920 246d 6b64 6972 4c61 . my $mkdirLa │ │ │ -0001f410: 7465 4c69 6e6b 7346 696c 6550 6174 6820 teLinksFilePath │ │ │ -0001f420: 3d20 756e 6465 663b 0a20 2020 206c 6f63 = undef;. loc │ │ │ -0001f430: 616c 2028 2a46 494c 452c 202a 4f55 5429 al (*FILE, *OUT) │ │ │ -0001f440: 3b0a 2020 2020 6d79 2024 6669 6c65 496e ;. my $fileIn │ │ │ -0001f450: 203d 2075 6e64 6566 3b20 2020 2023 2075 = undef; # u │ │ │ -0001f460: 7365 6420 746f 2072 6561 6420 7669 6120 sed to read via │ │ │ -0001f470: 7069 7065 2028 6669 6c74 6572 290a 2020 pipe (filter). │ │ │ -0001f480: 2020 6966 2028 4024 626c 6f63 6b52 6561 if (@$blockRea │ │ │ -0001f490: 6429 2020 2023 2024 626c 6f63 6b52 6561 d) # $blockRea │ │ │ -0001f4a0: 6420 3d20 706f 696e 7465 7220 746f 2070 d = pointer to p │ │ │ -0001f4b0: 726f 6772 616d 2074 6f20 7069 7065 2069 rogram to pipe i │ │ │ -0001f4c0: 6e20 626c 6f63 6b20 746f 2072 6561 640a n block to read. │ │ │ -0001f4d0: 2020 2020 7b0a 096d 7920 2824 7072 6f67 {..my ($prog │ │ │ -0001f4e0: 2c20 4070 6172 2920 3d20 2840 2462 6c6f , @par) = (@$blo │ │ │ -0001f4f0: 636b 5265 6164 293b 0a09 6d79 2028 4070 ckRead);..my (@p │ │ │ -0001f500: 293b 0a09 6966 2028 2463 7469 6d65 203d );..if ($ctime = │ │ │ -0001f510: 3d20 3029 2020 2020 2020 2020 2020 2020 = 0) │ │ │ -0001f520: 2020 2023 2064 6576 6963 650a 097b 0a09 # device..{.. │ │ │ -0001f530: 2020 2020 2840 7029 203d 2028 272d 7374 (@p) = ('-st │ │ │ -0001f540: 6465 7272 2720 3d3e 2027 2f64 6576 2f6e derr' => '/dev/n │ │ │ -0001f550: 756c 6c27 293b 0a09 7d0a 0965 6c73 6520 ull');..}..else │ │ │ -0001f560: 2020 2023 2062 6c6f 636b 6564 2066 696c # blocked fil │ │ │ -0001f570: 650a 097b 0a09 2020 2020 2840 7029 203d e..{.. (@p) = │ │ │ -0001f580: 2028 272d 6f75 7452 616e 646f 6d27 203d ('-outRandom' = │ │ │ -0001f590: 3e20 2224 746d 7064 6972 2f73 7462 7550 > "$tmpdir/stbuP │ │ │ -0001f5a0: 6970 6546 726f 6d31 302d 2229 3b0a 097d ipeFrom10-");..} │ │ │ -0001f5b0: 0a09 2466 696c 6549 6e20 3d20 7069 7065 ..$fileIn = pipe │ │ │ -0001f5c0: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('- │ │ │ -0001f5d0: 6578 6563 2720 3d3e 2024 7072 6f67 2c0a exec' => $prog,. │ │ │ -0001f5e0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -0001f5f0: 203d 3e20 5c40 7061 722c 0a09 0909 0920 => \@par,..... │ │ │ -0001f600: 2020 2027 2d73 7464 696e 2720 3d3e 2024 '-stdin' => $ │ │ │ -0001f610: 736f 7572 6365 4469 722c 0a09 0909 0920 sourceDir,..... │ │ │ -0001f620: 2020 2040 702c 0a09 0909 0920 2020 2027 @p,..... ' │ │ │ -0001f630: 2d70 724c 6f67 2720 3d3e 2024 7072 4c6f -prLog' => $prLo │ │ │ -0001f640: 6729 3b0a 2309 7072 696e 7420 2265 7865 g);.#.print "exe │ │ │ -0001f650: 6320 3d20 3c24 7072 6f67 3e5c 6e22 3b0a c = <$prog>\n";. │ │ │ -0001f660: 2309 7072 696e 7420 225c 4070 203d 203c #.print "\@p = < │ │ │ -0001f670: 4070 3e5c 6e22 3b0a 096d 7920 2824 666c @p>\n";..my ($fl │ │ │ -0001f680: 6167 732c 2024 666c 312c 2024 666c 322c ags, $fl1, $fl2, │ │ │ -0001f690: 2024 666c 3329 3b0a 096c 6f63 616c 202a $fl3);..local * │ │ │ -0001f6a0: 494e 203d 2024 6669 6c65 496e 2d3e 7b27 IN = $fileIn->{' │ │ │ -0001f6b0: 6664 277d 3b0a 0a09 756e 6c65 7373 2028 fd'};...unless ( │ │ │ -0001f6c0: 2466 6c61 6773 203d 2066 636e 746c 2849 $flags = fcntl(I │ │ │ -0001f6d0: 4e2c 2046 5f47 4554 5049 5045 5f53 5a2c N, F_GETPIPE_SZ, │ │ │ -0001f6e0: 2030 2929 0a20 097b 0a09 2020 2020 2470 0)). .{.. $p │ │ │ -0001f6f0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0001f700: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -0001f710: 2027 2d73 7472 2720 3d3e 205b 2243 616e '-str' => ["Can │ │ │ -0001f720: 2774 2066 636e 746c 2046 5f47 4554 5049 't fcntl F_GETPI │ │ │ -0001f730: 5045 5f53 5a3a 2024 2122 5d29 3b0a 097d PE_SZ: $!"]);..} │ │ │ -0001f740: 0a09 2466 6c31 203d 2024 666c 6167 733b ..$fl1 = $flags; │ │ │ -0001f750: 0a23 0920 2020 206f 7220 6469 6520 2243 .#. or die "C │ │ │ -0001f760: 616e 2774 2066 636e 746c 2046 5f47 4554 an't fcntl F_GET │ │ │ -0001f770: 5049 5045 5f53 5a3a 2024 2122 3b0a 2309 PIPE_SZ: $!";.#. │ │ │ -0001f780: 7072 696e 7420 2223 2323 2347 4554 2066 print "####GET f │ │ │ -0001f790: 6c61 6773 2031 3d24 666c 6167 735c 6e22 lags 1=$flags\n" │ │ │ -0001f7a0: 3b0a 0a09 756e 6c65 7373 2028 2466 6c61 ;...unless ($fla │ │ │ -0001f7b0: 6773 203d 2066 636e 746c 2849 4e2c 2046 gs = fcntl(IN, F │ │ │ -0001f7c0: 5f53 4554 5049 5045 5f53 5a2c 2024 696e _SETPIPE_SZ, $in │ │ │ -0001f7d0: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz │ │ │ -0001f7e0: 6529 290a 097b 0a09 2020 2020 2470 724c e))..{.. $prL │ │ │ -0001f7f0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0001f800: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -0001f810: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -0001f820: 4361 6669 6c65 3a2f 2f2f 686f 6d65 2f68 Cafile:///home/h │ │ │ -0001f830: 6a63 2f53 6368 7265 6962 7469 7363 682f jc/Schreibtisch/ │ │ │ -0001f840: 7472 6173 682e 6465 736b 746f 706e 2774 trash.desktopn't │ │ │ -0001f850: 2066 636e 746c 2046 5f53 4554 5049 5045 fcntl F_SETPIPE │ │ │ -0001f860: 5f53 5a20 746f 2024 696e 7465 726e 616c _SZ to $internal │ │ │ -0001f870: 5069 7065 4275 6653 697a 653a 2024 2122 PipeBufSize: $!" │ │ │ -0001f880: 5d29 3b0a 097d 0a09 2466 6c32 203d 2024 ]);..}..$fl2 = $ │ │ │ -0001f890: 666c 6167 733b 0a23 0920 2020 200a 2320 flags;.#. .# │ │ │ -0001f8a0: 2020 206f 7220 6469 6520 2243 616e 2774 or die "Can't │ │ │ -0001f8b0: 2066 636e 746c 2046 5f47 4554 5049 5045 fcntl F_GETPIPE │ │ │ -0001f8c0: 5f53 5a3a 2024 2122 3b0a 2309 7072 696e _SZ: $!";.#.prin │ │ │ -0001f8d0: 7420 2223 2323 2353 4554 2066 6c61 6773 t "####SET flags │ │ │ -0001f8e0: 2032 3d24 666c 6167 735c 6e22 3b0a 0a09 2=$flags\n";... │ │ │ -0001f8f0: 756e 6c65 7373 2028 2466 6c61 6773 203d unless ($flags = │ │ │ -0001f900: 2066 636e 746c 2849 4e2c 2046 5f47 4554 fcntl(IN, F_GET │ │ │ -0001f910: 5049 5045 5f53 5a2c 2030 2929 0a09 7b0a PIPE_SZ, 0))..{. │ │ │ -0001f920: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -0001f930: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -0001f940: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ -0001f950: 3e20 5b22 4361 6e27 7420 6663 6e74 6c20 > ["Can't fcntl │ │ │ -0001f960: 465f 4745 5450 4950 455f 535a 3a20 2421 F_GETPIPE_SZ: $! │ │ │ -0001f970: 225d 293b 0a09 7d0a 0924 666c 3320 3d20 "]);..}..$fl3 = │ │ │ -0001f980: 2466 6c61 6773 3b0a 2309 2020 2020 6f72 $flags;.#. or │ │ │ -0001f990: 2064 6965 2022 4361 6e27 7420 6663 6e74 die "Can't fcnt │ │ │ -0001f9a0: 6c20 465f 4745 5450 4950 455f 535a 3a20 l F_GETPIPE_SZ: │ │ │ -0001f9b0: 2421 223b 0a23 0970 7269 6e74 2022 2323 $!";.#.print "## │ │ │ -0001f9c0: 2323 4745 5420 666c 6167 7320 333d 2466 ##GET flags 3=$f │ │ │ -0001f9d0: 6c61 6773 5c6e 223b 0a0a 0969 6620 2824 lags\n";...if ($ │ │ │ -0001f9e0: 666c 3120 213d 2024 666c 3329 0a09 7b0a fl1 != $fl3)..{. │ │ │ -0001f9f0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -0001fa00: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -0001fa10: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ -0001fa20: 3e0a 0909 205b 2263 6861 6e67 6564 2069 >... ["changed i │ │ │ -0001fa30: 6e74 6572 6e61 6c20 7069 7065 2062 7566 nternal pipe buf │ │ │ -0001fa40: 6665 7220 7369 7a65 2066 726f 6d20 2466 fer size from $f │ │ │ -0001fa50: 6c31 2074 6f20 2466 6c33 2066 6f72 203c l1 to $fl3 for < │ │ │ -0001fa60: 2473 6f75 7263 6544 6972 3e22 5d29 3b0a $sourceDir>"]);. │ │ │ -0001fa70: 097d 0a09 656c 7365 0a09 7b0a 0920 2020 .}..else..{.. │ │ │ -0001fa80: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -0001fa90: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -0001faa0: 2020 2020 2020 2020 272d 7374 7227 203d '-str' = │ │ │ -0001fab0: 3e20 5b22 7072 6573 6572 7669 6e67 2069 > ["preserving i │ │ │ -0001fac0: 6e74 6572 6e61 6c20 7069 7065 2062 7566 nternal pipe buf │ │ │ -0001fad0: 6665 7220 7369 7a65 206f 6620 2466 6c31 fer size of $fl1 │ │ │ -0001fae0: 2066 6f72 203c 2473 6f75 7263 6544 6972 for <$sourceDir │ │ │ -0001faf0: 3e22 5d29 3b0a 097d 0a20 2020 207d 0a20 >"]);..}. }. │ │ │ -0001fb00: 2020 2065 6c73 650a 2020 2020 7b0a 0975 else. {..u │ │ │ -0001fb10: 6e6c 6573 7320 2873 7973 6f70 656e 2846 nless (sysopen(F │ │ │ -0001fb20: 494c 452c 2024 736f 7572 6365 4469 722c ILE, $sourceDir, │ │ │ -0001fb30: 204f 5f52 444f 4e4c 5929 290a 097b 0a09 O_RDONLY))..{.. │ │ │ -0001fb40: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -0001fb50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -0001fb60: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -0001fb70: 205b 2263 616e 6e6f 7420 6f70 656e 203c ["cannot open < │ │ │ -0001fb80: 2473 6f75 7263 6544 6972 3e22 5d2c 0a09 $sourceDir>"],.. │ │ │ -0001fb90: 0909 2020 272d 6164 6427 203d 3e20 5b5f .. '-add' => [_ │ │ │ -0001fba0: 5f46 494c 455f 5f2c 205f 5f4c 494e 455f _FILE__, __LINE_ │ │ │ -0001fbb0: 5f5d 293b 0a09 2020 2020 2b2b 246e 6f45 _]);.. ++$noE │ │ │ -0001fbc0: 7272 6f72 733b 0a09 2020 2020 7265 7475 rrors;.. retu │ │ │ -0001fbd0: 726e 2030 3b0a 097d 0a20 2020 207d 0a0a rn 0;..}. }.. │ │ │ -0001fbe0: 2020 2020 6d79 2024 6d64 3541 6c6c 203d my $md5All = │ │ │ -0001fbf0: 2044 6967 6573 743a 3a4d 4435 2d3e 6e65 Digest::MD5->ne │ │ │ -0001fc00: 7728 293b 0a20 2020 206d 7920 2462 6c6f w();. my $blo │ │ │ -0001fc10: 636b 4e6f 203d 2030 3b0a 2020 2020 6d79 ckNo = 0;. my │ │ │ -0001fc20: 2024 6275 6666 6572 3b0a 2020 2020 6d79 $buffer;. my │ │ │ -0001fc30: 2028 406e 6577 4d44 356c 696e 6529 203d (@newMD5line) = │ │ │ -0001fc40: 2028 293b 0a20 2020 206d 7920 2824 7374 ();. my ($st │ │ │ -0001fc50: 6174 5369 7a65 4f72 6967 2c20 2473 7461 atSizeOrig, $sta │ │ │ -0001fc60: 7453 697a 654e 6577 2c20 2473 7461 744e tSizeNew, $statN │ │ │ -0001fc70: 6f46 6f72 6b73 4350 2c20 2473 7461 744e oForksCP, $statN │ │ │ -0001fc80: 6f46 6f72 6b73 436f 6d70 7265 7373 2c0a oForksCompress,. │ │ │ -0001fc90: 0924 7374 6174 4e6f 4c61 7465 4c69 6e6b .$statNoLateLink │ │ │ -0001fca0: 732c 2024 6e29 203d 2028 302c 2030 2c20 s, $n) = (0, 0, │ │ │ -0001fcb0: 302c 2030 2c20 302c 2030 293b 0a0a 2020 0, 0, 0, 0);.. │ │ │ -0001fcc0: 2020 6d79 2024 7061 7261 6c46 6f72 6b20 my $paralFork │ │ │ -0001fcd0: 3d20 7061 7261 6c6c 656c 466f 726b 2d3e = parallelFork-> │ │ │ -0001fce0: 6e65 7728 272d 6d61 7850 6172 616c 6c65 new('-maxParalle │ │ │ -0001fcf0: 6c27 203d 3e20 246e 6f43 6f6d 7072 6573 l' => $noCompres │ │ │ -0001fd00: 732c 0a09 0909 0920 2020 2020 2027 2d70 s,..... '-p │ │ │ -0001fd10: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -0001fd20: 3b0a 2020 2020 6d79 2024 7469 6e79 5363 ;. my $tinySc │ │ │ -0001fd30: 6865 6420 3d20 7469 6e79 5761 6974 5363 hed = tinyWaitSc │ │ │ -0001fd40: 6865 6475 6c65 722d 3e6e 6577 2827 2d70 heduler->new('-p │ │ │ -0001fd50: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -0001fd60: 3b0a 0a20 2020 206d 7920 2464 6972 6563 ;.. my $direc │ │ │ -0001fd70: 7420 3d20 303b 2020 2020 2320 3d3d 2031 t = 0; # == 1 │ │ │ -0001fd80: 202d 3e20 646f 206e 6f74 2066 6f72 6b20 -> do not fork │ │ │ -0001fd90: 666f 7220 636f 6d70 7265 7373 696f 6e20 for compression │ │ │ -0001fda0: 6f72 2063 6f70 790a 2020 2020 2464 6972 or copy. $dir │ │ │ -0001fdb0: 6563 7420 3d20 3120 6966 2024 636f 6d70 ect = 1 if $comp │ │ │ -0001fdc0: 7265 7373 426c 6f63 6b20 6571 2027 7527 ressBlock eq 'u' │ │ │ -0001fdd0: 3b0a 2020 2020 2464 6972 6563 7420 3d20 ;. $direct = │ │ │ -0001fde0: 3120 6966 2024 6d61 696e 3a3a 494f 436f 1 if $main::IOCo │ │ │ -0001fdf0: 6d70 7265 7373 4469 7265 6374 0a09 616e mpressDirect..an │ │ │ -0001fe00: 6420 2462 6c6f 636b 5369 7a65 203c 2024 d $blockSize < $ │ │ │ -0001fe10: 6d61 696e 3a3a 6d69 6e43 6f70 7957 6974 main::minCopyWit │ │ │ -0001fe20: 6846 6f72 6b0a 0961 6e64 2024 636f 6d70 hFork..and $comp │ │ │ -0001fe30: 7265 7373 426c 6f63 6b20 6571 2027 6327 ressBlock eq 'c' │ │ │ -0001fe40: 3b0a 2370 7269 6e74 2022 6469 7265 6374 ;.#print "direct │ │ │ -0001fe50: 203d 203c 2464 6972 6563 743e 5c6e 223b = <$direct>\n"; │ │ │ -0001fe60: 0a0a 2020 2020 6d79 2024 6a6f 6254 6f44 .. my $jobToD │ │ │ -0001fe70: 6f20 3d20 313b 0a20 2020 206d 7920 2470 o = 1;. my $p │ │ │ -0001fe80: 6172 466f 726b 546f 446f 203d 2030 3b0a arForkToDo = 0;. │ │ │ -0001fe90: 0a20 2020 2075 6e6c 6573 7320 286f 7065 . unless (ope │ │ │ -0001fea0: 6e28 4f55 542c 2022 3e22 2c20 2474 6d70 n(OUT, ">", $tmp │ │ │ -0001feb0: 6669 6c65 2929 0a20 2020 207b 0a09 2470 file)). {..$p │ │ │ -0001fec0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0001fed0: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ -0001fee0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -0001fef0: 6361 6e6e 6f74 206f 7065 6e20 7465 6d70 cannot open temp │ │ │ -0001ff00: 6f72 6172 7920 6669 6c65 203c 2474 6d70 orary file <$tmp │ │ │ -0001ff10: 6669 6c65 3e22 5d29 3b0a 092b 2b24 6e6f file>"]);..++$no │ │ │ -0001ff20: 4572 726f 7273 3b0a 0972 6574 7572 6e20 Errors;..return │ │ │ -0001ff30: 313b 2020 2020 2020 2020 2020 2020 2020 1; │ │ │ -0001ff40: 2020 2020 2020 2020 2020 2023 2045 5252 # ERR │ │ │ -0001ff50: 4f52 0a20 2020 207d 0a0a 2020 2020 7768 OR. }.. wh │ │ │ -0001ff60: 696c 6520 2824 6a6f 6254 6f44 6f20 3e20 ile ($jobToDo > │ │ │ -0001ff70: 3020 6f72 2024 7061 7246 6f72 6b54 6f44 0 or $parForkToD │ │ │ -0001ff80: 6f20 3e20 3029 0a20 2020 207b 0a23 7072 o > 0). {.#pr │ │ │ -0001ff90: 696e 7420 222d 2d2d 206a 6f62 546f 446f int "--- jobToDo │ │ │ -0001ffa0: 3d24 6a6f 6254 6f44 6f20 2d2d 2070 6172 =$jobToDo -- par │ │ │ -0001ffb0: 466f 726b 546f 446f 3d24 7061 7246 6f72 ForkToDo=$parFor │ │ │ -0001ffc0: 6b54 6f44 6f20 2d2d 2d5c 6e22 3b0a 0923 kToDo ---\n";..# │ │ │ -0001ffd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0001ffe0: 2323 2323 2323 2323 2323 2323 0a09 6d79 ############..my │ │ │ -0001fff0: 2024 6f6c 6420 3d20 2470 6172 616c 466f $old = $paralFo │ │ │ -00020000: 726b 2d3e 6368 6563 6b4f 6e65 2829 3b0a rk->checkOne();. │ │ │ -00020010: 0969 6620 2824 6f6c 6429 0a09 7b0a 0920 .if ($old)..{.. │ │ │ -00020020: 2020 206d 7920 2824 6469 6765 7374 2c20 my ($digest, │ │ │ -00020030: 2466 696c 652c 2024 706f 7374 6669 7829 $file, $postfix) │ │ │ -00020040: 203d 2040 7b24 6f6c 642d 3e67 6574 2827 = @{$old->get(' │ │ │ -00020050: 2d77 6861 7427 203d 3e20 2769 6e66 6f27 -what' => 'info' │ │ │ -00020060: 297d 3b0a 0920 2020 2024 7374 6174 5369 )};.. $statSi │ │ │ -00020070: 7a65 4e65 7720 2b3d 2028 7374 6174 2822 zeNew += (stat(" │ │ │ -00020080: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -00020090: 2470 6f73 7466 6978 2229 295b 375d 207c $postfix"))[7] | │ │ │ -000200a0: 7c20 303b 0a23 7072 696e 7420 222d 312d | 0;.#print "-1- │ │ │ -000200b0: 206d 6435 2024 6669 6c65 203c 2470 6f73 md5 $file <$pos │ │ │ -000200c0: 7466 6978 3e5c 6e22 3b0a 097d 0a0a 0923 tfix>\n";..}...# │ │ │ -000200d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000200e0: 2323 2323 2323 2323 2323 2323 0a23 7072 ############.#pr │ │ │ -000200f0: 696e 7420 226a 6f62 546f 446f 203d 203c int "jobToDo = < │ │ │ -00020100: 246a 6f62 546f 446f 3e2c 2066 7265 6545 $jobToDo>, freeE │ │ │ -00020110: 6e74 7269 6573 203d 203c 222c 2024 7061 ntries = <", $pa │ │ │ -00020120: 7261 6c46 6f72 6b2d 3e67 6574 4e6f 4672 ralFork->getNoFr │ │ │ -00020130: 6565 456e 7472 6965 7328 292c 2022 3e5c eeEntries(), ">\ │ │ │ -00020140: 6e22 3b0a 0969 6620 2824 6a6f 6254 6f44 n";..if ($jobToD │ │ │ -00020150: 6f20 3e20 3020 616e 6420 2470 6172 616c o > 0 and $paral │ │ │ -00020160: 466f 726b 2d3e 6765 744e 6f46 7265 6545 Fork->getNoFreeE │ │ │ -00020170: 6e74 7269 6573 2829 203e 2030 290a 097b ntries() > 0)..{ │ │ │ -00020180: 0a09 2020 2020 6966 2028 2466 696c 6549 .. if ($fileI │ │ │ -00020190: 6e29 0a09 2020 2020 7b0a 0909 2320 2020 n).. {...# │ │ │ -000201a0: 246e 203d 2024 6669 6c65 496e 2d3e 7379 $n = $fileIn->sy │ │ │ -000201b0: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\$buffer, │ │ │ -000201c0: 2462 6c6f 636b 5369 7a65 293b 0a09 096d $blockSize);...m │ │ │ -000201d0: 7920 2462 7566 546d 7020 3d20 2727 3b0a y $bufTmp = '';. │ │ │ -000201e0: 0909 2462 7566 6665 7220 3d20 2727 3b0a ..$buffer = '';. │ │ │ -000201f0: 0909 6d79 2024 6669 7273 7452 756e 203d ..my $firstRun = │ │ │ -00020200: 2031 3b0a 0909 6d79 2024 7265 6164 4253 1;...my $readBS │ │ │ -00020210: 203d 2024 626c 6f63 6b53 697a 6520 3e20 = $blockSize > │ │ │ -00020220: 2469 6e74 6572 6e61 6c50 6970 6542 7566 $internalPipeBuf │ │ │ -00020230: 5369 7a65 0a09 0920 2020 203f 2024 696e Size... ? $in │ │ │ -00020240: 7465 726e 616c 5069 7065 4275 6653 697a ternalPipeBufSiz │ │ │ -00020250: 6520 3a20 2462 6c6f 636b 5369 7a65 203b e : $blockSize ; │ │ │ -00020260: 0a23 0909 7072 696e 7420 2262 6c6f 636b .#..print "block │ │ │ -00020270: 5369 7a65 203d 2024 626c 6f63 6b53 697a Size = $blockSiz │ │ │ -00020280: 655c 6e22 3b0a 0909 7768 696c 6520 2831 e\n";...while (1 │ │ │ -00020290: 290a 0909 7b0a 0909 2020 2020 2309 0920 )...{... #.. │ │ │ -000202a0: 2020 2070 7269 6e74 2022 7379 736f 7065 print "sysope │ │ │ -000202b0: 6e3a 2020 7265 6164 4253 3d24 7265 6164 n: readBS=$read │ │ │ -000202c0: 4253 5c6e 223b 0a09 0920 2020 2069 6620 BS\n";... if │ │ │ -000202d0: 2824 6669 7273 7452 756e 290a 0909 2020 ($firstRun)... │ │ │ -000202e0: 2020 7b0a 0909 0924 6e20 3d20 2466 696c {....$n = $fil │ │ │ -000202f0: 6549 6e2d 3e73 7973 7265 6164 285c 2462 eIn->sysread(\$b │ │ │ -00020300: 7566 6665 722c 2024 7265 6164 4253 293b uffer, $readBS); │ │ │ -00020310: 0a09 0909 2466 6972 7374 5275 6e20 3d20 ....$firstRun = │ │ │ -00020320: 303b 0a09 0920 2020 207d 0a09 0920 2020 0;... }... │ │ │ -00020330: 2065 6c73 650a 0909 2020 2020 7b0a 0909 else... {... │ │ │ -00020340: 0924 6e20 3d20 2466 696c 6549 6e2d 3e73 .$n = $fileIn->s │ │ │ -00020350: 7973 7265 6164 285c 2462 7566 546d 702c ysread(\$bufTmp, │ │ │ -00020360: 2024 7265 6164 4253 293b 0a09 0909 2462 $readBS);....$b │ │ │ -00020370: 7566 6665 7220 2e3d 2024 6275 6654 6d70 uffer .= $bufTmp │ │ │ -00020380: 3b0a 0909 2020 2020 7d0a 0909 2020 2020 ;... }... │ │ │ -00020390: 0a09 0920 2020 206d 7920 246c 6220 3d20 ... my $lb = │ │ │ -000203a0: 6c65 6e67 7468 2824 6275 6666 6572 293b length($buffer); │ │ │ -000203b0: 0a23 0909 2020 2020 6d79 2024 6c74 203d .#.. my $lt = │ │ │ -000203c0: 206c 656e 6774 6828 2462 7566 546d 7029 length($bufTmp) │ │ │ -000203d0: 3b0a 2309 0920 2020 2070 7269 6e74 2022 ;.#.. print " │ │ │ -000203e0: 6361 7428 2462 6c6f 636b 4e6f 2920 2d3e cat($blockNo) -> │ │ │ -000203f0: 206e 3d24 6e20 2d20 6c74 3d24 6c74 202d n=$n - lt=$lt - │ │ │ -00020400: 206c 623d 246c 625c 6e22 3b0a 0909 2020 lb=$lb\n";... │ │ │ -00020410: 2020 6c61 7374 2069 6620 246c 6220 3e3d last if $lb >= │ │ │ -00020420: 2024 626c 6f63 6b53 697a 6520 6f72 2024 $blockSize or $ │ │ │ -00020430: 6e20 3d3d 2030 3b0a 0909 7d0a 0909 246e n == 0;...}...$n │ │ │ -00020440: 203d 206c 656e 6774 6828 2462 7566 6665 = length($buffe │ │ │ -00020450: 7229 3b0a 0920 2020 207d 0a09 2020 2020 r);.. }.. │ │ │ -00020460: 656c 7365 0a09 2020 2020 7b0a 0909 246e else.. {...$n │ │ │ -00020470: 203d 2073 7973 7265 6164 2846 494c 452c = sysread(FILE, │ │ │ -00020480: 2024 6275 6666 6572 2c20 2462 6c6f 636b $buffer, $block │ │ │ -00020490: 5369 7a65 293b 0a09 2020 2020 7d0a 0a09 Size);.. }... │ │ │ -000204a0: 2020 2020 6966 2028 246e 290a 0920 2020 if ($n).. │ │ │ -000204b0: 207b 0a09 0924 7374 6174 5369 7a65 4f72 {...$statSizeOr │ │ │ -000204c0: 6967 202b 3d20 246e 3b0a 0909 2462 6c6f ig += $n;...$blo │ │ │ -000204d0: 636b 4e6f 2b2b 3b0a 0909 6d79 2024 626c ckNo++;...my $bl │ │ │ -000204e0: 6f63 6b4e 616d 6520 3d20 7370 7269 6e74 ockName = sprint │ │ │ -000204f0: 6620 2225 3031 3064 222c 2024 626c 6f63 f "%010d", $bloc │ │ │ -00020500: 6b4e 6f3b 0a09 096d 7920 2462 6c6f 636b kNo;...my $block │ │ │ -00020510: 4669 6c65 203d 2022 2472 656c 5061 7468 File = "$relPath │ │ │ -00020520: 2f24 626c 6f63 6b4e 616d 6522 3b0a 0909 /$blockName";... │ │ │ -00020530: 6d79 2024 6469 6765 7374 203d 206d 6435 my $digest = md5 │ │ │ -00020540: 5f68 6578 2824 6275 6666 6572 293b 0a09 _hex($buffer);.. │ │ │ -00020550: 0924 6d64 3541 6c6c 2d3e 6164 6428 2462 .$md5All->add($b │ │ │ -00020560: 7566 6665 7229 3b0a 2370 7269 6e74 2022 uffer);.#print " │ │ │ -00020570: 2d32 2d20 2462 6c6f 636b 4e61 6d65 202d -2- $blockName - │ │ │ -00020580: 3e20 6469 6765 7374 203d 2024 6469 6765 > digest = $dige │ │ │ -00020590: 7374 2028 246e 2062 7974 6573 295c 6e22 st ($n bytes)\n" │ │ │ -000205a0: 3b0a 0909 6d79 2028 2465 7869 7374 696e ;...my ($existin │ │ │ -000205b0: 6746 696c 652c 2024 636f 6d70 722c 2024 gFile, $compr, $ │ │ │ -000205c0: 6e31 293b 0a09 0969 6620 2824 6e31 203d n1);...if ($n1 = │ │ │ -000205d0: 2028 2824 636f 6d70 722c 2024 6578 6973 (($compr, $exis │ │ │ -000205e0: 7469 6e67 4669 6c65 2920 3d0a 2309 0909 tingFile) =.#... │ │ │ -000205f0: 2020 2024 6f6c 6446 696c 656e 616d 652d $oldFilename- │ │ │ -00020600: 3e67 6574 426c 6f63 6b46 696c 656e 616d >getBlockFilenam │ │ │ -00020610: 6543 6f6d 7072 2824 6469 6765 7374 2929 eCompr($digest)) │ │ │ -00020620: 290a 0909 0920 2020 246d 616e 6167 654e ).... $manageN │ │ │ -00020630: 6577 426c 6f63 6b2d 3e67 6574 426c 6f63 ewBlock->getBloc │ │ │ -00020640: 6b46 696c 656e 616d 6528 2464 6967 6573 kFilename($diges │ │ │ -00020650: 7429 2929 0a09 097b 2020 2020 2020 2020 t)))...{ │ │ │ -00020660: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00020670: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00020680: 2020 2320 626c 6f63 6b20 6578 6973 7473 # block exists │ │ │ -00020690: 0a09 0920 2020 2024 626c 6f63 6b46 696c ... $blockFil │ │ │ -000206a0: 6520 2e3d 2024 706f 7374 6669 7820 6966 e .= $postfix if │ │ │ -000206b0: 2024 636f 6d70 7220 6571 2027 6327 3b0a $compr eq 'c';. │ │ │ -000206c0: 0a09 0920 2020 2070 7573 6820 406e 6577 ... push @new │ │ │ -000206d0: 4d44 356c 696e 652c 2022 2464 6967 6573 MD5line, "$diges │ │ │ -000206e0: 7420 2463 6f6d 7072 2024 626c 6f63 6b46 t $compr $blockF │ │ │ -000206f0: 696c 6522 3b0a 2370 7269 6e74 2022 2d31 ile";.#print "-1 │ │ │ -00020700: 302d 2028 2464 6967 6573 7429 206c 696e 0- ($digest) lin │ │ │ -00020710: 6b20 2d3e 2024 6578 6973 7469 6e67 4669 k -> $existingFi │ │ │ -00020720: 6c65 202d 3e20 2474 6172 6765 7444 6972 le -> $targetDir │ │ │ -00020730: 2f24 626c 6f63 6b46 696c 655c 6e22 3b0a /$blockFile\n";. │ │ │ -00020740: 0909 2020 2020 6966 2028 246c 6174 654c .. if ($lateL │ │ │ -00020750: 696e 6b73 290a 0909 2020 2020 7b0a 0909 inks)... {... │ │ │ -00020760: 0969 6620 286e 6f74 2024 6d6b 6469 724c .if (not $mkdirL │ │ │ -00020770: 6174 654c 696e 6b73 4669 6c65 5061 7468 ateLinksFilePath │ │ │ -00020780: 290a 0909 097b 0a09 0909 2020 2020 263a )....{.... &: │ │ │ -00020790: 3a6d 616b 6546 696c 6550 6174 6843 6163 :makeFilePathCac │ │ │ -000207a0: 6865 2822 2474 6172 6765 7444 6972 2f24 he("$targetDir/$ │ │ │ -000207b0: 626c 6f63 6b46 696c 6522 2c0a 0909 0909 blockFile",..... │ │ │ -000207c0: 0909 2024 7072 4c6f 6729 3b0a 0909 0920 .. $prLog);.... │ │ │ -000207d0: 2020 2024 6d6b 6469 724c 6174 654c 696e $mkdirLateLin │ │ │ -000207e0: 6b73 4669 6c65 5061 7468 203d 2031 3b0a ksFilePath = 1;. │ │ │ -000207f0: 0909 097d 0a09 0909 7072 696e 7420 4f55 ...}....print OU │ │ │ -00020800: 5420 226c 696e 6b20 2464 6967 6573 745c T "link $digest\ │ │ │ -00020810: 6e24 6578 6973 7469 6e67 4669 6c65 5c6e n$existingFile\n │ │ │ -00020820: 2474 6172 6765 7444 6972 2f24 626c 6f63 $targetDir/$bloc │ │ │ -00020830: 6b46 696c 655c 6e22 3b0a 0909 092b 2b24 kFile\n";....++$ │ │ │ -00020840: 7374 6174 4e6f 4c61 7465 4c69 6e6b 733b statNoLateLinks; │ │ │ -00020850: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e │ │ │ -00020860: 6c73 650a 0909 2020 2020 7b0a 2370 7269 lse... {.#pri │ │ │ -00020870: 6e74 2022 2d31 302e 322d 203c 2465 7869 nt "-10.2- <$exi │ │ │ -00020880: 7374 696e 6746 696c 653e 5c6e 223b 0a09 stingFile>\n";.. │ │ │ -00020890: 0909 263a 3a77 6169 7446 6f72 4669 6c65 ..&::waitForFile │ │ │ -000208a0: 2824 6578 6973 7469 6e67 4669 6c65 293b ($existingFile); │ │ │ -000208b0: 0a09 0909 6d79 2024 686c 203d 202d 313b ....my $hl = -1; │ │ │ -000208c0: 0a09 0909 6966 2028 246d 6178 4861 7264 ....if ($maxHard │ │ │ -000208d0: 4c69 6e6b 7320 203e 2030 290a 0909 097b Links > 0)....{ │ │ │ -000208e0: 0a09 0909 2020 2020 2468 6c20 3d20 2873 .... $hl = (s │ │ │ -000208f0: 7461 7428 2465 7869 7374 696e 6746 696c tat($existingFil │ │ │ -00020900: 6529 295b 335d 3b0a 2370 7269 6e74 2022 e))[3];.#print " │ │ │ -00020910: 2d31 302e 3235 2d20 2465 7869 7374 696e -10.25- $existin │ │ │ -00020920: 6746 696c 653a 2024 686c 2068 6172 646c gFile: $hl hardl │ │ │ -00020930: 696e 6b73 2028 246d 6178 4861 7264 4c69 inks ($maxHardLi │ │ │ -00020940: 6e6b 7329 5c6e 223b 0a09 0909 7d0a 2370 nks)\n";....}.#p │ │ │ -00020950: 7269 6e74 2022 2d31 302e 3236 2d20 6c69 rint "-10.26- li │ │ │ -00020960: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile │ │ │ -00020970: 203c 2d20 2474 6172 6765 7444 6972 2f24 <- $targetDir/$ │ │ │ -00020980: 626c 6f63 6b46 696c 655c 6e22 3b0a 0909 blockFile\n";... │ │ │ -00020990: 096d 7920 2468 6c43 6f70 7920 3d20 303b .my $hlCopy = 0; │ │ │ -000209a0: 0a09 0909 6966 2028 2468 6c20 3c20 246d ....if ($hl < $m │ │ │ -000209b0: 6178 4861 7264 4c69 6e6b 7329 2020 2320 axHardLinks) # │ │ │ -000209c0: 6265 6c6f 7720 6e75 6d62 6572 206f 6620 below number of │ │ │ -000209d0: 616c 6c6f 7765 6420 6861 7264 206c 696e allowed hard lin │ │ │ -000209e0: 6b73 0a09 0909 7b0a 0909 0920 2020 2075 ks....{.... u │ │ │ -000209f0: 6e6c 6573 7320 286c 696e 6b20 2465 7869 nless (link $exi │ │ │ -00020a00: 7374 696e 6746 696c 652c 2022 2474 6172 stingFile, "$tar │ │ │ -00020a10: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil │ │ │ -00020a20: 6522 290a 0909 0920 2020 207b 0a09 0909 e").... {.... │ │ │ -00020a30: 0924 686c 436f 7079 203d 2031 3b20 2020 .$hlCopy = 1; │ │ │ -00020a40: 2320 7472 7920 746f 2068 6172 6420 6c69 # try to hard li │ │ │ -00020a50: 6e6b 2077 6173 206e 6f74 2073 7563 6365 nk was not succe │ │ │ -00020a60: 7373 6675 6c6c 0a09 0909 2020 2020 7d0a ssfull.... }. │ │ │ -00020a70: 0909 097d 0a09 0909 656c 7365 2020 2023 ...}....else # │ │ │ -00020a80: 2072 6561 6368 6564 206e 756d 6265 7220 reached number │ │ │ -00020a90: 6f66 2061 6c6c 6f77 6564 2068 6172 6420 of allowed hard │ │ │ -00020aa0: 6c69 6e6b 730a 0909 097b 0a09 0909 2020 links....{.... │ │ │ -00020ab0: 2020 2468 6c43 6f70 7920 3d20 313b 2020 $hlCopy = 1; │ │ │ -00020ac0: 2020 2320 646f 6e27 7420 7472 7920 746f # don't try to │ │ │ -00020ad0: 2068 6172 6420 6c69 6e6b 202d 3e20 636f hard link -> co │ │ │ -00020ae0: 7079 2066 696c 650a 0909 097d 0a23 2020 py file....}.# │ │ │ -00020af0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00020b00: 2020 2020 2020 756e 6c65 7373 2028 6c69 unless (li │ │ │ -00020b10: 6e6b 2024 6578 6973 7469 6e67 4669 6c65 nk $existingFile │ │ │ -00020b20: 2c20 2224 7461 7267 6574 4469 722f 2462 , "$targetDir/$b │ │ │ -00020b30: 6c6f 636b 4669 6c65 2229 0a20 2020 2020 lockFile"). │ │ │ -00020b40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00020b50: 2020 2069 6620 2824 686c 436f 7079 290a if ($hlCopy). │ │ │ -00020b60: 0909 097b 0a23 7072 696e 7420 222d 3130 ...{.#print "-10 │ │ │ -00020b70: 2e33 2d5c 6e22 3b0a 0909 0920 2020 2069 .3-\n";.... i │ │ │ -00020b80: 6620 2824 636f 6d70 7265 7373 426c 6f63 f ($compressBloc │ │ │ -00020b90: 6b20 6571 2027 6327 290a 0909 0920 2020 k eq 'c').... │ │ │ -00020ba0: 207b 0a23 7072 696e 7420 2241 5c6e 223b {.#print "A\n"; │ │ │ -00020bb0: 0a09 0909 0924 7061 7261 6c46 6f72 6b2d .....$paralFork- │ │ │ -00020bc0: 3e61 6464 5f6e 6f62 6c6f 636b 280a 0909 >add_noblock(... │ │ │ -00020bd0: 0909 2020 2020 272d 6675 6e63 7469 6f6e .. '-function │ │ │ -00020be0: 2720 3d3e 205c 2663 6f6d 7072 6573 734f ' => \&compressO │ │ │ -00020bf0: 6e65 426c 6f63 6b2c 0a09 0909 0920 2020 neBlock,..... │ │ │ -00020c00: 2027 2d66 756e 6350 6172 2720 3d3e 0a09 '-funcPar' =>.. │ │ │ -00020c10: 0909 0920 2020 205b 2462 7566 6665 722c ... [$buffer, │ │ │ -00020c20: 0a23 0909 0909 2020 2020 2022 2474 6172 .#.... "$tar │ │ │ -00020c30: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil │ │ │ -00020c40: 6524 706f 7374 6669 7822 2c0a 0909 0909 e$postfix",..... │ │ │ -00020c50: 2020 2020 2022 2474 6172 6765 7444 6972 "$targetDir │ │ │ -00020c60: 2f24 626c 6f63 6b46 696c 6522 2c0a 0909 /$blockFile",... │ │ │ -00020c70: 0909 2020 2020 2024 636f 6d70 7265 7373 .. $compress │ │ │ -00020c80: 436f 6d6d 616e 642c 0a09 0909 0920 2020 Command,..... │ │ │ -00020c90: 2020 2463 6f6d 7072 6573 734f 7074 696f $compressOptio │ │ │ -00020ca0: 6e73 2c0a 0909 0909 2020 2020 2024 7072 ns,..... $pr │ │ │ -00020cb0: 4c6f 672c 2024 746d 7064 6972 5d2c 0a09 Log, $tmpdir],.. │ │ │ -00020cc0: 0909 0920 2020 2027 2d69 6e66 6f27 203d ... '-info' = │ │ │ -00020cd0: 3e20 5b24 6469 6765 7374 2c0a 0909 0909 > [$digest,..... │ │ │ -00020ce0: 0909 2224 7265 6c50 6174 682f 2462 6c6f .."$relPath/$blo │ │ │ -00020cf0: 636b 4e61 6d65 222c 0a23 0909 0909 0909 ckName",.#...... │ │ │ -00020d00: 2727 5d29 3b0a 0909 0909 0909 2470 6f73 '']);.......$pos │ │ │ -00020d10: 7466 6978 5d29 3b0a 0909 0909 2b2b 2473 tfix]);.....++$s │ │ │ -00020d20: 7461 744e 6f46 6f72 6b73 436f 6d70 7265 tatNoForksCompre │ │ │ -00020d30: 7373 3b0a 0a23 0909 0909 7075 7368 2040 ss;..#....push @ │ │ │ -00020d40: 6e65 774d 4435 6c69 6e65 2c0a 2309 0909 newMD5line,.#... │ │ │ -00020d50: 0922 2464 6967 6573 7420 2463 6f6d 7072 ."$digest $compr │ │ │ -00020d60: 6573 7342 6c6f 636b 2024 7265 6c50 6174 essBlock $relPat │ │ │ -00020d70: 682f 2462 6c6f 636b 4e61 6d65 223b 0a23 h/$blockName";.# │ │ │ -00020d80: 0909 0909 2224 6469 6765 7374 2024 636f ...."$digest $co │ │ │ -00020d90: 6d70 7265 7373 426c 6f63 6b20 2472 656c mpressBlock $rel │ │ │ -00020da0: 5061 7468 2f24 626c 6f63 6b4e 616d 6524 Path/$blockName$ │ │ │ -00020db0: 706f 7374 6669 7822 3b0a 2370 7269 6e74 postfix";.#print │ │ │ -00020dc0: 2022 2d31 302e 342d 5c6e 223b 0a09 0909 "-10.4-\n";.... │ │ │ -00020dd0: 2020 2020 7d0a 0909 0920 2020 2065 6c73 }.... els │ │ │ -00020de0: 650a 0909 0920 2020 207b 0a23 7072 696e e.... {.#prin │ │ │ -00020df0: 7420 222d 3130 2e35 2d5c 6e22 3b0a 0909 t "-10.5-\n";... │ │ │ -00020e00: 0909 3a3a 636f 7079 4f6e 6542 6c6f 636b ..::copyOneBlock │ │ │ -00020e10: 2824 6275 6666 6572 2c20 2224 7461 7267 ($buffer, "$targ │ │ │ -00020e20: 6574 4469 722f 2472 656c 5061 7468 2f24 etDir/$relPath/$ │ │ │ -00020e30: 626c 6f63 6b4e 616d 6522 2c0a 0909 0909 blockName",..... │ │ │ -00020e40: 0920 2020 2020 2020 2470 724c 6f67 293b . $prLog); │ │ │ -00020e50: 0a09 0909 0924 7374 6174 5369 7a65 4e65 .....$statSizeNe │ │ │ -00020e60: 7720 2b3d 2028 7374 6174 2822 2474 6172 w += (stat("$tar │ │ │ -00020e70: 6765 7444 6972 2f24 7265 6c50 6174 682f getDir/$relPath/ │ │ │ -00020e80: 2462 6c6f 636b 4e61 6d65 2229 295b 375d $blockName"))[7] │ │ │ -00020e90: 207c 7c20 303b 0a0a 0909 0920 2020 207d || 0;..... } │ │ │ -00020ea0: 0a23 7072 696e 7420 222d 3130 2e36 2d5c .#print "-10.6-\ │ │ │ -00020eb0: 6e22 3b0a 2309 0909 2020 2020 246f 6c64 n";.#... $old │ │ │ -00020ec0: 4669 6c65 6e61 6d65 2d3e 7365 7442 6c6f Filename->setBlo │ │ │ -00020ed0: 636b 4669 6c65 6e61 6d65 436f 6d70 7228 ckFilenameCompr( │ │ │ -00020ee0: 2464 6967 6573 742c 0a23 0909 0909 0909 $digest,.#...... │ │ │ -00020ef0: 0909 2224 7461 7267 6574 4469 722f 2462 .."$targetDir/$b │ │ │ -00020f00: 6c6f 636b 4669 6c65 222c 0a09 0909 2020 lockFile",.... │ │ │ -00020f10: 2020 246d 616e 6167 654e 6577 426c 6f63 $manageNewBloc │ │ │ -00020f20: 6b2d 3e73 6574 426c 6f63 6b46 696c 656e k->setBlockFilen │ │ │ -00020f30: 616d 6528 2464 6967 6573 742c 0a09 0909 ame($digest,.... │ │ │ -00020f40: 0909 0909 2020 2020 2020 2462 6c6f 636b .... $block │ │ │ -00020f50: 4669 6c65 2c0a 0909 0909 0909 0920 2020 File,........ │ │ │ -00020f60: 2020 2024 636f 6d70 7265 7373 426c 6f63 $compressBloc │ │ │ -00020f70: 6b29 3b0a 0909 097d 0a23 7072 696e 7420 k);....}.#print │ │ │ -00020f80: 222d 3130 2e37 2d5c 6e22 3b0a 0909 2020 "-10.7-\n";... │ │ │ -00020f90: 2020 7d0a 0909 7d0a 0909 656c 7365 2020 }...}...else │ │ │ -00020fa0: 2020 2020 2020 2320 626c 6f63 6b20 6973 # block is │ │ │ -00020fb0: 206e 6577 0a09 097b 0a23 7072 696e 7420 new...{.#print │ │ │ -00020fc0: 222d 3131 2d20 6e65 7720 626c 6f63 6b5c "-11- new block\ │ │ │ -00020fd0: 6e22 3b0a 0909 2020 2020 6966 2028 246c n";... if ($l │ │ │ -00020fe0: 6174 654c 696e 6b73 2061 6e64 206e 6f74 ateLinks and not │ │ │ -00020ff0: 2024 6d6b 6469 724c 6174 654c 696e 6b73 $mkdirLateLinks │ │ │ -00021000: 4669 6c65 5061 7468 290a 0909 2020 2020 FilePath)... │ │ │ -00021010: 7b0a 0909 0926 3a3a 6d61 6b65 4669 6c65 {....&::makeFile │ │ │ -00021020: 5061 7468 4361 6368 6528 2224 7461 7267 PathCache("$targ │ │ │ -00021030: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile │ │ │ -00021040: 222c 2024 7072 4c6f 6729 3b0a 0909 0924 ", $prLog);....$ │ │ │ -00021050: 6d6b 6469 724c 6174 654c 696e 6b73 4669 mkdirLateLinksFi │ │ │ -00021060: 6c65 5061 7468 203d 2031 3b0a 0909 2020 lePath = 1;... │ │ │ -00021070: 2020 7d0a 0a09 0920 2020 2069 6620 2824 }.... if ($ │ │ │ -00021080: 636f 6d70 7243 6865 636b 290a 0909 2020 comprCheck)... │ │ │ -00021090: 2020 7b0a 0909 096d 7920 2463 6f6d 7072 {....my $compr │ │ │ -000210a0: 4368 6563 6b42 7566 6665 723b 0a09 0909 CheckBuffer;.... │ │ │ -000210b0: 3a3a 677a 6970 205c 2462 7566 6665 7220 ::gzip \$buffer │ │ │ -000210c0: 3d3e 205c 2463 6f6d 7072 4368 6563 6b42 => \$comprCheckB │ │ │ -000210d0: 7566 6665 722c 204c 6576 656c 203d 3e20 uffer, Level => │ │ │ -000210e0: 313b 0a09 0909 6966 2028 6c65 6e67 7468 1;....if (length │ │ │ -000210f0: 2824 636f 6d70 7243 6865 636b 4275 6666 ($comprCheckBuff │ │ │ -00021100: 6572 292f 6c65 6e67 7468 2824 6275 6666 er)/length($buff │ │ │ -00021110: 6572 2920 3c20 302e 3935 290a 0909 097b er) < 0.95)....{ │ │ │ -00021120: 0a23 7072 696e 7420 222d 3131 2e35 2d20 .#print "-11.5- │ │ │ -00021130: 636f 6d70 7265 7373 5f63 6865 636b 3a20 compress_check: │ │ │ -00021140: 636f 6d70 7265 7373 5c6e 223b 0a09 0909 compress\n";.... │ │ │ -00021150: 2020 2020 2463 6f6d 7072 6573 7342 6c6f $compressBlo │ │ │ -00021160: 636b 203d 2027 6327 3b0a 0909 0920 2020 ck = 'c';.... │ │ │ -00021170: 202b 2b24 6e6f 426c 6f63 6b43 6f6d 7072 ++$noBlockCompr │ │ │ -00021180: 4368 6563 6b43 6f6d 7072 3b0a 0909 097d CheckCompr;....} │ │ │ -00021190: 0a09 0909 656c 7365 0a09 0909 7b0a 2370 ....else....{.#p │ │ │ -000211a0: 7269 6e74 2022 2d31 312e 352d 2063 6f6d rint "-11.5- com │ │ │ -000211b0: 7072 6573 735f 6368 6563 6b3a 2063 6f70 press_check: cop │ │ │ -000211c0: 795c 6e22 3b0a 0909 0920 2020 2024 636f y\n";.... $co │ │ │ -000211d0: 6d70 7265 7373 426c 6f63 6b20 3d20 2775 mpressBlock = 'u │ │ │ -000211e0: 273b 0a09 0909 2020 2020 2b2b 246e 6f42 ';.... ++$noB │ │ │ -000211f0: 6c6f 636b 436f 6d70 7243 6865 636b 4370 lockComprCheckCp │ │ │ -00021200: 3b0a 0909 097d 0a09 0920 2020 207d 0a0a ;....}... }.. │ │ │ -00021210: 0909 2020 2020 6d79 2024 7066 203d 2024 .. my $pf = $ │ │ │ -00021220: 636f 6d70 7265 7373 426c 6f63 6b20 6571 compressBlock eq │ │ │ -00021230: 2027 6327 203f 2024 706f 7374 6669 7820 'c' ? $postfix │ │ │ -00021240: 3a20 2727 3b0a 2309 0920 2020 2024 6f6c : '';.#.. $ol │ │ │ -00021250: 6446 696c 656e 616d 652d 3e73 6574 426c dFilename->setBl │ │ │ -00021260: 6f63 6b46 696c 656e 616d 6543 6f6d 7072 ockFilenameCompr │ │ │ -00021270: 2824 6469 6765 7374 2c0a 2309 0909 0909 ($digest,.#..... │ │ │ -00021280: 0909 2224 7461 7267 6574 4469 722f 2462 .."$targetDir/$b │ │ │ -00021290: 6c6f 636b 4669 6c65 2470 6622 2c0a 0909 lockFile$pf",... │ │ │ -000212a0: 2020 2020 246d 616e 6167 654e 6577 426c $manageNewBl │ │ │ -000212b0: 6f63 6b2d 3e73 6574 426c 6f63 6b46 696c ock->setBlockFil │ │ │ -000212c0: 656e 616d 6528 2464 6967 6573 742c 0a09 ename($digest,.. │ │ │ -000212d0: 0909 0909 0920 2020 2020 2022 2462 6c6f ..... "$blo │ │ │ -000212e0: 636b 4669 6c65 2470 6622 2c0a 0909 0909 ckFile$pf",..... │ │ │ -000212f0: 0909 2020 2020 2020 2463 6f6d 7072 6573 .. $compres │ │ │ -00021300: 7342 6c6f 636b 293b 0a09 0920 2020 2069 sBlock);... i │ │ │ -00021310: 6620 2824 6c61 7465 436f 6d70 7265 7373 f ($lateCompress │ │ │ -00021320: 2061 6e64 2028 2463 6f6d 7072 6573 7342 and ($compressB │ │ │ -00021330: 6c6f 636b 2065 7120 2763 2729 290a 0909 lock eq 'c'))... │ │ │ -00021340: 2020 2020 7b0a 2370 7269 6e74 2022 2d31 {.#print "-1 │ │ │ -00021350: 322d 206c 6174 6520 636f 6d70 7265 7373 2- late compress │ │ │ -00021360: 5c6e 223b 0a09 0909 6966 2028 2464 6972 \n";....if ($dir │ │ │ -00021370: 6563 7429 0a09 0909 7b0a 0909 0920 2020 ect)....{.... │ │ │ -00021380: 203a 3a63 6f70 794f 6e65 426c 6f63 6b28 ::copyOneBlock( │ │ │ -00021390: 2462 7566 6665 722c 2022 2474 6172 6765 $buffer, "$targe │ │ │ -000213a0: 7444 6972 2f24 7265 6c50 6174 682f 2462 tDir/$relPath/$b │ │ │ -000213b0: 6c6f 636b 4e61 6d65 222c 0a09 0909 0909 lockName",...... │ │ │ -000213c0: 2020 2024 7072 4c6f 6729 3b0a 0909 0920 $prLog);.... │ │ │ -000213d0: 2020 2024 7374 6174 5369 7a65 4e65 7720 $statSizeNew │ │ │ -000213e0: 2b3d 2028 7374 6174 2822 2474 6172 6765 += (stat("$targe │ │ │ -000213f0: 7444 6972 2f24 7265 6c50 6174 682f 2462 tDir/$relPath/$b │ │ │ -00021400: 6c6f 636b 4e61 6d65 2229 295b 375d 207c lockName"))[7] | │ │ │ -00021410: 7c20 303b 0a09 0909 7d0a 0909 0965 6c73 | 0;....}....els │ │ │ -00021420: 650a 0909 097b 0a23 7072 696e 7420 2242 e....{.#print "B │ │ │ -00021430: 5c6e 223b 0a09 0909 2020 2020 2470 6172 \n";.... $par │ │ │ -00021440: 616c 466f 726b 2d3e 6164 645f 6e6f 626c alFork->add_nobl │ │ │ -00021450: 6f63 6b28 272d 6675 6e63 7469 6f6e 2720 ock('-function' │ │ │ -00021460: 3d3e 205c 2663 6f70 794f 6e65 426c 6f63 => \©OneBloc │ │ │ -00021470: 6b2c 0a09 0909 0909 0920 2020 2027 2d66 k,....... '-f │ │ │ -00021480: 756e 6350 6172 2720 3d3e 205b 2462 7566 uncPar' => [$buf │ │ │ -00021490: 6665 722c 0a09 0909 0909 0920 2020 2020 fer,....... │ │ │ -000214a0: 2224 7461 7267 6574 4469 722f 2472 656c "$targetDir/$rel │ │ │ -000214b0: 5061 7468 2f24 626c 6f63 6b4e 616d 6522 Path/$blockName" │ │ │ -000214c0: 2c0a 0909 0909 0909 0909 2020 2024 7072 ,......... $pr │ │ │ -000214d0: 4c6f 675d 2c0a 0909 0909 0909 2020 2020 Log],....... │ │ │ -000214e0: 272d 696e 666f 2720 3d3e 205b 2464 6967 '-info' => [$dig │ │ │ -000214f0: 6573 742c 0a09 0909 0909 0909 2022 2472 est,........ "$r │ │ │ -00021500: 656c 5061 7468 2f24 626c 6f63 6b4e 616d elPath/$blockNam │ │ │ -00021510: 6522 2c0a 0909 0909 0909 0909 2727 5d29 e",.........'']) │ │ │ -00021520: 3b0a 0909 0920 2020 202b 2b24 7374 6174 ;.... ++$stat │ │ │ -00021530: 4e6f 466f 726b 7343 503b 0a09 0909 7d0a NoForksCP;....}. │ │ │ -00021540: 0909 0970 7269 6e74 204f 5554 2022 636f ...print OUT "co │ │ │ -00021550: 6d70 7265 7373 2024 6469 6765 7374 5c6e mpress $digest\n │ │ │ -00021560: 2220 2e0a 0909 0920 2020 2022 2474 6172 " ..... "$tar │ │ │ -00021570: 6765 7444 6972 2f24 7265 6c50 6174 682f getDir/$relPath/ │ │ │ -00021580: 2462 6c6f 636b 4e61 6d65 5c6e 223b 0a09 $blockName\n";.. │ │ │ -00021590: 0909 7075 7368 2040 6e65 774d 4435 6c69 ..push @newMD5li │ │ │ -000215a0: 6e65 2c0a 0909 0920 2020 2022 2464 6967 ne,.... "$dig │ │ │ -000215b0: 6573 7420 2463 6f6d 7072 6573 7342 6c6f est $compressBlo │ │ │ -000215c0: 636b 2024 7265 6c50 6174 682f 2462 6c6f ck $relPath/$blo │ │ │ -000215d0: 636b 4e61 6d65 2470 6622 3b0a 0909 2020 ckName$pf";... │ │ │ -000215e0: 2020 7d0a 0909 2020 2020 656c 7365 0a09 }... else.. │ │ │ -000215f0: 0920 2020 207b 0a09 0909 6966 2028 2463 . {....if ($c │ │ │ -00021600: 6f6d 7072 6573 7342 6c6f 636b 2065 7120 ompressBlock eq │ │ │ -00021610: 2763 2729 0a09 0909 7b0a 2370 7269 6e74 'c')....{.#print │ │ │ -00021620: 2022 2d31 332d 2063 6f6d 7072 6573 7342 "-13- compressB │ │ │ -00021630: 6c6f 636b 203d 2063 2c20 706f 7374 6669 lock = c, postfi │ │ │ -00021640: 7820 3d20 2470 6f73 7466 6978 5c6e 223b x = $postfix\n"; │ │ │ -00021650: 0a09 0909 2020 2020 6966 2028 2464 6972 .... if ($dir │ │ │ -00021660: 6563 7420 616e 6420 2463 6f6d 7072 6573 ect and $compres │ │ │ -00021670: 7343 6f6d 6d61 6e64 2065 7120 2762 7a69 sCommand eq 'bzi │ │ │ -00021680: 7032 2729 0a09 0909 2020 2020 7b0a 0909 p2').... {... │ │ │ -00021690: 0909 6d79 2024 627a 203d 206e 6577 2049 ..my $bz = new I │ │ │ -000216a0: 4f3a 3a43 6f6d 7072 6573 733a 3a42 7a69 O::Compress::Bzi │ │ │ -000216b0: 7032 280a 0909 0909 2020 2020 2224 7461 p2(..... "$ta │ │ │ -000216c0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi │ │ │ -000216d0: 6c65 2470 6f73 7466 6978 222c 0a09 0909 le$postfix",.... │ │ │ -000216e0: 0920 2020 2042 6c6f 636b 5369 7a65 3130 . BlockSize10 │ │ │ -000216f0: 304b 203d 3e20 3929 3b0a 0909 0909 756e 0K => 9);.....un │ │ │ -00021700: 6c65 7373 2028 2462 7a2d 3e73 7973 7772 less ($bz->syswr │ │ │ -00021710: 6974 6528 2462 7566 6665 7229 290a 0909 ite($buffer))... │ │ │ -00021720: 0909 7b0a 0909 0909 2020 2020 2470 724c ..{..... $prL │ │ │ -00021730: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00021740: 2720 3d3e 2027 4527 2c0a 0909 0909 0909 ' => 'E',....... │ │ │ -00021750: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ -00021760: 205b 2277 7269 7469 6e67 2063 6f6d 7072 ["writing compr │ │ │ -00021770: 6573 7365 6420 6461 7461 2066 6169 6c65 essed data faile │ │ │ -00021780: 6420 2220 2e0a 0909 0920 2020 223c 2474 d " ..... "<$t │ │ │ -00021790: 6172 6765 7444 6972 2f24 626c 6f63 6b46 argetDir/$blockF │ │ │ -000217a0: 696c 6524 706f 7374 6669 783e 225d 293b ile$postfix>"]); │ │ │ -000217b0: 0a09 0909 097d 0a09 0909 0924 627a 2d3e .....}.....$bz-> │ │ │ -000217c0: 666c 7573 6828 293b 0a09 0909 0924 627a flush();.....$bz │ │ │ -000217d0: 2d3e 656f 6628 293b 0a0a 0909 0909 2473 ->eof();......$s │ │ │ -000217e0: 7461 7453 697a 654e 6577 202b 3d0a 0909 tatSizeNew +=... │ │ │ -000217f0: 0909 2020 2020 2873 7461 7428 2224 7461 .. (stat("$ta │ │ │ -00021800: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi │ │ │ -00021810: 6c65 2470 6f73 7466 6978 2229 295b 375d le$postfix"))[7] │ │ │ -00021820: 207c 7c20 303b 0a09 0909 2020 2020 7d0a || 0;.... }. │ │ │ -00021830: 0909 0920 2020 2065 6c73 650a 0909 0920 ... else.... │ │ │ -00021840: 2020 207b 0a23 7072 696e 7420 2243 5c6e {.#print "C\n │ │ │ -00021850: 223b 0a09 0909 0924 7061 7261 6c46 6f72 ";.....$paralFor │ │ │ -00021860: 6b2d 3e61 6464 5f6e 6f62 6c6f 636b 280a k->add_noblock(. │ │ │ -00021870: 0909 0909 2020 2020 272d 6675 6e63 7469 .... '-functi │ │ │ -00021880: 6f6e 2720 3d3e 205c 2663 6f6d 7072 6573 on' => \&compres │ │ │ -00021890: 734f 6e65 426c 6f63 6b2c 0a09 0909 0920 sOneBlock,..... │ │ │ -000218a0: 2020 2027 2d66 756e 6350 6172 2720 3d3e '-funcPar' => │ │ │ -000218b0: 0a09 0909 0920 2020 205b 2462 7566 6665 ..... [$buffe │ │ │ -000218c0: 722c 0a09 0909 0920 2020 2020 2224 7461 r,..... "$ta │ │ │ -000218d0: 7267 6574 4469 722f 2462 6c6f 636b 4669 rgetDir/$blockFi │ │ │ -000218e0: 6c65 2470 6f73 7466 6978 222c 0a09 0909 le$postfix",.... │ │ │ -000218f0: 0920 2020 2020 2463 6f6d 7072 6573 7343 . $compressC │ │ │ -00021900: 6f6d 6d61 6e64 2c0a 0909 0909 2020 2020 ommand,..... │ │ │ -00021910: 2024 636f 6d70 7265 7373 4f70 7469 6f6e $compressOption │ │ │ -00021920: 732c 0a09 0909 0920 2020 2020 2470 724c s,..... $prL │ │ │ -00021930: 6f67 2c20 2474 6d70 6469 725d 2c0a 0909 og, $tmpdir],... │ │ │ -00021940: 0909 2020 2020 272d 696e 666f 2720 3d3e .. '-info' => │ │ │ -00021950: 205b 2464 6967 6573 742c 0a09 0909 0909 [$digest,...... │ │ │ -00021960: 0922 2472 656c 5061 7468 2f24 626c 6f63 ."$relPath/$bloc │ │ │ -00021970: 6b4e 616d 6522 2c0a 0909 0909 0909 2470 kName",.......$p │ │ │ -00021980: 6f73 7466 6978 5d29 3b0a 0909 0909 2b2b ostfix]);.....++ │ │ │ -00021990: 2473 7461 744e 6f46 6f72 6b73 436f 6d70 $statNoForksComp │ │ │ -000219a0: 7265 7373 3b0a 0909 0920 2020 207d 0a09 ress;.... }.. │ │ │ -000219b0: 0909 2020 2020 7075 7368 2040 6e65 774d .. push @newM │ │ │ -000219c0: 4435 6c69 6e65 2c0a 0909 0909 2224 6469 D5line,....."$di │ │ │ -000219d0: 6765 7374 2024 636f 6d70 7265 7373 426c gest $compressBl │ │ │ -000219e0: 6f63 6b20 2472 656c 5061 7468 2f24 626c ock $relPath/$bl │ │ │ -000219f0: 6f63 6b4e 616d 6524 706f 7374 6669 7822 ockName$postfix" │ │ │ -00021a00: 3b0a 0909 097d 0a09 0909 656c 7365 0a09 ;....}....else.. │ │ │ -00021a10: 0909 7b0a 2370 7269 6e74 2022 2d31 342d ..{.#print "-14- │ │ │ -00021a20: 2063 6f6d 7072 6573 7342 6c6f 636b 203d compressBlock = │ │ │ -00021a30: 2075 2020 2f2f 2f20 2020 6469 7265 6374 u /// direct │ │ │ -00021a40: 203d 2024 6469 7265 6374 5c6e 223b 0a09 = $direct\n";.. │ │ │ -00021a50: 0909 2020 2020 6966 2028 2464 6972 6563 .. if ($direc │ │ │ -00021a60: 7429 0a09 0909 2020 2020 7b0a 2370 7269 t).... {.#pri │ │ │ -00021a70: 6e74 2022 2d31 342e 312d 2066 696c 653d nt "-14.1- file= │ │ │ -00021a80: 3c24 7461 7267 6574 4469 722f 2462 6c6f <$targetDir/$blo │ │ │ -00021a90: 636b 4669 6c65 3e5c 6e22 3b0a 0909 0909 ckFile>\n";..... │ │ │ -00021aa0: 3a3a 636f 7079 4f6e 6542 6c6f 636b 2824 ::copyOneBlock($ │ │ │ -00021ab0: 6275 6666 6572 2c20 2224 7461 7267 6574 buffer, "$target │ │ │ -00021ac0: 4469 722f 2462 6c6f 636b 4669 6c65 222c Dir/$blockFile", │ │ │ -00021ad0: 0a09 0909 0909 2020 2020 2020 2024 7072 ...... $pr │ │ │ -00021ae0: 4c6f 6729 3b0a 0909 0909 2473 7461 7453 Log);.....$statS │ │ │ -00021af0: 697a 654e 6577 202b 3d20 2873 7461 7428 izeNew += (stat( │ │ │ -00021b00: 2224 7461 7267 6574 4469 722f 2462 6c6f "$targetDir/$blo │ │ │ -00021b10: 636b 4669 6c65 2229 295b 375d 207c 7c20 ckFile"))[7] || │ │ │ -00021b20: 303b 0a09 0909 2020 2020 7d0a 0909 0920 0;.... }.... │ │ │ -00021b30: 2020 2065 6c73 650a 0909 0920 2020 207b else.... { │ │ │ -00021b40: 0a23 7072 696e 7420 2244 5c6e 223b 0a09 .#print "D\n";.. │ │ │ -00021b50: 0909 0924 7061 7261 6c46 6f72 6b2d 3e61 ...$paralFork->a │ │ │ -00021b60: 6464 5f6e 6f62 6c6f 636b 2827 2d66 756e dd_noblock('-fun │ │ │ -00021b70: 6374 696f 6e27 203d 3e20 5c26 636f 7079 ction' => \© │ │ │ -00021b80: 4f6e 6542 6c6f 636b 2c0a 0909 0909 0909 OneBlock,....... │ │ │ -00021b90: 0927 2d66 756e 6350 6172 2720 3d3e 0a09 .'-funcPar' =>.. │ │ │ -00021ba0: 0909 0909 0909 5b24 6275 6666 6572 2c0a ......[$buffer,. │ │ │ -00021bb0: 0909 0909 0909 0920 2224 7461 7267 6574 ....... "$target │ │ │ -00021bc0: 4469 722f 2462 6c6f 636b 4669 6c65 222c Dir/$blockFile", │ │ │ -00021bd0: 0a09 0909 0909 0909 2024 7072 4c6f 675d ........ $prLog] │ │ │ -00021be0: 2c0a 0909 0909 0909 0927 2d69 6e66 6f27 ,........'-info' │ │ │ -00021bf0: 203d 3e20 5b24 6469 6765 7374 2c0a 0909 => [$digest,... │ │ │ -00021c00: 0909 0909 0920 2020 2020 2020 2224 7265 ..... "$re │ │ │ -00021c10: 6c50 6174 682f 2462 6c6f 636b 4e61 6d65 lPath/$blockName │ │ │ -00021c20: 222c 0a09 0909 0909 0909 0920 2020 2027 ",......... ' │ │ │ -00021c30: 275d 293b 0a09 0909 2020 2020 2b2b 2473 ']);.... ++$s │ │ │ -00021c40: 7461 744e 6f46 6f72 6b73 4350 3b0a 0909 tatNoForksCP;... │ │ │ -00021c50: 0920 2020 207d 0a09 0909 2020 2020 7075 . }.... pu │ │ │ -00021c60: 7368 2040 6e65 774d 4435 6c69 6e65 2c0a sh @newMD5line,. │ │ │ -00021c70: 0909 0909 2224 6469 6765 7374 2024 636f ...."$digest $co │ │ │ -00021c80: 6d70 7265 7373 426c 6f63 6b20 2472 656c mpressBlock $rel │ │ │ -00021c90: 5061 7468 2f24 626c 6f63 6b4e 616d 6522 Path/$blockName" │ │ │ -00021ca0: 3b0a 0909 097d 0a09 0920 2020 207d 0a23 ;....}... }.# │ │ │ -00021cb0: 7072 696e 7420 222d 3135 2d20 6d64 3520 print "-15- md5 │ │ │ -00021cc0: 2472 656c 5061 7468 2f24 626c 6f63 6b4e $relPath/$blockN │ │ │ -00021cd0: 616d 655c 6e22 3b0a 0909 7d0a 0909 2474 ame\n";...}...$t │ │ │ -00021ce0: 696e 7953 6368 6564 2d3e 7265 7365 7428 inySched->reset( │ │ │ -00021cf0: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e │ │ │ -00021d00: 6c73 650a 0920 2020 207b 0a09 0924 6a6f lse.. {...$jo │ │ │ -00021d10: 6254 6f44 6f20 3d20 303b 0a09 2020 2020 bToDo = 0;.. │ │ │ -00021d20: 7d0a 097d 0a0a 0923 2323 2323 2323 2323 }..}...######### │ │ │ -00021d30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00021d40: 2323 2323 0a09 2474 696e 7953 6368 6564 ####..$tinySched │ │ │ -00021d50: 2d3e 7761 6974 2829 3b0a 0a09 2470 6172 ->wait();...$par │ │ │ -00021d60: 466f 726b 546f 446f 203d 2024 7061 7261 ForkToDo = $para │ │ │ -00021d70: 6c46 6f72 6b2d 3e67 6574 4e6f 5573 6564 lFork->getNoUsed │ │ │ -00021d80: 456e 7472 6965 7328 293b 0a20 2020 207d Entries();. } │ │ │ -00021d90: 0a0a 2020 2020 6966 2028 2466 696c 6549 .. if ($fileI │ │ │ -00021da0: 6e29 0a20 2020 207b 0a09 6d79 2024 6f75 n). {..my $ou │ │ │ -00021db0: 7420 3d20 2466 696c 6549 6e2d 3e67 6574 t = $fileIn->get │ │ │ -00021dc0: 5354 4445 5252 2829 3b0a 0969 6620 2840 STDERR();..if (@ │ │ │ -00021dd0: 246f 7574 290a 097b 0a09 2020 2020 2470 $out)..{.. $p │ │ │ -00021de0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00021df0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -00021e00: 2027 2d73 7472 2720 3d3e 205b 2272 6561 '-str' => ["rea │ │ │ -00021e10: 6469 6e67 2066 726f 6d20 2473 6f75 7263 ding from $sourc │ │ │ -00021e20: 6544 6972 2067 656e 6572 6174 6564 222c eDir generated", │ │ │ -00021e30: 0a09 0909 0920 2020 2020 4024 6f75 745d ..... @$out] │ │ │ -00021e40: 293b 0a09 2020 2020 2b2b 246e 6f45 7272 );.. ++$noErr │ │ │ -00021e50: 6f72 733b 0a09 2020 2020 7265 7475 726e ors;.. return │ │ │ -00021e60: 2030 3b0a 097d 0a09 2466 696c 6549 6e2d 0;..}..$fileIn- │ │ │ -00021e70: 3e63 6c6f 7365 2829 3b0a 0924 6669 6c65 >close();..$file │ │ │ -00021e80: 496e 203d 2075 6e64 6566 3b0a 2020 2020 In = undef;. │ │ │ -00021e90: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. { │ │ │ -00021ea0: 0a09 636c 6f73 6528 4649 4c45 293b 0a20 ..close(FILE);. │ │ │ -00021eb0: 2020 207d 0a0a 0a20 2020 2069 6620 2824 }... if ($ │ │ │ -00021ec0: 6374 696d 6520 213d 2030 2920 2020 2023 ctime != 0) # │ │ │ -00021ed0: 206e 6f74 2061 2064 6576 6963 650a 2020 not a device. │ │ │ -00021ee0: 2020 7b0a 0975 6e6c 6573 7320 282d 6520 {..unless (-e │ │ │ -00021ef0: 2473 6f75 7263 6544 6972 290a 097b 0a09 $sourceDir)..{.. │ │ │ -00021f00: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00021f10: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00021f20: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -00021f30: 205b 223c 2473 6f75 7263 6544 6972 3e20 ["<$sourceDir> │ │ │ -00021f40: 6465 6c65 7465 6420 6475 7269 6e67 2062 deleted during b │ │ │ -00021f50: 6163 6b75 7022 5d29 0a09 0975 6e6c 6573 ackup"])...unles │ │ │ -00021f60: 7320 6578 6973 7473 2024 7375 7070 7265 s exists $suppre │ │ │ -00021f70: 7373 5761 726e 696e 677b 2766 696c 6543 ssWarning{'fileC │ │ │ -00021f80: 6861 6e67 6527 7d3b 0a09 2020 2020 2b2b hange'};.. ++ │ │ │ -00021f90: 246e 6f45 7272 6f72 733b 0a09 7d0a 0965 $noErrors;..}..e │ │ │ -00021fa0: 6c73 650a 097b 0a09 2020 2020 6d79 2028 lse..{.. my ( │ │ │ -00021fb0: 2461 6374 4d74 696d 652c 2024 6163 7443 $actMtime, $actC │ │ │ -00021fc0: 7469 6d65 2920 3d20 2873 7461 7428 2473 time) = (stat($s │ │ │ -00021fd0: 6f75 7263 6544 6972 2929 5b39 2c31 305d ourceDir))[9,10] │ │ │ -00021fe0: 3b0a 0920 2020 2069 6620 2824 6163 744d ;.. if ($actM │ │ │ -00021ff0: 7469 6d65 2021 3d20 246d 7469 6d65 206f time != $mtime o │ │ │ -00022000: 7220 2461 6374 4374 696d 6520 213d 2024 r $actCtime != $ │ │ │ -00022010: 6374 696d 6529 0a09 2020 2020 7b0a 0909 ctime).. {... │ │ │ -00022020: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00022030: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ -00022040: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00022050: 205b 223c 2473 6f75 7263 6544 6972 3e20 ["<$sourceDir> │ │ │ -00022060: 6368 616e 6765 6420 6475 7269 6e67 2062 changed during b │ │ │ -00022070: 6163 6b75 7022 5d29 0a09 0920 2020 2075 ackup"])... u │ │ │ -00022080: 6e6c 6573 7320 6578 6973 7473 2024 7375 nless exists $su │ │ │ -00022090: 7070 7265 7373 5761 726e 696e 677b 2766 ppressWarning{'f │ │ │ -000220a0: 696c 6543 6861 6e67 6527 7d3b 0a09 092b ileChange'};...+ │ │ │ -000220b0: 2b24 6e6f 5761 726e 696e 6773 3b0a 0920 +$noWarnings;.. │ │ │ -000220c0: 2020 207d 0a09 7d0a 2020 2020 7d0a 0a23 }..}. }..# │ │ │ -000220d0: 2020 2020 6966 2028 6e6f 7420 246c 6174 if (not $lat │ │ │ -000220e0: 654c 696e 6b73 206f 7220 246d 6b64 6972 eLinks or $mkdir │ │ │ -000220f0: 4c61 7465 4c69 6e6b 7346 696c 6550 6174 LateLinksFilePat │ │ │ -00022100: 6829 0a20 2020 207b 0a09 6d79 2024 6373 h). {..my $cs │ │ │ -00022110: 6620 3d20 2224 7461 7267 6574 4469 722f f = "$targetDir/ │ │ │ -00022120: 2472 656c 5061 7468 2f24 626c 6f63 6b43 $relPath/$blockC │ │ │ -00022130: 6865 636b 5375 6d46 696c 652e 627a 3222 heckSumFile.bz2" │ │ │ -00022140: 3b0a 096d 7920 2463 7366 5772 6974 6520 ;..my $csfWrite │ │ │ -00022150: 3d20 7069 7065 546f 466f 726b 2d3e 6e65 = pipeToFork->ne │ │ │ -00022160: 7728 272d 6578 6563 2720 3d3e 2027 627a w('-exec' => 'bz │ │ │ -00022170: 6970 3227 2c0a 0909 0909 2020 2020 2020 ip2',..... │ │ │ -00022180: 2027 2d73 7464 6f75 7427 203d 3e20 2463 '-stdout' => $c │ │ │ -00022190: 7366 2c0a 0909 0909 2020 2020 2020 2027 sf,..... ' │ │ │ -000221a0: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 2022 -outRandom' => " │ │ │ -000221b0: 2474 6d70 6469 722f 7374 6275 5069 7065 $tmpdir/stbuPipe │ │ │ -000221c0: 546f 3130 2d22 2c0a 0909 0909 2020 2020 To10-",..... │ │ │ -000221d0: 2020 2027 2d64 656c 5374 646f 7574 2720 '-delStdout' │ │ │ -000221e0: 3d3e 2027 6e6f 272c 0a09 0909 0920 2020 => 'no',..... │ │ │ -000221f0: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ -00022200: 2470 724c 6f67 293b 0a09 2b2b 2473 7461 $prLog);..++$sta │ │ │ -00022210: 744e 6f46 6f72 6b73 436f 6d70 7265 7373 tNoForksCompress │ │ │ -00022220: 3b0a 0a09 6d79 2028 246c 696e 6529 3b0a ;...my ($line);. │ │ │ -00022230: 0966 6f72 6561 6368 2024 6c69 6e65 2028 .foreach $line ( │ │ │ -00022240: 406e 6577 4d44 356c 696e 6529 0a09 7b0a @newMD5line)..{. │ │ │ -00022250: 0920 2020 2023 2077 7269 7465 2074 6f20 . # write to │ │ │ -00022260: 7465 6d70 6f72 6172 7920 6669 6c65 0a09 temporary file.. │ │ │ -00022270: 2020 2020 7072 696e 7420 4f55 5420 2224 print OUT "$ │ │ │ -00022280: 6c69 6e65 5c6e 223b 0a09 2020 2020 2377 line\n";.. #w │ │ │ -00022290: 7269 7465 2074 6f20 626c 6f63 6b20 6c6f rite to block lo │ │ │ -000222a0: 6361 6c20 2e6d 6435 4368 6563 6b53 756d cal .md5CheckSum │ │ │ -000222b0: 0a09 2020 2020 2463 7366 5772 6974 652d .. $csfWrite- │ │ │ -000222c0: 3e70 7269 6e74 2822 246c 696e 655c 6e22 >print("$line\n" │ │ │ -000222d0: 293b 0a09 7d0a 0a09 2463 7366 5772 6974 );..}...$csfWrit │ │ │ -000222e0: 652d 3e77 6169 7428 293b 0a09 6d79 2024 e->wait();..my $ │ │ │ -000222f0: 6f75 7420 3d20 2463 7366 5772 6974 652d out = $csfWrite- │ │ │ -00022300: 3e67 6574 5354 4445 5252 2829 3b0a 0969 >getSTDERR();..i │ │ │ -00022310: 6620 2840 246f 7574 290a 097b 0a09 2020 f (@$out)..{.. │ │ │ -00022320: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00022330: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00022340: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00022350: 2262 7a69 7032 2072 6570 6f72 7473 2065 "bzip2 reports e │ │ │ -00022360: 7272 6f72 733a 222c 0a09 0909 0920 2020 rrors:",..... │ │ │ -00022370: 2020 4024 6f75 745d 293b 0a09 2020 2020 @$out]);.. │ │ │ -00022380: 7265 7475 726e 2030 3b0a 097d 0a09 2463 return 0;..}..$c │ │ │ -00022390: 7366 5772 6974 652d 3e63 6c6f 7365 2829 sfWrite->close() │ │ │ -000223a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 2027 ;. }.. # ' │ │ │ -000223b0: 6d64 3520 6f66 2077 686f 6c65 2066 696c md5 of whole fil │ │ │ -000223c0: 6527 2c20 2773 697a 6520 6f66 206f 7269 e', 'size of ori │ │ │ -000223d0: 6727 2c20 2773 697a 6520 6f66 2062 6c6f g', 'size of blo │ │ │ -000223e0: 636b 7327 0a20 2020 206d 7920 246d 6435 cks'. my $md5 │ │ │ -000223f0: 203d 2024 6d64 3541 6c6c 2d3e 6865 7864 = $md5All->hexd │ │ │ -00022400: 6967 6573 7428 293b 0a20 2020 2070 7269 igest();. pri │ │ │ -00022410: 6e74 204f 5554 2022 616c 6c4d 4435 2024 nt OUT "allMD5 $ │ │ │ -00022420: 6d64 3520 2473 7461 7453 697a 654f 7269 md5 $statSizeOri │ │ │ -00022430: 6720 2473 7461 7453 697a 654e 6577 2022 g $statSizeNew " │ │ │ -00022440: 202e 0a09 2224 7374 6174 4e6f 466f 726b ..."$statNoFork │ │ │ -00022450: 7343 5020 2473 7461 744e 6f46 6f72 6b73 sCP $statNoForks │ │ │ -00022460: 436f 6d70 7265 7373 2024 626c 6f63 6b4e Compress $blockN │ │ │ -00022470: 6f20 2473 7461 744e 6f4c 6174 654c 696e o $statNoLateLin │ │ │ -00022480: 6b73 2022 202e 0a09 2224 6e6f 5761 726e ks " ..."$noWarn │ │ │ -00022490: 696e 6773 2024 6e6f 4572 726f 7273 2024 ings $noErrors $ │ │ │ -000224a0: 6e6f 426c 6f63 6b43 6f6d 7072 4368 6563 noBlockComprChec │ │ │ -000224b0: 6b43 6f6d 7072 2024 6e6f 426c 6f63 6b43 kCompr $noBlockC │ │ │ -000224c0: 6f6d 7072 4368 6563 6b43 705c 6e22 3b0a omprCheckCp\n";. │ │ │ -000224d0: 2020 2020 636c 6f73 6528 4f55 5429 3b0a close(OUT);. │ │ │ -000224e0: 0a20 2020 2072 6574 7572 6e20 303b 0a7d . return 0;.} │ │ │ -000224f0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -00022500: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00022510: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00022520: 2323 2323 230a 2320 7363 6872 6569 6274 #####.# schreibt │ │ │ -00022530: 206e 6575 6520 4d65 7461 2d49 6e66 6f72 neue Meta-Infor │ │ │ -00022540: 6d61 7469 6f6e 656e 2069 6e20 6462 6d73 mationen in dbms │ │ │ -00022550: 202b 202e 6d64 3543 6865 636b 5375 6d0a + .md5CheckSum. │ │ │ -00022560: 7061 636b 6167 6520 616b 7446 696c 656e package aktFilen │ │ │ -00022570: 616d 653b 0a0a 7375 6220 6e65 770a 7b0a ame;..sub new.{. │ │ │ -00022580: 2020 2020 6d79 2024 636c 6173 7320 3d20 my $class = │ │ │ -00022590: 7368 6966 743b 0a20 2020 206d 7920 2473 shift;. my $s │ │ │ -000225a0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m │ │ │ -000225b0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = (' │ │ │ -000225c0: 2d69 6e66 6f46 696c 6527 2020 2020 2020 -infoFile' │ │ │ -000225d0: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -000225e0: 2020 272d 626c 6f63 6b43 6865 636b 5375 '-blockCheckSu │ │ │ -000225f0: 6d46 696c 6527 203d 3e20 756e 6465 662c mFile' => undef, │ │ │ -00022600: 0a09 0920 2020 2027 2d63 6f6d 7072 6573 ... '-compres │ │ │ -00022610: 734d 4435 4669 6c65 2720 3d3e 2075 6e64 sMD5File' => und │ │ │ -00022620: 6566 2c0a 0909 2020 2020 272d 736f 7572 ef,... '-sour │ │ │ -00022630: 6365 4469 7227 2020 2020 2020 203d 3e20 ceDir' => │ │ │ -00022640: 756e 6465 662c 0a09 0920 2020 2027 2d66 undef,... '-f │ │ │ -00022650: 6f6c 6c6f 774c 696e 6b73 2720 2020 2020 ollowLinks' │ │ │ -00022660: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -00022670: 272d 636f 6d70 7265 7373 2720 2020 2020 '-compress' │ │ │ -00022680: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -00022690: 2020 2027 2d75 6e63 6f6d 7072 6573 7327 '-uncompress' │ │ │ -000226a0: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,. │ │ │ -000226b0: 0909 2020 2020 272d 706f 7374 6669 7827 .. '-postfix' │ │ │ -000226c0: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde │ │ │ -000226d0: 662c 0a09 0920 2020 2027 2d65 7863 6570 f,... '-excep │ │ │ -000226e0: 7444 6972 7327 2020 2020 2020 3d3e 205b tDirs' => [ │ │ │ -000226f0: 5d2c 0a09 0920 2020 2027 2d69 6e63 6c75 ],... '-inclu │ │ │ -00022700: 6465 4469 7273 2720 2020 2020 3d3e 205b deDirs' => [ │ │ │ -00022710: 5d2c 0a09 0920 2020 2027 2d63 6f6d 7072 ],... '-compr │ │ │ -00022720: 5275 6c65 2720 2020 2020 2020 3d3e 205b Rule' => [ │ │ │ -00022730: 5d2c 0a09 0920 2020 2027 2d65 7863 6570 ],... '-excep │ │ │ -00022740: 7452 756c 6527 2020 2020 2020 3d3e 205b tRule' => [ │ │ │ -00022750: 5d2c 0a09 0920 2020 2027 2d69 6e63 6c75 ],... '-inclu │ │ │ -00022760: 6465 5275 6c65 2720 2020 2020 3d3e 205b deRule' => [ │ │ │ -00022770: 5d2c 0a09 0920 2020 2027 2d77 7269 7465 ],... '-write │ │ │ -00022780: 4578 636c 7564 654c 6f67 2720 3d3e 2075 ExcludeLog' => u │ │ │ -00022790: 6e64 6566 2c0a 0909 2020 2020 272d 6578 ndef,... '-ex │ │ │ -000227a0: 6365 7074 5479 7065 7327 2020 2020 203d ceptTypes' = │ │ │ -000227b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ -000227c0: 2d73 7065 6369 616c 5479 7065 4172 6368 -specialTypeArch │ │ │ -000227d0: 6976 6572 2720 3d3e 2075 6e64 6566 2c0a iver' => undef,. │ │ │ -000227e0: 0909 2020 2020 272d 6172 6368 6976 6554 .. '-archiveT │ │ │ -000227f0: 7970 6573 2720 2020 203d 3e20 756e 6465 ypes' => unde │ │ │ -00022800: 662c 0a09 0920 2020 2027 2d63 6865 636b f,... '-check │ │ │ -00022810: 426c 6f63 6b73 5275 6c65 2720 3d3e 205b BlocksRule' => [ │ │ │ -00022820: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -00022830: 426c 6f63 6b73 4253 2720 2020 3d3e 205b BlocksBS' => [ │ │ │ -00022840: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -00022850: 426c 6f63 6b73 436f 6d70 7227 3d3e 205b BlocksCompr'=> [ │ │ │ -00022860: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -00022870: 426c 6f63 6b73 5265 6164 2720 3d3e 205b BlocksRead' => [ │ │ │ -00022880: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -00022890: 4465 7669 6365 7327 2020 2020 3d3e 205b Devices' => [ │ │ │ -000228a0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -000228b0: 4465 7669 6365 7344 6972 2720 3d3e 205b DevicesDir' => [ │ │ │ -000228c0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -000228d0: 4465 7669 6365 7342 5327 2020 3d3e 205b DevicesBS' => [ │ │ │ -000228e0: 5d2c 0a09 0920 2020 2027 2d63 6865 636b ],... '-check │ │ │ -000228f0: 4465 7669 6365 7343 6f6d 7072 2720 3d3e DevicesCompr' => │ │ │ -00022900: 205b 5d2c 0a09 0920 2020 2027 2d6c 6174 [],... '-lat │ │ │ -00022910: 654c 696e 6b73 2720 2020 2020 2020 3d3e eLinks' => │ │ │ -00022920: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00022930: 6c6f 6749 6e42 6163 6b75 7044 6972 2720 logInBackupDir' │ │ │ -00022940: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -00022950: 2027 2d63 6f6d 7072 6573 734c 6f67 496e '-compressLogIn │ │ │ -00022960: 4261 636b 7570 4469 7227 203d 3e20 756e BackupDir' => un │ │ │ -00022970: 6465 662c 0a09 0920 2020 2027 2d6c 6f67 def,... '-log │ │ │ -00022980: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -00022990: 616d 6527 203d 3e20 756e 6465 662c 0a09 ame' => undef,.. │ │ │ -000229a0: 0920 2020 2027 2d61 6b74 4461 7465 2720 . '-aktDate' │ │ │ -000229b0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ -000229c0: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog' │ │ │ -000229d0: 2020 2020 2020 2020 2020 203d 3e20 756e => un │ │ │ -000229e0: 6465 662c 0a09 0920 2020 2027 2d63 686d def,... '-chm │ │ │ -000229f0: 6f64 4d44 3546 696c 6527 2020 2020 3d3e odMD5File' => │ │ │ -00022a00: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00022a10: 696e 6465 7844 6972 2720 2020 2020 2020 indexDir' │ │ │ -00022a20: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -00022a30: 2027 2d64 6562 7567 4d6f 6465 2720 2020 '-debugMode' │ │ │ -00022a40: 2020 2020 3d3e 2027 6e6f 2729 3b0a 0a20 => 'no');.. │ │ │ -00022a50: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec │ │ │ -00022a60: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\%params │ │ │ -00022a70: 2c20 5c40 5f2c 2027 616b 7446 696c 656e , \@_, 'aktFilen │ │ │ -00022a80: 616d 653a 3a6e 6577 272c 0a09 0909 205b ame::new',.... [ │ │ │ -00022a90: 272d 696e 666f 4669 6c65 272c 2027 2d62 '-infoFile', '-b │ │ │ -00022aa0: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile │ │ │ -00022ab0: 272c 0a09 0909 2020 272d 636f 6d70 7265 ',.... '-compre │ │ │ -00022ac0: 7373 4d44 3546 696c 6527 2c20 272d 736f ssMD5File', '-so │ │ │ -00022ad0: 7572 6365 4469 7227 2c20 272d 666f 6c6c urceDir', '-foll │ │ │ -00022ae0: 6f77 4c69 6e6b 7327 2c0a 0909 0920 2027 owLinks',.... ' │ │ │ -00022af0: 2d63 6f6d 7072 6573 7327 2c20 272d 756e -compress', '-un │ │ │ -00022b00: 636f 6d70 7265 7373 272c 2027 2d70 6f73 compress', '-pos │ │ │ -00022b10: 7466 6978 272c 0a09 0909 2020 272d 6578 tfix',.... '-ex │ │ │ -00022b20: 6365 7074 4469 7273 272c 2027 2d63 6f6d ceptDirs', '-com │ │ │ -00022b30: 7072 5275 6c65 272c 0a09 0909 2020 272d prRule',.... '- │ │ │ -00022b40: 696e 636c 7564 6544 6972 7327 2c20 272d includeDirs', '- │ │ │ -00022b50: 6578 6365 7074 5275 6c65 272c 2027 2d65 exceptRule', '-e │ │ │ -00022b60: 7863 6570 7454 7970 6573 272c 0a09 0909 xceptTypes',.... │ │ │ -00022b70: 2020 272d 7370 6563 6961 6c54 7970 6541 '-specialTypeA │ │ │ -00022b80: 7263 6869 7665 7227 2c20 272d 6172 6368 rchiver', '-arch │ │ │ -00022b90: 6976 6554 7970 6573 272c 0a09 0909 2020 iveTypes',.... │ │ │ -00022ba0: 272d 696e 636c 7564 6552 756c 6527 2c20 '-includeRule', │ │ │ -00022bb0: 272d 6368 6563 6b42 6c6f 636b 7352 756c '-checkBlocksRul │ │ │ -00022bc0: 6527 2c0a 0909 0920 2027 2d63 6865 636b e',.... '-check │ │ │ -00022bd0: 426c 6f63 6b73 4253 272c 2027 2d63 6865 BlocksBS', '-che │ │ │ -00022be0: 636b 426c 6f63 6b73 436f 6d70 7227 2c0a ckBlocksCompr',. │ │ │ -00022bf0: 0909 0920 2027 2d63 6865 636b 426c 6f63 ... '-checkBloc │ │ │ -00022c00: 6b73 5265 6164 272c 0a09 0909 2020 272d ksRead',.... '- │ │ │ -00022c10: 6368 6563 6b44 6576 6963 6573 4253 272c checkDevicesBS', │ │ │ -00022c20: 2027 2d63 6865 636b 4465 7669 6365 7327 '-checkDevices' │ │ │ -00022c30: 2c0a 0909 0920 2027 2d63 6865 636b 4465 ,.... '-checkDe │ │ │ -00022c40: 7669 6365 7344 6972 272c 0a09 0909 2020 vicesDir',.... │ │ │ -00022c50: 272d 6368 6563 6b44 6576 6963 6573 436f '-checkDevicesCo │ │ │ -00022c60: 6d70 7227 2c20 272d 616b 7444 6174 6527 mpr', '-aktDate' │ │ │ -00022c70: 2c0a 0909 0920 2027 2d70 724c 6f67 272c ,.... '-prLog', │ │ │ -00022c80: 2027 2d63 686d 6f64 4d44 3546 696c 6527 '-chmodMD5File' │ │ │ -00022c90: 2c20 272d 696e 6465 7844 6972 275d 293b , '-indexDir']); │ │ │ -00022ca0: 0a20 2020 2026 3a3a 7365 7450 6172 616d . &::setParam │ │ │ -00022cb0: 7344 6972 6563 7428 2473 656c 662c 205c sDirect($self, \ │ │ │ -00022cc0: 2570 6172 616d 7329 3b0a 0a20 2020 206d %params);.. m │ │ │ -00022cd0: 7920 2470 724c 6f67 203d 2024 7365 6c66 y $prLog = $self │ │ │ -00022ce0: 2d3e 7b27 7072 4c6f 6727 7d3b 0a0a 2020 ->{'prLog'};.. │ │ │ -00022cf0: 2020 6d79 2024 6578 6365 7074 5275 6c65 my $exceptRule │ │ │ -00022d00: 203d 2024 7365 6c66 2d3e 7b27 6578 6365 = $self->{'exce │ │ │ -00022d10: 7074 5275 6c65 277d 2d3e 6861 734c 696e ptRule'}->hasLin │ │ │ -00022d20: 6528 2920 3f0a 0922 2722 202e 206a 6f69 e() ?.."'" . joi │ │ │ -00022d30: 6e28 2227 2027 222c 2040 7b24 7365 6c66 n("' '", @{$self │ │ │ -00022d40: 2d3e 7b27 6578 6365 7074 5275 6c65 277d ->{'exceptRule'} │ │ │ -00022d50: 2d3e 6765 744c 696e 6528 297d 2920 2e20 ->getLine()}) . │ │ │ -00022d60: 2227 2220 3a20 2727 3b0a 2020 2020 6d79 "'" : '';. my │ │ │ -00022d70: 2024 696e 636c 7564 6552 756c 6520 3d20 $includeRule = │ │ │ -00022d80: 2473 656c 662d 3e7b 2769 6e63 6c75 6465 $self->{'include │ │ │ -00022d90: 5275 6c65 277d 2d3e 6861 734c 696e 6528 Rule'}->hasLine( │ │ │ -00022da0: 2920 3f0a 0922 2722 202e 206a 6f69 6e28 ) ?.."'" . join( │ │ │ -00022db0: 2227 2027 222c 2040 7b24 7365 6c66 2d3e "' '", @{$self-> │ │ │ -00022dc0: 7b27 696e 636c 7564 6552 756c 6527 7d2d {'includeRule'}- │ │ │ -00022dd0: 3e67 6574 4c69 6e65 2829 7d29 202e 2022 >getLine()}) . " │ │ │ -00022de0: 2722 203a 2027 273b 0a20 2020 206d 7920 '" : '';. my │ │ │ -00022df0: 2463 6f6d 7072 5275 6c65 203d 2024 7365 $comprRule = $se │ │ │ -00022e00: 6c66 2d3e 7b27 636f 6d70 7252 756c 6527 lf->{'comprRule' │ │ │ -00022e10: 7d2d 3e68 6173 4c69 6e65 2829 203f 0a09 }->hasLine() ?.. │ │ │ -00022e20: 2227 2220 2e20 6a6f 696e 2822 2720 2722 "'" . join("' '" │ │ │ -00022e30: 2c20 407b 2473 656c 662d 3e7b 2763 6f6d , @{$self->{'com │ │ │ -00022e40: 7072 5275 6c65 277d 2d3e 6765 744c 696e prRule'}->getLin │ │ │ -00022e50: 6528 297d 2920 2e20 2227 2220 3a20 2727 e()}) . "'" : '' │ │ │ -00022e60: 3b0a 2020 2020 6d79 2024 6578 6365 7074 ;. my $except │ │ │ -00022e70: 4469 7273 203d 2040 7b24 7365 6c66 2d3e Dirs = @{$self-> │ │ │ -00022e80: 7b27 6578 6365 7074 4469 7273 277d 7d20 {'exceptDirs'}} │ │ │ -00022e90: 3f0a 0922 2722 202e 206a 6f69 6e28 2227 ?.."'" . join("' │ │ │ -00022ea0: 2027 222c 2040 7b24 7365 6c66 2d3e 7b27 '", @{$self->{' │ │ │ -00022eb0: 6578 6365 7074 4469 7273 277d 7d29 202e exceptDirs'}}) . │ │ │ -00022ec0: 2022 2722 203a 2027 273b 0a20 2020 2024 "'" : '';. $ │ │ │ -00022ed0: 6578 6365 7074 4469 7273 203d 7e20 732f exceptDirs =~ s/ │ │ │ -00022ee0: 5c5c 2f5c 5c35 432f 6f67 3b20 2020 2023 \\/\\5C/og; # │ │ │ -00022ef0: 2027 5c5c 2720 7374 6f72 6564 2061 7320 '\\' stored as │ │ │ -00022f00: 5c35 430a 2020 2020 2465 7863 6570 7444 \5C. $exceptD │ │ │ -00022f10: 6972 7320 3d7e 2073 2f5c 6e2f 5c5c 3041 irs =~ s/\n/\\0A │ │ │ -00022f20: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\n' s │ │ │ -00022f30: 746f 7265 6420 6173 205c 3041 0a20 2020 tored as \0A. │ │ │ -00022f40: 206d 7920 2469 6e63 6c75 6465 4469 7273 my $includeDirs │ │ │ -00022f50: 203d 2040 7b24 7365 6c66 2d3e 7b27 696e = @{$self->{'in │ │ │ -00022f60: 636c 7564 6544 6972 7327 7d7d 203f 0a09 cludeDirs'}} ?.. │ │ │ -00022f70: 2227 2220 2e20 6a6f 696e 2822 2720 2722 "'" . join("' '" │ │ │ -00022f80: 2c20 407b 2473 656c 662d 3e7b 2769 6e63 , @{$self->{'inc │ │ │ -00022f90: 6c75 6465 4469 7273 277d 7d29 202e 2022 ludeDirs'}}) . " │ │ │ -00022fa0: 2722 203a 2027 273b 0a20 2020 2024 696e '" : '';. $in │ │ │ -00022fb0: 636c 7564 6544 6972 7320 3d7e 2073 2f5c cludeDirs =~ s/\ │ │ │ -00022fc0: 5c2f 5c5c 3543 2f6f 673b 2020 2020 2320 \/\\5C/og; # │ │ │ -00022fd0: 275c 5c27 2073 746f 7265 6420 6173 205c '\\' stored as \ │ │ │ -00022fe0: 3543 0a20 2020 2024 696e 636c 7564 6544 5C. $includeD │ │ │ -00022ff0: 6972 7320 3d7e 2073 2f5c 6e2f 5c5c 3041 irs =~ s/\n/\\0A │ │ │ -00023000: 2f73 6f67 3b20 2020 2320 275c 6e27 2073 /sog; # '\n' s │ │ │ -00023010: 746f 7265 6420 6173 205c 3041 0a20 2020 tored as \0A. │ │ │ -00023020: 206d 7920 2465 7863 6570 7454 7970 6573 my $exceptTypes │ │ │ -00023030: 203d 2024 7365 6c66 2d3e 7b27 6578 6365 = $self->{'exce │ │ │ -00023040: 7074 5479 7065 7327 7d20 3f20 2473 656c ptTypes'} ? $sel │ │ │ -00023050: 662d 3e7b 2765 7863 6570 7454 7970 6573 f->{'exceptTypes │ │ │ -00023060: 277d 203a 2027 273b 0a20 2020 2069 6620 '} : '';. if │ │ │ -00023070: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc │ │ │ -00023080: 6869 7665 7229 0a20 2020 207b 0a09 2461 hiver). {..$a │ │ │ -00023090: 7263 6869 7665 5479 7065 7320 3d20 2727 rchiveTypes = '' │ │ │ -000230a0: 2075 6e6c 6573 7320 2461 7263 6869 7665 unless $archive │ │ │ -000230b0: 5479 7065 733b 0a20 2020 207d 0a20 2020 Types;. }. │ │ │ -000230c0: 2065 6c73 650a 2020 2020 7b0a 0924 7370 else. {..$sp │ │ │ -000230d0: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive │ │ │ -000230e0: 7220 3d20 2727 3b0a 0924 6172 6368 6976 r = '';..$archiv │ │ │ -000230f0: 6554 7970 6573 203d 2027 273b 0a20 2020 eTypes = '';. │ │ │ -00023100: 207d 0a20 2020 206d 7920 2473 6420 3d20 }. my $sd = │ │ │ -00023110: 2473 656c 662d 3e7b 2773 6f75 7263 6544 $self->{'sourceD │ │ │ -00023120: 6972 277d 3b0a 2020 2020 2473 6420 3d7e ir'};. $sd =~ │ │ │ -00023130: 2073 2f5c 5c2f 5c5c 3543 2f6f 673b 2020 s/\\/\\5C/og; │ │ │ -00023140: 2020 2320 275c 5c27 2073 746f 7265 6420 # '\\' stored │ │ │ -00023150: 6173 205c 3543 0a20 2020 2024 7364 203d as \5C. $sd = │ │ │ -00023160: 7e20 732f 5c6e 2f5c 5c30 412f 736f 673b ~ s/\n/\\0A/sog; │ │ │ -00023170: 2020 2023 2027 5c6e 2720 7374 6f72 6564 # '\n' stored │ │ │ -00023180: 2061 7320 5c30 410a 2020 2020 2473 6420 as \0A. $sd │ │ │ -00023190: 3d7e 2073 2f5c 272f 5c5c 5c27 2f73 6f67 =~ s/\'/\\\'/sog │ │ │ -000231a0: 3b20 2020 2320 2720 7374 6f72 6564 2061 ; # ' stored a │ │ │ -000231b0: 7320 5c27 0a20 2020 206d 7920 246c 6f67 s \'. my $log │ │ │ -000231c0: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -000231d0: 616d 6520 3d20 2473 656c 662d 3e7b 276c ame = $self->{'l │ │ │ -000231e0: 6f67 496e 4261 636b 7570 4469 7246 696c ogInBackupDirFil │ │ │ -000231f0: 654e 616d 6527 7d3b 0a20 2020 2024 6c6f eName'};. $lo │ │ │ -00023200: 6749 6e42 6163 6b75 7044 6972 4669 6c65 gInBackupDirFile │ │ │ -00023210: 4e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 Name =~ s/\\/\\5 │ │ │ -00023220: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\' │ │ │ -00023230: 7374 6f72 6564 2061 7320 5c35 430a 2020 stored as \5C. │ │ │ -00023240: 2020 246c 6f67 496e 4261 636b 7570 4469 $logInBackupDi │ │ │ -00023250: 7246 696c 654e 616d 6520 3d7e 2073 2f5c rFileName =~ s/\ │ │ │ -00023260: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\0A/sog; # │ │ │ -00023270: 275c 6e27 2073 746f 7265 6420 6173 205c '\n' stored as \ │ │ │ -00023280: 3041 0a20 2020 2024 6c6f 6749 6e42 6163 0A. $logInBac │ │ │ -00023290: 6b75 7044 6972 4669 6c65 4e61 6d65 203d kupDirFileName = │ │ │ -000232a0: 7e20 732f 5c27 2f5c 5c5c 272f 736f 673b ~ s/\'/\\\'/sog; │ │ │ -000232b0: 2020 2023 2027 2073 746f 7265 6420 6173 # ' stored as │ │ │ -000232c0: 205c 270a 0a20 2020 206d 7920 2840 626c \'.. my (@bl │ │ │ -000232d0: 6f63 6b73 5275 6c65 732c 2024 6929 3b0a ocksRules, $i);. │ │ │ -000232e0: 2020 2020 6d79 2024 6368 6563 6b42 6c6f my $checkBlo │ │ │ -000232f0: 636b 7352 756c 6520 3d20 2473 656c 662d cksRule = $self- │ │ │ -00023300: 3e7b 2763 6865 636b 426c 6f63 6b73 5275 >{'checkBlocksRu │ │ │ -00023310: 6c65 277d 3b0a 2020 2020 6d79 2024 6368 le'};. my $ch │ │ │ -00023320: 6563 6b42 6c6f 636b 7342 5320 3d20 2473 eckBlocksBS = $s │ │ │ -00023330: 656c 662d 3e7b 2763 6865 636b 426c 6f63 elf->{'checkBloc │ │ │ -00023340: 6b73 4253 277d 3b0a 2020 2020 666f 7265 ksBS'};. fore │ │ │ -00023350: 6163 6820 2469 2028 302e 2e40 2463 6865 ach $i (0..@$che │ │ │ -00023360: 636b 426c 6f63 6b73 5275 6c65 2d31 290a ckBlocksRule-1). │ │ │ -00023370: 2020 2020 7b0a 096d 7920 2462 7220 3d20 {..my $br = │ │ │ -00023380: 2263 6865 636b 426c 6f63 6b73 5275 6c65 "checkBlocksRule │ │ │ -00023390: 2469 3d22 3b0a 096d 7920 2462 7320 3d20 $i=";..my $bs = │ │ │ -000233a0: 2263 6865 636b 426c 6f63 6b73 4253 2469 "checkBlocksBS$i │ │ │ -000233b0: 3d22 3b0a 096d 7920 2462 6320 3d20 2263 =";..my $bc = "c │ │ │ -000233c0: 6865 636b 426c 6f63 6b73 436f 6d70 7224 heckBlocksCompr$ │ │ │ -000233d0: 693d 223b 0a09 6d79 2024 6272 6561 6420 i=";..my $bread │ │ │ -000233e0: 3d20 2263 6865 636b 426c 6f63 6b73 5265 = "checkBlocksRe │ │ │ -000233f0: 6164 2469 3d22 3b0a 0a09 6d79 2028 4063 ad$i=";...my (@c │ │ │ -00023400: 6272 2920 3d20 4024 6368 6563 6b42 6c6f br) = @$checkBlo │ │ │ -00023410: 636b 7352 756c 653b 0a09 6966 2028 6465 cksRule;..if (de │ │ │ -00023420: 6669 6e65 6420 2463 6272 5b24 695d 290a fined $cbr[$i]). │ │ │ -00023430: 097b 0a09 2020 2020 2462 7220 2e3d 2022 .{.. $br .= " │ │ │ -00023440: 2722 202e 206a 6f69 6e28 2720 272c 2040 '" . join(' ', @ │ │ │ -00023450: 7b24 6362 725b 2469 5d7d 2920 2e20 2227 {$cbr[$i]}) . "' │ │ │ -00023460: 223b 0a09 2020 2020 2462 7320 2e3d 2024 ";.. $bs .= $ │ │ │ -00023470: 2463 6865 636b 426c 6f63 6b73 4253 5b24 $checkBlocksBS[$ │ │ │ -00023480: 695d 3b0a 0920 2020 2024 6263 202e 3d20 i];.. $bc .= │ │ │ -00023490: 2463 6865 636b 426c 6f63 6b73 436f 6d70 $checkBlocksComp │ │ │ -000234a0: 725b 2469 5d3b 0a09 2020 2020 2462 7265 r[$i];.. $bre │ │ │ -000234b0: 6164 202e 3d20 2463 6865 636b 426c 6f63 ad .= $checkBloc │ │ │ -000234c0: 6b73 5265 6164 5b24 695d 0a09 093f 2022 ksRead[$i]...? " │ │ │ -000234d0: 2722 202e 206a 6f69 6e28 2720 272c 2040 '" . join(' ', @ │ │ │ -000234e0: 7b24 6368 6563 6b42 6c6f 636b 7352 6561 {$checkBlocksRea │ │ │ -000234f0: 645b 2469 5d7d 2920 2e20 2227 2220 3a20 d[$i]}) . "'" : │ │ │ -00023500: 2727 3b0a 097d 0a09 2462 7220 3d7e 2073 '';..}..$br =~ s │ │ │ -00023510: 2f5c 5c2f 5c5c 3543 2f6f 673b 2020 2020 /\\/\\5C/og; │ │ │ -00023520: 2320 275c 5c27 2073 746f 7265 6420 6173 # '\\' stored as │ │ │ -00023530: 205c 3543 0a09 2462 7220 3d7e 2073 2f5c \5C..$br =~ s/\ │ │ │ -00023540: 6e2f 5c5c 3041 2f73 6f67 3b20 2020 2320 n/\\0A/sog; # │ │ │ -00023550: 275c 6e27 2073 746f 7265 6420 6173 205c '\n' stored as \ │ │ │ -00023560: 3041 0a09 7075 7368 2040 626c 6f63 6b73 0A..push @blocks │ │ │ -00023570: 5275 6c65 732c 2024 6272 2c20 2462 732c Rules, $br, $bs, │ │ │ -00023580: 2024 6263 2c20 2462 7265 6164 3b0a 2020 $bc, $bread;. │ │ │ -00023590: 2020 7d0a 2020 2020 6d79 2028 4064 6576 }. my (@dev │ │ │ -000235a0: 6963 6573 293b 0a20 2020 206d 7920 2463 ices);. my $c │ │ │ -000235b0: 6865 636b 4465 7669 6365 7320 3d20 2473 heckDevices = $s │ │ │ -000235c0: 656c 662d 3e7b 2763 6865 636b 4465 7669 elf->{'checkDevi │ │ │ -000235d0: 6365 7327 7d3b 0a20 2020 206d 7920 2463 ces'};. my $c │ │ │ -000235e0: 6865 636b 4465 7669 6365 7344 6972 203d heckDevicesDir = │ │ │ -000235f0: 2024 7365 6c66 2d3e 7b27 6368 6563 6b44 $self->{'checkD │ │ │ -00023600: 6576 6963 6573 4469 7227 7d3b 0a20 2020 evicesDir'};. │ │ │ -00023610: 206d 7920 2463 6865 636b 4465 7669 6365 my $checkDevice │ │ │ -00023620: 7342 5320 3d20 2473 656c 662d 3e7b 2763 sBS = $self->{'c │ │ │ -00023630: 6865 636b 4465 7669 6365 7342 5327 7d3b heckDevicesBS'}; │ │ │ -00023640: 0a20 2020 206d 7920 2463 6865 636b 4465 . my $checkDe │ │ │ -00023650: 7669 6365 7343 6f6d 7072 203d 2024 7365 vicesCompr = $se │ │ │ -00023660: 6c66 2d3e 7b27 6368 6563 6b44 6576 6963 lf->{'checkDevic │ │ │ -00023670: 6573 436f 6d70 7227 7d3b 0a20 2020 2066 esCompr'};. f │ │ │ -00023680: 6f72 6561 6368 2024 6920 2830 2e2e 4024 oreach $i (0..@$ │ │ │ -00023690: 6368 6563 6b44 6576 6963 6573 2d31 290a checkDevices-1). │ │ │ -000236a0: 2020 2020 7b0a 0970 7573 6820 4064 6576 {..push @dev │ │ │ -000236b0: 6963 6573 2c0a 0922 6368 6563 6b44 6576 ices,.."checkDev │ │ │ -000236c0: 6963 6573 2469 3d22 202e 2024 6368 6563 ices$i=" . $chec │ │ │ -000236d0: 6b44 6576 6963 6573 5b24 695d 2c0a 0922 kDevices[$i],.." │ │ │ -000236e0: 6368 6563 6b44 6576 6963 6573 4469 7224 checkDevicesDir$ │ │ │ -000236f0: 693d 2220 2e20 2463 6865 636b 4465 7669 i=" . $checkDevi │ │ │ -00023700: 6365 7344 6972 5b24 695d 2c0a 0922 6368 cesDir[$i],.."ch │ │ │ -00023710: 6563 6b44 6576 6963 6573 4253 2469 3d22 eckDevicesBS$i=" │ │ │ -00023720: 202e 2024 6368 6563 6b44 6576 6963 6573 . $checkDevices │ │ │ -00023730: 4253 5b24 695d 2c0a 0922 6368 6563 6b44 BS[$i],.."checkD │ │ │ -00023740: 6576 6963 6573 436f 6d70 7224 693d 2220 evicesCompr$i=" │ │ │ -00023750: 2e20 2463 6865 636b 4465 7669 6365 7343 . $checkDevicesC │ │ │ -00023760: 6f6d 7072 5b24 695d 3b0a 2020 2020 7d0a ompr[$i];. }. │ │ │ -00023770: 2020 2020 6d79 2028 4069 6e66 6f4c 696e my (@infoLin │ │ │ -00023780: 6573 2920 3d20 2822 7665 7273 696f 6e3d es) = ("version= │ │ │ -00023790: 2220 2e20 246d 6169 6e3a 3a63 6865 636b " . $main::check │ │ │ -000237a0: 5375 6d46 696c 6556 6572 7369 6f6e 2c0a SumFileVersion,. │ │ │ -000237b0: 0909 2020 2020 2020 2022 7374 6f72 6542 .. "storeB │ │ │ -000237c0: 6163 6b75 7056 6572 7369 6f6e 3d22 202e ackupVersion=" . │ │ │ -000237d0: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC │ │ │ -000237e0: 4b55 5056 4552 5349 4f4e 2c0a 0909 2020 KUPVERSION,... │ │ │ -000237f0: 2020 2020 2022 6461 7465 3d22 202e 0a09 "date=" ... │ │ │ -00023800: 0920 2020 2020 2020 2473 656c 662d 3e7b . $self->{ │ │ │ -00023810: 2761 6b74 4461 7465 277d 2d3e 6765 7444 'aktDate'}->getD │ │ │ -00023820: 6174 6554 696d 6528 272d 666f 726d 6174 ateTime('-format │ │ │ -00023830: 2720 3d3e 0a09 0909 0909 0920 2020 2020 ' =>....... │ │ │ -00023840: 2020 2725 592e 254d 2e25 4420 2568 2e25 '%Y.%M.%D %h.% │ │ │ -00023850: 6d2e 2573 2729 2c0a 0909 2020 2020 2020 m.%s'),... │ │ │ -00023860: 2022 736f 7572 6365 4469 723d 2220 2e20 "sourceDir=" . │ │ │ -00023870: 2227 2220 2e20 2473 6420 2e20 2227 222c "'" . $sd . "'", │ │ │ -00023880: 0a09 0920 2020 2020 2020 2266 6f6c 6c6f ... "follo │ │ │ -00023890: 774c 696e 6b73 3d22 202e 2024 7365 6c66 wLinks=" . $self │ │ │ -000238a0: 2d3e 7b27 666f 6c6c 6f77 4c69 6e6b 7327 ->{'followLinks' │ │ │ -000238b0: 7d2c 0a09 0920 2020 2020 2020 2263 6f6d },... "com │ │ │ -000238c0: 7072 6573 733d 2220 2e0a 0909 2020 2020 press=" .... │ │ │ -000238d0: 2020 2022 2722 202e 206a 6f69 6e28 2227 "'" . join("' │ │ │ -000238e0: 2027 222c 2040 7b24 7365 6c66 2d3e 7b27 '", @{$self->{' │ │ │ -000238f0: 636f 6d70 7265 7373 277d 7d29 202e 2022 compress'}}) . " │ │ │ -00023900: 2722 2c0a 0909 2020 2020 2020 2022 756e '",... "un │ │ │ -00023910: 636f 6d70 7265 7373 3d22 202e 0a09 0920 compress=" .... │ │ │ -00023920: 2020 2020 2020 2227 2220 2e20 6a6f 696e "'" . join │ │ │ -00023930: 2822 2720 2722 2c20 407b 2473 656c 662d ("' '", @{$self- │ │ │ -00023940: 3e7b 2775 6e63 6f6d 7072 6573 7327 7d7d >{'uncompress'}} │ │ │ -00023950: 2920 2e20 2227 222c 0a09 0920 2020 2020 ) . "'",... │ │ │ -00023960: 2020 2270 6f73 7466 6978 3d22 202e 2022 "postfix=" . " │ │ │ -00023970: 2722 202e 2024 7365 6c66 2d3e 7b27 706f '" . $self->{'po │ │ │ -00023980: 7374 6669 7827 7d20 2e20 2227 222c 0a09 stfix'} . "'",.. │ │ │ -00023990: 0920 2020 2020 2020 2263 6f6d 7072 5275 . "comprRu │ │ │ -000239a0: 6c65 3d22 202e 2024 636f 6d70 7252 756c le=" . $comprRul │ │ │ -000239b0: 652c 0a09 0920 2020 2020 2020 2265 7863 e,... "exc │ │ │ -000239c0: 6570 7444 6972 733d 2220 2e20 2465 7863 eptDirs=" . $exc │ │ │ -000239d0: 6570 7444 6972 732c 0a09 0920 2020 2020 eptDirs,... │ │ │ -000239e0: 2020 2269 6e63 6c75 6465 4469 7273 3d22 "includeDirs=" │ │ │ -000239f0: 202e 2024 696e 636c 7564 6544 6972 732c . $includeDirs, │ │ │ -00023a00: 0a09 0920 2020 2020 2020 2265 7863 6570 ... "excep │ │ │ -00023a10: 7452 756c 653d 2220 2e20 2465 7863 6570 tRule=" . $excep │ │ │ -00023a20: 7452 756c 652c 0a09 0920 2020 2020 2020 tRule,... │ │ │ -00023a30: 2269 6e63 6c75 6465 5275 6c65 3d22 202e "includeRule=" . │ │ │ -00023a40: 2024 696e 636c 7564 6552 756c 652c 0a09 $includeRule,.. │ │ │ -00023a50: 0920 2020 2020 2020 2277 7269 7465 4578 . "writeEx │ │ │ -00023a60: 636c 7564 654c 6f67 3d22 202e 0a09 0920 cludeLog=" .... │ │ │ -00023a70: 2020 2020 2020 2020 2020 2824 7365 6c66 ($self │ │ │ -00023a80: 2d3e 7b27 7772 6974 6545 7863 6c75 6465 ->{'writeExclude │ │ │ -00023a90: 4c6f 6727 7d20 3f20 2779 6573 2720 3a20 Log'} ? 'yes' : │ │ │ -00023aa0: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... │ │ │ -00023ab0: 2265 7863 6570 7454 7970 6573 3d22 202e "exceptTypes=" . │ │ │ -00023ac0: 2024 6578 6365 7074 5479 7065 732c 0a09 $exceptTypes,.. │ │ │ -00023ad0: 0920 2020 2020 2020 2261 7263 6869 7665 . "archive │ │ │ -00023ae0: 5479 7065 733d 2220 2e20 2461 7263 6869 Types=" . $archi │ │ │ -00023af0: 7665 5479 7065 732c 0a09 0920 2020 2020 veTypes,... │ │ │ -00023b00: 2020 2273 7065 6369 616c 5479 7065 4172 "specialTypeAr │ │ │ -00023b10: 6368 6976 6572 3d22 202e 2024 7370 6563 chiver=" . $spec │ │ │ -00023b20: 6961 6c54 7970 6541 7263 6869 7665 722c ialTypeArchiver, │ │ │ -00023b30: 0a09 0920 2020 2020 2020 4062 6c6f 636b ... @block │ │ │ -00023b40: 7352 756c 6573 2c0a 0909 2020 2020 2020 sRules,... │ │ │ -00023b50: 2040 6465 7669 6365 732c 0a09 0920 2020 @devices,... │ │ │ -00023b60: 2020 2020 2270 7265 7365 7276 6550 6572 "preservePer │ │ │ -00023b70: 6d73 3d22 202e 2028 2470 7265 7365 7276 ms=" . ($preserv │ │ │ -00023b80: 6550 6572 6d73 203f 2027 7965 7327 203a ePerms ? 'yes' : │ │ │ -00023b90: 2027 6e6f 2729 2c0a 0909 2020 2020 2020 'no'),... │ │ │ -00023ba0: 2022 6c61 7465 4c69 6e6b 733d 222e 2028 "lateLinks=". ( │ │ │ -00023bb0: 246c 6174 654c 696e 6b73 203f 2027 7965 $lateLinks ? 'ye │ │ │ -00023bc0: 7327 203a 2027 6e6f 2729 2c0a 0909 2020 s' : 'no'),... │ │ │ -00023bd0: 2020 2020 2022 6c61 7465 436f 6d70 7265 "lateCompre │ │ │ -00023be0: 7373 3d22 202e 2028 246c 6174 6543 6f6d ss=" . ($lateCom │ │ │ -00023bf0: 7072 6573 7320 3f20 2779 6573 2720 3a20 press ? 'yes' : │ │ │ -00023c00: 276e 6f27 292c 0a09 0920 2020 2020 2020 'no'),... │ │ │ -00023c10: 2263 7049 7347 6e75 3d22 2e20 2824 676e "cpIsGnu=". ($gn │ │ │ -00023c20: 7563 7020 3f20 2779 6573 2720 3a20 276e ucp ? 'yes' : 'n │ │ │ -00023c30: 6f27 292c 0a09 0920 2020 2020 2020 226c o'),... "l │ │ │ -00023c40: 6f67 496e 4261 636b 7570 4469 723d 2220 ogInBackupDir=" │ │ │ -00023c50: 2e0a 0909 2020 2020 2020 2020 2020 2028 .... ( │ │ │ -00023c60: 2473 656c 662d 3e7b 276c 6f67 496e 4261 $self->{'logInBa │ │ │ -00023c70: 636b 7570 4469 7227 7d20 3f20 2779 6573 ckupDir'} ? 'yes │ │ │ -00023c80: 2720 3a20 276e 6f27 292c 0a09 0920 2020 ' : 'no'),... │ │ │ -00023c90: 2020 2020 2263 6f6d 7072 6573 734c 6f67 "compressLog │ │ │ -00023ca0: 496e 4261 636b 7570 4469 723d 2220 2e0a InBackupDir=" .. │ │ │ -00023cb0: 0909 2020 2020 2020 2020 2020 2028 2473 .. ($s │ │ │ -00023cc0: 656c 662d 3e7b 2763 6f6d 7072 6573 734c elf->{'compressL │ │ │ -00023cd0: 6f67 496e 4261 636b 7570 4469 7227 7d20 ogInBackupDir'} │ │ │ -00023ce0: 3f20 2779 6573 2720 3a20 276e 6f27 292c ? 'yes' : 'no'), │ │ │ -00023cf0: 0a09 0920 2020 2020 2020 226c 6f67 496e ... "logIn │ │ │ -00023d00: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam │ │ │ -00023d10: 653d 2220 2e0a 0909 2020 2020 2020 2020 e=" .... │ │ │ -00023d20: 2020 2022 2722 202e 2024 6c6f 6749 6e42 "'" . $logInB │ │ │ -00023d30: 6163 6b75 7044 6972 4669 6c65 4e61 6d65 ackupDirFileName │ │ │ -00023d40: 202e 2022 2722 2c0a 0909 2020 2020 2020 . "'",... │ │ │ -00023d50: 2022 6c69 6e6b 546f 5265 6365 6e74 3d22 "linkToRecent=" │ │ │ -00023d60: 202e 0a09 0920 2020 2020 2020 2020 2020 .... │ │ │ -00023d70: 2824 6c69 6e6b 546f 5265 6365 6e74 203f ($linkToRecent ? │ │ │ -00023d80: 2022 2722 202e 2024 6c69 6e6b 546f 5265 "'" . $linkToRe │ │ │ -00023d90: 6365 6e74 202e 2022 2722 203a 2022 2229 cent . "'" : "") │ │ │ -00023da0: 0a09 0920 2020 2020 2020 293b 0a20 2020 ... );. │ │ │ -00023db0: 206d 7920 2469 6e66 6f46 696c 6520 3d20 my $infoFile = │ │ │ -00023dc0: 2473 656c 662d 3e7b 2769 6e66 6f46 696c $self->{'infoFil │ │ │ -00023dd0: 6527 7d3b 0a0a 2020 2020 6d79 2024 7763 e'};.. my $wc │ │ │ -00023de0: 7366 203d 2077 7269 7465 4368 6563 6b53 sf = writeCheckS │ │ │ -00023df0: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch │ │ │ -00023e00: 6563 6b53 756d 4669 6c65 2720 3d3e 2024 eckSumFile' => $ │ │ │ -00023e10: 696e 666f 4669 6c65 2c0a 0909 0909 2020 infoFile,..... │ │ │ -00023e20: 2020 2020 272d 626c 6f63 6b43 6865 636b '-blockCheck │ │ │ -00023e30: 5375 6d46 696c 6527 203d 3e0a 0909 0909 SumFile' =>..... │ │ │ -00023e40: 2020 2020 2020 2473 656c 662d 3e7b 2762 $self->{'b │ │ │ -00023e50: 6c6f 636b 4368 6563 6b53 756d 4669 6c65 lockCheckSumFile │ │ │ -00023e60: 277d 2c0a 0909 0909 2020 2020 2020 272d '},..... '- │ │ │ -00023e70: 696e 666f 4c69 6e65 7327 203d 3e20 5c40 infoLines' => \@ │ │ │ -00023e80: 696e 666f 4c69 6e65 732c 0a09 0909 0920 infoLines,..... │ │ │ -00023e90: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ -00023ea0: 2024 7072 4c6f 672c 0a09 0909 0920 2020 $prLog,..... │ │ │ -00023eb0: 2020 2027 2d63 686d 6f64 4d44 3546 696c '-chmodMD5Fil │ │ │ -00023ec0: 6527 203d 3e20 2473 656c 662d 3e7b 2763 e' => $self->{'c │ │ │ -00023ed0: 686d 6f64 4d44 3546 696c 6527 7d2c 0a09 hmodMD5File'},.. │ │ │ -00023ee0: 0909 0920 2020 2020 2027 2d63 6f6d 7072 ... '-compr │ │ │ -00023ef0: 6573 734d 4435 4669 6c65 2720 3d3e 0a09 essMD5File' =>.. │ │ │ -00023f00: 0909 0920 2020 2020 2024 7365 6c66 2d3e ... $self-> │ │ │ -00023f10: 7b27 636f 6d70 7265 7373 4d44 3546 696c {'compressMD5Fil │ │ │ -00023f20: 6527 7d2c 0a09 0909 0920 2020 2020 2027 e'},..... ' │ │ │ -00023f30: 2d6c 6174 654c 696e 6b73 2720 3d3e 2024 -lateLinks' => $ │ │ │ -00023f40: 6c61 7465 4c69 6e6b 732c 0a09 0909 0920 lateLinks,..... │ │ │ -00023f50: 2020 2020 2027 2d74 6d70 6469 7227 203d '-tmpdir' = │ │ │ -00023f60: 3e20 2474 6d70 6469 7229 3b0a 2020 2020 > $tmpdir);. │ │ │ -00023f70: 2473 656c 662d 3e7b 2777 7269 7465 4368 $self->{'writeCh │ │ │ -00023f80: 6563 6b53 756d 4669 6c65 277d 203d 2024 eckSumFile'} = $ │ │ │ -00023f90: 7763 7366 3b0a 0a20 2020 2062 6c65 7373 wcsf;.. bless │ │ │ -00023fa0: 2024 7365 6c66 2c20 2463 6c61 7373 3b0a $self, $class;. │ │ │ -00023fb0: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ -00023fc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00023fd0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ -00023fe0: 2073 6574 4442 4d6d 6435 0a7b 0a20 2020 setDBMmd5.{. │ │ │ -00023ff0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -00024000: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{ │ │ │ -00024010: 2744 424d 6d64 3527 7d20 3d20 7368 6966 'DBMmd5'} = shif │ │ │ -00024020: 743b 0a7d 0a0a 0a23 2323 2323 2323 2323 t;.}...######### │ │ │ -00024030: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00024040: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00024050: 2320 66c3 bc72 206e 6f72 6d61 6c65 2044 # f..r normale D │ │ │ -00024060: 6174 6569 656e 0a73 7562 2073 746f 7265 ateien.sub store │ │ │ -00024070: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ -00024080: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my │ │ │ -00024090: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('- │ │ │ -000240a0: 6669 6c65 6e61 6d65 2720 2020 203d 3e20 filename' => │ │ │ -000240b0: 756e 6465 662c 0a09 0920 2020 2027 2d6d undef,... '-m │ │ │ -000240c0: 6435 7375 6d27 2020 2020 2020 3d3e 2075 d5sum' => u │ │ │ -000240d0: 6e64 6566 2c0a 0909 2020 2020 272d 636f ndef,... '-co │ │ │ -000240e0: 6d70 7227 2020 2020 2020 203d 3e20 756e mpr' => un │ │ │ -000240f0: 6465 662c 0a09 0920 2020 2027 2d64 6576 def,... '-dev │ │ │ -00024100: 2720 2020 2020 2020 2020 3d3e 2075 6e64 ' => und │ │ │ -00024110: 6566 2c0a 0909 2020 2020 272d 696e 6f64 ef,... '-inod │ │ │ -00024120: 6527 2020 2020 2020 203d 3e20 756e 6465 e' => unde │ │ │ -00024130: 662c 0a09 0920 2020 2027 2d69 6e6f 6465 f,... '-inode │ │ │ -00024140: 4261 636b 7570 2720 3d3e 2075 6e64 6566 Backup' => undef │ │ │ -00024150: 2c0a 0909 2020 2020 272d 6374 696d 6527 ,... '-ctime' │ │ │ -00024160: 2020 2020 2020 203d 3e20 756e 6465 662c => undef, │ │ │ -00024170: 0a09 0920 2020 2027 2d6d 7469 6d65 2720 ... '-mtime' │ │ │ -00024180: 2020 2020 2020 3d3e 2075 6e64 6566 2c0a => undef,. │ │ │ -00024190: 0909 2020 2020 272d 6174 696d 6527 2020 .. '-atime' │ │ │ -000241a0: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,.. │ │ │ -000241b0: 0920 2020 2027 2d73 697a 6527 2020 2020 . '-size' │ │ │ -000241c0: 2020 2020 3d3e 2075 6e64 6566 2c0a 0909 => undef,... │ │ │ -000241d0: 2020 2020 272d 7569 6427 2020 2020 2020 '-uid' │ │ │ -000241e0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -000241f0: 2020 2027 2d67 6964 2720 2020 2020 2020 '-gid' │ │ │ -00024200: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -00024210: 2020 272d 6d6f 6465 2720 2020 2020 2020 '-mode' │ │ │ -00024220: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -00024230: 2027 2d73 746f 7265 496e 4442 4d27 2020 '-storeInDBM' │ │ │ -00024240: 3d3e 2031 2020 2020 2020 2320 4465 6661 => 1 # Defa │ │ │ -00024250: 756c 743a 2073 7065 6963 6865 726e 2c0a ult: speichern,. │ │ │ -00024260: 0909 2020 2020 2020 2020 2020 2020 2020 .. │ │ │ -00024270: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00024280: 2020 2020 2020 2020 3020 3d20 6e69 6368 0 = nich │ │ │ -00024290: 7420 7370 6569 6368 6572 6e0a 0909 2020 t speichern... │ │ │ -000242a0: 2020 293b 0a0a 2020 2020 263a 3a63 6865 );.. &::che │ │ │ -000242b0: 636b 4f62 6a65 6374 5061 7261 6d73 285c ckObjectParams(\ │ │ │ -000242c0: 2570 6172 616d 732c 205c 405f 2c20 2761 %params, \@_, 'a │ │ │ -000242d0: 6b74 4669 6c65 6e61 6d65 3a3a 7374 6f72 ktFilename::stor │ │ │ -000242e0: 6527 2c0a 0909 0920 5b27 2d66 696c 656e e',.... ['-filen │ │ │ -000242f0: 616d 6527 2c20 272d 6d64 3573 756d 272c ame', '-md5sum', │ │ │ -00024300: 2027 2d63 6f6d 7072 272c 2027 2d64 6576 '-compr', '-dev │ │ │ -00024310: 272c 2027 2d69 6e6f 6465 272c 0a09 0909 ', '-inode',.... │ │ │ -00024320: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup' │ │ │ -00024330: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt │ │ │ -00024340: 696d 6527 2c20 272d 6174 696d 6527 2c0a ime', '-atime',. │ │ │ -00024350: 0909 0920 2027 2d73 697a 6527 2c20 272d ... '-size', '- │ │ │ -00024360: 7569 6427 2c20 272d 6769 6427 2c20 272d uid', '-gid', '- │ │ │ -00024370: 6d6f 6465 275d 293b 0a20 2020 206d 7920 mode']);. my │ │ │ -00024380: 2466 696c 656e 616d 6520 3d20 2470 6172 $filename = $par │ │ │ -00024390: 616d 737b 272d 6669 6c65 6e61 6d65 277d ams{'-filename'} │ │ │ -000243a0: 3b0a 2020 2020 6d79 2024 6d64 3573 756d ;. my $md5sum │ │ │ -000243b0: 203d 2024 7061 7261 6d73 7b27 2d6d 6435 = $params{'-md5 │ │ │ -000243c0: 7375 6d27 7d3b 0a20 2020 206d 7920 2463 sum'};. my $c │ │ │ -000243d0: 6f6d 7072 203d 2024 7061 7261 6d73 7b27 ompr = $params{' │ │ │ -000243e0: 2d63 6f6d 7072 277d 3b0a 2020 2020 6d79 -compr'};. my │ │ │ -000243f0: 2024 6465 7620 3d20 2470 6172 616d 737b $dev = $params{ │ │ │ -00024400: 272d 6465 7627 7d3b 0a20 2020 206d 7920 '-dev'};. my │ │ │ -00024410: 2469 6e6f 6465 203d 2024 7061 7261 6d73 $inode = $params │ │ │ -00024420: 7b27 2d69 6e6f 6465 277d 3b0a 2020 2020 {'-inode'};. │ │ │ -00024430: 6d79 2024 696e 6f64 6542 6163 6b75 7020 my $inodeBackup │ │ │ -00024440: 3d20 2470 6172 616d 737b 272d 696e 6f64 = $params{'-inod │ │ │ -00024450: 6542 6163 6b75 7027 7d3b 0a20 2020 206d eBackup'};. m │ │ │ -00024460: 7920 2463 7469 6d65 203d 2024 7061 7261 y $ctime = $para │ │ │ -00024470: 6d73 7b27 2d63 7469 6d65 277d 3b0a 2020 ms{'-ctime'};. │ │ │ -00024480: 2020 6d79 2024 6d74 696d 6520 3d20 2470 my $mtime = $p │ │ │ -00024490: 6172 616d 737b 272d 6d74 696d 6527 7d3b arams{'-mtime'}; │ │ │ -000244a0: 0a20 2020 206d 7920 2461 7469 6d65 203d . my $atime = │ │ │ -000244b0: 2024 7061 7261 6d73 7b27 2d61 7469 6d65 $params{'-atime │ │ │ -000244c0: 277d 3b0a 2020 2020 6d79 2024 7369 7a65 '};. my $size │ │ │ -000244d0: 203d 2024 7061 7261 6d73 7b27 2d73 697a = $params{'-siz │ │ │ -000244e0: 6527 7d3b 0a20 2020 206d 7920 2475 6964 e'};. my $uid │ │ │ -000244f0: 203d 2024 7061 7261 6d73 7b27 2d75 6964 = $params{'-uid │ │ │ -00024500: 277d 3b0a 2020 2020 6d79 2024 6769 6420 '};. my $gid │ │ │ -00024510: 3d20 2470 6172 616d 737b 272d 6769 6427 = $params{'-gid' │ │ │ -00024520: 7d3b 0a20 2020 206d 7920 246d 6f64 6520 };. my $mode │ │ │ -00024530: 3d20 2470 6172 616d 737b 272d 6d6f 6465 = $params{'-mode │ │ │ -00024540: 277d 3b0a 0a20 2020 2069 6620 2824 7061 '};.. if ($pa │ │ │ -00024550: 7261 6d73 7b27 2d73 746f 7265 496e 4442 rams{'-storeInDB │ │ │ -00024560: 4d27 7d29 0a20 2020 207b 0a09 6d79 2024 M'}). {..my $ │ │ │ -00024570: 4442 4d6d 6435 203d 2024 7365 6c66 2d3e DBMmd5 = $self-> │ │ │ -00024580: 7b27 4442 4d6d 6435 277d 3b0a 0a09 6d79 {'DBMmd5'};...my │ │ │ -00024590: 2024 6d64 3570 6163 6b20 3d20 7061 636b $md5pack = pack │ │ │ -000245a0: 2827 4833 3227 2c20 246d 6435 7375 6d29 ('H32', $md5sum) │ │ │ -000245b0: 3b0a 096d 7920 2466 203d 2024 7365 6c66 ;..my $f = $self │ │ │ -000245c0: 2d3e 7b27 696e 6465 7844 6972 277d 2d3e ->{'indexDir'}-> │ │ │ -000245d0: 7365 7449 6e64 6578 2824 6669 6c65 6e61 setIndex($filena │ │ │ -000245e0: 6d65 293b 0a09 2424 4442 4d6d 6435 7b24 me);..$$DBMmd5{$ │ │ │ -000245f0: 6d64 3570 6163 6b7d 203d 2070 6163 6b28 md5pack} = pack( │ │ │ -00024600: 2746 6153 612a 272c 2024 696e 6f64 6542 'FaSa*', $inodeB │ │ │ -00024610: 6163 6b75 702c 2024 636f 6d70 722c 0a09 ackup, $compr,.. │ │ │ -00024620: 0909 0920 2030 2c20 2466 290a 0920 2020 ... 0, $f).. │ │ │ -00024630: 2075 6e6c 6573 7320 6578 6973 7473 2024 unless exists $ │ │ │ -00024640: 2444 424d 6d64 357b 246d 6435 7061 636b $DBMmd5{$md5pack │ │ │ -00024650: 7d3b 0a20 2020 207d 0920 2020 2020 2020 };. }. │ │ │ -00024660: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00024670: 2020 2020 2023 2024 6261 636b 7570 4469 # $backupDi │ │ │ -00024680: 7249 6e64 6578 2069 7374 2069 6d6d 6572 rIndex ist immer │ │ │ -00024690: 2030 0a0a 2020 2020 2473 656c 662d 3e7b 0.. $self->{ │ │ │ -000246a0: 2777 7269 7465 4368 6563 6b53 756d 4669 'writeCheckSumFi │ │ │ -000246b0: 6c65 277d 2d3e 7772 6974 6528 272d 6669 le'}->write('-fi │ │ │ -000246c0: 6c65 6e61 6d65 2720 3d3e 2024 6669 6c65 lename' => $file │ │ │ -000246d0: 6e61 6d65 2c0a 0909 0909 0927 2d6d 6435 name,......'-md5 │ │ │ -000246e0: 7375 6d27 203d 3e20 246d 6435 7375 6d2c sum' => $md5sum, │ │ │ -000246f0: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' = │ │ │ -00024700: 3e20 2463 6f6d 7072 2c0a 0909 0909 0927 > $compr,......' │ │ │ -00024710: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,.. │ │ │ -00024720: 0909 0909 272d 696e 6f64 6527 203d 3e20 ....'-inode' => │ │ │ -00024730: 2469 6e6f 6465 2c0a 0909 0909 0927 2d69 $inode,......'-i │ │ │ -00024740: 6e6f 6465 4261 636b 7570 2720 3d3e 2024 nodeBackup' => $ │ │ │ -00024750: 696e 6f64 6542 6163 6b75 702c 0a09 0909 inodeBackup,.... │ │ │ -00024760: 0909 272d 6374 696d 6527 203d 3e20 2463 ..'-ctime' => $c │ │ │ -00024770: 7469 6d65 2c0a 0909 0909 0927 2d6d 7469 time,......'-mti │ │ │ -00024780: 6d65 2720 3d3e 2024 6d74 696d 652c 0a09 me' => $mtime,.. │ │ │ -00024790: 0909 0909 272d 6174 696d 6527 203d 3e20 ....'-atime' => │ │ │ -000247a0: 2461 7469 6d65 2c0a 0909 0909 0927 2d73 $atime,......'-s │ │ │ -000247b0: 697a 6527 203d 3e20 2473 697a 652c 0a09 ize' => $size,.. │ │ │ -000247c0: 0909 0909 272d 7569 6427 203d 3e20 2475 ....'-uid' => $u │ │ │ -000247d0: 6964 2c0a 0909 0909 0927 2d67 6964 2720 id,......'-gid' │ │ │ -000247e0: 3d3e 2024 6769 642c 0a09 0909 0909 272d => $gid,......'- │ │ │ -000247f0: 6d6f 6465 2720 3d3e 2024 6d6f 6465 0a09 mode' => $mode.. │ │ │ -00024800: 0909 0909 293b 0a7d 0a0a 0a23 2323 2323 ....);.}...##### │ │ │ -00024810: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00024820: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00024830: 2323 230a 7375 6220 7374 6f72 6544 6972 ###.sub storeDir │ │ │ -00024840: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ -00024850: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my │ │ │ -00024860: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('- │ │ │ -00024870: 6469 7227 2020 203d 3e20 756e 6465 662c dir' => undef, │ │ │ -00024880: 0a09 0920 2020 2027 2d64 6576 2720 2020 ... '-dev' │ │ │ -00024890: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -000248a0: 272d 696e 6f64 6527 203d 3e20 756e 6465 '-inode' => unde │ │ │ -000248b0: 662c 0a09 0920 2020 2027 2d63 7469 6d65 f,... '-ctime │ │ │ -000248c0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... │ │ │ -000248d0: 2020 272d 6d74 696d 6527 203d 3e20 756e '-mtime' => un │ │ │ -000248e0: 6465 662c 0a09 0920 2020 2027 2d61 7469 def,... '-ati │ │ │ -000248f0: 6d65 2720 3d3e 2075 6e64 6566 2c0a 0909 me' => undef,... │ │ │ -00024900: 2020 2020 272d 7569 6427 2020 203d 3e20 '-uid' => │ │ │ -00024910: 756e 6465 662c 0a09 0920 2020 2027 2d67 undef,... '-g │ │ │ -00024920: 6964 2720 2020 3d3e 2075 6e64 6566 2c0a id' => undef,. │ │ │ -00024930: 0909 2020 2020 272d 6d6f 6465 2720 203d .. '-mode' = │ │ │ -00024940: 3e20 756e 6465 660a 0909 2020 2020 293b > undef... ); │ │ │ -00024950: 0a0a 2020 2020 263a 3a63 6865 636b 4f62 .. &::checkOb │ │ │ -00024960: 6a65 6374 5061 7261 6d73 285c 2570 6172 jectParams(\%par │ │ │ -00024970: 616d 732c 205c 405f 2c20 2761 6b74 4669 ams, \@_, 'aktFi │ │ │ -00024980: 6c65 6e61 6d65 3a3a 7374 6f72 6544 6972 lename::storeDir │ │ │ -00024990: 272c 0a09 0909 205b 272d 6469 7227 2c20 ',.... ['-dir', │ │ │ -000249a0: 272d 6465 7627 2c20 272d 696e 6f64 6527 '-dev', '-inode' │ │ │ -000249b0: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt │ │ │ -000249c0: 696d 6527 2c0a 0909 0920 2027 2d61 7469 ime',.... '-ati │ │ │ -000249d0: 6d65 272c 2027 2d75 6964 272c 2027 2d67 me', '-uid', '-g │ │ │ -000249e0: 6964 272c 2027 2d6d 6f64 6527 5d29 3b0a id', '-mode']);. │ │ │ -000249f0: 0a20 2020 206d 7920 2464 6972 203d 2024 . my $dir = $ │ │ │ -00024a00: 7061 7261 6d73 7b27 2d64 6972 277d 3b0a params{'-dir'};. │ │ │ -00024a10: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p │ │ │ -00024a20: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. │ │ │ -00024a30: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $ │ │ │ -00024a40: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'} │ │ │ -00024a50: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime │ │ │ -00024a60: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim │ │ │ -00024a70: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti │ │ │ -00024a80: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m │ │ │ -00024a90: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $ │ │ │ -00024aa0: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{ │ │ │ -00024ab0: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m │ │ │ -00024ac0: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params │ │ │ -00024ad0: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my │ │ │ -00024ae0: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{ │ │ │ -00024af0: 272d 6769 6427 7d3b 0a20 2020 206d 7920 '-gid'};. my │ │ │ -00024b00: 246d 6f64 6520 3d20 2470 6172 616d 737b $mode = $params{ │ │ │ -00024b10: 272d 6d6f 6465 277d 3b0a 0a20 2020 206d '-mode'};.. m │ │ │ -00024b20: 7920 2469 6e6f 6465 4261 636b 7570 203d y $inodeBackup = │ │ │ -00024b30: 2030 3b20 2020 2023 2069 7272 656c 6576 0; # irrelev │ │ │ -00024b40: 616e 740a 0a20 2020 2024 7365 6c66 2d3e ant.. $self-> │ │ │ -00024b50: 7b27 7772 6974 6543 6865 636b 5375 6d46 {'writeCheckSumF │ │ │ -00024b60: 696c 6527 7d2d 3e77 7269 7465 2827 2d66 ile'}->write('-f │ │ │ -00024b70: 696c 656e 616d 6527 203d 3e20 2464 6972 ilename' => $dir │ │ │ -00024b80: 2c0a 0909 0909 0927 2d6d 6435 7375 6d27 ,......'-md5sum' │ │ │ -00024b90: 203d 3e20 2764 6972 272c 0a09 0909 0909 => 'dir',...... │ │ │ -00024ba0: 272d 636f 6d70 7227 203d 3e20 302c 0a09 '-compr' => 0,.. │ │ │ -00024bb0: 0909 0909 272d 6465 7627 203d 3e20 2464 ....'-dev' => $d │ │ │ -00024bc0: 6576 2c0a 0909 0909 0927 2d69 6e6f 6465 ev,......'-inode │ │ │ -00024bd0: 2720 3d3e 2024 696e 6f64 652c 0a09 0909 ' => $inode,.... │ │ │ -00024be0: 0909 272d 696e 6f64 6542 6163 6b75 7027 ..'-inodeBackup' │ │ │ -00024bf0: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup │ │ │ -00024c00: 2c0a 0909 0909 0927 2d63 7469 6d65 2720 ,......'-ctime' │ │ │ -00024c10: 3d3e 2024 6374 696d 652c 0a09 0909 0909 => $ctime,...... │ │ │ -00024c20: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti │ │ │ -00024c30: 6d65 2c0a 0909 0909 0927 2d61 7469 6d65 me,......'-atime │ │ │ -00024c40: 2720 3d3e 2024 6174 696d 652c 0a09 0909 ' => $atime,.... │ │ │ -00024c50: 0909 272d 7369 7a65 2720 3d3e 2030 2c0a ..'-size' => 0,. │ │ │ -00024c60: 0909 0909 0927 2d75 6964 2720 3d3e 2024 .....'-uid' => $ │ │ │ -00024c70: 7569 642c 0a09 0909 0909 272d 6769 6427 uid,......'-gid' │ │ │ -00024c80: 203d 3e20 2467 6964 2c0a 0909 0909 0927 => $gid,......' │ │ │ -00024c90: 2d6d 6f64 6527 203d 3e20 246d 6f64 650a -mode' => $mode. │ │ │ -00024ca0: 0909 0909 0929 3b0a 7d0a 0a0a 2323 2323 .....);.}...#### │ │ │ -00024cb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00024cc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00024cd0: 2323 2323 0a73 7562 2073 746f 7265 5379 ####.sub storeSy │ │ │ -00024ce0: 6d6c 696e 6b0a 7b0a 2020 2020 6d79 2024 mlink.{. my $ │ │ │ -00024cf0: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. │ │ │ -00024d00: 2020 206d 7920 2825 7061 7261 6d73 2920 my (%params) │ │ │ -00024d10: 3d20 2827 2d73 796d 6c69 6e6b 2720 3d3e = ('-symlink' => │ │ │ -00024d20: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00024d30: 6465 7627 2020 203d 3e20 756e 6465 662c dev' => undef, │ │ │ -00024d40: 0a09 0920 2020 2027 2d69 6e6f 6465 2720 ... '-inode' │ │ │ -00024d50: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -00024d60: 272d 6374 696d 6527 2020 203d 3e20 756e '-ctime' => un │ │ │ -00024d70: 6465 662c 0a09 0920 2020 2027 2d6d 7469 def,... '-mti │ │ │ -00024d80: 6d65 2720 2020 3d3e 2075 6e64 6566 2c0a me' => undef,. │ │ │ -00024d90: 0909 2020 2020 272d 6174 696d 6527 2020 .. '-atime' │ │ │ -00024da0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -00024db0: 2027 2d75 6964 2720 2020 2020 3d3e 2075 '-uid' => u │ │ │ -00024dc0: 6e64 6566 2c0a 0909 2020 2020 272d 6769 ndef,... '-gi │ │ │ -00024dd0: 6427 2020 2020 203d 3e20 756e 6465 662c d' => undef, │ │ │ -00024de0: 0a09 0920 2020 2029 3b0a 0a20 2020 2026 ... );.. & │ │ │ -00024df0: 3a3a 6368 6563 6b4f 626a 6563 7450 6172 ::checkObjectPar │ │ │ -00024e00: 616d 7328 5c25 7061 7261 6d73 2c20 5c40 ams(\%params, \@ │ │ │ -00024e10: 5f2c 2027 616b 7446 696c 656e 616d 653a _, 'aktFilename: │ │ │ -00024e20: 3a73 746f 7265 5379 6d6c 696e 6b27 2c0a :storeSymlink',. │ │ │ -00024e30: 0909 0920 5b27 2d73 796d 6c69 6e6b 272c ... ['-symlink', │ │ │ -00024e40: 2027 2d64 6576 272c 2027 2d69 6e6f 6465 '-dev', '-inode │ │ │ -00024e50: 272c 2027 2d63 7469 6d65 272c 2027 2d6d ', '-ctime', '-m │ │ │ -00024e60: 7469 6d65 272c 0a09 0909 2020 272d 6174 time',.... '-at │ │ │ -00024e70: 696d 6527 2c20 272d 7569 6427 2c20 272d ime', '-uid', '- │ │ │ -00024e80: 6769 6427 5d29 3b0a 0a20 2020 206d 7920 gid']);.. my │ │ │ -00024e90: 2473 796d 6c69 6e6b 203d 2024 7061 7261 $symlink = $para │ │ │ -00024ea0: 6d73 7b27 2d73 796d 6c69 6e6b 277d 3b0a ms{'-symlink'};. │ │ │ -00024eb0: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p │ │ │ -00024ec0: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. │ │ │ -00024ed0: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $ │ │ │ -00024ee0: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'} │ │ │ -00024ef0: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime │ │ │ -00024f00: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim │ │ │ -00024f10: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti │ │ │ -00024f20: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m │ │ │ -00024f30: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $ │ │ │ -00024f40: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{ │ │ │ -00024f50: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m │ │ │ -00024f60: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params │ │ │ -00024f70: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my │ │ │ -00024f80: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{ │ │ │ -00024f90: 272d 6769 6427 7d3b 0a0a 2020 2020 6d79 '-gid'};.. my │ │ │ -00024fa0: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = │ │ │ -00024fb0: 303b 2020 2023 2069 7272 656c 6576 616e 0; # irrelevan │ │ │ -00024fc0: 740a 0a20 2020 2024 7365 6c66 2d3e 7b27 t.. $self->{' │ │ │ -00024fd0: 7772 6974 6543 6865 636b 5375 6d46 696c writeCheckSumFil │ │ │ -00024fe0: 6527 7d2d 3e77 7269 7465 2827 2d66 696c e'}->write('-fil │ │ │ -00024ff0: 656e 616d 6527 203d 3e20 2473 796d 6c69 ename' => $symli │ │ │ -00025000: 6e6b 2c0a 0909 0909 0927 2d6d 6435 7375 nk,......'-md5su │ │ │ -00025010: 6d27 203d 3e20 2773 796d 6c69 6e6b 272c m' => 'symlink', │ │ │ -00025020: 0a09 0909 0909 272d 636f 6d70 7227 203d ......'-compr' = │ │ │ -00025030: 3e20 302c 0a09 0909 0909 272d 6465 7627 > 0,......'-dev' │ │ │ -00025040: 203d 3e20 2464 6576 2c0a 0909 0909 0927 => $dev,......' │ │ │ -00025050: 2d69 6e6f 6465 2720 3d3e 2024 696e 6f64 -inode' => $inod │ │ │ -00025060: 652c 0a09 0909 0909 272d 696e 6f64 6542 e,......'-inodeB │ │ │ -00025070: 6163 6b75 7027 203d 3e20 2469 6e6f 6465 ackup' => $inode │ │ │ -00025080: 4261 636b 7570 2c0a 0909 0909 0927 2d63 Backup,......'-c │ │ │ -00025090: 7469 6d65 2720 3d3e 2024 6374 696d 652c time' => $ctime, │ │ │ -000250a0: 0a09 0909 0909 272d 6d74 696d 6527 203d ......'-mtime' = │ │ │ -000250b0: 3e20 246d 7469 6d65 2c0a 0909 0909 0927 > $mtime,......' │ │ │ -000250c0: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim │ │ │ -000250d0: 652c 0a09 0909 0909 272d 7369 7a65 2720 e,......'-size' │ │ │ -000250e0: 3d3e 2030 2c0a 0909 0909 0927 2d75 6964 => 0,......'-uid │ │ │ -000250f0: 2720 3d3e 2024 7569 642c 0a09 0909 0909 ' => $uid,...... │ │ │ -00025100: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,. │ │ │ -00025110: 0909 0909 0927 2d6d 6f64 6527 203d 3e20 .....'-mode' => │ │ │ -00025120: 300a 0909 0909 0929 3b0a 7d0a 0a0a 2323 0......);.}...## │ │ │ -00025130: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025140: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025150: 2323 2323 2323 0a73 7562 2073 746f 7265 ######.sub store │ │ │ -00025160: 4e61 6d65 6450 6970 650a 7b0a 2020 2020 NamedPipe.{. │ │ │ -00025170: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -00025180: 3b0a 0a20 2020 206d 7920 2825 7061 7261 ;.. my (%para │ │ │ -00025190: 6d73 2920 3d20 2827 2d70 6970 6527 2020 ms) = ('-pipe' │ │ │ -000251a0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -000251b0: 272d 6465 7627 2020 203d 3e20 756e 6465 '-dev' => unde │ │ │ -000251c0: 662c 0a09 0920 2020 2027 2d69 6e6f 6465 f,... '-inode │ │ │ -000251d0: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... │ │ │ -000251e0: 2020 272d 6374 696d 6527 203d 3e20 756e '-ctime' => un │ │ │ -000251f0: 6465 662c 0a09 0920 2020 2027 2d6d 7469 def,... '-mti │ │ │ -00025200: 6d65 2720 3d3e 2075 6e64 6566 2c0a 0909 me' => undef,... │ │ │ -00025210: 2020 2020 272d 6174 696d 6527 203d 3e20 '-atime' => │ │ │ -00025220: 756e 6465 662c 0a09 0920 2020 2027 2d75 undef,... '-u │ │ │ -00025230: 6964 2720 2020 3d3e 2075 6e64 6566 2c0a id' => undef,. │ │ │ -00025240: 0909 2020 2020 272d 6769 6427 2020 203d .. '-gid' = │ │ │ -00025250: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ -00025260: 2d6d 6f64 6527 2020 3d3e 2075 6e64 6566 -mode' => undef │ │ │ -00025270: 0a09 0920 2020 2029 3b0a 0a20 2020 2026 ... );.. & │ │ │ -00025280: 3a3a 6368 6563 6b4f 626a 6563 7450 6172 ::checkObjectPar │ │ │ -00025290: 616d 7328 5c25 7061 7261 6d73 2c20 5c40 ams(\%params, \@ │ │ │ -000252a0: 5f2c 2027 616b 7446 696c 656e 616d 653a _, 'aktFilename: │ │ │ -000252b0: 3a73 746f 7265 4e61 6d65 6450 6970 6527 :storeNamedPipe' │ │ │ -000252c0: 2c0a 0909 0920 5b27 2d70 6970 6527 2c20 ,.... ['-pipe', │ │ │ -000252d0: 272d 6374 696d 6527 2c20 272d 6d74 696d '-ctime', '-mtim │ │ │ -000252e0: 6527 2c20 272d 6174 696d 6527 2c0a 0909 e', '-atime',... │ │ │ -000252f0: 0920 2027 2d75 6964 272c 2027 2d67 6964 . '-uid', '-gid │ │ │ -00025300: 272c 2027 2d6d 6f64 6527 5d29 3b0a 0a20 ', '-mode']);.. │ │ │ -00025310: 2020 206d 7920 2470 6970 6520 3d20 2470 my $pipe = $p │ │ │ -00025320: 6172 616d 737b 272d 7069 7065 277d 3b0a arams{'-pipe'};. │ │ │ -00025330: 2020 2020 6d79 2024 6465 7620 3d20 2470 my $dev = $p │ │ │ -00025340: 6172 616d 737b 272d 6465 7627 7d3b 0a20 arams{'-dev'};. │ │ │ -00025350: 2020 206d 7920 2469 6e6f 6465 203d 2024 my $inode = $ │ │ │ -00025360: 7061 7261 6d73 7b27 2d69 6e6f 6465 277d params{'-inode'} │ │ │ -00025370: 3b0a 2020 2020 6d79 2024 6374 696d 6520 ;. my $ctime │ │ │ -00025380: 3d20 2470 6172 616d 737b 272d 6374 696d = $params{'-ctim │ │ │ -00025390: 6527 7d3b 0a20 2020 206d 7920 246d 7469 e'};. my $mti │ │ │ -000253a0: 6d65 203d 2024 7061 7261 6d73 7b27 2d6d me = $params{'-m │ │ │ -000253b0: 7469 6d65 277d 3b0a 2020 2020 6d79 2024 time'};. my $ │ │ │ -000253c0: 6174 696d 6520 3d20 2470 6172 616d 737b atime = $params{ │ │ │ -000253d0: 272d 6174 696d 6527 7d3b 0a20 2020 206d '-atime'};. m │ │ │ -000253e0: 7920 2475 6964 203d 2024 7061 7261 6d73 y $uid = $params │ │ │ -000253f0: 7b27 2d75 6964 277d 3b0a 2020 2020 6d79 {'-uid'};. my │ │ │ -00025400: 2024 6769 6420 3d20 2470 6172 616d 737b $gid = $params{ │ │ │ -00025410: 272d 6769 6427 7d3b 0a20 2020 206d 7920 '-gid'};. my │ │ │ -00025420: 246d 6f64 6520 3d20 2470 6172 616d 737b $mode = $params{ │ │ │ -00025430: 272d 6d6f 6465 277d 3b0a 0a20 2020 206d '-mode'};.. m │ │ │ -00025440: 7920 2469 6e6f 6465 4261 636b 7570 203d y $inodeBackup = │ │ │ -00025450: 2030 3b20 2020 2320 6972 7265 6c65 7661 0; # irreleva │ │ │ -00025460: 6e74 0a0a 2020 2020 2473 656c 662d 3e7b nt.. $self->{ │ │ │ -00025470: 2777 7269 7465 4368 6563 6b53 756d 4669 'writeCheckSumFi │ │ │ -00025480: 6c65 277d 2d3e 7772 6974 6528 272d 6669 le'}->write('-fi │ │ │ -00025490: 6c65 6e61 6d65 2720 3d3e 2024 7069 7065 lename' => $pipe │ │ │ -000254a0: 2c0a 0909 0909 0927 2d6d 6435 7375 6d27 ,......'-md5sum' │ │ │ -000254b0: 203d 3e20 2770 6970 6527 2c0a 0909 0909 => 'pipe',..... │ │ │ -000254c0: 0927 2d63 6f6d 7072 2720 3d3e 2030 2c0a .'-compr' => 0,. │ │ │ -000254d0: 0909 0909 0927 2d64 6576 2720 3d3e 2024 .....'-dev' => $ │ │ │ -000254e0: 6465 762c 0a09 0909 0909 272d 696e 6f64 dev,......'-inod │ │ │ -000254f0: 6527 203d 3e20 2469 6e6f 6465 2c0a 0909 e' => $inode,... │ │ │ -00025500: 0909 0927 2d69 6e6f 6465 4261 636b 7570 ...'-inodeBackup │ │ │ -00025510: 2720 3d3e 2024 696e 6f64 6542 6163 6b75 ' => $inodeBacku │ │ │ -00025520: 702c 0a09 0909 0909 272d 6374 696d 6527 p,......'-ctime' │ │ │ -00025530: 203d 3e20 2463 7469 6d65 2c0a 0909 0909 => $ctime,..... │ │ │ -00025540: 0927 2d6d 7469 6d65 2720 3d3e 2024 6d74 .'-mtime' => $mt │ │ │ -00025550: 696d 652c 0a09 0909 0909 272d 6174 696d ime,......'-atim │ │ │ -00025560: 6527 203d 3e20 2461 7469 6d65 2c0a 0909 e' => $atime,... │ │ │ -00025570: 0909 0927 2d73 697a 6527 203d 3e20 302c ...'-size' => 0, │ │ │ -00025580: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => │ │ │ -00025590: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid │ │ │ -000255a0: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,...... │ │ │ -000255b0: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode │ │ │ -000255c0: 0a09 0909 0909 293b 0a7d 0a0a 0a23 2323 ......);.}...### │ │ │ -000255d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000255e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000255f0: 2323 2323 230a 7375 6220 7374 6f72 6553 #####.sub storeS │ │ │ -00025600: 7065 6369 616c 0a7b 0a20 2020 206d 7920 pecial.{. my │ │ │ -00025610: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ -00025620: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params) │ │ │ -00025630: 203d 2028 272d 6e61 6d65 2720 203d 3e20 = ('-name' => │ │ │ -00025640: 756e 6465 662c 0a20 2020 2020 2020 2020 undef,. │ │ │ -00025650: 2020 2020 2020 2020 2020 2027 2d74 7970 '-typ │ │ │ -00025660: 6527 2020 3d3e 2075 6e64 6566 2c0a 0909 e' => undef,... │ │ │ -00025670: 2020 2020 272d 6465 7627 2020 203d 3e20 '-dev' => │ │ │ -00025680: 756e 6465 662c 0a09 0920 2020 2027 2d69 undef,... '-i │ │ │ -00025690: 6e6f 6465 2720 3d3e 2075 6e64 6566 2c0a node' => undef,. │ │ │ -000256a0: 0909 2020 2020 272d 6374 696d 6527 203d .. '-ctime' = │ │ │ -000256b0: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ -000256c0: 2d6d 7469 6d65 2720 3d3e 2075 6e64 6566 -mtime' => undef │ │ │ -000256d0: 2c0a 0909 2020 2020 272d 6174 696d 6527 ,... '-atime' │ │ │ -000256e0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -000256f0: 2027 2d75 6964 2720 2020 3d3e 2075 6e64 '-uid' => und │ │ │ -00025700: 6566 2c0a 0909 2020 2020 272d 6769 6427 ef,... '-gid' │ │ │ -00025710: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -00025720: 2020 2027 2d6d 6f64 6527 2020 3d3e 2075 '-mode' => u │ │ │ -00025730: 6e64 6566 0a09 0920 2020 2029 3b0a 0a20 ndef... );.. │ │ │ -00025740: 2020 2026 3a3a 6368 6563 6b4f 626a 6563 &::checkObjec │ │ │ -00025750: 7450 6172 616d 7328 5c25 7061 7261 6d73 tParams(\%params │ │ │ -00025760: 2c20 5c40 5f2c 2027 616b 7446 696c 656e , \@_, 'aktFilen │ │ │ -00025770: 616d 653a 3a73 746f 7265 5370 6563 6961 ame::storeSpecia │ │ │ -00025780: 6c27 2c0a 0909 0920 5b27 2d6e 616d 6527 l',.... ['-name' │ │ │ -00025790: 2c20 272d 6374 696d 6527 2c20 272d 6d74 , '-ctime', '-mt │ │ │ -000257a0: 696d 6527 2c20 272d 6174 696d 6527 2c0a ime', '-atime',. │ │ │ -000257b0: 0909 0920 2027 2d75 6964 272c 2027 2d67 ... '-uid', '-g │ │ │ -000257c0: 6964 272c 2027 2d6d 6f64 6527 2c20 272d id', '-mode', '- │ │ │ -000257d0: 7479 7065 275d 293b 0a0a 2020 2020 6d79 type']);.. my │ │ │ -000257e0: 2024 6e61 6d65 203d 2024 7061 7261 6d73 $name = $params │ │ │ -000257f0: 7b27 2d6e 616d 6527 7d3b 0a20 2020 206d {'-name'};. m │ │ │ -00025800: 7920 2474 7970 6520 3d20 2470 6172 616d y $type = $param │ │ │ -00025810: 737b 272d 7479 7065 277d 3b0a 2020 2020 s{'-type'};. │ │ │ -00025820: 6d79 2024 6465 7620 3d20 2470 6172 616d my $dev = $param │ │ │ -00025830: 737b 272d 6465 7627 7d3b 0a20 2020 206d s{'-dev'};. m │ │ │ -00025840: 7920 2469 6e6f 6465 203d 2024 7061 7261 y $inode = $para │ │ │ -00025850: 6d73 7b27 2d69 6e6f 6465 277d 3b0a 2020 ms{'-inode'};. │ │ │ -00025860: 2020 6d79 2024 6374 696d 6520 3d20 2470 my $ctime = $p │ │ │ -00025870: 6172 616d 737b 272d 6374 696d 6527 7d3b arams{'-ctime'}; │ │ │ -00025880: 0a20 2020 206d 7920 246d 7469 6d65 203d . my $mtime = │ │ │ -00025890: 2024 7061 7261 6d73 7b27 2d6d 7469 6d65 $params{'-mtime │ │ │ -000258a0: 277d 3b0a 2020 2020 6d79 2024 6174 696d '};. my $atim │ │ │ -000258b0: 6520 3d20 2470 6172 616d 737b 272d 6174 e = $params{'-at │ │ │ -000258c0: 696d 6527 7d3b 0a20 2020 206d 7920 2475 ime'};. my $u │ │ │ -000258d0: 6964 203d 2024 7061 7261 6d73 7b27 2d75 id = $params{'-u │ │ │ -000258e0: 6964 277d 3b0a 2020 2020 6d79 2024 6769 id'};. my $gi │ │ │ -000258f0: 6420 3d20 2470 6172 616d 737b 272d 6769 d = $params{'-gi │ │ │ -00025900: 6427 7d3b 0a20 2020 206d 7920 246d 6f64 d'};. my $mod │ │ │ -00025910: 6520 3d20 2470 6172 616d 737b 272d 6d6f e = $params{'-mo │ │ │ -00025920: 6465 277d 3b0a 0a20 2020 206d 7920 2469 de'};.. my $i │ │ │ -00025930: 6e6f 6465 4261 636b 7570 203d 2030 3b20 nodeBackup = 0; │ │ │ -00025940: 2020 2320 6972 7265 6c65 7661 6e74 0a0a # irrelevant.. │ │ │ -00025950: 2020 2020 2474 7970 6520 3d20 2273 6f63 $type = "soc │ │ │ -00025960: 6b65 7422 2069 6620 2474 7970 6520 6571 ket" if $type eq │ │ │ -00025970: 2022 5322 3b0a 2020 2020 2474 7970 6520 "S";. $type │ │ │ -00025980: 3d20 2262 6c6f 636b 6465 7622 2069 6620 = "blockdev" if │ │ │ -00025990: 2474 7970 6520 6571 2022 6222 3b0a 2020 $type eq "b";. │ │ │ -000259a0: 2020 2474 7970 6520 3d20 2263 6861 7264 $type = "chard │ │ │ -000259b0: 6576 2220 6966 2024 7479 7065 2065 7120 ev" if $type eq │ │ │ -000259c0: 2263 223b 0a0a 2020 2020 2473 656c 662d "c";.. $self- │ │ │ -000259d0: 3e7b 2777 7269 7465 4368 6563 6b53 756d >{'writeCheckSum │ │ │ -000259e0: 4669 6c65 277d 2d3e 7772 6974 6528 272d File'}->write('- │ │ │ -000259f0: 6669 6c65 6e61 6d65 2720 3d3e 2024 6e61 filename' => $na │ │ │ -00025a00: 6d65 2c0a 0909 0909 0927 2d6d 6435 7375 me,......'-md5su │ │ │ -00025a10: 6d27 203d 3e20 2474 7970 652c 0a09 0909 m' => $type,.... │ │ │ -00025a20: 0909 272d 636f 6d70 7227 203d 3e20 2775 ..'-compr' => 'u │ │ │ -00025a30: 272c 0a09 0909 0909 272d 6465 7627 203d ',......'-dev' = │ │ │ -00025a40: 3e20 2464 6576 2c0a 0909 0909 0927 2d69 > $dev,......'-i │ │ │ -00025a50: 6e6f 6465 2720 3d3e 2024 696e 6f64 652c node' => $inode, │ │ │ -00025a60: 0a09 0909 0909 272d 696e 6f64 6542 6163 ......'-inodeBac │ │ │ -00025a70: 6b75 7027 203d 3e20 2469 6e6f 6465 4261 kup' => $inodeBa │ │ │ -00025a80: 636b 7570 2c0a 0909 0909 0927 2d63 7469 ckup,......'-cti │ │ │ -00025a90: 6d65 2720 3d3e 2024 6374 696d 652c 0a09 me' => $ctime,.. │ │ │ -00025aa0: 0909 0909 272d 6d74 696d 6527 203d 3e20 ....'-mtime' => │ │ │ -00025ab0: 246d 7469 6d65 2c0a 0909 0909 0927 2d61 $mtime,......'-a │ │ │ -00025ac0: 7469 6d65 2720 3d3e 2024 6174 696d 652c time' => $atime, │ │ │ -00025ad0: 0a09 0909 0909 272d 7369 7a65 2720 3d3e ......'-size' => │ │ │ -00025ae0: 2030 2c0a 0909 0909 0927 2d75 6964 2720 0,......'-uid' │ │ │ -00025af0: 3d3e 2024 7569 642c 0a09 0909 0909 272d => $uid,......'- │ │ │ -00025b00: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,... │ │ │ -00025b10: 0909 0927 2d6d 6f64 6527 203d 3e20 246d ...'-mode' => $m │ │ │ -00025b20: 6f64 650a 0909 0909 0929 3b0a 7d0a 0a0a ode......);.}... │ │ │ -00025b30: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -00025b40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025b50: 2323 2323 2323 2323 230a 2320 666f 7220 #########.# for │ │ │ -00025b60: 7369 676e 616c 2068 616e 646c 696e 670a signal handling. │ │ │ -00025b70: 7375 6220 6465 6c49 6e66 6f46 696c 650a sub delInfoFile. │ │ │ -00025b80: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ -00025b90: 2073 6869 6674 3b0a 0a20 2020 2075 6e6c shift;.. unl │ │ │ -00025ba0: 696e 6b20 2473 656c 662d 3e7b 2769 6e66 ink $self->{'inf │ │ │ -00025bb0: 6f46 696c 6527 7d3b 0a7d 0a0a 0a23 2323 oFile'};.}...### │ │ │ -00025bc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025bd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025be0: 2323 2323 230a 7375 6220 636c 6f73 6549 #####.sub closeI │ │ │ -00025bf0: 6e66 6f46 696c 650a 7b0a 2020 2020 6d79 nfoFile.{. my │ │ │ -00025c00: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -00025c10: 0a20 2020 2024 7365 6c66 2d3e 7b27 7772 . $self->{'wr │ │ │ -00025c20: 6974 6543 6865 636b 5375 6d46 696c 6527 iteCheckSumFile' │ │ │ -00025c30: 7d2d 3e64 6573 7472 6f79 2829 3b0a 7d0a }->destroy();.}. │ │ │ -00025c40: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ -00025c50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025c70: 2323 2323 0a70 6163 6b61 6765 2072 6561 ####.package rea │ │ │ -00025c80: 6444 6972 4368 6563 6b53 697a 6554 696d dDirCheckSizeTim │ │ │ -00025c90: 653b 0a6f 7572 2040 4953 4120 3d20 7177 e;.our @ISA = qw │ │ │ -00025ca0: 2820 7265 6375 7273 6976 6552 6561 6444 ( recursiveReadD │ │ │ -00025cb0: 6972 2029 3b0a 0a23 2323 2323 2323 2323 ir );..######### │ │ │ -00025cc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00025cd0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00025ce0: 7375 6220 6e65 770a 7b0a 2020 2020 6d79 sub new.{. my │ │ │ -00025cf0: 2024 636c 6173 7320 3d20 7368 6966 743b $class = shift; │ │ │ -00025d00: 0a0a 2020 2020 6d79 2028 2570 6172 616d .. my (%param │ │ │ -00025d10: 7329 203d 2028 272d 6469 7227 2020 2020 s) = ('-dir' │ │ │ -00025d20: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ -00025d30: 2c20 2320 7a75 2064 7572 6368 7375 6368 , # zu durchsuch │ │ │ -00025d40: 656e 6465 7320 6469 7265 6374 6f72 790a endes directory. │ │ │ -00025d50: 0909 2020 2020 272d 6164 6d69 6e44 6972 .. '-adminDir │ │ │ -00025d60: 7327 2020 2020 2020 3d3e 2075 6e64 6566 s' => undef │ │ │ -00025d70: 2c20 2320 4f62 6a65 6b74 206d 6974 2049 , # Objekt mit I │ │ │ -00025d80: 6e66 6f73 2076 6f6e 0a09 0920 2020 2020 nfos von... │ │ │ -00025d90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00025da0: 2020 2020 2020 2020 2020 2023 2056 6572 # Ver │ │ │ -00025db0: 7a65 6963 686e 6973 7365 6e0a 0909 2020 zeichnissen... │ │ │ -00025dc0: 2020 272d 6f6c 6446 696c 656e 616d 6527 '-oldFilename' │ │ │ -00025dd0: 2020 2020 3d3e 2075 6e64 6566 2c20 2320 => undef, # │ │ │ -00025de0: 4f62 6a65 6b74 206d 6974 2061 6c74 656e Objekt mit alten │ │ │ -00025df0: 2044 424d 7320 6574 632e 0a09 0920 2020 DBMs etc.... │ │ │ -00025e00: 2027 2d61 6b74 4669 6c65 6e61 6d65 2720 '-aktFilename' │ │ │ -00025e10: 2020 203d 3e20 756e 6465 662c 2023 204f => undef, # O │ │ │ -00025e20: 626a 656b 7420 66c3 bc72 206e 6575 6520 bjekt f..r neue │ │ │ -00025e30: 4d65 7461 2049 6e66 6f73 0a09 0920 2020 Meta Infos... │ │ │ -00025e40: 2027 2d61 6b74 4469 7227 2020 2020 2020 '-aktDir' │ │ │ -00025e50: 2020 203d 3e20 756e 6465 662c 2023 207a => undef, # z │ │ │ -00025e60: 7520 7369 6368 6572 6e64 6573 2044 6972 u sicherndes Dir │ │ │ -00025e70: 6563 746f 7279 0a09 0920 2020 2027 2d66 ectory... '-f │ │ │ -00025e80: 6f6c 6c6f 774c 696e 6b73 2720 2020 203d ollowLinks' = │ │ │ -00025e90: 3e20 302c 2020 2020 2023 2054 6965 6665 > 0, # Tiefe │ │ │ -00025ea0: 2c20 6269 7320 7a75 2064 6572 2073 796d , bis zu der sym │ │ │ -00025eb0: 6c69 6e6b 730a 0909 2020 2020 2020 2020 links... │ │ │ -00025ec0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00025ed0: 2020 2020 2020 2020 2320 6765 666f 6c67 # gefolg │ │ │ -00025ee0: 7420 7765 7264 656e 2073 6f6c 6c0a 0909 t werden soll... │ │ │ -00025ef0: 2020 2020 272d 6578 6365 7074 4469 7273 '-exceptDirs │ │ │ -00025f00: 2720 2020 2020 3d3e 205b 5d2c 2020 2020 ' => [], │ │ │ -00025f10: 2320 4175 736e 6168 6d65 7665 727a 6569 # Ausnahmeverzei │ │ │ -00025f20: 6368 6e69 7373 650a 0909 2020 2020 272d chnisse... '- │ │ │ -00025f30: 696e 636c 7564 6544 6972 7327 2020 2020 includeDirs' │ │ │ -00025f40: 3d3e 205b 5d2c 2020 2020 2320 6f6e 6c79 => [], # only │ │ │ -00025f50: 2069 6e63 6c75 6465 2074 6865 7365 2064 include these d │ │ │ -00025f60: 6972 730a 0909 2020 2020 272d 7374 6179 irs... '-stay │ │ │ -00025f70: 496e 4669 6c65 5379 7374 656d 2720 3d3e InFileSystem' => │ │ │ -00025f80: 2030 2c20 2020 2320 646f 6e27 7420 6c65 0, # don't le │ │ │ -00025f90: 6176 6520 6669 6c65 2073 7973 7465 6d2c ave file system, │ │ │ -00025fa0: 2062 7574 0a09 0920 2020 2020 2020 2020 but... │ │ │ -00025fb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00025fc0: 2020 2020 2020 2023 2063 6f6e 7369 6465 # conside │ │ │ -00025fd0: 7220 2d2d 666f 6c6c 6f77 4c69 6e6b 730a r --followLinks. │ │ │ -00025fe0: 0909 2020 2020 272d 706f 7374 6669 7827 .. '-postfix' │ │ │ -00025ff0: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ -00026000: 2c20 2320 506f 7374 6669 782c 2064 6572 , # Postfix, der │ │ │ -00026010: 206e 6163 6820 4b6f 6d70 722e 0a09 0920 nach Kompr.... │ │ │ -00026020: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00026030: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00026040: 2061 6e67 6568 c3a4 6e67 7420 7765 7264 angeh..ngt werd │ │ │ -00026050: 656e 2073 6f6c 6c0a 0909 2020 2020 272d en soll... '- │ │ │ -00026060: 696e 636c 7564 6552 756c 6527 2020 2020 includeRule' │ │ │ -00026070: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -00026080: 272d 6578 6365 7074 5275 6c65 2720 2020 '-exceptRule' │ │ │ -00026090: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -000260a0: 2020 272d 6368 6563 6b42 6c6f 636b 7352 '-checkBlocksR │ │ │ -000260b0: 756c 6527 203d 3e20 756e 6465 662c 0a09 ule' => undef,.. │ │ │ -000260c0: 0920 2020 2027 2d77 7269 7465 4578 636c . '-writeExcl │ │ │ -000260d0: 7564 654c 6f67 273d 3e20 756e 6465 662c udeLog'=> undef, │ │ │ -000260e0: 0a09 0920 2020 2027 2d65 7854 7970 6573 ... '-exTypes │ │ │ -000260f0: 2720 2020 2020 2020 203d 3e20 756e 6465 ' => unde │ │ │ -00026100: 662c 0a09 0920 2020 2027 2d72 6573 6574 f,... '-reset │ │ │ -00026110: 4174 696d 6527 2020 2020 203d 3e20 756e Atime' => un │ │ │ -00026120: 6465 662c 0a20 2020 2020 2020 2020 2020 def,. │ │ │ -00026130: 2020 2020 2020 2020 2027 2d63 7049 7347 '-cpIsG │ │ │ -00026140: 6e75 2720 2020 2020 2020 203d 3e20 756e nu' => un │ │ │ -00026150: 6465 662c 0a09 0920 2020 2027 2d64 6562 def,... '-deb │ │ │ -00026160: 7567 4d6f 6465 2720 2020 2020 203d 3e20 ugMode' => │ │ │ -00026170: 756e 6465 662c 0a09 0920 2020 2027 2d76 undef,... '-v │ │ │ -00026180: 6572 626f 7365 2720 2020 2020 2020 203d erbose' = │ │ │ -00026190: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ -000261a0: 2d74 6d70 6469 7227 2020 2020 2020 2020 -tmpdir' │ │ │ -000261b0: 203d 3e20 756e 6465 662c 0a09 0920 2020 => undef,... │ │ │ -000261c0: 2027 2d70 724c 6f67 2720 2020 2020 2020 '-prLog' │ │ │ -000261d0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -000261e0: 2020 2027 2d70 724c 6f67 4572 726f 7227 '-prLogError' │ │ │ -000261f0: 2020 2020 203d 3e20 2745 272c 0a09 0920 => 'E',... │ │ │ -00026200: 2020 2027 2d70 724c 6f67 5761 726e 2720 '-prLogWarn' │ │ │ -00026210: 2020 2020 203d 3e20 2757 272c 0a09 0920 => 'W',... │ │ │ -00026220: 2020 2027 2d65 7869 7449 6645 7272 6f72 '-exitIfError │ │ │ -00026230: 2720 2020 203d 3e20 312c 2020 2020 2020 ' => 1, │ │ │ -00026240: 2320 4572 726f 7263 6f64 6520 6265 6920 # Errorcode bei │ │ │ -00026250: 4665 686c 6572 0a09 0920 2020 2027 2d69 Fehler... '-i │ │ │ -00026260: 676e 6f72 6552 6561 6445 7272 6f72 2720 gnoreReadError' │ │ │ -00026270: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... ' │ │ │ -00026280: 2d69 676e 6f72 6554 696d 6527 2020 2020 -ignoreTime' │ │ │ -00026290: 203d 3e20 276e 6f6e 6527 2c0a 0909 2020 => 'none',... │ │ │ -000262a0: 2020 272d 7072 696e 7444 6570 7468 2720 '-printDepth' │ │ │ -000262b0: 2020 2020 3d3e 2075 6e64 6566 0a09 0920 => undef... │ │ │ -000262c0: 2020 2029 3b0a 0a20 2020 2026 3a3a 6368 );.. &::ch │ │ │ -000262d0: 6563 6b4f 626a 6563 7450 6172 616d 7328 eckObjectParams( │ │ │ -000262e0: 5c25 7061 7261 6d73 2c20 5c40 5f2c 2027 \%params, \@_, ' │ │ │ -000262f0: 7265 6164 4469 7243 6865 636b 5369 7a65 readDirCheckSize │ │ │ -00026300: 5469 6d65 3a3a 6e65 7727 2c0a 0909 0920 Time::new',.... │ │ │ -00026310: 5b27 2d64 6972 272c 2027 2d6f 6c64 4669 ['-dir', '-oldFi │ │ │ -00026320: 6c65 6e61 6d65 272c 2027 2d61 6b74 4469 lename', '-aktDi │ │ │ -00026330: 7227 2c20 272d 6578 5479 7065 7327 2c0a r', '-exTypes',. │ │ │ -00026340: 0909 0920 2027 2d70 6f73 7466 6978 272c ... '-postfix', │ │ │ -00026350: 2027 2d61 646d 696e 4469 7273 272c 2027 '-adminDirs', ' │ │ │ -00026360: 2d70 724c 6f67 272c 0a09 0909 2020 272d -prLog',.... '- │ │ │ -00026370: 7072 696e 7444 6570 7468 275d 293b 0a0a printDepth']);.. │ │ │ -00026380: 2020 2020 6966 2028 6465 6669 6e65 6420 if (defined │ │ │ -00026390: 2470 6172 616d 737b 2d64 6972 7d29 0a20 $params{-dir}). │ │ │ -000263a0: 2020 207b 0a09 2470 6172 616d 737b 272d {..$params{'- │ │ │ -000263b0: 6469 7227 7d20 3d7e 2073 2f5c 2f5c 2f2f dir'} =~ s/\/\// │ │ │ -000263c0: 5c2f 2f67 3b20 2020 2020 2020 2023 202f \//g; # / │ │ │ -000263d0: 2f20 2d3e 202f 0a09 2470 6172 616d 737b / -> /..$params{ │ │ │ -000263e0: 272d 6469 7227 7d20 3d7e 2073 2f5c 4128 '-dir'} =~ s/\A( │ │ │ -000263f0: 2e2b 295c 2f5c 5a2f 2431 2f3b 2020 2023 .+)\/\Z/$1/; # │ │ │ -00026400: 2072 656d 6f76 6520 7472 6169 6c69 6e67 remove trailing │ │ │ -00026410: 202f 0a20 2020 207d 0a0a 2020 2020 6d79 /. }.. my │ │ │ -00026420: 2024 7365 6c66 203d 2072 6563 7572 7369 $self = recursi │ │ │ -00026430: 7665 5265 6164 4469 722d 3e6e 6577 2827 veReadDir->new(' │ │ │ -00026440: 2d64 6972 7327 203d 3e20 5b24 7061 7261 -dirs' => [$para │ │ │ -00026450: 6d73 7b27 2d64 6972 277d 5d2c 0a09 0909 ms{'-dir'}],.... │ │ │ -00026460: 0920 2020 2020 272d 666f 6c6c 6f77 4c69 . '-followLi │ │ │ -00026470: 6e6b 7327 203d 3e20 2470 6172 616d 737b nks' => $params{ │ │ │ -00026480: 272d 666f 6c6c 6f77 4c69 6e6b 7327 7d2c '-followLinks'}, │ │ │ -00026490: 0a09 0909 0920 2020 2020 272d 7374 6179 ..... '-stay │ │ │ -000264a0: 496e 4669 6c65 5379 7374 656d 2720 3d3e InFileSystem' => │ │ │ -000264b0: 0a09 0909 0920 2020 2020 2020 2020 2470 ..... $p │ │ │ -000264c0: 6172 616d 737b 272d 7374 6179 496e 4669 arams{'-stayInFi │ │ │ -000264d0: 6c65 5379 7374 656d 277d 2c0a 0909 0909 leSystem'},..... │ │ │ -000264e0: 2020 2020 2027 2d65 7863 6570 7444 6972 '-exceptDir │ │ │ -000264f0: 7327 203d 3e20 2470 6172 616d 737b 272d s' => $params{'- │ │ │ -00026500: 6578 6365 7074 4469 7273 277d 2c0a 0909 exceptDirs'},... │ │ │ -00026510: 0909 2020 2020 2027 2d69 6e63 6c75 6465 .. '-include │ │ │ -00026520: 4469 7273 2720 3d3e 2024 7061 7261 6d73 Dirs' => $params │ │ │ -00026530: 7b27 2d69 6e63 6c75 6465 4469 7273 277d {'-includeDirs'} │ │ │ -00026540: 2c0a 0909 0909 2020 2020 2027 2d70 724c ,..... '-prL │ │ │ -00026550: 6f67 2720 3d3e 2024 7061 7261 6d73 7b27 og' => $params{' │ │ │ -00026560: 2d70 724c 6f67 277d 2c0a 0909 0909 2020 -prLog'},..... │ │ │ -00026570: 2020 2027 2d70 724c 6f67 4572 726f 7227 '-prLogError' │ │ │ -00026580: 203d 3e20 2470 6172 616d 737b 272d 7072 => $params{'-pr │ │ │ -00026590: 4c6f 6745 7272 6f72 277d 2c0a 0909 0909 LogError'},..... │ │ │ -000265a0: 2020 2020 2027 2d70 724c 6f67 5761 726e '-prLogWarn │ │ │ -000265b0: 2720 3d3e 2024 7061 7261 6d73 7b27 2d70 ' => $params{'-p │ │ │ -000265c0: 724c 6f67 5761 726e 277d 2c0a 0909 0909 rLogWarn'},..... │ │ │ -000265d0: 2020 2020 2027 2d76 6572 626f 7365 2720 '-verbose' │ │ │ -000265e0: 3d3e 2024 7061 7261 6d73 7b27 2d76 6572 => $params{'-ver │ │ │ -000265f0: 626f 7365 277d 2c0a 0909 0909 2020 2020 bose'},..... │ │ │ -00026600: 2027 2d65 7869 7449 6645 7272 6f72 2720 '-exitIfError' │ │ │ -00026610: 3d3e 2024 7061 7261 6d73 7b27 2d65 7869 => $params{'-exi │ │ │ -00026620: 7449 6645 7272 6f72 277d 2c0a 0909 0909 tIfError'},..... │ │ │ -00026630: 2020 2020 2027 2d70 7269 6e74 4465 7074 '-printDept │ │ │ -00026640: 6827 203d 3e20 2470 6172 616d 737b 272d h' => $params{'- │ │ │ -00026650: 7072 696e 7444 6570 7468 277d 2c0a 0909 printDepth'},... │ │ │ -00026660: 0909 2020 2020 2027 2d70 7269 6e74 4465 .. '-printDe │ │ │ -00026670: 7074 6850 726c 6f67 4b69 6e64 2720 3d3e pthPrlogKind' => │ │ │ -00026680: 2027 5027 0a09 0909 0920 2020 2020 293b 'P'..... ); │ │ │ -00026690: 0a20 2020 2026 3a3a 7365 7450 6172 616d . &::setParam │ │ │ -000266a0: 7344 6972 6563 7428 2473 656c 662c 205c sDirect($self, \ │ │ │ -000266b0: 2570 6172 616d 7329 3b0a 2020 2020 2473 %params);. $s │ │ │ -000266c0: 656c 662d 3e7b 2761 6b74 496e 666f 4669 elf->{'aktInfoFi │ │ │ -000266d0: 6c65 277d 203d 2024 7061 7261 6d73 7b27 le'} = $params{' │ │ │ -000266e0: 2d61 646d 696e 4469 7273 277d 2d3e 6765 -adminDirs'}->ge │ │ │ -000266f0: 7441 6b74 496e 666f 4669 6c65 2829 3b0a tAktInfoFile();. │ │ │ -00026700: 0a20 2020 2024 7365 6c66 2d3e 7b27 6d64 . $self->{'md │ │ │ -00026710: 3546 6f72 6b27 7d20 3d20 756e 6465 663b 5Fork'} = undef; │ │ │ -00026720: 2020 2020 2020 2320 6573 206c c3a4 7566 # es l..uf │ │ │ -00026730: 7420 6b65 696e 2070 6172 616c 6c65 6c65 t kein parallele │ │ │ -00026740: 7320 6d64 3573 756d 0a0a 2020 2020 6966 s md5sum.. if │ │ │ -00026750: 2028 2473 656c 662d 3e7b 2777 7269 7465 ($self->{'write │ │ │ -00026760: 4578 636c 7564 654c 6f67 277d 290a 2020 ExcludeLog'}). │ │ │ -00026770: 2020 7b0a 096d 7920 2477 636c 203d 2024 {..my $wcl = $ │ │ │ -00026780: 7365 6c66 2d3e 7b27 7772 6974 6545 7863 self->{'writeExc │ │ │ -00026790: 6c75 6465 4c6f 6727 7d3b 0a09 6d79 2024 ludeLog'};..my $ │ │ │ -000267a0: 6578 636c 4c6f 6720 3d20 7069 7065 546f exclLog = pipeTo │ │ │ -000267b0: 466f 726b 2d3e 6e65 7728 272d 6578 6563 Fork->new('-exec │ │ │ -000267c0: 2720 3d3e 2027 627a 6970 3227 2c0a 0909 ' => 'bzip2',... │ │ │ -000267d0: 0909 2020 2020 2020 272d 7374 646f 7574 .. '-stdout │ │ │ -000267e0: 2720 3d3e 2024 7763 6c2c 0a09 0909 0920 ' => $wcl,..... │ │ │ -000267f0: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom │ │ │ -00026800: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => "$tmpdir/st │ │ │ -00026810: 6275 5069 7065 546f 3131 2d22 2c0a 0909 buPipeTo11-",... │ │ │ -00026820: 0909 2020 2020 2020 272d 6465 6c53 7464 .. '-delStd │ │ │ -00026830: 6f75 7427 203d 3e20 276e 6f27 2c0a 0909 out' => 'no',... │ │ │ -00026840: 0909 2020 2020 2020 272d 7072 4c6f 6727 .. '-prLog' │ │ │ -00026850: 203d 3e20 2470 724c 6f67 293b 0a09 2473 => $prLog);..$s │ │ │ -00026860: 656c 662d 3e7b 2765 7863 6c4c 6f67 277d elf->{'exclLog'} │ │ │ -00026870: 203d 2024 6578 636c 4c6f 673b 0a20 2020 = $exclLog;. │ │ │ -00026880: 207d 0a0a 2020 2020 626c 6573 7320 2473 }.. bless $s │ │ │ -00026890: 656c 662c 2024 636c 6173 733b 0a7d 0a0a elf, $class;.}.. │ │ │ -000268a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -000268b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000268c0: 2323 2323 2323 2323 230a 2320 6c69 6566 #########.# lief │ │ │ -000268d0: 6572 7420 4261 7369 7376 6572 7a65 6963 ert Basisverzeic │ │ │ -000268e0: 686e 6973 2c20 6461 7a75 2072 656c 6174 hnis, dazu relat │ │ │ -000268f0: 6976 656e 2044 6174 6569 6e61 6d65 6e20 iven Dateinamen │ │ │ -00026900: 756e 6420 4669 6c65 7479 700a 7375 6220 und Filetyp.sub │ │ │ -00026910: 6e65 7874 0a7b 0a20 2020 206d 7920 2473 next.{. my $s │ │ │ -00026920: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. │ │ │ -00026930: 2020 6d79 2028 2466 2c20 2474 7970 6573 my ($f, $types │ │ │ -00026940: 293b 0a20 2020 206d 7920 246e 203d 2028 );. my $n = ( │ │ │ -00026950: 2466 2c20 2474 7970 6573 2920 3d20 2473 $f, $types) = $s │ │ │ -00026960: 656c 662d 3e72 6563 7572 7369 7665 5265 elf->recursiveRe │ │ │ -00026970: 6164 4469 723a 3a6e 6578 7428 293b 0a0a adDir::next();.. │ │ │ -00026980: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{ │ │ │ -00026990: 276d 6435 466f 726b 277d 2061 6e64 2024 'md5Fork'} and $ │ │ │ -000269a0: 6e20 3d3d 2030 290a 2020 2020 7b0a 2020 n == 0). {. │ │ │ -000269b0: 2020 2020 2020 2320 4966 2074 6865 7265 # If there │ │ │ -000269c0: 2077 6572 6520 6e6f 2064 6972 2773 206c were no dir's l │ │ │ -000269d0: 6566 7420 746f 2063 6865 636b 2c20 7265 eft to check, re │ │ │ -000269e0: 6164 4469 7220 6d61 7920 6e6f 7420 6861 adDir may not ha │ │ │ -000269f0: 7665 0a20 2020 2020 2020 2023 2062 6565 ve. # bee │ │ │ -00026a00: 6e20 6361 6c6c 6564 2062 7920 7468 6520 n called by the │ │ │ -00026a10: 6e65 7874 2829 2063 616c 6c20 6162 6f76 next() call abov │ │ │ -00026a20: 652e 2057 6520 6861 7665 2074 6f20 6361 e. We have to ca │ │ │ -00026a30: 6c6c 2069 740a 2020 2020 2020 2020 2320 ll it. # │ │ │ -00026a40: 6d61 6e75 616c 6c79 2074 6f20 6368 6563 manually to chec │ │ │ -00026a50: 6b20 7768 6574 6865 7220 7468 6520 6d64 k whether the md │ │ │ -00026a60: 3520 7072 6f63 6573 7320 6973 2066 696e 5 process is fin │ │ │ -00026a70: 6973 6865 6420 2861 6e64 0a20 2020 2020 ished (and. │ │ │ -00026a80: 2020 2023 2069 6620 736f 2c20 7265 7472 # if so, retr │ │ │ -00026a90: 6965 7665 2074 6865 2072 6573 756c 7473 ieve the results │ │ │ -00026aa0: 290a 0924 7365 6c66 2d3e 7265 6164 4469 )..$self->readDi │ │ │ -00026ab0: 7228 293b 0a09 7265 7475 726e 2028 2920 r();..return () │ │ │ -00026ac0: 6966 2028 407b 2473 656c 662d 3e7b 2766 if (@{$self->{'f │ │ │ -00026ad0: 696c 6573 277d 7d20 3d3d 2030 293b 0a20 iles'}} == 0);. │ │ │ -00026ae0: 2020 2020 2020 2024 6620 3d20 7368 6966 $f = shif │ │ │ -00026af0: 7420 407b 2473 656c 662d 3e7b 2766 696c t @{$self->{'fil │ │ │ -00026b00: 6573 277d 7d3b 0a09 2474 7970 6573 203d es'}};..$types = │ │ │ -00026b10: 2073 6869 6674 2040 7b24 7365 6c66 2d3e shift @{$self-> │ │ │ -00026b20: 7b27 7479 7065 7327 7d7d 3b0a 2020 2020 {'types'}};. │ │ │ -00026b30: 7d0a 2020 2020 656c 7369 6620 2824 6e20 }. elsif ($n │ │ │ -00026b40: 3d3d 2030 290a 2020 2020 7b0a 0972 6574 == 0). {..ret │ │ │ -00026b50: 7572 6e20 2829 3b0a 2020 2020 7d0a 0a20 urn ();. }.. │ │ │ -00026b60: 2020 206d 7920 246d 6435 203d 2073 6869 my $md5 = shi │ │ │ -00026b70: 6674 2040 7b24 7365 6c66 2d3e 7b27 6d64 ft @{$self->{'md │ │ │ -00026b80: 3527 7d7d 3b0a 2020 2020 2320 2466 207a 5'}};. # $f z │ │ │ -00026b90: 6572 6c65 6765 6e20 696e 2076 6f72 6765 erlegen in vorge │ │ │ -00026ba0: 6765 6265 6e65 6e20 5465 696c 2075 6e64 gebenen Teil und │ │ │ -00026bb0: 2072 656c 6174 6976 656e 0a20 2020 206d relativen. m │ │ │ -00026bc0: 7920 2464 6972 203d 2024 7365 6c66 2d3e y $dir = $self-> │ │ │ -00026bd0: 7b27 6469 7227 7d3b 0a20 2020 206d 7920 {'dir'};. my │ │ │ -00026be0: 2466 696c 6520 3d20 263a 3a73 7562 7374 $file = &::subst │ │ │ -00026bf0: 7261 6374 5061 7468 2824 662c 2024 6469 ractPath($f, $di │ │ │ -00026c00: 7229 3b0a 0a20 2020 2072 6574 7572 6e20 r);.. return │ │ │ -00026c10: 2824 6469 722c 2024 6669 6c65 2c20 246d ($dir, $file, $m │ │ │ -00026c20: 6435 2c20 2474 7970 6573 293b 0a7d 0a0a d5, $types);.}.. │ │ │ -00026c30: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -00026c40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00026c50: 2323 2323 2323 2323 230a 2320 7769 7264 #########.# wird │ │ │ -00026c60: 2076 6f6e 2025 696e 5072 6f67 7265 7373 von %inProgress │ │ │ -00026c70: 2069 6e20 5363 6865 6475 6c65 723a 3a6e in Scheduler::n │ │ │ -00026c80: 6f72 6d61 6c4f 7065 7261 7469 6f6e 2062 ormalOperation b │ │ │ -00026c90: 656e c3b6 7469 6774 0a73 7562 2070 7573 en..tigt.sub pus │ │ │ -00026ca0: 6862 6163 6b0a 7b0a 2020 2020 6d79 2024 hback.{. my $ │ │ │ -00026cb0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ -00026cc0: 2020 6d79 2024 6c69 7374 203d 2073 6869 my $list = shi │ │ │ -00026cd0: 6674 3b20 2020 2020 2320 4c69 7374 6520 ft; # Liste │ │ │ -00026ce0: 6d69 7420 4c69 7374 656e 2076 6f6e 2028 mit Listen von ( │ │ │ -00026cf0: 2464 6972 2c20 2466 696c 652c 2024 6d64 $dir, $file, $md │ │ │ -00026d00: 352c 2024 7479 7065 7329 0a20 2020 206d 5, $types). m │ │ │ -00026d10: 7920 2470 724c 6f67 203d 2073 6869 6674 y $prLog = shift │ │ │ -00026d20: 3b0a 2020 2020 6d79 2024 6465 6275 6720 ;. my $debug │ │ │ -00026d30: 3d20 7368 6966 743b 0a0a 2020 2020 6d79 = shift;.. my │ │ │ -00026d40: 2024 6c3b 0a20 2020 2066 6f72 6561 6368 $l;. foreach │ │ │ -00026d50: 2024 6c20 2840 246c 6973 7429 0a20 2020 $l (@$list). │ │ │ -00026d60: 207b 0a09 6d79 2028 2464 6972 2c20 2466 {..my ($dir, $f │ │ │ -00026d70: 696c 652c 2024 6d64 352c 2024 7479 7065 ile, $md5, $type │ │ │ -00026d80: 2920 3d20 2840 246c 293b 0a09 2470 724c ) = (@$l);..$prL │ │ │ -00026d90: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00026da0: 2720 3d3e 2027 4427 2c0a 0909 2020 2020 ' => 'D',... │ │ │ -00026db0: 2020 272d 7374 7227 203d 3e20 5b22 6368 '-str' => ["ch │ │ │ -00026dc0: 6563 6b69 6e67 206f 6620 6964 656e 7469 ecking of identi │ │ │ -00026dd0: 6361 6c20 6669 6c65 203c 2466 696c 653e cal file <$file> │ │ │ -00026de0: 225d 290a 0920 2020 2069 6620 2464 6562 "]).. if $deb │ │ │ -00026df0: 7567 3b0a 0970 7573 6820 407b 2473 656c ug;..push @{$sel │ │ │ -00026e00: 662d 3e7b 2766 696c 6573 277d 7d2c 2022 f->{'files'}}, " │ │ │ -00026e10: 2464 6972 2f24 6669 6c65 223b 0a09 7075 $dir/$file";..pu │ │ │ -00026e20: 7368 2040 7b24 7365 6c66 2d3e 7b27 6d64 sh @{$self->{'md │ │ │ -00026e30: 3527 7d7d 2c20 246d 6435 3b0a 0970 7573 5'}}, $md5;..pus │ │ │ -00026e40: 6820 407b 2473 656c 662d 3e7b 2774 7970 h @{$self->{'typ │ │ │ -00026e50: 6573 277d 7d2c 2024 7479 7065 3b0a 2020 es'}}, $type;. │ │ │ -00026e60: 2020 7d0a 7d0a 0a0a 2323 2323 2323 2323 }.}...######## │ │ │ -00026e70: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00026e80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00026e90: 0a73 7562 2072 6561 6444 6972 0a7b 0a20 .sub readDir.{. │ │ │ -00026ea0: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ -00026eb0: 6966 743b 0a0a 2020 2020 6d79 2024 7072 ift;.. my $pr │ │ │ -00026ec0: 4c6f 6720 3d20 2473 656c 662d 3e7b 2770 Log = $self->{'p │ │ │ -00026ed0: 724c 6f67 277d 3b0a 2020 2020 6d79 2024 rLog'};. my $ │ │ │ -00026ee0: 706f 7374 6669 7820 3d20 2473 656c 662d postfix = $self- │ │ │ -00026ef0: 3e7b 2770 6f73 7466 6978 277d 3b0a 2020 >{'postfix'};. │ │ │ -00026f00: 2020 6d79 2024 616b 7446 696c 656e 616d my $aktFilenam │ │ │ -00026f10: 6520 3d20 2473 656c 662d 3e7b 2761 6b74 e = $self->{'akt │ │ │ -00026f20: 4669 6c65 6e61 6d65 277d 3b0a 2020 2020 Filename'};. │ │ │ -00026f30: 6d79 2024 6465 6275 674d 6f64 6520 3d20 my $debugMode = │ │ │ -00026f40: 2473 656c 662d 3e7b 2764 6562 7567 4d6f $self->{'debugMo │ │ │ -00026f50: 6465 277d 3b0a 2020 2020 6d79 2024 7665 de'};. my $ve │ │ │ -00026f60: 7262 6f73 6520 3d20 2473 656c 662d 3e7b rbose = $self->{ │ │ │ -00026f70: 2776 6572 626f 7365 277d 3b0a 2020 2020 'verbose'};. │ │ │ -00026f80: 6d79 2024 676e 7563 7020 3d20 2473 656c my $gnucp = $sel │ │ │ -00026f90: 662d 3e7b 2763 7049 7347 6e75 277d 3b0a f->{'cpIsGnu'};. │ │ │ -00026fa0: 0a20 2020 206d 7920 2465 7863 6570 7452 . my $exceptR │ │ │ -00026fb0: 756c 6520 3d20 2473 656c 662d 3e7b 2765 ule = $self->{'e │ │ │ -00026fc0: 7863 6570 7452 756c 6527 7d3b 0a20 2020 xceptRule'};. │ │ │ -00026fd0: 206d 7920 2469 6e63 6c75 6465 5275 6c65 my $includeRule │ │ │ -00026fe0: 203d 2024 7365 6c66 2d3e 7b27 696e 636c = $self->{'incl │ │ │ -00026ff0: 7564 6552 756c 6527 7d3b 0a20 2020 206d udeRule'};. m │ │ │ -00027000: 7920 2463 6865 636b 426c 6f63 6b73 5275 y $checkBlocksRu │ │ │ -00027010: 6c65 203d 2024 7365 6c66 2d3e 7b27 6368 le = $self->{'ch │ │ │ -00027020: 6563 6b42 6c6f 636b 7352 756c 6527 7d3b eckBlocksRule'}; │ │ │ -00027030: 0a20 2020 206d 7920 2465 7869 6e63 6c50 . my $exinclP │ │ │ -00027040: 6174 7446 6c61 6720 3d0a 0924 6578 6365 attFlag =..$exce │ │ │ -00027050: 7074 5275 6c65 2d3e 6861 734c 696e 6528 ptRule->hasLine( │ │ │ -00027060: 2920 2b20 2469 6e63 6c75 6465 5275 6c65 ) + $includeRule │ │ │ -00027070: 2d3e 6861 734c 696e 6528 293b 0a20 2020 ->hasLine();. │ │ │ -00027080: 206d 7920 2465 7854 7970 6573 203d 2024 my $exTypes = $ │ │ │ -00027090: 7365 6c66 2d3e 7b27 6578 5479 7065 7327 self->{'exTypes' │ │ │ -000270a0: 7d3b 0a20 2020 206d 7920 2477 7269 7465 };. my $write │ │ │ -000270b0: 4578 636c 7564 654c 6f67 203d 2024 7365 ExcludeLog = $se │ │ │ -000270c0: 6c66 2d3e 7b27 7772 6974 6545 7863 6c75 lf->{'writeExclu │ │ │ -000270d0: 6465 4c6f 6727 7d3b 0a20 2020 206d 7920 deLog'};. my │ │ │ -000270e0: 2465 7863 6c4c 6f67 203d 2024 7365 6c66 $exclLog = $self │ │ │ -000270f0: 2d3e 7b27 6578 636c 4c6f 6727 7d20 6966 ->{'exclLog'} if │ │ │ -00027100: 2024 7772 6974 6545 7863 6c75 6465 4c6f $writeExcludeLo │ │ │ -00027110: 673b 0a0a 2020 2020 6d79 2028 4066 696c g;.. my (@fil │ │ │ -00027120: 6573 2920 3d20 2829 3b0a 2020 2020 6d79 es) = ();. my │ │ │ -00027130: 2028 406d 6435 2920 3d20 2829 3b0a 2020 (@md5) = ();. │ │ │ -00027140: 2020 6d79 2028 4074 7970 6573 2920 3d20 my (@types) = │ │ │ -00027150: 2829 3b0a 0a20 2020 206d 7920 246f 6c64 ();.. my $old │ │ │ -00027160: 4669 6c65 6e61 6d65 203d 2024 7365 6c66 Filename = $self │ │ │ -00027170: 2d3e 7b27 6f6c 6446 696c 656e 616d 6527 ->{'oldFilename' │ │ │ -00027180: 7d3b 0a20 2020 206d 7920 2474 6d70 6469 };. my $tmpdi │ │ │ -00027190: 7220 3d20 2473 656c 662d 3e7b 2774 6d70 r = $self->{'tmp │ │ │ -000271a0: 6469 7227 7d3b 0a20 2020 206d 7920 2469 dir'};. my $i │ │ │ -000271b0: 676e 6f72 6554 696d 6520 3d20 2473 656c gnoreTime = $sel │ │ │ -000271c0: 662d 3e7b 2769 676e 6f72 6554 696d 6527 f->{'ignoreTime' │ │ │ -000271d0: 7d3b 0a0a 0a20 2020 2023 204d 4435 206c };... # MD5 l │ │ │ -000271e0: c3a4 7566 742c 2077 656e 6e20 6dc3 b667 ..uft, wenn m..g │ │ │ -000271f0: 6c69 6368 204d 4435 2053 756d 6d65 6e20 lich MD5 Summen │ │ │ -00027200: 766f 6d20 5061 7261 6c6c 656c 7072 6f7a vom Parallelproz │ │ │ -00027210: 6573 7320 686f 6c65 6e0a 2020 2020 6966 ess holen. if │ │ │ -00027220: 2028 2473 656c 662d 3e7b 276d 6435 466f ($self->{'md5Fo │ │ │ -00027230: 726b 277d 2061 6e64 0a20 2020 2020 2020 rk'} and. │ │ │ -00027240: 206e 6f74 2024 7365 6c66 2d3e 7b27 6d64 not $self->{'md │ │ │ -00027250: 3546 6f72 6b27 7d2d 3e70 726f 6365 7373 5Fork'}->process │ │ │ -00027260: 5275 6e73 2829 290a 2020 2020 7b0a 2020 Runs()). {. │ │ │ -00027270: 2020 2020 2020 6d79 2024 7374 6465 7272 my $stderr │ │ │ -00027280: 203d 2024 7365 6c66 2d3e 7b27 6d64 3546 = $self->{'md5F │ │ │ -00027290: 6f72 6b27 7d2d 3e67 6574 5354 4445 5252 ork'}->getSTDERR │ │ │ -000272a0: 2829 3b0a 2020 2020 2020 2020 6d79 2824 ();. my($ │ │ │ -000272b0: 6c29 3b0a 2020 2020 2020 2020 2470 724c l);. $prL │ │ │ -000272c0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000272d0: 2720 3d3e 2027 4527 2c0a 2020 2020 2020 ' => 'E',. │ │ │ -000272e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000272f0: 272d 7374 7227 203d 3e0a 2020 2020 2020 '-str' =>. │ │ │ -00027300: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00027310: 5b22 666f 726b 206f 6620 6d64 3573 756d ["fork of md5sum │ │ │ -00027320: 2067 656e 6572 6174 6564 2074 6865 2066 generated the f │ │ │ -00027330: 6f6c 6c6f 7769 6e67 2065 7272 6f72 733a ollowing errors: │ │ │ -00027340: 222c 0a20 2020 2020 2020 2020 2020 2020 ",. │ │ │ -00027350: 2020 2020 2020 2020 2020 4024 7374 6465 @$stde │ │ │ -00027360: 7272 5d29 0a20 2020 2020 2020 2020 2020 rr]). │ │ │ -00027370: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > │ │ │ -00027380: 3029 3b0a 2020 2020 2020 2020 6d79 2024 0);. my $ │ │ │ -00027390: 7374 646f 7574 203d 2024 7365 6c66 2d3e stdout = $self-> │ │ │ -000273a0: 7b27 6d64 3546 6f72 6b27 7d2d 3e67 6574 {'md5Fork'}->get │ │ │ -000273b0: 5354 444f 5554 2829 3b0a 2020 2020 2020 STDOUT();. │ │ │ -000273c0: 2020 666f 7265 6163 6820 246c 2028 4024 foreach $l (@$ │ │ │ -000273d0: 7374 646f 7574 290a 2020 2020 2020 2020 stdout). │ │ │ -000273e0: 7b0a 2020 2020 2020 2020 2020 2020 6966 {. if │ │ │ -000273f0: 2028 246c 203d 7e20 2f5c 415c 5c2f 2920 ($l =~ /\A\\/) │ │ │ -00027400: 2023 2022 5c22 2061 6d20 5a65 696c 656e # "\" am Zeilen │ │ │ -00027410: 616e 6661 6e67 202d 3e20 6573 2077 6972 anfang -> es wir │ │ │ -00027420: 6420 6765 7175 6f74 6574 0a20 2020 2020 d gequotet. │ │ │ -00027430: 2020 2020 2020 207b 0a20 2020 2020 2020 {. │ │ │ -00027440: 2020 2020 2020 2020 2024 6c20 3d7e 2073 $l =~ s │ │ │ -00027450: 2f5c 5c6e 2f5c 6e2f 673b 2020 2023 2022 /\\n/\n/g; # " │ │ │ -00027460: 5c6e 2220 696d 204e 616d 656e 2077 6972 \n" im Namen wir │ │ │ -00027470: 6420 766f 6e20 6d64 3573 756d 207a 750a d von md5sum zu. │ │ │ -00027480: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00027490: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000274a0: 2020 2020 2320 225c 5c6e 2220 6765 6d61 # "\\n" gema │ │ │ -000274b0: 6368 742c 0a20 2020 2020 2020 2020 2020 cht,. │ │ │ -000274c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000274d0: 2020 2020 2020 2020 2023 207a 7572 c3bc # zur.. │ │ │ -000274e0: 636b 6b6f 6e76 6572 7469 6572 656e 210a ckkonvertieren!. │ │ │ -000274f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00027500: 246c 203d 7e20 732f 5c5c 5c5c 2f5c 5c2f $l =~ s/\\\\/\\/ │ │ │ -00027510: 6f67 3b20 2320 4261 636b 736c 6173 680a og; # Backslash. │ │ │ -00027520: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00027530: 246c 203d 7e20 732f 5c41 5c5c 2f2f 3b20 $l =~ s/\A\\//; │ │ │ -00027540: 2020 2020 2320 225c 5c22 2061 6d20 5a65 # "\\" am Ze │ │ │ -00027550: 696c 656e 616e 6661 6e67 2065 6e74 6665 ilenanfang entfe │ │ │ -00027560: 726e 656e 0a0a 2020 2020 2020 2020 2020 rnen.. │ │ │ -00027570: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ -00027580: 6d79 2028 246d 6435 2c20 2466 2920 3d20 my ($md5, $f) = │ │ │ -00027590: 246c 203d 7e20 2f5c 4128 5c77 2b29 5c73 $l =~ /\A(\w+)\s │ │ │ -000275a0: 2b28 2e2a 292f 733b 0a20 2020 2020 2020 +(.*)/s;. │ │ │ -000275b0: 2020 2020 2070 7573 6820 4066 696c 6573 push @files │ │ │ -000275c0: 2c20 2466 3b0a 2020 2020 2020 2020 2020 , $f;. │ │ │ -000275d0: 2020 7075 7368 2040 6d64 352c 2024 6d64 push @md5, $md │ │ │ -000275e0: 353b 0a20 2020 2020 2020 2020 2020 2070 5;. p │ │ │ -000275f0: 7573 6820 4074 7970 6573 2c20 2766 273b ush @types, 'f'; │ │ │ -00027600: 0a20 2020 2020 2020 207d 0a20 2020 2020 . }. │ │ │ -00027610: 2020 2024 7365 6c66 2d3e 7b27 6d64 3546 $self->{'md5F │ │ │ -00027620: 6f72 6b27 7d20 3d20 756e 6465 663b 2020 ork'} = undef; │ │ │ -00027630: 2320 6a6f 6220 6973 7420 6665 7274 6967 # job ist fertig │ │ │ -00027640: 0a20 2020 207d 0a0a 2020 2020 2320 4e65 . }.. # Ne │ │ │ -00027650: 7565 6e20 4d44 3520 4c61 7566 2073 7461 uen MD5 Lauf sta │ │ │ -00027660: 7274 656e 2077 656e 6e20 6dc3 b667 6c69 rten wenn m..gli │ │ │ -00027670: 6368 0a20 2020 2069 6620 286e 6f74 2024 ch. if (not $ │ │ │ -00027680: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork' │ │ │ -00027690: 7d29 0a20 2020 207b 0a20 2020 2020 2020 }). {. │ │ │ -000276a0: 206d 7928 4063 616c 634d 4435 2920 3d20 my(@calcMD5) = │ │ │ -000276b0: 2829 3b0a 0a09 2320 4469 7265 6374 6f72 ();...# Director │ │ │ -000276c0: 7920 6569 6e6c 6573 656e 0a20 2020 2020 y einlesen. │ │ │ -000276d0: 2020 2024 7365 6c66 2d3e 7265 6375 7273 $self->recurs │ │ │ -000276e0: 6976 6552 6561 6444 6972 3a3a 7265 6164 iveReadDir::read │ │ │ -000276f0: 4469 7228 293b 0a0a 0923 2045 696e 6765 Dir();...# Einge │ │ │ -00027700: 6c65 7365 6e65 2044 6174 6569 656e 2069 lesene Dateien i │ │ │ -00027710: 6e20 2473 656c 662d 3e7b 2766 696c 6573 n $self->{'files │ │ │ -00027720: 277d 2066 696c 7465 726e 0a20 2020 2020 '} filtern. │ │ │ -00027730: 2020 206d 7920 2824 662c 2024 742c 2024 my ($f, $t, $ │ │ │ -00027740: 6929 3b0a 2020 2020 2020 2020 6d79 2024 i);. my $ │ │ │ -00027750: 6469 7220 3d20 2473 656c 662d 3e7b 2764 dir = $self->{'d │ │ │ -00027760: 6972 277d 3b20 2020 2020 2320 7a75 2064 ir'}; # zu d │ │ │ -00027770: 7572 6368 7375 6368 656e 6465 7320 4469 urchsuchendes Di │ │ │ -00027780: 7265 6374 6f72 790a 0a20 2020 2020 2020 rectory.. │ │ │ -00027790: 206d 7920 2461 6b74 4469 7220 3d20 2473 my $aktDir = $s │ │ │ -000277a0: 656c 662d 3e7b 2761 6b74 4469 7227 7d3b elf->{'aktDir'}; │ │ │ -000277b0: 2020 2023 2061 6b74 7565 6c6c 6573 2042 # aktuelles B │ │ │ -000277c0: 6163 6b75 7076 6572 7a65 6963 686e 6973 ackupverzeichnis │ │ │ -000277d0: 0a09 666f 7220 2824 6920 3d20 3020 3b20 ..for ($i = 0 ; │ │ │ -000277e0: 2469 203c 2040 7b24 7365 6c66 2d3e 7b27 $i < @{$self->{' │ │ │ -000277f0: 6669 6c65 7327 7d7d 203b 2024 692b 2b29 files'}} ; $i++) │ │ │ -00027800: 0a09 7b0a 0920 2020 2024 6620 3d20 2473 ..{.. $f = $s │ │ │ -00027810: 656c 662d 3e7b 2766 696c 6573 277d 5b24 elf->{'files'}[$ │ │ │ -00027820: 695d 3b0a 0920 2020 2024 7420 3d20 2473 i];.. $t = $s │ │ │ -00027830: 656c 662d 3e7b 2774 7970 6573 277d 5b24 elf->{'types'}[$ │ │ │ -00027840: 695d 3b0a 0a09 2020 2020 6d79 2024 7265 i];... my $re │ │ │ -00027850: 6c46 696c 654e 616d 653b 0a09 2020 2020 lFileName;.. │ │ │ -00027860: 6966 2028 2464 6972 2065 7120 272f 2729 if ($dir eq '/') │ │ │ -00027870: 0a09 2020 2020 7b0a 0909 2472 656c 4669 .. {...$relFi │ │ │ -00027880: 6c65 4e61 6d65 203d 2073 7562 7374 7228 leName = substr( │ │ │ -00027890: 2466 2c20 3129 3b0a 0920 2020 207d 0a09 $f, 1);.. }.. │ │ │ -000278a0: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {. │ │ │ -000278b0: 0909 2472 656c 4669 6c65 4e61 6d65 203d ..$relFileName = │ │ │ -000278c0: 2073 7562 7374 7228 2466 2c20 6c65 6e67 substr($f, leng │ │ │ -000278d0: 7468 2824 6469 7229 202b 2031 293b 0a09 th($dir) + 1);.. │ │ │ -000278e0: 2020 2020 7d0a 0920 2020 2024 7265 6c46 }.. $relF │ │ │ -000278f0: 696c 654e 616d 6520 3d7e 2073 235c 412f ileName =~ s#\A/ │ │ │ -00027900: 2b23 233b 2020 2023 2072 656d 6f76 6520 +##; # remove │ │ │ -00027910: 6c65 6164 696e 6720 2f20 6966 2065 7869 leading / if exi │ │ │ -00027920: 7374 730a 0a09 2020 2020 6966 2028 6578 sts... if (ex │ │ │ -00027930: 6973 7473 2024 2465 7854 7970 6573 7b24 ists $$exTypes{$ │ │ │ -00027940: 747d 290a 0920 2020 207b 0a09 092b 2b24 t}).. {...++$ │ │ │ -00027950: 2465 7854 7970 6573 7b24 747d 3b0a 0909 $exTypes{$t};... │ │ │ -00027960: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00027970: 6b69 6e64 2720 3d3e 2027 4427 2c0a 0909 kind' => 'D',... │ │ │ -00027980: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00027990: 205b 2265 7863 6570 7454 7970 6520 2474 ["exceptType $t │ │ │ -000279a0: 203c 2472 656c 4669 6c65 4e61 6d65 3e22 <$relFileName>" │ │ │ -000279b0: 5d29 0a09 0920 2020 2069 6620 2464 6562 ])... if $deb │ │ │ -000279c0: 7567 203e 2030 3b0a 0909 6e65 7874 3b0a ug > 0;...next;. │ │ │ -000279d0: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if │ │ │ -000279e0: 2824 7420 6571 2027 5327 2061 6e64 0a20 ($t eq 'S' and. │ │ │ -000279f0: 2020 2020 2020 2020 2020 2020 2020 206e n │ │ │ -00027a00: 6f74 2024 676e 7563 7029 0a09 2020 2020 ot $gnucp).. │ │ │ -00027a10: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin │ │ │ -00027a20: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ -00027a30: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -00027a40: 2720 3d3e 205b 2275 6e73 7570 706f 7274 ' => ["unsupport │ │ │ -00027a50: 6564 2066 696c 6520 7479 7065 2027 736f ed file type 'so │ │ │ -00027a60: 636b 6574 2722 202e 0a09 0909 0909 2022 cket'" ....... " │ │ │ -00027a70: 203c 2472 656c 4669 6c65 4e61 6d65 3e22 <$relFileName>" │ │ │ -00027a80: 2c0a 0909 0920 2022 5c74 7365 6520 6f70 ,.... "\tsee op │ │ │ -00027a90: 7469 6f6e 2027 6370 4973 476e 7527 206f tion 'cpIsGnu' o │ │ │ -00027aa0: 7220 2773 7065 6369 616c 5479 7065 4172 r 'specialTypeAr │ │ │ -00027ab0: 6368 6976 6572 2722 5d29 3b0a 0909 6e65 chiver'"]);...ne │ │ │ -00027ac0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. │ │ │ -00027ad0: 6966 2028 2474 2065 7120 2762 2720 616e if ($t eq 'b' an │ │ │ -00027ae0: 640a 0909 6e6f 7420 2467 6e75 6370 290a d...not $gnucp). │ │ │ -00027af0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog- │ │ │ -00027b00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00027b10: 3e20 2757 272c 0a09 0909 2020 2020 2020 > 'W',.... │ │ │ -00027b20: 272d 7374 7227 203d 3e20 5b22 756e 7375 '-str' => ["unsu │ │ │ -00027b30: 7070 6f72 7465 6420 6669 6c65 2074 7970 pported file typ │ │ │ -00027b40: 6520 2762 6c6f 636b 2022 202e 0a09 0909 e 'block " ..... │ │ │ -00027b50: 0909 2022 7370 6563 6961 6c20 6669 6c65 .. "special file │ │ │ -00027b60: 2720 3c24 7265 6c46 696c 654e 616d 653e ' <$relFileName> │ │ │ -00027b70: 222c 0a09 0920 2020 2020 2020 2020 2022 ",... " │ │ │ -00027b80: 5c74 7365 6520 6f70 7469 6f6e 2027 6370 \tsee option 'cp │ │ │ -00027b90: 4973 476e 7527 206f 7220 2773 7065 6369 IsGnu' or 'speci │ │ │ -00027ba0: 616c 5479 7065 4172 6368 6976 6572 2722 alTypeArchiver'" │ │ │ -00027bb0: 5d29 3b0a 0909 6e65 7874 3b0a 0920 2020 ]);...next;.. │ │ │ -00027bc0: 207d 0a09 2020 2020 6966 2028 2474 2065 }.. if ($t e │ │ │ -00027bd0: 7120 2763 2720 616e 640a 2020 2020 2020 q 'c' and. │ │ │ -00027be0: 2020 2020 2020 2020 206e 6f74 2024 676e not $gn │ │ │ -00027bf0: 7563 7029 0a09 2020 2020 7b0a 0909 2470 ucp).. {...$p │ │ │ -00027c00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00027c10: 6e64 2720 3d3e 2027 5727 2c0a 0909 0920 nd' => 'W',.... │ │ │ -00027c20: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00027c30: 2275 6e73 7570 706f 7274 6564 2066 696c "unsupported fil │ │ │ -00027c40: 6520 7479 7065 2027 6368 6172 6163 7465 e type 'characte │ │ │ -00027c50: 7220 2722 202e 0a09 0909 0909 2022 7370 r '" ....... "sp │ │ │ -00027c60: 6563 6961 6c20 6669 6c65 2720 3c24 7265 ecial file' <$re │ │ │ -00027c70: 6c46 696c 654e 616d 653e 222c 0a09 0909 lFileName>",.... │ │ │ -00027c80: 2020 225c 7473 6565 206f 7074 696f 6e20 "\tsee option │ │ │ -00027c90: 2763 7049 7347 6e75 2720 6f72 2027 7370 'cpIsGnu' or 'sp │ │ │ -00027ca0: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive │ │ │ -00027cb0: 7227 225d 293b 0a09 096e 6578 743b 0a09 r'"]);...next;.. │ │ │ -00027cc0: 2020 2020 7d0a 0a09 2020 2020 756e 6c65 }... unle │ │ │ -00027cd0: 7373 2028 2d65 2024 6629 0a09 2020 2020 ss (-e $f).. │ │ │ -00027ce0: 7b0a 0909 756e 6c65 7373 2028 2d6c 2024 {...unless (-l $ │ │ │ -00027cf0: 6629 0a09 097b 0a09 0920 2020 2024 7072 f)...{... $pr │ │ │ -00027d00: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00027d10: 6427 203d 3e20 2757 272c 0a09 0909 0920 d' => 'W',..... │ │ │ -00027d20: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ -00027d30: 205b 2266 696c 6520 3c24 663e 2064 656c ["file <$f> del │ │ │ -00027d40: 6574 6564 2064 7572 696e 6720 6261 636b eted during back │ │ │ -00027d50: 7570 2028 3129 225d 290a 0909 0975 6e6c up (1)"])....unl │ │ │ -00027d60: 6573 7320 6578 6973 7473 2024 7375 7070 ess exists $supp │ │ │ -00027d70: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ -00027d80: 6543 6861 6e67 6527 7d3b 0a09 0920 2020 eChange'};... │ │ │ -00027d90: 206e 6578 743b 0a09 097d 0a09 2020 2020 next;...}.. │ │ │ -00027da0: 7d0a 0920 2020 206d 7920 2824 6465 762c }.. my ($dev, │ │ │ -00027db0: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, │ │ │ -00027dc0: 2475 6964 2c20 2467 6964 2c20 2461 6374 $uid, $gid, $act │ │ │ -00027dd0: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime │ │ │ -00027de0: 2c0a 0909 2461 6374 4174 696d 652c 2024 ,...$actAtime, $ │ │ │ -00027df0: 6163 7453 697a 6529 203d 0a09 0920 2020 actSize) =... │ │ │ -00027e00: 2028 7374 6174 2824 6629 295b 302c 2031 (stat($f))[0, 1 │ │ │ -00027e10: 2c20 322c 2034 2c20 352c 2031 302c 2039 , 2, 4, 5, 10, 9 │ │ │ -00027e20: 2c20 382c 2037 5d3b 0a09 2020 2020 246d , 8, 7];.. $m │ │ │ -00027e30: 6f64 6520 3d20 3020 756e 6c65 7373 2024 ode = 0 unless $ │ │ │ -00027e40: 6d6f 6465 3b0a 0920 2020 2024 6d6f 6465 mode;.. $mode │ │ │ -00027e50: 2026 3d20 3037 3737 373b 0a09 2020 2020 &= 07777;.. │ │ │ -00027e60: 2320 6368 6563 6b20 6578 6365 7074 5275 # check exceptRu │ │ │ -00027e70: 6c65 2061 6e64 2069 6e63 6c75 6465 5275 le and includeRu │ │ │ -00027e80: 6c65 0a09 2020 2020 6966 2028 2474 206e le.. if ($t n │ │ │ -00027e90: 6520 2764 2720 616e 6420 2465 7869 6e63 e 'd' and $exinc │ │ │ -00027ea0: 6c50 6174 7446 6c61 6729 0a09 2020 2020 lPattFlag).. │ │ │ -00027eb0: 7b0a 0909 6966 2028 2465 7863 6570 7452 {...if ($exceptR │ │ │ -00027ec0: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() = │ │ │ -00027ed0: 3d20 3120 616e 640a 0909 2020 2020 2465 = 1 and... $e │ │ │ -00027ee0: 7863 6570 7452 756c 652d 3e63 6865 636b xceptRule->check │ │ │ -00027ef0: 5275 6c65 2824 7265 6c46 696c 654e 616d Rule($relFileNam │ │ │ -00027f00: 652c 2024 6163 7453 697a 652c 2024 6d6f e, $actSize, $mo │ │ │ -00027f10: 6465 2c0a 0909 0909 0920 2020 2461 6374 de,...... $act │ │ │ -00027f20: 4374 696d 652c 2024 6163 744d 7469 6d65 Ctime, $actMtime │ │ │ -00027f30: 2c20 2475 6964 2c0a 0909 0909 0920 2020 , $uid,...... │ │ │ -00027f40: 2467 6964 2c20 2474 2920 3d3d 2031 290a $gid, $t) == 1). │ │ │ -00027f50: 0909 7b0a 0909 2020 2020 2465 7863 6c4c ..{... $exclL │ │ │ -00027f60: 6f67 2d3e 7072 696e 7428 2224 7265 6c46 og->print("$relF │ │ │ -00027f70: 696c 654e 616d 655c 6e22 2920 6966 2024 ileName\n") if $ │ │ │ -00027f80: 7772 6974 6545 7863 6c75 6465 4c6f 673b writeExcludeLog; │ │ │ -00027f90: 0a23 7072 696e 7420 2266 203d 203c 2466 .#print "f = <$f │ │ │ -00027fa0: 3e20 7369 7a65 203d 2024 6163 7453 697a > size = $actSiz │ │ │ -00027fb0: 655c 6e22 3b0a 0909 2020 2020 2461 6374 e\n";... $act │ │ │ -00027fc0: 5369 7a65 203d 2030 2075 6e6c 6573 7320 Size = 0 unless │ │ │ -00027fd0: 6465 6669 6e65 6420 2461 6374 5369 7a65 defined $actSize │ │ │ -00027fe0: 3b20 2320 6578 636c 7564 6564 2077 6974 ; # excluded wit │ │ │ -00027ff0: 6820 4d41 524b 5f44 4952 5f52 4543 0a09 h MARK_DIR_REC.. │ │ │ -00028000: 0920 2020 2024 6d61 696e 3a3a 7374 6174 . $main::stat │ │ │ -00028010: 2d3e 696e 6372 5f6e 6f45 7863 6c75 6465 ->incr_noExclude │ │ │ -00028020: 5275 6c65 2824 6163 7453 697a 6529 3b0a Rule($actSize);. │ │ │ -00028030: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}. │ │ │ -00028040: 0a09 0969 6620 2824 696e 636c 7564 6552 ...if ($includeR │ │ │ -00028050: 756c 652d 3e68 6173 4c69 6e65 2829 203d ule->hasLine() = │ │ │ -00028060: 3d20 3129 0a09 097b 0a09 0920 2020 2069 = 1)...{... i │ │ │ -00028070: 6620 2824 696e 636c 7564 6552 756c 652d f ($includeRule- │ │ │ -00028080: 3e63 6865 636b 5275 6c65 2824 7265 6c46 >checkRule($relF │ │ │ -00028090: 696c 654e 616d 652c 2024 6163 7453 697a ileName, $actSiz │ │ │ -000280a0: 652c 2024 6d6f 6465 2c0a 0909 0909 0920 e, $mode,...... │ │ │ -000280b0: 2020 2024 6163 7443 7469 6d65 2c20 2461 $actCtime, $a │ │ │ -000280c0: 6374 4d74 696d 652c 2024 7569 642c 0a09 ctMtime, $uid,.. │ │ │ -000280d0: 0909 0909 2020 2020 2467 6964 2c20 2474 .... $gid, $t │ │ │ -000280e0: 2920 3d3d 2031 290a 0909 2020 2020 7b0a ) == 1)... {. │ │ │ -000280f0: 0909 0924 6578 636c 4c6f 672d 3e70 7269 ...$exclLog->pri │ │ │ -00028100: 6e74 2822 2472 656c 4669 6c65 4e61 6d65 nt("$relFileName │ │ │ -00028110: 5c6e 2229 2069 6620 2477 7269 7465 4578 \n") if $writeEx │ │ │ -00028120: 636c 7564 654c 6f67 3b0a 0909 0924 6d61 cludeLog;....$ma │ │ │ -00028130: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ -00028140: 6f49 6e63 6c75 6465 5275 6c65 2824 6163 oIncludeRule($ac │ │ │ -00028150: 7453 697a 6529 3b0a 0909 2020 2020 7d0a tSize);... }. │ │ │ -00028160: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... │ │ │ -00028170: 207b 0a09 0909 6e65 7874 3b0a 0909 2020 {....next;... │ │ │ -00028180: 2020 7d0a 0909 7d0a 0920 2020 207d 0a0a }...}.. }.. │ │ │ -00028190: 2020 2020 2020 2020 2020 2020 2320 4e69 # Ni │ │ │ -000281a0: 6368 7420 706c 6169 6e2d 6669 6c65 2062 cht plain-file b │ │ │ -000281b0: 656e c3b6 7469 6774 206b 6569 6e20 4d44 en..tigt kein MD │ │ │ -000281c0: 350a 0920 2020 2069 6620 2824 7420 6e65 5.. if ($t ne │ │ │ -000281d0: 2027 6627 290a 0920 2020 207b 0a09 0970 'f').. {...p │ │ │ -000281e0: 7573 6820 4066 696c 6573 2c20 2466 3b0a ush @files, $f;. │ │ │ -000281f0: 0909 7075 7368 2040 7479 7065 732c 2024 ..push @types, $ │ │ │ -00028200: 743b 0a20 2020 2020 2020 2020 2020 2020 t;. │ │ │ -00028210: 2020 2070 7573 6820 406d 6435 2c20 756e push @md5, un │ │ │ -00028220: 6465 663b 0a09 096e 6578 743b 0a09 2020 def;...next;.. │ │ │ -00028230: 2020 7d0a 0a0a 0920 2020 2023 0a09 2020 }.... #.. │ │ │ -00028240: 2020 2320 6162 2068 6965 7220 6973 7420 # ab hier ist │ │ │ -00028250: 616c 6c65 7320 6e75 7220 6e6f 6368 2070 alles nur noch p │ │ │ -00028260: 6c61 696e 2066 696c 6520 2869 6e20 666f lain file (in fo │ │ │ -00028270: 7220 5363 686c 6569 6665 290a 0920 2020 r Schleife).. │ │ │ -00028280: 2023 0a09 2020 2020 6d79 2028 246f 6c64 #.. my ($old │ │ │ -00028290: 436f 6d70 722c 2024 6f6c 6443 7469 6d65 Compr, $oldCtime │ │ │ -000282a0: 2c20 246f 6c64 4d74 696d 652c 2024 6f6c , $oldMtime, $ol │ │ │ -000282b0: 6453 697a 652c 2024 6d64 3573 756d 293b dSize, $md5sum); │ │ │ -000282c0: 0a09 2020 2020 6d79 2024 6e20 3d20 2824 .. my $n = ($ │ │ │ -000282d0: 6f6c 6443 6f6d 7072 2c20 246f 6c64 4374 oldCompr, $oldCt │ │ │ -000282e0: 696d 652c 2024 6f6c 644d 7469 6d65 2c20 ime, $oldMtime, │ │ │ -000282f0: 246f 6c64 5369 7a65 2c20 246d 6435 7375 $oldSize, $md5su │ │ │ -00028300: 6d29 203d 0a09 0924 6f6c 6446 696c 656e m) =...$oldFilen │ │ │ -00028310: 616d 652d 3e67 6574 496e 6f64 6562 6163 ame->getInodebac │ │ │ -00028320: 6b75 7043 6f6d 7072 4374 696d 654d 7469 kupComprCtimeMti │ │ │ -00028330: 6d65 5369 7a65 4d44 3528 2472 656c 4669 meSizeMD5($relFi │ │ │ -00028340: 6c65 4e61 6d65 293b 0a0a 0920 2020 2023 leName);... # │ │ │ -00028350: 2063 6865 636b 2063 6865 636b 426c 6f63 check checkBloc │ │ │ -00028360: 6b73 5275 6c65 0a09 2020 2020 6966 2028 ksRule.. if ( │ │ │ -00028370: 2474 2065 7120 2766 2720 616e 6420 2463 $t eq 'f' and $c │ │ │ -00028380: 6865 636b 426c 6f63 6b73 5275 6c65 2d3e heckBlocksRule-> │ │ │ -00028390: 6861 734c 696e 6528 2929 2023 2074 6869 hasLine()) # thi │ │ │ -000283a0: 7320 6c69 6e65 2072 6573 756c 7473 0a09 s line results.. │ │ │ -000283b0: 2020 2020 7b20 2020 2020 2020 2020 2020 { │ │ │ -000283c0: 2020 2020 2020 2020 2020 2020 2023 2069 # i │ │ │ -000283d0: 6e20 6120 7761 726e 696e 6720 6475 6520 n a warning due │ │ │ -000283e0: 746f 2061 2062 7567 2069 6e20 7065 726c to a bug in perl │ │ │ -000283f0: 0a09 096d 7920 2824 7275 6c65 4253 2c20 ...my ($ruleBS, │ │ │ -00028400: 2472 756c 6543 6f6d 7072 6573 732c 2024 $ruleCompress, $ │ │ │ -00028410: 7275 6c65 5061 7261 6c6c 656c 2c20 2472 ruleParallel, $r │ │ │ -00028420: 756c 6552 6561 6429 203d 0a09 0920 2020 uleRead) =... │ │ │ -00028430: 2024 6368 6563 6b42 6c6f 636b 7352 756c $checkBlocksRul │ │ │ -00028440: 652d 3e63 6865 636b 5275 6c65 2824 7265 e->checkRule($re │ │ │ -00028450: 6c46 696c 654e 616d 652c 2024 6163 7453 lFileName, $actS │ │ │ -00028460: 697a 652c 0a09 0909 0909 0924 6d6f 6465 ize,.......$mode │ │ │ -00028470: 2c20 2461 6374 4374 696d 652c 0a09 0909 , $actCtime,.... │ │ │ -00028480: 0909 0924 6163 744d 7469 6d65 2c20 2475 ...$actMtime, $u │ │ │ -00028490: 6964 2c0a 0909 0909 0909 2467 6964 2c20 id,.......$gid, │ │ │ -000284a0: 2474 293b 0a09 0969 6620 2824 7275 6c65 $t);...if ($rule │ │ │ -000284b0: 4253 203e 2030 290a 0909 7b0a 0909 2020 BS > 0)...{... │ │ │ -000284c0: 2020 2320 6d64 3520 6973 2063 616c 6375 # md5 is calcu │ │ │ -000284d0: 6c61 7465 6420 6c61 7465 720a 0909 2020 lated later... │ │ │ -000284e0: 2020 7075 7368 2040 6669 6c65 732c 2024 push @files, $ │ │ │ -000284f0: 663b 0a09 0920 2020 2070 7573 6820 4074 f;... push @t │ │ │ -00028500: 7970 6573 2c20 2762 6627 3b20 2020 2320 ypes, 'bf'; # │ │ │ -00028510: 626c 6f63 6b20 6669 6c65 0a0a 0909 2020 block file.... │ │ │ -00028520: 2020 6966 2028 246e 203e 2030 2061 6e64 if ($n > 0 and │ │ │ -00028530: 0a09 0909 2461 6374 5369 7a65 203d 3d20 ....$actSize == │ │ │ -00028540: 246f 6c64 5369 7a65 2061 6e64 0a09 0909 $oldSize and.... │ │ │ -00028550: 2824 6163 744d 7469 6d65 203d 3d20 246f ($actMtime == $o │ │ │ -00028560: 6c64 4d74 696d 6529 2061 6e64 0a09 0909 ldMtime) and.... │ │ │ -00028570: 2824 6f6c 6443 6f6d 7072 2065 7120 2762 ($oldCompr eq 'b │ │ │ -00028580: 2729 290a 0909 2020 2020 7b0a 0909 0923 '))... {....# │ │ │ -00028590: 206e 6f74 6869 6e67 2063 6861 6e67 6564 nothing changed │ │ │ -000285a0: 0a09 0909 7075 7368 2040 6d64 352c 2024 ....push @md5, $ │ │ │ -000285b0: 6d64 3573 756d 3b0a 0909 2020 2020 7d0a md5sum;... }. │ │ │ -000285c0: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... │ │ │ -000285d0: 207b 0a23 0909 096d 7920 2463 203d 2024 {.#...my $c = $ │ │ │ -000285e0: 7275 6c65 436f 6d70 7265 7373 203f 2027 ruleCompress ? ' │ │ │ -000285f0: 6327 203a 2027 7527 3b0a 0909 096d 7920 c' : 'u';....my │ │ │ -00028600: 2463 203d 2024 7275 6c65 436f 6d70 7265 $c = $ruleCompre │ │ │ -00028610: 7373 3b0a 0909 0920 2020 2020 2020 2020 ss;.... │ │ │ -00028620: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028630: 2020 2020 2020 2020 2320 6361 6c63 756c # calcul │ │ │ -00028640: 6174 6520 6e65 7720 6d64 3520 7375 6d0a ate new md5 sum. │ │ │ -00028650: 0909 0970 7573 6820 406d 6435 2c20 5b24 ...push @md5, [$ │ │ │ -00028660: 7275 6c65 4253 2c20 2463 2c20 2472 756c ruleBS, $c, $rul │ │ │ -00028670: 6550 6172 616c 6c65 6c2c 2040 2472 756c eParallel, @$rul │ │ │ -00028680: 6552 6561 645d 3b0a 0909 0969 6620 2824 eRead];....if ($ │ │ │ -00028690: 6465 6275 674d 6f64 6520 3e3d 2033 290a debugMode >= 3). │ │ │ -000286a0: 0909 097b 0a09 0909 2020 2020 6d79 2028 ...{.... my ( │ │ │ -000286b0: 4072 6561 736f 6e29 3b0a 0909 0920 2020 @reason);.... │ │ │ -000286c0: 2070 7573 6820 4072 6561 736f 6e2c 2027 push @reason, ' │ │ │ -000286d0: 7369 7a65 2720 6966 2024 6163 7453 697a size' if $actSiz │ │ │ -000286e0: 6520 213d 2024 6f6c 6453 697a 653b 0a09 e != $oldSize;.. │ │ │ -000286f0: 0909 2020 2020 7075 7368 2040 7265 6173 .. push @reas │ │ │ -00028700: 6f6e 2c20 276d 7469 6d65 2720 6966 2024 on, 'mtime' if $ │ │ │ -00028710: 6163 744d 7469 6d65 2021 3d20 246f 6c64 actMtime != $old │ │ │ -00028720: 4d74 696d 653b 0a09 0909 2020 2020 7075 Mtime;.... pu │ │ │ -00028730: 7368 2040 7265 6173 6f6e 2c20 2763 7469 sh @reason, 'cti │ │ │ -00028740: 6d65 2720 6966 2024 6163 7443 7469 6d65 me' if $actCtime │ │ │ -00028750: 2021 3d20 246f 6c64 4374 696d 653b 0a09 != $oldCtime;.. │ │ │ -00028760: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00028770: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00028780: 4427 2c0a 0909 0909 0920 2027 2d73 7472 D',...... '-str │ │ │ -00028790: 2720 3d3e 205b 226d 6435 7375 6d20 2822 ' => ["md5sum (" │ │ │ -000287a0: 202e 0a09 0909 0909 2020 6a6f 696e 2827 ....... join(' │ │ │ -000287b0: 2c20 272c 2040 7265 6173 6f6e 2920 2e20 , ', @reason) . │ │ │ -000287c0: 2229 2024 6622 5d29 3b0a 0909 097d 0a09 ") $f"]);....}.. │ │ │ -000287d0: 0920 2020 207d 0a09 0920 2020 206e 6578 . }... nex │ │ │ -000287e0: 743b 0a09 097d 0a09 2020 2020 7d0a 0920 t;...}.. }.. │ │ │ -000287f0: 2020 2065 6c73 6966 2028 246f 6c64 436f elsif ($oldCo │ │ │ -00028800: 6d70 7220 616e 6420 246f 6c64 436f 6d70 mpr and $oldComp │ │ │ -00028810: 7220 6571 2027 6227 2920 2020 2023 2066 r eq 'b') # f │ │ │ -00028820: 202d 3e20 620a 0920 2020 207b 0a09 0970 -> b.. {...p │ │ │ -00028830: 7573 6820 4074 7970 6573 2c20 2766 6e65 ush @types, 'fne │ │ │ -00028840: 7727 3b20 2020 2320 666f 7263 6520 636f w'; # force co │ │ │ -00028850: 7079 206f 7220 636f 6d70 7265 7373 2c20 py or compress, │ │ │ -00028860: 646f 206e 6f74 0a09 0970 7573 6820 406d do not...push @m │ │ │ -00028870: 6435 2c20 246d 6435 7375 6d3b 2020 2020 d5, $md5sum; │ │ │ -00028880: 2320 6c69 6e6b 2062 6563 6175 7365 2070 # link because p │ │ │ -00028890: 7265 7669 6f75 7320 6261 636b 7570 2077 revious backup w │ │ │ -000288a0: 6173 0a09 0970 7573 6820 4066 696c 6573 as...push @files │ │ │ -000288b0: 2c20 2466 3b20 2020 2020 2020 2320 626c , $f; # bl │ │ │ -000288c0: 6f63 6b65 640a 0909 6966 2028 2464 6562 ocked...if ($deb │ │ │ -000288d0: 7567 4d6f 6465 203e 3d20 3329 0a09 097b ugMode >= 3)...{ │ │ │ -000288e0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -000288f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00028900: 2744 272c 0a09 0909 0920 2027 2d73 7472 'D',..... '-str │ │ │ -00028910: 2720 3d3e 205b 226d 6435 7375 6d20 2862 ' => ["md5sum (b │ │ │ -00028920: 6c6f 636b 2074 6f20 6669 6c65 2920 2466 lock to file) $f │ │ │ -00028930: 225d 293b 0a09 097d 0a09 096e 6578 743b "]);...}...next; │ │ │ -00028940: 0a09 2020 2020 7d0a 0a09 2020 2020 2320 .. }... # │ │ │ -00028950: 706c 6169 6e20 6669 6c65 732c 206e 6f20 plain files, no │ │ │ -00028960: 626c 6f63 6b65 6420 6669 6c65 730a 0920 blocked files.. │ │ │ -00028970: 2020 2069 6620 2824 6e20 3d3d 2030 2920 if ($n == 0) │ │ │ -00028980: 2020 2023 206e 6963 6874 2069 6d20 4861 # nicht im Ha │ │ │ -00028990: 7368 2067 6566 756e 6465 6e20 2861 7573 sh gefunden (aus │ │ │ -000289a0: 2044 6174 6569 202e 6d64 3543 6865 636b Datei .md5Check │ │ │ -000289b0: 5375 6d73 0a09 2020 2020 7b20 2020 2020 Sums.. { │ │ │ -000289c0: 2020 2020 2020 2020 2020 2320 2d3e 206e # -> n │ │ │ -000289d0: c3a4 6865 7220 756e 7465 7273 7563 6865 ..her untersuche │ │ │ -000289e0: 6e21 0a20 2020 2020 2020 2020 2020 2020 n!. │ │ │ -000289f0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00028a00: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00028a10: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00028a20: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ -00028a30: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. │ │ │ -00028a40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028a50: 2020 2020 2020 205b 2243 6865 636b 696e ["Checkin │ │ │ -00028a60: 6720 2472 656c 4669 6c65 4e61 6d65 205b g $relFileName [ │ │ │ -00028a70: 6e65 775d 225d 2920 6966 2024 7665 7262 new]"]) if $verb │ │ │ -00028a80: 6f73 653b 0a09 0970 7573 6820 4063 616c ose;...push @cal │ │ │ -00028a90: 634d 4435 2c20 2466 3b0a 0909 6966 2028 cMD5, $f;...if ( │ │ │ -00028aa0: 2464 6562 7567 4d6f 6465 203e 3d20 3329 $debugMode >= 3) │ │ │ -00028ab0: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo │ │ │ -00028ac0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00028ad0: 203d 3e20 2744 272c 0a09 0909 0920 2027 => 'D',..... ' │ │ │ -00028ae0: 2d73 7472 2720 3d3e 205b 226d 6435 7375 -str' => ["md5su │ │ │ -00028af0: 6d20 286e 6577 2066 696c 6529 2024 6622 m (new file) $f" │ │ │ -00028b00: 5d29 3b0a 0909 7d0a 0909 6e65 7874 3b0a ]);...}...next;. │ │ │ -00028b10: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if │ │ │ -00028b20: 2824 6967 6e6f 7265 5469 6d65 206e 6520 ($ignoreTime ne │ │ │ -00028b30: 276d 7469 6d65 2720 616e 6420 2824 6163 'mtime' and ($ac │ │ │ -00028b40: 744d 7469 6d65 2021 3d20 246f 6c64 4d74 tMtime != $oldMt │ │ │ -00028b50: 696d 6529 290a 0920 2020 207b 0a20 2020 ime)).. {. │ │ │ -00028b60: 2020 2020 2020 2020 2020 2020 2024 7072 $pr │ │ │ -00028b70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00028b80: 6427 203d 3e20 2749 272c 0a20 2020 2020 d' => 'I',. │ │ │ -00028b90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028ba0: 2020 2020 2020 2020 2027 2d73 7472 2720 '-str' │ │ │ -00028bb0: 3d3e 0a20 2020 2020 2020 2020 2020 2020 =>. │ │ │ -00028bc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028bd0: 205b 2243 6865 636b 696e 6720 2472 656c ["Checking $rel │ │ │ -00028be0: 4669 6c65 4e61 6d65 205b 6d74 696d 653a FileName [mtime: │ │ │ -00028bf0: 2024 6f6c 644d 7469 6d65 202d 3e20 2461 $oldMtime -> $a │ │ │ -00028c00: 6374 4d74 696d 655d 225d 290a 0909 2020 ctMtime]"])... │ │ │ -00028c10: 2020 6966 2024 7665 7262 6f73 653b 0a09 if $verbose;.. │ │ │ -00028c20: 0970 7573 6820 4063 616c 634d 4435 2c20 .push @calcMD5, │ │ │ -00028c30: 2466 3b0a 0909 6966 2028 2464 6562 7567 $f;...if ($debug │ │ │ -00028c40: 4d6f 6465 203e 3d20 3329 0a09 097b 0a09 Mode >= 3)...{.. │ │ │ -00028c50: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00028c60: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D │ │ │ -00028c70: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' │ │ │ -00028c80: 3d3e 205b 226d 6435 7375 6d20 286d 7469 => ["md5sum (mti │ │ │ -00028c90: 6d65 2920 2466 225d 293b 0a09 097d 0a09 me) $f"]);...}.. │ │ │ -00028ca0: 096e 6578 743b 0a09 2020 2020 7d0a 0a20 .next;.. }.. │ │ │ -00028cb0: 2020 2020 2020 2020 2020 2065 6c73 6966 elsif │ │ │ -00028cc0: 2028 2461 6374 5369 7a65 2021 3d20 246f ($actSize != $o │ │ │ -00028cd0: 6c64 5369 7a65 290a 0920 2020 207b 0a09 ldSize).. {.. │ │ │ -00028ce0: 0970 7573 6820 4063 616c 634d 4435 2c20 .push @calcMD5, │ │ │ -00028cf0: 2466 3b0a 0909 6966 2028 2464 6562 7567 $f;...if ($debug │ │ │ -00028d00: 4d6f 6465 203e 3d20 3329 0a09 097b 0a09 Mode >= 3)...{.. │ │ │ -00028d10: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00028d20: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D │ │ │ -00028d30: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' │ │ │ -00028d40: 3d3e 205b 226d 6435 7375 6d20 2873 697a => ["md5sum (siz │ │ │ -00028d50: 6529 2024 6622 5d29 3b0a 0909 7d0a 0909 e) $f"]);...}... │ │ │ -00028d60: 6e65 7874 3b0a 0920 2020 207d 0a0a 0920 next;.. }... │ │ │ -00028d70: 2020 2065 6c73 6966 2028 2469 676e 6f72 elsif ($ignor │ │ │ -00028d80: 6554 696d 6520 6e65 2027 6374 696d 6527 eTime ne 'ctime' │ │ │ -00028d90: 2061 6e64 2028 2461 6374 4374 696d 6520 and ($actCtime │ │ │ -00028da0: 213d 2024 6f6c 6443 7469 6d65 2929 0a09 != $oldCtime)).. │ │ │ -00028db0: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. │ │ │ -00028dc0: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ -00028dd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00028de0: 4927 2c0a 2020 2020 2020 2020 2020 2020 I',. │ │ │ -00028df0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028e00: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. │ │ │ -00028e10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00028e20: 2020 2020 2020 2020 2020 5b22 4368 6563 ["Chec │ │ │ -00028e30: 6b69 6e67 2024 7265 6c46 696c 654e 616d king $relFileNam │ │ │ -00028e40: 6520 5b63 7469 6d65 3a20 246f 6c64 4374 e [ctime: $oldCt │ │ │ -00028e50: 696d 6520 2d3e 2024 6163 7443 7469 6d65 ime -> $actCtime │ │ │ -00028e60: 5d22 5d29 0a09 0920 2020 2069 6620 2476 ]"])... if $v │ │ │ -00028e70: 6572 626f 7365 3b0a 0909 7075 7368 2040 erbose;...push @ │ │ │ -00028e80: 6361 6c63 4d44 352c 2024 663b 0a09 0969 calcMD5, $f;...i │ │ │ -00028e90: 6620 2824 6465 6275 674d 6f64 6520 3e3d f ($debugMode >= │ │ │ -00028ea0: 2033 290a 0909 7b0a 0909 2020 2020 2470 3)...{... $p │ │ │ -00028eb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00028ec0: 6e64 2720 3d3e 2027 4427 2c0a 0909 0909 nd' => 'D',..... │ │ │ -00028ed0: 2020 272d 7374 7227 203d 3e20 5b22 6d64 '-str' => ["md │ │ │ -00028ee0: 3573 756d 2028 6374 696d 6529 2024 6622 5sum (ctime) $f" │ │ │ -00028ef0: 5d29 3b0a 0909 7d0a 0909 6e65 7874 3b0a ]);...}...next;. │ │ │ -00028f00: 0920 2020 207d 0a0a 0a09 2020 2020 230a . }.... #. │ │ │ -00028f10: 0920 2020 2023 20c3 bc62 7269 673a 2070 . # ..brig: p │ │ │ -00028f20: 6c61 696e 2066 696c 6573 2c20 6469 6520 lain files, die │ │ │ -00028f30: 7369 6368 2067 6567 656e c3bc 6265 7220 sich gegen..ber │ │ │ -00028f40: 6465 6d20 6c65 747a 7465 6e20 4261 636b dem letzten Back │ │ │ -00028f50: 7570 0a09 2020 2020 2320 6e69 6368 7420 up.. # nicht │ │ │ -00028f60: 7665 72c3 a46e 6465 7274 2068 6162 656e ver..ndert haben │ │ │ -00028f70: 0a09 2020 2020 230a 0a20 2020 2020 2020 .. #.. │ │ │ -00028f80: 2020 2020 2023 206d 6974 206d 6435 2053 # mit md5 S │ │ │ -00028f90: 756d 6d65 20c3 bc62 6572 2064 626d 286d umme ..ber dbm(m │ │ │ -00028fa0: 6435 2920 6765 6865 6e2c 2064 6164 7572 d5) gehen, dadur │ │ │ -00028fb0: 6368 0a20 2020 2020 2020 2020 2020 2023 ch. # │ │ │ -00028fc0: 2044 6f70 7065 6c74 6520 7665 726d 6569 Doppelte vermei │ │ │ -00028fd0: 6465 6e0a 2020 2020 2020 2020 2020 2020 den. │ │ │ -00028fe0: 7075 7368 2040 6669 6c65 732c 2024 663b push @files, $f; │ │ │ -00028ff0: 0a20 2020 2020 2020 2020 2020 2070 7573 . pus │ │ │ -00029000: 6820 406d 6435 2c20 246d 6435 7375 6d3b h @md5, $md5sum; │ │ │ -00029010: 0a20 2020 2020 2020 2020 2020 2070 7573 . pus │ │ │ -00029020: 6820 4074 7970 6573 2c20 2766 273b 0a09 h @types, 'f';.. │ │ │ -00029030: 7d0a 0a0a 2020 2020 2020 2020 2320 5061 }... # Pa │ │ │ -00029040: 7261 6c6c 656c 7072 6f7a 6573 7320 7374 rallelprozess st │ │ │ -00029050: 6172 7465 6e2c 0a20 2020 2020 2020 2023 arten,. # │ │ │ -00029060: 204d 4435 2053 756d 6d65 6e20 66c3 bc72 MD5 Summen f..r │ │ │ -00029070: 2040 6361 6c63 4d44 3520 6265 7265 6368 @calcMD5 berech │ │ │ -00029080: 6e65 6e0a 2020 2020 2020 2020 6966 2028 nen. if ( │ │ │ -00029090: 4063 616c 634d 4435 203e 2030 290a 2020 @calcMD5 > 0). │ │ │ -000290a0: 2020 2020 2020 7b0a 2020 2020 2020 2020 {. │ │ │ -000290b0: 2020 2020 2473 656c 662d 3e7b 276d 6435 $self->{'md5 │ │ │ -000290c0: 466f 726b 277d 203d 2066 6f72 6b4d 4435 Fork'} = forkMD5 │ │ │ -000290d0: 2d3e 6e65 7728 272d 7061 7261 6d27 203d ->new('-param' = │ │ │ -000290e0: 3e20 5b40 6361 6c63 4d44 355d 2c0a 0909 > [@calcMD5],... │ │ │ -000290f0: 0909 0920 2020 2020 2027 2d70 724c 6f67 ... '-prLog │ │ │ -00029100: 2720 3d3e 2024 7072 4c6f 672c 0a09 0909 ' => $prLog,.... │ │ │ -00029110: 0909 2020 2020 2020 272d 746d 7064 6972 .. '-tmpdir │ │ │ -00029120: 2720 3d3e 2024 746d 7064 6972 2c0a 0909 ' => $tmpdir,... │ │ │ -00029130: 0909 0920 2020 2020 2027 2d72 6573 6574 ... '-reset │ │ │ -00029140: 4174 696d 6527 203d 3e0a 0909 0909 0920 Atime' =>...... │ │ │ -00029150: 2020 2020 2024 7365 6c66 2d3e 7b27 7265 $self->{'re │ │ │ -00029160: 7365 7441 7469 6d65 277d 293b 0a20 2020 setAtime'});. │ │ │ -00029170: 2020 2020 207d 0a20 2020 207d 0a0a 2020 }. }.. │ │ │ -00029180: 2020 2320 4661 6c6c 7320 6e6f 6368 2065 # Falls noch e │ │ │ -00029190: 696e 2050 6172 616c 6c65 6c70 726f 7a65 in Parallelproze │ │ │ -000291a0: 7373 206c c3a4 7566 742c 2073 6963 6865 ss l..uft, siche │ │ │ -000291b0: 7273 7465 6c6c 656e 2064 6173 7320 7265 rstellen dass re │ │ │ -000291c0: 6164 4469 720a 2020 2020 2320 6572 6e65 adDir. # erne │ │ │ -000291d0: 7574 2061 7566 6765 7275 6665 6e20 7769 ut aufgerufen wi │ │ │ -000291e0: 7264 2061 7563 6820 7765 6e6e 2065 7320 rd auch wenn es │ │ │ -000291f0: 6a65 747a 7420 6e69 6368 7473 207a 7572 jetzt nichts zur │ │ │ -00029200: c3bc 636b 6765 6765 6265 6e0a 2020 2020 ..ckgegeben. │ │ │ -00029210: 2320 6861 742e 0a20 2020 2069 6620 2840 # hat.. if (@ │ │ │ -00029220: 6669 6c65 7320 3d3d 2030 2061 6e64 2024 files == 0 and $ │ │ │ -00029230: 7365 6c66 2d3e 7b27 6d64 3546 6f72 6b27 self->{'md5Fork' │ │ │ -00029240: 7d29 0a20 2020 207b 0a20 2020 2020 2020 }). {. │ │ │ -00029250: 2070 7573 6820 4066 696c 6573 2c20 756e push @files, un │ │ │ -00029260: 6465 663b 0a20 2020 2020 2020 2070 7573 def;. pus │ │ │ -00029270: 6820 406d 6435 2c20 756e 6465 663b 0a20 h @md5, undef;. │ │ │ -00029280: 2020 2020 2020 2070 7573 6820 4074 7970 push @typ │ │ │ -00029290: 6573 2c20 2772 6570 6561 7427 3b0a 2020 es, 'repeat';. │ │ │ -000292a0: 2020 7d0a 0a20 2020 2024 7365 6c66 2d3e }.. $self-> │ │ │ -000292b0: 7b27 6669 6c65 7327 7d20 3d20 5c40 6669 {'files'} = \@fi │ │ │ -000292c0: 6c65 733b 0a20 2020 2024 7365 6c66 2d3e les;. $self-> │ │ │ -000292d0: 7b27 6d64 3527 7d20 3d20 5c40 6d64 353b {'md5'} = \@md5; │ │ │ -000292e0: 0a20 2020 2024 7365 6c66 2d3e 7b27 7479 . $self->{'ty │ │ │ -000292f0: 7065 7327 7d20 3d20 5c40 7479 7065 733b pes'} = \@types; │ │ │ -00029300: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ -00029310: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029320: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -00029330: 6220 4445 5354 524f 590a 7b0a 2020 2020 b DESTROY.{. │ │ │ -00029340: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -00029350: 3b0a 0a20 2020 206d 7920 2477 636c 203d ;.. my $wcl = │ │ │ -00029360: 2024 7365 6c66 2d3e 7b27 7772 6974 6545 $self->{'writeE │ │ │ -00029370: 7863 6c75 6465 4c6f 6727 7d3b 0a0a 2020 xcludeLog'};.. │ │ │ -00029380: 2020 6966 2028 2477 636c 2061 6e64 2024 if ($wcl and $ │ │ │ -00029390: 6d61 696e 3a3a 656e 644f 6653 746f 7265 main::endOfStore │ │ │ -000293a0: 4261 636b 7570 290a 2020 2020 7b0a 2309 Backup). {.#. │ │ │ -000293b0: 6c6f 6361 6c20 2a45 5843 4c5f 4c4f 4720 local *EXCL_LOG │ │ │ -000293c0: 3d20 2473 656c 662d 3e7b 2745 5843 4c5f = $self->{'EXCL_ │ │ │ -000293d0: 4c4f 4727 7d3b 0a23 0963 6c6f 7365 2845 LOG'};.#.close(E │ │ │ -000293e0: 5843 4c5f 4c4f 4729 206f 720a 2309 2020 XCL_LOG) or.#. │ │ │ -000293f0: 2020 2473 656c 662d 3e7b 2770 724c 6f67 $self->{'prLog │ │ │ -00029400: 277d 2d3e 7072 696e 7428 272d 6b69 6e64 '}->print('-kind │ │ │ -00029410: 2720 3d3e 2027 4527 2c0a 2309 0909 0920 ' => 'E',.#.... │ │ │ -00029420: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -00029430: 616e 6e6f 7420 636c 6f73 6520 3c24 7763 annot close <$wc │ │ │ -00029440: 6c3e 225d 2c0a 2309 0909 0920 2020 2027 l>"],.#.... ' │ │ │ -00029450: 2d65 7869 7427 203d 3e20 3129 3b0a 096d -exit' => 1);..m │ │ │ -00029460: 7920 2465 7863 6c4c 6f67 203d 2024 7365 y $exclLog = $se │ │ │ -00029470: 6c66 2d3e 7b27 6578 636c 4c6f 6727 7d3b lf->{'exclLog'}; │ │ │ -00029480: 0a09 2465 7863 6c4c 6f67 2d3e 7761 6974 ..$exclLog->wait │ │ │ -00029490: 2829 3b0a 096d 7920 246f 7574 203d 2024 ();..my $out = $ │ │ │ -000294a0: 6578 636c 4c6f 672d 3e67 6574 5354 4445 exclLog->getSTDE │ │ │ -000294b0: 5252 2829 3b0a 0969 6620 2840 246f 7574 RR();..if (@$out │ │ │ -000294c0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog │ │ │ -000294d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000294e0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ -000294f0: 7472 2720 3d3e 205b 2262 7a69 7032 2072 tr' => ["bzip2 r │ │ │ -00029500: 6570 6f72 7473 2065 7272 6f72 733a 222c eports errors:", │ │ │ -00029510: 0a09 0909 0920 2020 2020 4024 6f75 745d ..... @$out] │ │ │ -00029520: 293b 0a09 2020 2020 6578 6974 2031 3b0a );.. exit 1;. │ │ │ -00029530: 097d 0a09 2465 7863 6c4c 6f67 2d3e 636c .}..$exclLog->cl │ │ │ -00029540: 6f73 6528 293b 0a20 2020 207d 0a7d 0a0a ose();. }.}.. │ │ │ -00029550: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -00029560: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029570: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029580: 2323 230a 2320 7374 656c 6c74 2066 6573 ###.# stellt fes │ │ │ -00029590: 742c 2077 656c 6368 6573 2064 6173 206e t, welches das n │ │ │ -000295a0: 6575 6520 4469 7265 6374 6f72 7920 6973 eue Directory is │ │ │ -000295b0: 742c 206c c3b6 7363 6874 2061 6c74 650a t, l..scht alte. │ │ │ -000295c0: 7061 636b 6167 6520 6164 6d69 6e44 6972 package adminDir │ │ │ -000295d0: 6563 746f 7269 6573 3b0a 7573 6520 4361 ectories;.use Ca │ │ │ -000295e0: 7270 3b0a 0a73 7562 206e 6577 0a7b 0a20 rp;..sub new.{. │ │ │ -000295f0: 2020 206d 7920 2463 6c61 7373 203d 2073 my $class = s │ │ │ -00029600: 6869 6674 3b0a 2020 2020 6d79 2024 7365 hift;. my $se │ │ │ -00029610: 6c66 203d 207b 7d3b 0a0a 2020 2020 6d79 lf = {};.. my │ │ │ -00029620: 2028 2570 6172 616d 7329 203d 2028 272d (%params) = ('- │ │ │ -00029630: 7461 7267 6574 4469 7227 2020 2020 3d3e targetDir' => │ │ │ -00029640: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00029650: 6368 6563 6b53 756d 4669 6c65 2720 3d3e checkSumFile' => │ │ │ -00029660: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00029670: 746d 7064 6972 2720 2020 2020 2020 3d3e tmpdir' => │ │ │ -00029680: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -00029690: 6368 6d6f 644d 4435 4669 6c65 2720 3d3e chmodMD5File' => │ │ │ -000296a0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -000296b0: 7072 4c6f 6727 2020 2020 2020 2020 3d3e prLog' => │ │ │ -000296c0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -000296d0: 616b 7444 6174 6527 2020 2020 2020 3d3e aktDate' => │ │ │ -000296e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -000296f0: 6465 6275 674d 6f64 6527 2020 2020 3d3e debugMode' => │ │ │ -00029700: 2030 0a09 0920 2020 2029 3b0a 0a20 2020 0... );.. │ │ │ -00029710: 2026 3a3a 6368 6563 6b4f 626a 6563 7450 &::checkObjectP │ │ │ -00029720: 6172 616d 7328 5c25 7061 7261 6d73 2c20 arams(\%params, │ │ │ -00029730: 5c40 5f2c 2027 6164 6d69 6e44 6972 6563 \@_, 'adminDirec │ │ │ -00029740: 746f 7269 6573 3a3a 6e65 7727 2c0a 0909 tories::new',... │ │ │ -00029750: 0920 5b27 2d74 6172 6765 7444 6972 272c . ['-targetDir', │ │ │ -00029760: 2027 2d63 6865 636b 5375 6d46 696c 6527 '-checkSumFile' │ │ │ -00029770: 2c20 272d 6368 6d6f 644d 4435 4669 6c65 , '-chmodMD5File │ │ │ -00029780: 272c 0a09 0909 2020 272d 746d 7064 6972 ',.... '-tmpdir │ │ │ -00029790: 272c 2027 2d70 724c 6f67 275d 293b 0a20 ', '-prLog']);. │ │ │ -000297a0: 2020 2026 3a3a 7365 7450 6172 616d 7344 &::setParamsD │ │ │ -000297b0: 6972 6563 7428 2473 656c 662c 205c 2570 irect($self, \%p │ │ │ -000297c0: 6172 616d 7329 3b0a 0a23 2077 6569 7465 arams);..# weite │ │ │ -000297d0: 7265 2056 6172 6961 626c 656e 3a0a 2320 re Variablen:.# │ │ │ -000297e0: 2761 6b74 4461 7465 272c 2027 6261 7365 'aktDate', 'base │ │ │ -000297f0: 4469 7227 2c20 2761 6b74 4469 7227 2c20 Dir', 'aktDir', │ │ │ -00029800: 2770 7265 7644 6972 272c 2027 6f6c 6444 'prevDir', 'oldD │ │ │ -00029810: 6972 7327 0a0a 2020 2020 6d79 2024 7461 irs'.. my $ta │ │ │ -00029820: 7267 6574 4469 7220 3d20 2473 656c 662d rgetDir = $self- │ │ │ -00029830: 3e7b 2774 6172 6765 7444 6972 277d 3b0a >{'targetDir'};. │ │ │ -00029840: 2020 2020 6d79 2024 6368 6d6f 644d 4435 my $chmodMD5 │ │ │ -00029850: 4669 6c65 203d 2024 7365 6c66 2d3e 7b27 File = $self->{' │ │ │ -00029860: 6368 6d6f 644d 4435 4669 6c65 277d 3b0a chmodMD5File'};. │ │ │ -00029870: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ -00029880: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ -00029890: 3b0a 0a20 2020 206d 7920 2461 6b74 4461 ;.. my $aktDa │ │ │ -000298a0: 7465 203d 2024 7365 6c66 2d3e 7b27 616b te = $self->{'ak │ │ │ -000298b0: 7444 6174 6527 7d3b 0a20 2020 2024 7365 tDate'};. $se │ │ │ -000298c0: 6c66 2d3e 7b27 6261 7365 4469 7227 7d20 lf->{'baseDir'} │ │ │ -000298d0: 3d20 2474 6172 6765 7444 6972 3b0a 2020 = $targetDir;. │ │ │ -000298e0: 2020 6d79 2024 616b 7444 6972 203d 2024 my $aktDir = $ │ │ │ -000298f0: 7365 6c66 2d3e 7b27 616b 7444 6972 277d self->{'aktDir'} │ │ │ -00029900: 203d 2024 7461 7267 6574 4469 7220 2e20 = $targetDir . │ │ │ -00029910: 272f 2720 2e0a 0924 616b 7444 6174 652d '/' ...$aktDate- │ │ │ -00029920: 3e67 6574 4461 7465 5469 6d65 2827 2d66 >getDateTime('-f │ │ │ -00029930: 6f72 6d61 7427 203d 3e20 2725 592e 254d ormat' => '%Y.%M │ │ │ -00029940: 2e25 445f 2568 2e25 6d2e 2573 2729 3b0a .%D_%h.%m.%s');. │ │ │ -00029950: 0a20 2020 206d 7920 2461 7362 6420 3d20 . my $asbd = │ │ │ -00029960: 616c 6c53 746f 7265 4261 636b 7570 5365 allStoreBackupSe │ │ │ -00029970: 7269 6573 2d3e 6e65 7728 272d 726f 6f74 ries->new('-root │ │ │ -00029980: 4469 7227 203d 3e20 2474 6172 6765 7444 Dir' => $targetD │ │ │ -00029990: 6972 2c0a 0909 0909 0920 272d 6368 6563 ir,...... '-chec │ │ │ -000299a0: 6b53 756d 4669 6c65 2720 3d3e 2024 6368 kSumFile' => $ch │ │ │ -000299b0: 6563 6b53 756d 4669 6c65 2c0a 0909 0909 eckSumFile,..... │ │ │ -000299c0: 0920 272d 7072 4c6f 6727 203d 3e20 2470 . '-prLog' => $p │ │ │ -000299d0: 724c 6f67 293b 0a20 2020 2024 7365 6c66 rLog);. $self │ │ │ -000299e0: 2d3e 7b27 7072 6576 4469 7227 7d20 3d20 ->{'prevDir'} = │ │ │ -000299f0: 2461 7362 642d 3e67 6574 4669 6e69 7368 $asbd->getFinish │ │ │ -00029a00: 6564 5072 6576 2829 3b0a 0a23 204e 6575 edPrev();..# Neu │ │ │ -00029a10: 6573 2056 6572 7a65 6963 686e 6973 2061 es Verzeichnis a │ │ │ -00029a20: 6e6c 6567 656e 0a20 2020 2024 7072 4c6f nlegen. $prLo │ │ │ -00029a30: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00029a40: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -00029a50: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -00029a60: 6372 6561 7465 203c 2461 6b74 4469 723e create <$aktDir> │ │ │ -00029a70: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting"],... │ │ │ -00029a80: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1).. │ │ │ -00029a90: 756e 6c65 7373 2028 6d6b 6469 7220 2461 unless (mkdir $a │ │ │ -00029aa0: 6b74 4469 7229 3b0a 2020 2020 6368 6d6f ktDir);. chmo │ │ │ -00029ab0: 6420 3037 3535 2c20 2461 6b74 4469 723b d 0755, $aktDir; │ │ │ -00029ac0: 0a20 2020 206d 7920 2463 686d 6f64 4469 . my $chmodDi │ │ │ -00029ad0: 7220 3d20 2463 686d 6f64 4d44 3546 696c r = $chmodMD5Fil │ │ │ -00029ae0: 653b 0a20 2020 2024 6368 6d6f 6444 6972 e;. $chmodDir │ │ │ -00029af0: 207c 3d20 3031 3030 2069 6620 2463 686d |= 0100 if $chm │ │ │ -00029b00: 6f64 4469 7220 2620 3034 3030 3b0a 2020 odDir & 0400;. │ │ │ -00029b10: 2020 2463 686d 6f64 4469 7220 7c3d 2030 $chmodDir |= 0 │ │ │ -00029b20: 3031 3020 6966 2024 6368 6d6f 6444 6972 010 if $chmodDir │ │ │ -00029b30: 2026 2030 3034 303b 0a20 2020 2024 6368 & 0040;. $ch │ │ │ -00029b40: 6d6f 6444 6972 207c 3d20 3030 3031 2069 modDir |= 0001 i │ │ │ -00029b50: 6620 2463 686d 6f64 4469 7220 2620 3030 f $chmodDir & 00 │ │ │ -00029b60: 3034 3b0a 2020 2020 6d6b 6469 7220 2224 04;. mkdir "$ │ │ │ -00029b70: 616b 7444 6972 2f2e 7374 6f72 6542 6163 aktDir/.storeBac │ │ │ -00029b80: 6b75 704c 696e 6b73 222c 2024 6368 6d6f kupLinks", $chmo │ │ │ -00029b90: 6444 6972 3b0a 0a20 2020 206d 7920 2464 dDir;.. my $d │ │ │ -00029ba0: 6562 7567 4d6f 6465 203d 2024 7365 6c66 ebugMode = $self │ │ │ -00029bb0: 2d3e 7b27 6465 6275 674d 6f64 6527 7d3b ->{'debugMode'}; │ │ │ -00029bc0: 0a20 2020 2069 6620 2824 6465 6275 674d . if ($debugM │ │ │ -00029bd0: 6f64 6520 3e20 3029 0a20 2020 207b 0a09 ode > 0). {.. │ │ │ -00029be0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00029bf0: 6b69 6e64 2720 3d3e 2027 4927 2c0a 0909 kind' => 'I',... │ │ │ -00029c00: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00029c10: 5b22 6e65 7720 6469 7265 6374 6f72 7920 ["new directory │ │ │ -00029c20: 6973 203c 2461 6b74 4469 723e 222c 0a09 is <$aktDir>",.. │ │ │ -00029c30: 0909 0920 2473 656c 662d 3e7b 2770 7265 ... $self->{'pre │ │ │ -00029c40: 7644 6972 277d 203f 0a09 0909 0920 2270 vDir'} ?..... "p │ │ │ -00029c50: 7265 7669 6f75 7320 6469 7265 6374 6f72 revious director │ │ │ -00029c60: 7920 6973 203c 2220 2e0a 0909 0909 2024 y is <" ...... $ │ │ │ -00029c70: 7365 6c66 2d3e 7b27 7072 6576 4469 7227 self->{'prevDir' │ │ │ -00029c80: 7d20 2e20 223e 2220 3a0a 0909 0909 2027 } . ">" :..... ' │ │ │ -00029c90: 6e6f 2070 7265 7669 6f75 7320 6469 7265 no previous dire │ │ │ -00029ca0: 6374 6f72 792c 2066 6972 7374 2075 7365 ctory, first use │ │ │ -00029cb0: 275d 293b 0a20 2020 207d 0a0a 2020 2020 ']);. }.. │ │ │ -00029cc0: 6d79 2028 406f 6c64 4469 7273 2920 3d20 my (@oldDirs) = │ │ │ -00029cd0: 2461 7362 642d 3e67 6574 416c 6c44 6972 $asbd->getAllDir │ │ │ -00029ce0: 7328 293b 0a20 2020 2024 7365 6c66 2d3e s();. $self-> │ │ │ -00029cf0: 7b27 6f6c 6444 6972 7327 7d20 3d20 5c40 {'oldDirs'} = \@ │ │ │ -00029d00: 6f6c 6444 6972 733b 0a0a 2020 2020 626c oldDirs;.. bl │ │ │ -00029d10: 6573 7320 2473 656c 662c 2024 636c 6173 ess $self, $clas │ │ │ -00029d20: 733b 0a7d 0a0a 0a23 2323 2323 2323 2323 s;.}...######### │ │ │ -00029d30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029d40: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -00029d50: 2320 7369 6e64 2073 6f72 7469 6572 743a # sind sortiert: │ │ │ -00029d60: 20c3 a46c 7465 7374 6573 207a 7565 7273 ..ltestes zuers │ │ │ -00029d70: 740a 7375 6220 6765 744f 6c64 4469 7273 t.sub getOldDirs │ │ │ -00029d80: 0a7b 0a20 2020 206d 7920 2473 656c 6620 .{. my $self │ │ │ -00029d90: 3d20 7368 6966 743b 0a0a 2020 2020 7265 = shift;.. re │ │ │ -00029da0: 7475 726e 2024 7365 6c66 2d3e 7b27 6f6c turn $self->{'ol │ │ │ -00029db0: 6444 6972 7327 7d3b 0a7d 0a0a 0a23 2323 dDirs'};.}...### │ │ │ -00029dc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029de0: 2323 2323 230a 7375 6220 6765 7441 6b74 #####.sub getAkt │ │ │ -00029df0: 4469 720a 7b0a 2020 2020 6d79 2024 7365 Dir.{. my $se │ │ │ -00029e00: 6c66 203d 2073 6869 6674 3b0a 2020 2020 lf = shift;. │ │ │ -00029e10: 7265 7475 726e 2024 7365 6c66 2d3e 7b27 return $self->{' │ │ │ -00029e20: 616b 7444 6972 277d 3b20 2020 2020 2020 aktDir'}; │ │ │ -00029e30: 2320 5374 7269 6e67 0a7d 0a0a 0a23 2323 # String.}...### │ │ │ -00029e40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029e50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029e60: 2323 2323 230a 7375 6220 6765 7441 6b74 #####.sub getAkt │ │ │ -00029e70: 496e 666f 4669 6c65 0a7b 0a20 2020 206d InfoFile.{. m │ │ │ -00029e80: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -00029e90: 0a0a 2020 2020 6d79 2024 616b 7444 6972 .. my $aktDir │ │ │ -00029ea0: 203d 2024 7365 6c66 2d3e 7b27 616b 7444 = $self->{'aktD │ │ │ -00029eb0: 6972 277d 3b0a 2020 2020 6966 2028 2461 ir'};. if ($a │ │ │ -00029ec0: 6b74 4469 7229 0a20 2020 207b 0a09 7265 ktDir). {..re │ │ │ -00029ed0: 7475 726e 2024 616b 7444 6972 202e 2027 turn $aktDir . ' │ │ │ -00029ee0: 2f27 202e 2024 7365 6c66 2d3e 7b27 6368 /' . $self->{'ch │ │ │ -00029ef0: 6563 6b53 756d 4669 6c65 277d 3b0a 2020 eckSumFile'};. │ │ │ -00029f00: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ -00029f10: 207b 0a09 7265 7475 726e 2075 6e64 6566 {..return undef │ │ │ -00029f20: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...#### │ │ │ -00029f30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029f40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00029f50: 2323 2323 0a73 7562 2067 6574 5072 6576 ####.sub getPrev │ │ │ -00029f60: 4469 720a 7b0a 2020 2020 6361 7270 2022 Dir.{. carp " │ │ │ -00029f70: 4465 7072 6563 6174 6564 2120 5768 7920 Deprecated! Why │ │ │ -00029f80: 7368 6f75 6c64 2074 6869 7320 6265 206e should this be n │ │ │ -00029f90: 6563 6365 7373 6172 793f 223b 0a20 2020 eccessary?";. │ │ │ -00029fa0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -00029fb0: 743b 0a20 2020 2072 6574 7572 6e20 2473 t;. return $s │ │ │ -00029fc0: 656c 662d 3e7b 2770 7265 7644 6972 277d elf->{'prevDir'} │ │ │ -00029fd0: 3b20 2020 2020 2020 2320 5374 7269 6e67 ; # String │ │ │ -00029fe0: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ -00029ff0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002a000: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -0002a010: 6220 6765 744f 6c64 496e 666f 4669 6c65 b getOldInfoFile │ │ │ -0002a020: 0a7b 0a20 2020 2063 6172 7020 2244 6570 .{. carp "Dep │ │ │ -0002a030: 7265 6361 7465 6421 2057 6879 2073 686f recated! Why sho │ │ │ -0002a040: 756c 6420 7468 6973 2062 6520 6e65 6363 uld this be necc │ │ │ -0002a050: 6573 7361 7279 3f22 3b0a 2020 2020 6d79 essary?";. my │ │ │ -0002a060: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -0002a070: 0a20 2020 206d 7920 2470 7265 7644 6972 . my $prevDir │ │ │ -0002a080: 203d 2024 7365 6c66 2d3e 7b27 7072 6576 = $self->{'prev │ │ │ -0002a090: 4469 7227 7d3b 0a20 2020 2069 6620 2824 Dir'};. if ($ │ │ │ -0002a0a0: 7072 6576 4469 7229 0a20 2020 207b 0a09 prevDir). {.. │ │ │ -0002a0b0: 7265 7475 726e 2024 7072 6576 4469 7220 return $prevDir │ │ │ -0002a0c0: 2e20 272f 2720 2e20 2473 656c 662d 3e7b . '/' . $self->{ │ │ │ -0002a0d0: 2763 6865 636b 5375 6d46 696c 6527 7d3b 'checkSumFile'}; │ │ │ -0002a0e0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -0002a0f0: 2020 2020 7b0a 0972 6574 7572 6e20 756e {..return un │ │ │ -0002a100: 6465 663b 0a20 2020 207d 0a7d 0a0a 0a23 def;. }.}...# │ │ │ -0002a110: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002a120: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002a130: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002a140: 230a 2320 5370 6c69 7474 6574 2064 6965 #.# Splittet die │ │ │ -0002a150: 2050 6172 616d 6574 6572 6c69 7374 6520 Parameterliste │ │ │ -0002a160: 2866 616c 6c73 207a 7520 6c61 6e67 2920 (falls zu lang) │ │ │ -0002a170: 6175 660a 2320 5374 656c 6c74 206e 6163 auf.# Stellt nac │ │ │ -0002a180: 6820 6175 c39f 656e 2065 696e 2049 6e74 h au..en ein Int │ │ │ -0002a190: 6572 6661 6365 2061 6e61 6c6f 6720 666f erface analog fo │ │ │ -0002a1a0: 726b 5072 6f63 207a 7572 2056 6572 66c3 rkProc zur Verf. │ │ │ -0002a1b0: bc67 756e 670a 2320 286c c3a4 7566 7420 .gung.# (l..uft │ │ │ -0002a1c0: 696d 2048 696e 7465 7267 7275 6e64 2061 im Hintergrund a │ │ │ -0002a1d0: 6c73 2066 6f72 6b2f 6578 6563 290a 2320 ls fork/exec).# │ │ │ -0002a1e0: 4172 6265 6974 6574 202a 616c 6c65 2a20 Arbeitet *alle* │ │ │ -0002a1f0: 6162 2c20 6572 7374 2064 616e 6e20 7769 ab, erst dann wi │ │ │ -0002a200: 7264 2045 7267 6562 6e69 7320 6765 6c69 rd Ergebnis geli │ │ │ -0002a210: 6566 6572 740a 7061 636b 6167 6520 666f efert.package fo │ │ │ -0002a220: 726b 4d44 353b 0a0a 7375 6220 6e65 770a rkMD5;..sub new. │ │ │ -0002a230: 7b0a 2020 2020 6d79 2024 636c 6173 7320 {. my $class │ │ │ -0002a240: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -0002a250: 2473 656c 6620 3d20 7b7d 3b0a 0a20 2020 $self = {};.. │ │ │ -0002a260: 206d 7920 2825 7061 7261 6d73 2920 3d20 my (%params) = │ │ │ -0002a270: 2827 2d70 6172 616d 2720 2020 2020 203d ('-param' = │ │ │ -0002a280: 3e20 5b5d 2c0a 0909 2020 2020 272d 7072 > [],... '-pr │ │ │ -0002a290: 4c6f 6727 2020 2020 2020 3d3e 2075 6e64 Log' => und │ │ │ -0002a2a0: 6566 2c0a 0909 2020 2020 272d 746d 7064 ef,... '-tmpd │ │ │ -0002a2b0: 6972 2720 2020 2020 3d3e 2075 6e64 6566 ir' => undef │ │ │ -0002a2c0: 2c0a 0909 2020 2020 272d 7265 7365 7441 ,... '-resetA │ │ │ -0002a2d0: 7469 6d65 2720 3d3e 2075 6e64 6566 0a09 time' => undef.. │ │ │ -0002a2e0: 0920 2020 2029 3b0a 0a20 2020 2026 3a3a . );.. &:: │ │ │ -0002a2f0: 6368 6563 6b4f 626a 6563 7450 6172 616d checkObjectParam │ │ │ -0002a300: 7328 5c25 7061 7261 6d73 2c20 5c40 5f2c s(\%params, \@_, │ │ │ -0002a310: 2027 666f 726b 4d44 353a 3a6e 6577 272c 'forkMD5::new', │ │ │ -0002a320: 0a09 0909 205b 272d 7072 4c6f 6727 2c20 .... ['-prLog', │ │ │ -0002a330: 272d 746d 7064 6972 275d 293b 0a20 2020 '-tmpdir']);. │ │ │ -0002a340: 2026 3a3a 7365 7450 6172 616d 7344 6972 &::setParamsDir │ │ │ -0002a350: 6563 7428 2473 656c 662c 205c 2570 6172 ect($self, \%par │ │ │ -0002a360: 616d 7329 3b0a 0a0a 2020 2020 2840 7b24 ams);... (@{$ │ │ │ -0002a370: 7365 6c66 2d3e 7b27 7265 7375 6c74 5354 self->{'resultST │ │ │ -0002a380: 4445 5252 277d 7d29 203d 2028 293b 0a20 DERR'}}) = ();. │ │ │ -0002a390: 2020 2028 407b 2473 656c 662d 3e7b 2772 (@{$self->{'r │ │ │ -0002a3a0: 6573 756c 7453 5444 4f55 5427 7d7d 2920 esultSTDOUT'}}) │ │ │ -0002a3b0: 3d20 2829 3b0a 0a20 2020 2062 6c65 7373 = ();.. bless │ │ │ -0002a3c0: 2024 7365 6c66 2c20 2463 6c61 7373 3b0a $self, $class;. │ │ │ -0002a3d0: 0a20 2020 2023 2063 6163 6865 2061 7469 . # cache ati │ │ │ -0002a3e0: 6d65 2061 6e64 206d 7469 6d65 2069 6e20 me and mtime in │ │ │ -0002a3f0: 6f62 6a65 6374 0a20 2020 206d 7920 2840 object. my (@ │ │ │ -0002a400: 6174 696d 652c 2040 6d74 696d 652c 2024 atime, @mtime, $ │ │ │ -0002a410: 7029 3b0a 2020 2020 666f 7265 6163 6820 p);. foreach │ │ │ -0002a420: 2470 2028 407b 2473 656c 662d 3e7b 2770 $p (@{$self->{'p │ │ │ -0002a430: 6172 616d 277d 7d29 0a20 2020 207b 0a09 aram'}}). {.. │ │ │ -0002a440: 6d79 2028 2461 7469 6d65 2c20 246d 7469 my ($atime, $mti │ │ │ -0002a450: 6d65 2920 3d20 2873 7461 7428 2470 2929 me) = (stat($p)) │ │ │ -0002a460: 5b38 2c20 395d 3b0a 0970 7573 6820 4061 [8, 9];..push @a │ │ │ -0002a470: 7469 6d65 2c20 2461 7469 6d65 3b0a 0970 time, $atime;..p │ │ │ -0002a480: 7573 6820 406d 7469 6d65 2c20 246d 7469 ush @mtime, $mti │ │ │ -0002a490: 6d65 3b0a 2020 2020 7d0a 0a20 2020 2023 me;. }.. # │ │ │ -0002a4a0: 2073 746f 7265 2069 6e66 6f72 6d61 7469 store informati │ │ │ -0002a4b0: 6f6e 2074 6f20 7265 7374 6f72 6520 6174 on to restore at │ │ │ -0002a4c0: 696d 6520 2861 6e64 206d 7469 6d65 290a ime (and mtime). │ │ │ -0002a4d0: 2020 2020 407b 2473 656c 662d 3e7b 2761 @{$self->{'a │ │ │ -0002a4e0: 6c6c 5061 7261 6d27 7d7d 203d 2040 7b24 llParam'}} = @{$ │ │ │ -0002a4f0: 7365 6c66 2d3e 7b27 7061 7261 6d27 7d7d self->{'param'}} │ │ │ -0002a500: 3b0a 2020 2020 2473 656c 662d 3e7b 2761 ;. $self->{'a │ │ │ -0002a510: 7469 6d65 277d 203d 205c 4061 7469 6d65 time'} = \@atime │ │ │ -0002a520: 3b0a 2020 2020 2473 656c 662d 3e7b 276d ;. $self->{'m │ │ │ -0002a530: 7469 6d65 277d 203d 205c 406d 7469 6d65 time'} = \@mtime │ │ │ -0002a540: 3b0a 0a20 2020 2024 7365 6c66 2d3e 5f73 ;.. $self->_s │ │ │ -0002a550: 7461 7274 4a6f 6228 293b 0a0a 2020 2020 tartJob();.. │ │ │ -0002a560: 7265 7475 726e 2024 7365 6c66 3b0a 7d0a return $self;.}. │ │ │ -0002a570: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ -0002a580: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002a590: 2323 2323 2323 2323 2323 0a73 7562 205f ##########.sub _ │ │ │ -0002a5a0: 7374 6172 744a 6f62 0a7b 0a20 2020 206d startJob.{. m │ │ │ -0002a5b0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -0002a5c0: 0a0a 2020 2020 2473 656c 662d 3e7b 2766 .. $self->{'f │ │ │ -0002a5d0: 6f72 6b27 7d20 3d20 756e 6465 663b 0a0a ork'} = undef;.. │ │ │ -0002a5e0: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ -0002a5f0: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ -0002a600: 3b0a 0a20 2020 2064 6f0a 2020 2020 7b0a ;.. do. {. │ │ │ -0002a610: 096d 7920 246c 203d 2030 3b20 2020 2020 .my $l = 0; │ │ │ -0002a620: 2023 2061 6b6b 756d 756c 6965 7274 6520 # akkumulierte │ │ │ -0002a630: 4cc3 a46e 6765 2064 6572 2050 6172 616d L..nge der Param │ │ │ -0002a640: 7465 7220 696e 2042 7974 650a 096d 7920 ter in Byte..my │ │ │ -0002a650: 2469 3b0a 096d 7920 2470 6172 616d 203d $i;..my $param = │ │ │ -0002a660: 2024 7365 6c66 2d3e 7b27 7061 7261 6d27 $self->{'param' │ │ │ -0002a670: 7d3b 2020 2020 2320 506f 696e 7465 7220 }; # Pointer │ │ │ -0002a680: 6175 6620 5061 7261 6d65 7465 7220 5665 auf Parameter Ve │ │ │ -0002a690: 6b74 6f72 0a0a 0966 6f72 2028 2469 203d ktor...for ($i = │ │ │ -0002a6a0: 2030 203b 2024 6920 3c20 4024 7061 7261 0 ; $i < @$para │ │ │ -0002a6b0: 6d20 3b20 2469 2b2b 290a 097b 0a09 2020 m ; $i++)..{.. │ │ │ -0002a6c0: 2020 6d79 2024 6c31 203d 2031 202b 206c my $l1 = 1 + l │ │ │ -0002a6d0: 656e 6774 6820 2424 7061 7261 6d5b 2469 ength $$param[$i │ │ │ -0002a6e0: 5d3b 2020 2020 2320 3120 4279 7465 2066 ]; # 1 Byte f │ │ │ -0002a6f0: c3bc 7220 275c 3027 2069 6e20 430a 0920 ..r '\0' in C.. │ │ │ -0002a700: 2020 2069 6620 2824 6c20 2b20 246c 3120 if ($l + $l1 │ │ │ -0002a710: 3e20 246d 6169 6e3a 3a65 7865 6350 6172 > $main::execPar │ │ │ -0002a720: 616d 4c65 6e67 7468 290a 0920 2020 207b amLength).. { │ │ │ -0002a730: 0a09 096c 6173 743b 0a09 2020 2020 7d0a ...last;.. }. │ │ │ -0002a740: 0920 2020 2024 6c20 2b3d 2024 6c31 3b0a . $l += $l1;. │ │ │ -0002a750: 097d 0a0a 0969 6620 2824 6920 3d3d 2030 .}...if ($i == 0 │ │ │ -0002a760: 2920 2020 2020 2023 2064 6572 2065 7273 ) # der ers │ │ │ -0002a770: 7465 2070 61c3 9f74 20c3 bc62 6572 6861 te pa..t ..berha │ │ │ -0002a780: 7570 7420 6e69 6368 7420 7265 696e 0a09 upt nicht rein.. │ │ │ -0002a790: 7b20 2020 2020 2020 2020 2020 2020 2020 { │ │ │ -0002a7a0: 2020 2320 2869 7374 2061 6c6c 6569 6e65 # (ist alleine │ │ │ -0002a7b0: 2073 6368 6f6e 207a 7520 6c61 6e67 290a schon zu lang). │ │ │ -0002a7c0: 0920 2020 206d 7920 2461 6b74 5061 7220 . my $aktPar │ │ │ -0002a7d0: 3d20 7368 6966 7420 407b 2473 656c 662d = shift @{$self- │ │ │ -0002a7e0: 3e7b 2770 6172 616d 277d 7d3b 2020 2023 >{'param'}}; # │ │ │ -0002a7f0: 2065 7274 656e 2022 7765 6777 6572 6665 erten "wegwerfe │ │ │ -0002a800: 6e22 0a09 2020 2020 2470 724c 6f67 2d3e n".. $prLog-> │ │ │ -0002a810: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0002a820: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -0002a830: 2720 3d3e 205b 2270 6172 616d 6574 6572 ' => ["parameter │ │ │ -0002a840: 2074 6f20 6c6f 6e67 3a20 6361 6e6e 6f74 to long: cannot │ │ │ -0002a850: 2065 7865 6320 2220 2e0a 0909 0909 2020 exec " ...... │ │ │ -0002a860: 2020 2022 6d64 3573 756d 2024 616b 7450 "md5sum $aktP │ │ │ -0002a870: 6172 225d 293b 0a09 2020 2020 7265 7475 ar"]);.. retu │ │ │ -0002a880: 726e 2069 6620 407b 2473 656c 662d 3e7b rn if @{$self->{ │ │ │ -0002a890: 2770 6172 616d 277d 7d20 3d3d 2030 3b0a 'param'}} == 0;. │ │ │ -0002a8a0: 097d 0a09 656c 7365 2020 2020 2020 2020 .}..else │ │ │ -0002a8b0: 2023 206f 6b2c 2064 6965 206d c3b6 676c # ok, die m..gl │ │ │ -0002a8c0: 6963 6865 6e20 6175 7320 6465 6d20 6772 ichen aus dem gr │ │ │ -0002a8d0: 6fc3 9f65 6e20 5665 6b74 6f72 2072 6175 o..en Vektor rau │ │ │ -0002a8e0: 7368 6f6c 656e 0a09 7b0a 0920 2020 206d sholen..{.. m │ │ │ -0002a8f0: 7920 2840 616b 7450 6172 2920 3d20 7370 y (@aktPar) = sp │ │ │ -0002a900: 6c69 6365 2840 7b24 7365 6c66 2d3e 7b27 lice(@{$self->{' │ │ │ -0002a910: 7061 7261 6d27 7d7d 2c20 302c 2024 6929 param'}}, 0, $i) │ │ │ -0002a920: 3b0a 0920 2020 2024 6d61 696e 3a3a 7374 ;.. $main::st │ │ │ -0002a930: 6174 2d3e 696e 6372 5f6e 6f46 6f72 6b73 at->incr_noForks │ │ │ -0002a940: 4d44 3528 293b 0a09 2020 2020 246d 6169 MD5();.. $mai │ │ │ -0002a950: 6e3a 3a73 7461 742d 3e61 6464 5f6e 6f4d n::stat->add_noM │ │ │ -0002a960: 4435 6564 4669 6c65 7328 7363 616c 6172 D5edFiles(scalar │ │ │ -0002a970: 2040 616b 7450 6172 293b 0a09 2020 2020 @aktPar);.. │ │ │ -0002a980: 2473 656c 662d 3e7b 2766 6f72 6b27 7d20 $self->{'fork'} │ │ │ -0002a990: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new( │ │ │ -0002a9a0: 272d 6578 6563 2720 3d3e 2027 6d64 3573 '-exec' => 'md5s │ │ │ -0002a9b0: 756d 272c 0a09 0909 0909 2020 2020 272d um',...... '- │ │ │ -0002a9c0: 7061 7261 6d27 203d 3e20 5b40 616b 7450 param' => [@aktP │ │ │ -0002a9d0: 6172 5d2c 0a09 0909 0909 2020 2020 272d ar],...... '- │ │ │ -0002a9e0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0002a9f0: 2c0a 0909 0909 0920 2020 2027 2d77 6f72 ,...... '-wor │ │ │ -0002aa00: 6b69 6e67 4469 7227 203d 3e20 272e 272c kingDir' => '.', │ │ │ -0002aa10: 0a09 0909 0909 2020 2020 272d 6f75 7452 ...... '-outR │ │ │ -0002aa20: 616e 646f 6d27 203d 3e0a 0909 0909 0920 andom' =>...... │ │ │ -0002aa30: 2020 2024 7365 6c66 2d3e 7b27 746d 7064 $self->{'tmpd │ │ │ -0002aa40: 6972 277d 202e 2027 2f66 6f72 6b2d 6d64 ir'} . '/fork-md │ │ │ -0002aa50: 352d 2729 3b0a 0920 2020 2023 2041 6e7a 5-');.. # Anz │ │ │ -0002aa60: 6168 6c20 4279 7465 7320 6265 7265 6368 ahl Bytes berech │ │ │ -0002aa70: 6e65 6e0a 0920 2020 206d 7920 2473 756d nen.. my $sum │ │ │ -0002aa80: 203d 2030 3b0a 0920 2020 206d 7920 2470 = 0;.. my $p │ │ │ -0002aa90: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $ │ │ │ -0002aaa0: 7020 2840 616b 7450 6172 290a 0920 2020 p (@aktPar).. │ │ │ -0002aab0: 207b 0a09 0924 7375 6d20 2b3d 2028 7374 {...$sum += (st │ │ │ -0002aac0: 6174 2824 7029 295b 375d 3b0a 0920 2020 at($p))[7];.. │ │ │ -0002aad0: 207d 0a09 2020 2020 246d 6169 6e3a 3a73 }.. $main::s │ │ │ -0002aae0: 7461 742d 3e61 6464 5375 6d4d 4435 5375 tat->addSumMD5Su │ │ │ -0002aaf0: 6d28 2473 756d 290a 0909 6966 2028 2473 m($sum)...if ($s │ │ │ -0002ab00: 756d 293b 0a09 2020 2020 7265 7475 726e um);.. return │ │ │ -0002ab10: 3b0a 097d 0a0a 2020 2020 7d20 7768 696c ;..}.. } whil │ │ │ -0002ab20: 6520 2824 7365 6c66 2d3e 7b27 666f 726b e ($self->{'fork │ │ │ -0002ab30: 277d 203d 3d20 756e 6465 6629 3b0a 7d0a '} == undef);.}. │ │ │ -0002ab40: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -0002ab50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002ab60: 2323 2323 2323 2323 2323 230a 2320 7265 ###########.# re │ │ │ -0002ab70: 7475 726e 7320 3120 6966 2070 726f 6365 turns 1 if proce │ │ │ -0002ab80: 7373 2073 7469 6c6c 2072 756e 6e69 6e67 ss still running │ │ │ -0002ab90: 0a23 2072 6574 7572 6e73 2030 2069 6620 .# returns 0 if │ │ │ -0002aba0: 7072 6f63 6573 7320 6973 206e 6f74 2072 process is not r │ │ │ -0002abb0: 756e 6e69 6e67 0a73 7562 2070 726f 6365 unning.sub proce │ │ │ -0002abc0: 7373 5275 6e73 0a7b 0a20 2020 206d 7920 ssRuns.{. my │ │ │ -0002abd0: 2473 656c 6620 3d20 7368 6966 743b 0a0a $self = shift;.. │ │ │ -0002abe0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{ │ │ │ -0002abf0: 2766 6f72 6b27 7d29 2020 2020 2320 5072 'fork'}) # Pr │ │ │ -0002ac00: 6f7a 6573 7320 6e6f 6368 206e 6963 6874 ozess noch nicht │ │ │ -0002ac10: 2061 7573 6765 7765 7274 6574 0a20 2020 ausgewertet. │ │ │ -0002ac20: 207b 0a09 6966 2028 2473 656c 662d 3e7b {..if ($self->{ │ │ │ -0002ac30: 2766 6f72 6b27 7d2d 3e70 726f 6365 7373 'fork'}->process │ │ │ -0002ac40: 5275 6e73 2829 2920 2023 204a 6f62 206c Runs()) # Job l │ │ │ -0002ac50: c3a4 7566 7420 6e6f 6368 0a09 7b0a 0920 ..uft noch..{.. │ │ │ -0002ac60: 2020 2072 6574 7572 6e20 313b 0a09 7d0a return 1;..}. │ │ │ -0002ac70: 0965 6c73 6520 2020 2020 2020 2020 2020 .else │ │ │ -0002ac80: 2020 2020 2020 2020 2023 204a 6f62 2069 # Job i │ │ │ -0002ac90: 7374 2066 6572 7469 670a 097b 0a09 2020 st fertig..{.. │ │ │ -0002aca0: 2020 7075 7368 2040 7b24 7365 6c66 2d3e push @{$self-> │ │ │ -0002acb0: 7b27 7265 7375 6c74 5354 4445 5252 277d {'resultSTDERR'} │ │ │ -0002acc0: 7d2c 2040 7b24 7365 6c66 2d3e 7b27 666f }, @{$self->{'fo │ │ │ -0002acd0: 726b 277d 2d3e 6765 7453 5444 4552 5228 rk'}->getSTDERR( │ │ │ -0002ace0: 297d 3b0a 0920 2020 2070 7573 6820 407b )};.. push @{ │ │ │ -0002acf0: 2473 656c 662d 3e7b 2772 6573 756c 7453 $self->{'resultS │ │ │ -0002ad00: 5444 4f55 5427 7d7d 2c20 407b 2473 656c TDOUT'}}, @{$sel │ │ │ -0002ad10: 662d 3e7b 2766 6f72 6b27 7d2d 3e67 6574 f->{'fork'}->get │ │ │ -0002ad20: 5354 444f 5554 2829 7d3b 0a0a 0920 2020 STDOUT()};... │ │ │ -0002ad30: 2069 6620 2840 7b24 7365 6c66 2d3e 7b27 if (@{$self->{' │ │ │ -0002ad40: 7061 7261 6d27 7d7d 203e 2030 2920 2020 param'}} > 0) │ │ │ -0002ad50: 2020 2320 6e6f 6368 2077 6173 20c3 bc62 # noch was ..b │ │ │ -0002ad60: 7269 670a 0920 2020 207b 0a09 0924 7365 rig.. {...$se │ │ │ -0002ad70: 6c66 2d3e 5f73 7461 7274 4a6f 6228 293b lf->_startJob(); │ │ │ -0002ad80: 0a09 0972 6574 7572 6e20 313b 0a09 2020 ...return 1;.. │ │ │ -0002ad90: 2020 7d0a 0920 2020 2065 6c73 650a 0920 }.. else.. │ │ │ -0002ada0: 2020 207b 0a09 0972 6574 7572 6e20 303b {...return 0; │ │ │ -0002adb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002adc0: 2020 2023 2066 6572 7469 6721 0a09 2020 # fertig!.. │ │ │ -0002add0: 2020 7d0a 097d 0a20 2020 207d 0a20 2020 }..}. }. │ │ │ -0002ade0: 2065 6c73 650a 2020 2020 7b0a 0972 6574 else. {..ret │ │ │ -0002adf0: 7572 6e20 303b 0a20 2020 207d 0a7d 0a0a urn 0;. }.}.. │ │ │ -0002ae00: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0002ae10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002ae20: 2323 2323 2323 2323 230a 7375 6220 6765 #########.sub ge │ │ │ -0002ae30: 7453 5444 4552 520a 7b0a 2020 2020 6d79 tSTDERR.{. my │ │ │ -0002ae40: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -0002ae50: 0a20 2020 2072 6574 7572 6e20 2473 656c . return $sel │ │ │ -0002ae60: 662d 3e7b 2772 6573 756c 7453 5444 4552 f->{'resultSTDER │ │ │ -0002ae70: 5227 7d3b 0a7d 0a0a 0a23 2323 2323 2323 R'};.}...####### │ │ │ -0002ae80: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002ae90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002aea0: 230a 7375 6220 6765 7453 5444 4f55 540a #.sub getSTDOUT. │ │ │ -0002aeb0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ -0002aec0: 2073 6869 6674 3b0a 0a20 2020 2072 6574 shift;.. ret │ │ │ -0002aed0: 7572 6e20 2473 656c 662d 3e7b 2772 6573 urn $self->{'res │ │ │ -0002aee0: 756c 7453 5444 4f55 5427 7d3b 0a7d 0a0a ultSTDOUT'};.}.. │ │ │ -0002aef0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0002af00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002af10: 2323 2323 2323 2323 230a 7375 6220 4445 #########.sub DE │ │ │ -0002af20: 5354 524f 590a 7b0a 2020 2020 6d79 2024 STROY.{. my $ │ │ │ -0002af30: 7365 6c66 203d 2073 6869 6674 3b0a 0a20 self = shift;.. │ │ │ -0002af40: 2020 206d 7920 2461 7469 6d65 203d 2024 my $atime = $ │ │ │ -0002af50: 7365 6c66 2d3e 7b27 6174 696d 6527 7d3b self->{'atime'}; │ │ │ -0002af60: 0a20 2020 206d 7920 246d 7469 6d65 203d . my $mtime = │ │ │ -0002af70: 2024 7365 6c66 2d3e 7b27 6d74 696d 6527 $self->{'mtime' │ │ │ -0002af80: 7d3b 0a20 2020 206d 7920 2470 6172 616d };. my $param │ │ │ -0002af90: 203d 2024 7365 6c66 2d3e 7b27 616c 6c50 = $self->{'allP │ │ │ -0002afa0: 6172 616d 277d 3b0a 2020 2020 6d79 2024 aram'};. my $ │ │ │ -0002afb0: 693b 0a20 2020 2066 6f72 2028 2469 203d i;. for ($i = │ │ │ -0002afc0: 2030 203b 2024 6920 3c20 4024 7061 7261 0 ; $i < @$para │ │ │ -0002afd0: 6d20 3b20 2469 2b2b 290a 2020 2020 7b0a m ; $i++). {. │ │ │ -0002afe0: 0975 7469 6d65 2024 2461 7469 6d65 5b24 .utime $$atime[$ │ │ │ -0002aff0: 695d 2c20 2424 6d74 696d 655b 2469 5d2c i], $$mtime[$i], │ │ │ -0002b000: 2024 2470 6172 616d 5b24 695d 0a09 2020 $$param[$i].. │ │ │ -0002b010: 2020 6966 2024 7365 6c66 2d3e 7b27 7265 if $self->{'re │ │ │ -0002b020: 7365 7441 7469 6d65 277d 3b0a 2020 2020 setAtime'};. │ │ │ -0002b030: 7d0a 7d0a 0a23 2323 2323 2323 2323 2323 }.}..########### │ │ │ -0002b040: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002b050: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002b060: 2323 2323 2323 230a 7061 636b 6167 6520 #######.package │ │ │ -0002b070: 5363 6865 6475 6c65 723b 0a0a 7573 6520 Scheduler;..use │ │ │ -0002b080: 494f 3a3a 4669 6c65 3b0a 7573 6520 7374 IO::File;.use st │ │ │ -0002b090: 7269 6374 3b0a 7573 6520 7761 726e 696e rict;.use warnin │ │ │ -0002b0a0: 6773 3b0a 0a73 7562 206e 6577 0a7b 0a20 gs;..sub new.{. │ │ │ -0002b0b0: 2020 206d 7920 2463 6c61 7373 203d 2073 my $class = s │ │ │ -0002b0c0: 6869 6674 3b0a 0a20 2020 206d 7920 2473 hift;.. my $s │ │ │ -0002b0d0: 656c 6620 3d20 7b7d 3b0a 0a20 2020 206d elf = {};.. m │ │ │ -0002b0e0: 7920 2825 7061 7261 6d73 2920 3d20 2827 y (%params) = (' │ │ │ -0002b0f0: 2d61 6b74 4669 6c65 6e61 6d65 2720 2020 -aktFilename' │ │ │ -0002b100: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -0002b110: 2020 2027 2d6f 6c64 4669 6c65 6e61 6d65 '-oldFilename │ │ │ -0002b120: 2720 2020 2020 203d 3e20 756e 6465 662c ' => undef, │ │ │ -0002b130: 0a09 0920 2020 2027 2d66 6f6c 6c6f 774c ... '-followL │ │ │ -0002b140: 696e 6b73 2720 2020 2020 203d 3e20 756e inks' => un │ │ │ -0002b150: 6465 662c 0a09 0920 2020 2027 2d70 7265 def,... '-pre │ │ │ -0002b160: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries │ │ │ -0002b170: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... │ │ │ -0002b180: 2020 272d 7265 6164 4469 7241 6e64 4368 '-readDirAndCh │ │ │ -0002b190: 6563 6b27 2020 3d3e 2075 6e64 6566 2c0a eck' => undef,. │ │ │ -0002b1a0: 0909 2020 2020 272d 7365 7452 6573 6574 .. '-setReset │ │ │ -0002b1b0: 4469 7254 696d 6573 2720 3d3e 2075 6e64 DirTimes' => und │ │ │ -0002b1c0: 6566 2c0a 0909 2020 2020 272d 7061 7246 ef,... '-parF │ │ │ -0002b1d0: 6f72 6b43 6f70 7927 2020 2020 2020 3d3e orkCopy' => │ │ │ -0002b1e0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -0002b1f0: 6669 666f 436f 7079 2720 2020 2020 2020 fifoCopy' │ │ │ -0002b200: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -0002b210: 2020 272d 7061 7246 6f72 6b43 6f6d 7072 '-parForkCompr │ │ │ -0002b220: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,. │ │ │ -0002b230: 0909 2020 2020 272d 6e6f 436f 6d70 7265 .. '-noCompre │ │ │ -0002b240: 7373 2720 2020 2020 2020 3d3e 2075 6e64 ss' => und │ │ │ -0002b250: 6566 2c0a 0909 2020 2020 272d 6669 666f ef,... '-fifo │ │ │ -0002b260: 436f 6d70 7227 2020 2020 2020 2020 3d3e Compr' => │ │ │ -0002b270: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -0002b280: 626c 6f63 6b43 6865 636b 5375 6d46 696c blockCheckSumFil │ │ │ -0002b290: 6527 3d3e 2075 6e64 6566 2c0a 0909 2020 e'=> undef,... │ │ │ -0002b2a0: 2020 272d 7061 7246 6f72 6b42 6c6f 636b '-parForkBlock │ │ │ -0002b2b0: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,. │ │ │ -0002b2c0: 0909 2020 2020 272d 6669 666f 426c 6f63 .. '-fifoBloc │ │ │ -0002b2d0: 6b27 2020 2020 2020 2020 3d3e 2075 6e64 k' => und │ │ │ -0002b2e0: 6566 2c0a 0909 2020 2020 272d 636f 6d70 ef,... '-comp │ │ │ -0002b2f0: 7265 7373 2720 2020 2020 2020 2020 3d3e ress' => │ │ │ -0002b300: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -0002b310: 6c61 7465 4c69 6e6b 7327 2020 2020 2020 lateLinks' │ │ │ -0002b320: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -0002b330: 2020 272d 6c61 7465 436f 6d70 7265 7373 '-lateCompress │ │ │ -0002b340: 2720 2020 2020 3d3e 2075 6e64 6566 2c0a ' => undef,. │ │ │ -0002b350: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002b360: 2020 2020 272d 6370 4973 476e 7527 2020 '-cpIsGnu' │ │ │ -0002b370: 2020 2020 2020 2020 3d3e 2075 6e64 6566 => undef │ │ │ -0002b380: 2c0a 0909 2020 2020 272d 6c69 6e6b 5379 ,... '-linkSy │ │ │ -0002b390: 6d6c 696e 6b73 2720 2020 2020 3d3e 2075 mlinks' => u │ │ │ -0002b3a0: 6e64 6566 2c0a 0909 2020 2020 272d 7375 ndef,... '-su │ │ │ -0002b3b0: 7070 7265 7373 5761 726e 696e 6727 2020 ppressWarning' │ │ │ -0002b3c0: 3d3e 2075 6e64 6566 2c0a 2020 2020 2020 => undef,. │ │ │ -0002b3d0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -0002b3e0: 7072 6573 6572 7665 5065 726d 7327 2020 preservePerms' │ │ │ -0002b3f0: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -0002b400: 2020 272d 636f 6d70 7252 756c 6527 2020 '-comprRule' │ │ │ -0002b410: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -0002b420: 2020 2027 2d70 6f73 7466 6978 2720 2020 '-postfix' │ │ │ -0002b430: 2020 2020 2020 203d 3e20 756e 6465 662c => undef, │ │ │ -0002b440: 0a09 0920 2020 2027 2d74 6172 6765 7444 ... '-targetD │ │ │ -0002b450: 6972 2720 2020 2020 2020 203d 3e20 756e ir' => un │ │ │ -0002b460: 6465 662c 0a09 0920 2020 2027 2d61 6b74 def,... '-akt │ │ │ -0002b470: 496e 666f 4669 6c65 2720 2020 2020 203d InfoFile' = │ │ │ -0002b480: 3e20 756e 6465 662c 0a09 0920 2020 2027 > undef,... ' │ │ │ -0002b490: 2d72 6573 6574 4174 696d 6527 2020 2020 -resetAtime' │ │ │ -0002b4a0: 2020 203d 3e20 756e 6465 662c 0a09 0920 => undef,... │ │ │ -0002b4b0: 2020 2027 2d74 6d70 6469 7227 2020 2020 '-tmpdir' │ │ │ -0002b4c0: 2020 2020 2020 203d 3e20 756e 6465 662c => undef, │ │ │ -0002b4d0: 0a09 0920 2020 2027 2d70 724c 6f67 2720 ... '-prLog' │ │ │ -0002b4e0: 2020 2020 2020 2020 2020 203d 3e20 756e => un │ │ │ -0002b4f0: 6465 662c 0a09 0920 2020 2027 2d69 6e74 def,... '-int │ │ │ -0002b500: 6572 6e61 6c50 6970 6542 7566 5369 7a65 ernalPipeBufSize │ │ │ -0002b510: 2720 3d3e 2075 6e64 6566 2c0a 0909 2020 ' => undef,... │ │ │ -0002b520: 2020 272d 6465 6275 674d 6f64 6527 2020 '-debugMode' │ │ │ -0002b530: 2020 2020 2020 3d3e 2030 0a09 0920 2020 => 0... │ │ │ -0002b540: 2029 3b0a 0a20 2020 2026 3a3a 6368 6563 );.. &::chec │ │ │ -0002b550: 6b4f 626a 6563 7450 6172 616d 7328 5c25 kObjectParams(\% │ │ │ -0002b560: 7061 7261 6d73 2c20 5c40 5f2c 2027 5363 params, \@_, 'Sc │ │ │ -0002b570: 6865 6475 6c65 723a 3a6e 6577 272c 0a09 heduler::new',.. │ │ │ -0002b580: 0909 205b 272d 616b 7446 696c 656e 616d .. ['-aktFilenam │ │ │ -0002b590: 6527 2c20 272d 6f6c 6446 696c 656e 616d e', '-oldFilenam │ │ │ -0002b5a0: 6527 2c20 272d 666f 6c6c 6f77 4c69 6e6b e', '-followLink │ │ │ -0002b5b0: 7327 2c0a 0909 0920 2027 2d70 7265 7642 s',.... '-prevB │ │ │ -0002b5c0: 6163 6b75 704f 776e 5365 7269 6573 272c ackupOwnSeries', │ │ │ -0002b5d0: 2027 2d72 6561 6444 6972 416e 6443 6865 '-readDirAndChe │ │ │ -0002b5e0: 636b 272c 0a09 0909 2020 272d 7365 7452 ck',.... '-setR │ │ │ -0002b5f0: 6573 6574 4469 7254 696d 6573 272c 2027 esetDirTimes', ' │ │ │ -0002b600: 2d70 6172 466f 726b 436f 7079 272c 2027 -parForkCopy', ' │ │ │ -0002b610: 2d66 6966 6f43 6f70 7927 2c0a 0909 0920 -fifoCopy',.... │ │ │ -0002b620: 2027 2d70 6172 466f 726b 436f 6d70 7227 '-parForkCompr' │ │ │ -0002b630: 2c20 272d 6669 666f 436f 6d70 7227 2c20 , '-fifoCompr', │ │ │ -0002b640: 272d 7375 7070 7265 7373 5761 726e 696e '-suppressWarnin │ │ │ -0002b650: 6727 2c0a 0909 0920 2027 2d63 6f6d 7072 g',.... '-compr │ │ │ -0002b660: 5275 6c65 272c 2027 2d63 6f6d 7072 6573 Rule', '-compres │ │ │ -0002b670: 7327 2c20 272d 706f 7374 6669 7827 2c0a s', '-postfix',. │ │ │ -0002b680: 0909 0920 2027 2d63 6f6d 7072 6573 7327 ... '-compress' │ │ │ -0002b690: 2c20 272d 706f 7374 6669 7827 2c20 272d , '-postfix', '- │ │ │ -0002b6a0: 696e 7465 726e 616c 5069 7065 4275 6653 internalPipeBufS │ │ │ -0002b6b0: 697a 6527 2c0a 0909 0920 2027 2d74 6172 ize',.... '-tar │ │ │ -0002b6c0: 6765 7444 6972 272c 2027 2d61 6b74 496e getDir', '-aktIn │ │ │ -0002b6d0: 666f 4669 6c65 272c 2027 2d72 6573 6574 foFile', '-reset │ │ │ -0002b6e0: 4174 696d 6527 2c0a 0909 0920 2027 2d70 Atime',.... '-p │ │ │ -0002b6f0: 724c 6f67 272c 2027 2d6c 6174 654c 696e rLog', '-lateLin │ │ │ -0002b700: 6b73 272c 2027 2d6c 6174 6543 6f6d 7072 ks', '-lateCompr │ │ │ -0002b710: 6573 7327 5d29 3b0a 2020 2020 263a 3a73 ess']);. &::s │ │ │ -0002b720: 6574 5061 7261 6d73 4469 7265 6374 2824 etParamsDirect($ │ │ │ -0002b730: 7365 6c66 2c20 5c25 7061 7261 6d73 293b self, \%params); │ │ │ -0002b740: 0a0a 2020 2020 6d79 2028 2463 6f6d 7072 .. my ($compr │ │ │ -0002b750: 6573 7343 6f6d 6d61 6e64 2c20 406f 7074 essCommand, @opt │ │ │ -0002b760: 696f 6e73 2920 3d20 407b 2470 6172 616d ions) = @{$param │ │ │ -0002b770: 737b 272d 636f 6d70 7265 7373 277d 7d3b s{'-compress'}}; │ │ │ -0002b780: 0a20 2020 2024 7365 6c66 2d3e 7b27 636f . $self->{'co │ │ │ -0002b790: 6d70 7265 7373 436f 6d6d 616e 6427 7d20 mpressCommand'} │ │ │ -0002b7a0: 3d20 2463 6f6d 7072 6573 7343 6f6d 6d61 = $compressComma │ │ │ -0002b7b0: 6e64 3b0a 2020 2020 2473 656c 662d 3e7b nd;. $self->{ │ │ │ -0002b7c0: 2763 6f6d 7072 6573 734f 7074 696f 6e73 'compressOptions │ │ │ -0002b7d0: 277d 203d 205c 406f 7074 696f 6e73 3b0a '} = \@options;. │ │ │ -0002b7e0: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self │ │ │ -0002b7f0: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...## │ │ │ -0002b800: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002b810: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0002b820: 2323 2323 2323 0a23 2049 6465 653a 0a23 ######.# Idee:.# │ │ │ -0002b830: 2020 2020 c39c 6265 7277 6163 6875 6e67 ..berwachung │ │ │ -0002b840: 2064 6572 2066 6f72 6b73 2069 6e20 7061 der forks in pa │ │ │ -0002b850: 7246 6f72 6b43 6f70 7920 756e 6420 7061 rForkCopy und pa │ │ │ -0002b860: 7246 6f72 6b43 6f6d 7072 0a23 2020 2020 rForkCompr.# │ │ │ -0002b870: 5765 6e6e 2064 6965 7365 206d 6974 206e Wenn diese mit n │ │ │ -0002b880: 6575 656e 2044 6174 656e 2067 6566 c3bc euen Daten gef.. │ │ │ -0002b890: 7474 6572 7420 7775 7264 656e 2c20 4175 ttert wurden, Au │ │ │ -0002b8a0: 6666 c3bc 6c6c 656e 0a23 2020 2020 766f ff..llen.# vo │ │ │ -0002b8b0: 6e20 6669 666f 436f 7079 2075 6e64 2066 n fifoCopy und f │ │ │ -0002b8c0: 6966 6f43 6f6d 7072 20c3 bc62 6572 2072 ifoCompr ..ber r │ │ │ -0002b8d0: 6561 6444 6972 416e 6443 6865 636b 0a73 eadDirAndCheck.s │ │ │ -0002b8e0: 7562 206e 6f72 6d61 6c4f 7065 7261 7469 ub normalOperati │ │ │ -0002b8f0: 6f6e 0a7b 0a20 2020 206d 7920 2473 656c on.{. my $sel │ │ │ -0002b900: 6620 3d20 7368 6966 743b 0a0a 2020 2020 f = shift;.. │ │ │ -0002b910: 6d79 2024 616b 7446 696c 656e 616d 6520 my $aktFilename │ │ │ -0002b920: 3d20 2473 656c 662d 3e7b 2761 6b74 4669 = $self->{'aktFi │ │ │ -0002b930: 6c65 6e61 6d65 277d 3b0a 2020 2020 6d79 lename'};. my │ │ │ -0002b940: 2024 6f6c 6446 696c 656e 616d 6520 3d20 $oldFilename = │ │ │ -0002b950: 2473 656c 662d 3e7b 276f 6c64 4669 6c65 $self->{'oldFile │ │ │ -0002b960: 6e61 6d65 277d 3b0a 2020 2020 6d79 2024 name'};. my $ │ │ │ -0002b970: 666f 6c6c 6f77 4c69 6e6b 7320 3d20 2473 followLinks = $s │ │ │ -0002b980: 656c 662d 3e7b 2766 6f6c 6c6f 774c 696e elf->{'followLin │ │ │ -0002b990: 6b73 277d 3b0a 2020 2020 6d79 2024 7072 ks'};. my $pr │ │ │ -0002b9a0: 6576 4261 636b 7570 4f77 6e53 6572 6965 evBackupOwnSerie │ │ │ -0002b9b0: 7320 3d20 2473 656c 662d 3e7b 2770 7265 s = $self->{'pre │ │ │ -0002b9c0: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries │ │ │ -0002b9d0: 277d 3b0a 2020 2020 6d79 2024 7265 6164 '};. my $read │ │ │ -0002b9e0: 4469 7241 6e64 4368 6563 6b20 3d20 2473 DirAndCheck = $s │ │ │ -0002b9f0: 656c 662d 3e7b 2772 6561 6444 6972 416e elf->{'readDirAn │ │ │ -0002ba00: 6443 6865 636b 277d 3b0a 2020 2020 6d79 dCheck'};. my │ │ │ -0002ba10: 2024 7365 7452 6573 6574 4469 7254 696d $setResetDirTim │ │ │ -0002ba20: 6573 203d 2024 7365 6c66 2d3e 7b27 7365 es = $self->{'se │ │ │ -0002ba30: 7452 6573 6574 4469 7254 696d 6573 277d tResetDirTimes'} │ │ │ -0002ba40: 3b0a 2020 2020 6d79 2024 7061 7246 6f72 ;. my $parFor │ │ │ -0002ba50: 6b43 6f70 7920 3d20 2473 656c 662d 3e7b kCopy = $self->{ │ │ │ -0002ba60: 2770 6172 466f 726b 436f 7079 277d 3b0a 'parForkCopy'};. │ │ │ -0002ba70: 2020 2020 6d79 2024 6669 666f 436f 7079 my $fifoCopy │ │ │ -0002ba80: 203d 2024 7365 6c66 2d3e 7b27 6669 666f = $self->{'fifo │ │ │ -0002ba90: 436f 7079 277d 3b0a 2020 2020 6d79 2024 Copy'};. my $ │ │ │ -0002baa0: 7061 7246 6f72 6b43 6f6d 7072 203d 2024 parForkCompr = $ │ │ │ -0002bab0: 7365 6c66 2d3e 7b27 7061 7246 6f72 6b43 self->{'parForkC │ │ │ -0002bac0: 6f6d 7072 277d 3b0a 2020 2020 6d79 2024 ompr'};. my $ │ │ │ -0002bad0: 6669 666f 436f 6d70 7220 3d20 2473 656c fifoCompr = $sel │ │ │ -0002bae0: 662d 3e7b 2766 6966 6f43 6f6d 7072 277d f->{'fifoCompr'} │ │ │ -0002baf0: 3b0a 2020 2020 6d79 2024 626c 6f63 6b43 ;. my $blockC │ │ │ -0002bb00: 6865 636b 5375 6d46 696c 6520 3d20 2473 heckSumFile = $s │ │ │ -0002bb10: 656c 662d 3e7b 2762 6c6f 636b 4368 6563 elf->{'blockChec │ │ │ -0002bb20: 6b53 756d 4669 6c65 277d 3b0a 2020 2020 kSumFile'};. │ │ │ -0002bb30: 6d79 2024 7061 7246 6f72 6b42 6c6f 636b my $parForkBlock │ │ │ -0002bb40: 203d 2024 7365 6c66 2d3e 7b27 7061 7246 = $self->{'parF │ │ │ -0002bb50: 6f72 6b42 6c6f 636b 277d 3b0a 2020 2020 orkBlock'};. │ │ │ -0002bb60: 6d79 2024 6669 666f 426c 6f63 6b20 3d20 my $fifoBlock = │ │ │ -0002bb70: 2473 656c 662d 3e7b 2766 6966 6f42 6c6f $self->{'fifoBlo │ │ │ -0002bb80: 636b 277d 3b0a 2020 2020 6d79 2024 636f ck'};. my $co │ │ │ -0002bb90: 6d70 7265 7373 203d 206a 6f69 6e28 2720 mpress = join(' │ │ │ -0002bba0: 272c 2040 7b24 7365 6c66 2d3e 7b27 636f ', @{$self->{'co │ │ │ -0002bbb0: 6d70 7265 7373 277d 7d29 3b0a 2020 2020 mpress'}});. │ │ │ -0002bbc0: 6d79 2024 636f 6d70 7265 7373 436f 6d6d my $compressComm │ │ │ -0002bbd0: 616e 6420 3d20 2473 656c 662d 3e7b 2763 and = $self->{'c │ │ │ -0002bbe0: 6f6d 7072 6573 7343 6f6d 6d61 6e64 277d ompressCommand'} │ │ │ -0002bbf0: 3b0a 2020 2020 6d79 2024 636f 6d70 7265 ;. my $compre │ │ │ -0002bc00: 7373 4f70 7469 6f6e 7320 3d20 2473 656c ssOptions = $sel │ │ │ -0002bc10: 662d 3e7b 2763 6f6d 7072 6573 734f 7074 f->{'compressOpt │ │ │ -0002bc20: 696f 6e73 277d 3b0a 2020 2020 6d79 2024 ions'};. my $ │ │ │ -0002bc30: 706f 7374 6669 7820 3d20 2473 656c 662d postfix = $self- │ │ │ -0002bc40: 3e7b 2770 6f73 7466 6978 277d 3b0a 2020 >{'postfix'};. │ │ │ -0002bc50: 2020 6d79 2024 636f 6d70 7252 756c 6520 my $comprRule │ │ │ -0002bc60: 3d20 2473 656c 662d 3e7b 2763 6f6d 7072 = $self->{'compr │ │ │ -0002bc70: 5275 6c65 277d 3b0a 2020 2020 6d79 2024 Rule'};. my $ │ │ │ -0002bc80: 7461 7267 6574 4469 7220 3d20 2473 656c targetDir = $sel │ │ │ -0002bc90: 662d 3e7b 2774 6172 6765 7444 6972 277d f->{'targetDir'} │ │ │ -0002bca0: 3b0a 2020 2020 6d79 2024 616b 7449 6e66 ;. my $aktInf │ │ │ -0002bcb0: 6f46 696c 6520 3d20 2473 656c 662d 3e7b oFile = $self->{ │ │ │ -0002bcc0: 2761 6b74 496e 666f 4669 6c65 277d 3b0a 'aktInfoFile'};. │ │ │ -0002bcd0: 2020 2020 6d79 2024 7265 7365 7441 7469 my $resetAti │ │ │ -0002bce0: 6d65 203d 2024 7365 6c66 2d3e 7b27 7265 me = $self->{'re │ │ │ -0002bcf0: 7365 7441 7469 6d65 277d 3b0a 2020 2020 setAtime'};. │ │ │ -0002bd00: 6d79 2024 746d 7064 6972 203d 2024 7365 my $tmpdir = $se │ │ │ -0002bd10: 6c66 2d3e 7b27 746d 7064 6972 277d 3b0a lf->{'tmpdir'};. │ │ │ -0002bd20: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ -0002bd30: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ -0002bd40: 3b0a 2020 2020 6d79 2024 6465 6275 674d ;. my $debugM │ │ │ -0002bd50: 6f64 6520 3d20 2473 656c 662d 3e7b 2764 ode = $self->{'d │ │ │ -0002bd60: 6562 7567 4d6f 6465 277d 3b0a 2020 2020 ebugMode'};. │ │ │ -0002bd70: 6d79 2024 676e 7563 7020 3d20 2473 656c my $gnucp = $sel │ │ │ -0002bd80: 662d 3e7b 2763 7049 7347 6e75 277d 3b0a f->{'cpIsGnu'};. │ │ │ -0002bd90: 2020 2020 6d79 2024 6c69 6e6b 5379 6d6c my $linkSyml │ │ │ -0002bda0: 696e 6b73 203d 2024 7365 6c66 2d3e 7b27 inks = $self->{' │ │ │ -0002bdb0: 6c69 6e6b 5379 6d6c 696e 6b73 277d 3b0a linkSymlinks'};. │ │ │ -0002bdc0: 2020 2020 6d79 2024 6c61 7465 436f 6d70 my $lateComp │ │ │ -0002bdd0: 7265 7373 203d 2024 7365 6c66 2d3e 7b27 ress = $self->{' │ │ │ -0002bde0: 6c61 7465 436f 6d70 7265 7373 277d 3b0a lateCompress'};. │ │ │ -0002bdf0: 2020 2020 6d79 2024 6c61 7465 4c69 6e6b my $lateLink │ │ │ -0002be00: 7320 3d20 2473 656c 662d 3e7b 276c 6174 s = $self->{'lat │ │ │ -0002be10: 654c 696e 6b73 277d 3b0a 2020 2020 6d79 eLinks'};. my │ │ │ -0002be20: 2024 696e 7465 726e 616c 5069 7065 4275 $internalPipeBu │ │ │ -0002be30: 6653 697a 6520 3d20 2473 656c 662d 3e7b fSize = $self->{ │ │ │ -0002be40: 2769 6e74 6572 6e61 6c50 6970 6542 7566 'internalPipeBuf │ │ │ -0002be50: 5369 7a65 277d 2c0a 2020 2020 6d79 2024 Size'},. my $ │ │ │ -0002be60: 7375 7070 7265 7373 5761 726e 696e 6720 suppressWarning │ │ │ -0002be70: 3d20 2473 656c 662d 3e7b 2773 7570 7072 = $self->{'suppr │ │ │ -0002be80: 6573 7357 6172 6e69 6e67 277d 3b0a 0a20 essWarning'};.. │ │ │ -0002be90: 2020 2023 2073 6574 2073 6176 6520 7065 # set save pe │ │ │ -0002bea0: 726d 6973 7369 6f6e 730a 2020 2020 756d rmissions. um │ │ │ -0002beb0: 6173 6b28 3030 3737 293b 0a0a 2020 2020 ask(0077);.. │ │ │ -0002bec0: 6d79 2028 2561 6c6c 4261 636b 7570 4469 my (%allBackupDi │ │ │ -0002bed0: 7273 2920 3d20 2829 3b0a 0a23 7072 696e rs) = ();..#prin │ │ │ -0002bee0: 7420 222b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b t "+++++++++++++ │ │ │ -0002bef0: 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b ++++++++++++++++ │ │ │ -0002bf00: 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b 2b2b ++++++++++++++++ │ │ │ -0002bf10: 2b2b 2b2b 2b5c 6e22 3b0a 2020 2020 6d79 +++++\n";. my │ │ │ -0002bf20: 2024 6469 7220 3d20 2473 656c 662d 3e7b $dir = $self->{ │ │ │ -0002bf30: 2774 6172 6765 7444 6972 277d 3b0a 2020 'targetDir'};. │ │ │ -0002bf40: 2020 6d79 2024 6d69 7373 4c69 6e6b 7320 my $missLinks │ │ │ -0002bf50: 3d0a 096d 6973 7369 6e67 4c69 6e6b 732d =..missingLinks- │ │ │ -0002bf60: 3e6e 6577 2827 2d62 6163 6b75 7044 6972 >new('-backupDir │ │ │ -0002bf70: 2720 3d3e 2024 7072 6576 4261 636b 7570 ' => $prevBackup │ │ │ -0002bf80: 4f77 6e53 6572 6965 732c 2023 2024 6469 OwnSeries, # $di │ │ │ -0002bf90: 722c 0a09 272d 6d69 7373 696e 674c 696e r,..'-missingLin │ │ │ -0002bfa0: 6b46 696c 6527 203d 3e20 222e 6d64 3543 kFile' => ".md5C │ │ │ -0002bfb0: 6865 636b 5375 6d73 2e66 6169 6c22 2c0a heckSums.fail",. │ │ │ -0002bfc0: 0927 2d6d 6973 7369 6e67 4c69 6e6b 426c .'-missingLinkBl │ │ │ -0002bfd0: 6f63 6b46 696c 6527 203d 3e20 222e 6d64 ockFile' => ".md │ │ │ -0002bfe0: 3542 6c6f 636b 4368 6563 6b53 756d 732e 5BlockCheckSums. │ │ │ -0002bff0: 6661 696c 222c 0a09 272d 7072 4c6f 6727 fail",..'-prLog' │ │ │ -0002c000: 203d 3e20 2470 724c 6f67 293b 0a0a 2020 => $prLog);.. │ │ │ -0002c010: 2020 6d79 2025 666f 7263 6543 6f70 7943 my %forceCopyC │ │ │ -0002c020: 6f6d 7072 3b20 2020 2320 6265 6c6f 6e67 ompr; # belong │ │ │ -0002c030: 7320 746f 206d 6973 7369 6e67 4c69 6e6b s to missingLink │ │ │ -0002c040: 730a 2020 2020 2020 2020 2020 2020 2020 s. │ │ │ -0002c050: 2020 2020 2020 2020 2020 2020 2320 2466 # $f │ │ │ -0002c060: 6f72 6365 436f 7079 436f 6d70 727b 2466 orceCopyCompr{$f │ │ │ -0002c070: 696c 657d 203d 3e20 3120 2069 6620 696e ile} => 1 if in │ │ │ -0002c080: 2046 4641 494c 0a20 2020 206d 7920 246c FFAIL. my $l │ │ │ -0002c090: 6174 654c 696e 6b46 696c 6520 3d20 2224 ateLinkFile = "$ │ │ │ -0002c0a0: 7461 7267 6574 4469 722f 2e73 746f 7265 targetDir/.store │ │ │ -0002c0b0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link │ │ │ -0002c0c0: 4669 6c65 2e62 7a32 223b 0a20 2020 206d File.bz2";. m │ │ │ -0002c0d0: 7920 2477 724c 6174 654c 696e 6b3b 0a0a y $wrLateLink;.. │ │ │ -0002c0e0: 2020 2020 6d79 2040 6465 7644 6972 7320 my @devDirs │ │ │ -0002c0f0: 3d20 2829 3b0a 2020 2020 6966 2028 246c = ();. if ($l │ │ │ -0002c100: 6174 654c 696e 6b73 290a 2020 2020 7b0a ateLinks). {. │ │ │ -0002c110: 096d 7920 2473 203d 2024 6c61 7465 436f .my $s = $lateCo │ │ │ -0002c120: 6d70 7265 7373 203f 0a09 2020 2020 226c mpress ?.. "l │ │ │ -0002c130: 6174 654c 696e 6b73 2061 6e64 206c 6174 ateLinks and lat │ │ │ -0002c140: 6543 6f6d 7072 6573 7320 6172 6522 203a eCompress are" : │ │ │ -0002c150: 2022 6c61 7465 4c69 6e6b 7320 6973 223b "lateLinks is"; │ │ │ -0002c160: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -0002c170: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -0002c180: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0002c190: 3e20 5b22 2473 2073 7769 7463 6865 6420 > ["$s switched │ │ │ -0002c1a0: 6f6e 225d 293b 0a0a 0924 7772 4c61 7465 on"]);...$wrLate │ │ │ -0002c1b0: 4c69 6e6b 203d 2070 6970 6554 6f46 6f72 Link = pipeToFor │ │ │ -0002c1c0: 6b2d 3e6e 6577 2827 2d65 7865 6327 203d k->new('-exec' = │ │ │ -0002c1d0: 3e20 2762 7a69 7032 272c 0a09 0909 0920 > 'bzip2',..... │ │ │ -0002c1e0: 2020 2020 2027 2d73 7464 6f75 7427 203d '-stdout' = │ │ │ -0002c1f0: 3e20 246c 6174 654c 696e 6b46 696c 652c > $lateLinkFile, │ │ │ -0002c200: 0a09 0909 0920 2020 2020 2027 2d6f 7574 ..... '-out │ │ │ -0002c210: 5261 6e64 6f6d 2720 3d3e 2022 2474 6d70 Random' => "$tmp │ │ │ -0002c220: 6469 722f 7374 6275 5069 7065 546f 3132 dir/stbuPipeTo12 │ │ │ -0002c230: 2d22 2c0a 0909 0909 2020 2020 2020 272d -",..... '- │ │ │ -0002c240: 6465 6c53 7464 6f75 7427 203d 3e20 276e delStdout' => 'n │ │ │ -0002c250: 6f27 2c0a 0909 0909 2020 2020 2020 272d o',..... '- │ │ │ -0002c260: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0002c270: 293b 0a0a 0924 7772 4c61 7465 4c69 6e6b );...$wrLateLink │ │ │ -0002c280: 2d3e 7072 696e 7428 2223 206c 696e 6b20 ->print("# link │ │ │ -0002c290: 6d64 3573 756d 5c6e 235c 7465 7869 7374 md5sum\n#\texist │ │ │ -0002c2a0: 696e 6746 696c 655c 6e23 5c74 6e65 774c ingFile\n#\tnewL │ │ │ -0002c2b0: 696e 6b5c 6e22 2c0a 0909 2020 2022 2320 ink\n",... "# │ │ │ -0002c2c0: 636f 6d70 7265 7373 206d 6435 7375 6d5c compress md5sum\ │ │ │ -0002c2d0: 6e23 5c74 6669 6c65 546f 436f 6d70 7265 n#\tfileToCompre │ │ │ -0002c2e0: 7373 5c6e 2320 6469 7220 6469 724e 616d ss\n# dir dirNam │ │ │ -0002c2f0: 655c 6e22 2c0a 0909 2020 2022 2320 7379 e\n",... "# sy │ │ │ -0002c300: 6d6c 696e 6b20 6669 6c65 5c6e 235c 7474 mlink file\n#\tt │ │ │ -0002c310: 6172 6765 745c 6e22 2c0a 0909 2020 2022 arget\n",... " │ │ │ -0002c320: 2320 6c69 6e6b 5379 6d6c 696e 6b20 6c69 # linkSymlink li │ │ │ -0002c330: 6e6b 5c6e 235c 7465 7869 7374 696e 6746 nk\n#\texistingF │ │ │ -0002c340: 696c 655c 6e23 5c74 6e65 774c 696e 6b5c ile\n#\tnewLink\ │ │ │ -0002c350: 6e22 293b 0a20 2020 207d 0a0a 2020 2020 n");. }.. │ │ │ -0002c360: 6d79 2024 7072 6573 6572 7665 5065 726d my $preservePerm │ │ │ -0002c370: 7320 3d20 2473 656c 662d 3e7b 2770 7265 s = $self->{'pre │ │ │ -0002c380: 7365 7276 6550 6572 6d73 277d 3b0a 0a20 servePerms'};.. │ │ │ -0002c390: 2020 206d 7920 2466 696c 6573 4c65 6674 my $filesLeft │ │ │ -0002c3a0: 203d 2031 3b0a 2020 2020 6d79 2028 2569 = 1;. my (%i │ │ │ -0002c3b0: 6e50 726f 6772 6573 7329 203d 2028 293b nProgress) = (); │ │ │ -0002c3c0: 2023 2024 696e 5072 6f67 7265 7373 7b24 # $inProgress{$ │ │ │ -0002c3d0: 6d64 357d 203d 205b 5b24 6469 722c 2024 md5} = [[$dir, $ │ │ │ -0002c3e0: 6669 6c65 2c20 246d 6435 2c20 2474 7970 file, $md5, $typ │ │ │ -0002c3f0: 6573 5d2c 0a20 2020 2020 2020 2020 2020 es],. │ │ │ -0002c400: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002c410: 2320 2020 2020 2020 2020 2020 2020 2020 # │ │ │ -0002c420: 2020 2020 2020 205b 2464 6972 2c20 2466 [$dir, $f │ │ │ -0002c430: 696c 652c 2024 6d64 352c 2024 7479 7065 ile, $md5, $type │ │ │ -0002c440: 735d 2c0a 2020 2020 2020 2020 2020 2020 s],. │ │ │ -0002c450: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -0002c460: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002c470: 2020 2020 2020 5b24 6469 722c 2024 6669 [$dir, $fi │ │ │ -0002c480: 6c65 2c20 246d 6435 2c20 2474 7970 6573 le, $md5, $types │ │ │ -0002c490: 5d5d 0a20 2020 2020 2020 2020 2020 2020 ]]. │ │ │ -0002c4a0: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -0002c4b0: 5075 6666 6572 2066 c3bc 7220 4461 7465 Puffer f..r Date │ │ │ -0002c4c0: 6965 6e2c 2064 6965 2067 6572 6164 6520 ien, die gerade │ │ │ -0002c4d0: 6b6f 6d70 7269 6d69 6572 7420 6f64 6572 komprimiert oder │ │ │ -0002c4e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -0002c4f0: 2020 2020 2020 2020 2020 2020 2320 6b6f # ko │ │ │ -0002c500: 7069 6572 7420 7765 7264 656e 2e20 2469 piert werden. $i │ │ │ -0002c510: 6e50 726f 6772 6573 737b 246d 6435 7d20 nProgress{$md5} │ │ │ -0002c520: 3d20 5b5d 2062 6564 6575 7465 742c 0a20 = [] bedeutet,. │ │ │ -0002c530: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002c540: 2020 2020 2020 2020 2020 2320 6461 c39f # da.. │ │ │ -0002c550: 2065 696e 6520 4461 7465 6920 6d69 7420 eine Datei mit │ │ │ -0002c560: 6465 7220 6d64 352d 5375 6d6d 6520 696e der md5-Summe in │ │ │ -0002c570: 2042 6561 7262 6569 7475 6e67 0a20 2020 Bearbeitung. │ │ │ -0002c580: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002c590: 2020 2020 2020 2020 2320 6973 742c 2061 # ist, a │ │ │ -0002c5a0: 6265 7220 6b65 696e 6520 676c 6569 6368 ber keine gleich │ │ │ -0002c5b0: 6172 7469 6765 6e20 696e 2064 6572 2053 artigen in der S │ │ │ -0002c5c0: 6368 6c61 6e67 6520 7369 6e64 0a20 2020 chlange sind. │ │ │ -0002c5d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002c5e0: 2020 2020 2020 2020 2320 2d3e 2056 6172 # -> Var │ │ │ -0002c5f0: 6961 626c 6520 6973 7420 4d65 726b 6572 iable ist Merker │ │ │ -0002c600: 202b 2050 7566 6665 7220 7a75 676c 6569 + Puffer zuglei │ │ │ -0002c610: 6368 0a0a 2020 2020 6d79 2024 676e 7543 ch.. my $gnuC │ │ │ -0002c620: 6f70 7920 3d20 2763 7027 3b0a 2020 2020 opy = 'cp';. │ │ │ -0002c630: 6d79 2028 4067 6e75 436f 7079 5061 7253 my (@gnuCopyParS │ │ │ -0002c640: 7065 6369 616c 2920 3d20 2827 2d61 2729 pecial) = ('-a') │ │ │ -0002c650: 3b0a 0a20 2020 206d 7920 2462 6c6f 636b ;.. my $block │ │ │ -0002c660: 5061 7261 6c6c 656c 203d 2030 3b20 2023 Parallel = 0; # │ │ │ -0002c670: 2062 6c6f 636b 2a20 6669 6c65 7320 6172 block* files ar │ │ │ -0002c680: 6520 6e6f 7420 7265 6164 2069 6e20 7061 e not read in pa │ │ │ -0002c690: 7261 6c6c 656c 2074 6f20 6f74 6865 7273 rallel to others │ │ │ -0002c6a0: 0a20 2020 206d 7920 2466 696c 653b 0a20 . my $file;. │ │ │ -0002c6b0: 2020 2023 206d 6169 6e20 6c6f 6f70 0a20 # main loop. │ │ │ -0002c6c0: 2020 2077 6869 6c65 2028 2466 696c 6573 while ($files │ │ │ -0002c6d0: 4c65 6674 206f 720a 2020 2020 2020 2020 Left or. │ │ │ -0002c6e0: 2020 2024 6669 666f 436f 7079 2d3e 6765 $fifoCopy->ge │ │ │ -0002c6f0: 744e 6f55 7365 6445 6e74 7269 6573 2829 tNoUsedEntries() │ │ │ -0002c700: 203e 2030 206f 720a 2020 2020 2020 2020 > 0 or. │ │ │ -0002c710: 2020 2024 6669 666f 436f 6d70 722d 3e67 $fifoCompr->g │ │ │ -0002c720: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries( │ │ │ -0002c730: 2920 3e20 3020 6f72 0a09 2020 2024 6669 ) > 0 or.. $fi │ │ │ -0002c740: 666f 426c 6f63 6b2d 3e67 6574 4e6f 5573 foBlock->getNoUs │ │ │ -0002c750: 6564 456e 7472 6965 7328 2920 3e20 3020 edEntries() > 0 │ │ │ -0002c760: 6f72 0a20 2020 2020 2020 2020 2020 2470 or. $p │ │ │ -0002c770: 6172 466f 726b 436f 7079 2d3e 6765 744e arForkCopy->getN │ │ │ -0002c780: 6f55 7365 6445 6e74 7269 6573 2829 203e oUsedEntries() > │ │ │ -0002c790: 2030 206f 720a 2020 2020 2020 2020 2020 0 or. │ │ │ -0002c7a0: 2024 7061 7246 6f72 6b43 6f6d 7072 2d3e $parForkCompr-> │ │ │ -0002c7b0: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries │ │ │ -0002c7c0: 2829 203e 2030 206f 720a 0920 2020 2470 () > 0 or.. $p │ │ │ -0002c7d0: 6172 466f 726b 426c 6f63 6b2d 3e67 6574 arForkBlock->get │ │ │ -0002c7e0: 4e6f 5573 6564 456e 7472 6965 7328 2920 NoUsedEntries() │ │ │ -0002c7f0: 3e20 3029 0a20 2020 207b 0a62 6567 696e > 0). {.begin │ │ │ -0002c800: 4d61 696e 4c6f 6f70 4e6f 726d 616c 4f70 MainLoopNormalOp │ │ │ -0002c810: 6572 6174 696f 6e3a 3b0a 0a09 2320 5761 eration:;...# Wa │ │ │ -0002c820: 7274 6573 6368 6c61 6e67 656e 2066 c3bc rteschlangen f.. │ │ │ -0002c830: 6c6c 656e 2073 6f6c 616e 6765 2050 6c61 llen solange Pla │ │ │ -0002c840: 747a 2069 7374 2075 6e64 2062 6973 2065 tz ist und bis e │ │ │ -0002c850: 696e 2046 6f72 6b0a 2020 2020 2020 2020 in Fork. │ │ │ -0002c860: 2320 6265 656e 6465 7420 6973 7420 6f64 # beendet ist od │ │ │ -0002c870: 6572 2065 696e 206e 6575 6572 2067 6573 er ein neuer ges │ │ │ -0002c880: 7461 7274 6574 2077 6572 6465 6e20 6b61 tartet werden ka │ │ │ -0002c890: 6e6e 2e0a 0977 6869 6c65 2028 2466 696c nn...while ($fil │ │ │ -0002c8a0: 6573 4c65 6674 2061 6e64 0a20 2020 2020 esLeft and. │ │ │ -0002c8b0: 2020 2020 2020 2020 2020 2466 6966 6f43 $fifoC │ │ │ -0002c8c0: 6f70 792d 3e67 6574 4e6f 4672 6565 456e opy->getNoFreeEn │ │ │ -0002c8d0: 7472 6965 7328 2920 3e20 3020 616e 640a tries() > 0 and. │ │ │ -0002c8e0: 2020 2020 2020 2020 2020 2020 2020 2024 $ │ │ │ -0002c8f0: 6669 666f 436f 6d70 722d 3e67 6574 4e6f fifoCompr->getNo │ │ │ -0002c900: 4672 6565 456e 7472 6965 7328 2920 3e20 FreeEntries() > │ │ │ -0002c910: 3020 616e 640a 0920 2020 2020 2020 2466 0 and.. $f │ │ │ -0002c920: 6966 6f42 6c6f 636b 2d3e 6765 744e 6f46 ifoBlock->getNoF │ │ │ -0002c930: 7265 6545 6e74 7269 6573 2829 203e 2030 reeEntries() > 0 │ │ │ -0002c940: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ -0002c950: 2020 2020 6e6f 7420 2470 6172 466f 726b not $parFork │ │ │ -0002c960: 436f 7079 2d3e 6a6f 6246 696e 6973 6865 Copy->jobFinishe │ │ │ -0002c970: 6428 2920 616e 640a 2020 2020 2020 2020 d() and. │ │ │ -0002c980: 2020 2020 2020 206e 6f74 2024 7061 7246 not $parF │ │ │ -0002c990: 6f72 6b43 6f6d 7072 2d3e 6a6f 6246 696e orkCompr->jobFin │ │ │ -0002c9a0: 6973 6865 6428 2920 616e 640a 0920 2020 ished() and.. │ │ │ -0002c9b0: 2020 2020 6e6f 7420 2470 6172 466f 726b not $parFork │ │ │ -0002c9c0: 426c 6f63 6b2d 3e6a 6f62 4669 6e69 7368 Block->jobFinish │ │ │ -0002c9d0: 6564 2829 2061 6e64 0a20 2020 2020 2020 ed() and. │ │ │ -0002c9e0: 2020 2020 2020 2020 6e6f 7420 2824 7061 not ($pa │ │ │ -0002c9f0: 7246 6f72 6b43 6f6d 7072 2d3e 6765 744e rForkCompr->getN │ │ │ -0002ca00: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() > │ │ │ -0002ca10: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. │ │ │ -0002ca20: 2020 2020 2020 2020 2020 2024 6669 666f $fifo │ │ │ -0002ca30: 436f 6d70 722d 3e67 6574 4e6f 5573 6564 Compr->getNoUsed │ │ │ -0002ca40: 456e 7472 6965 7328 2920 3e20 3029 2061 Entries() > 0) a │ │ │ -0002ca50: 6e64 0a20 2020 2020 2020 2020 2020 2020 nd. │ │ │ -0002ca60: 2020 6e6f 7420 2824 7061 7246 6f72 6b43 not ($parForkC │ │ │ -0002ca70: 6f70 792d 3e67 6574 4e6f 4672 6565 456e opy->getNoFreeEn │ │ │ -0002ca80: 7472 6965 7328 2920 3e20 3020 616e 640a tries() > 0 and. │ │ │ -0002ca90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002caa0: 2020 2020 2466 6966 6f43 6f70 792d 3e67 $fifoCopy->g │ │ │ -0002cab0: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries( │ │ │ -0002cac0: 2920 3e20 3029 2061 6e64 0a09 2020 2020 ) > 0) and.. │ │ │ -0002cad0: 2020 206e 6f74 2028 2470 6172 466f 726b not ($parFork │ │ │ -0002cae0: 426c 6f63 6b2d 3e67 6574 4e6f 4672 6565 Block->getNoFree │ │ │ -0002caf0: 456e 7472 6965 7328 2920 3e20 3020 616e Entries() > 0 an │ │ │ -0002cb00: 640a 0909 2020 2020 2466 6966 6f42 6c6f d... $fifoBlo │ │ │ -0002cb10: 636b 2d3e 6765 744e 6f55 7365 6445 6e74 ck->getNoUsedEnt │ │ │ -0002cb20: 7269 6573 2829 203e 2030 2929 0a20 2020 ries() > 0)). │ │ │ -0002cb30: 2020 2020 207b 0a09 2020 2020 6d79 2028 {.. my ( │ │ │ -0002cb40: 2464 6972 2c20 246d 6435 2c20 2474 7970 $dir, $md5, $typ │ │ │ -0002cb50: 6529 3b0a 0920 2020 206d 7920 246e 203d e);.. my $n = │ │ │ -0002cb60: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $ │ │ │ -0002cb70: 6d64 352c 2024 7479 7065 2920 3d0a 0909 md5, $type) =... │ │ │ -0002cb80: 2472 6561 6444 6972 416e 6443 6865 636b $readDirAndCheck │ │ │ -0002cb90: 2d3e 6e65 7874 2829 3b0a 0920 2020 2069 ->next();.. i │ │ │ -0002cba0: 6620 2824 6e20 3d3d 2030 2920 2020 2020 f ($n == 0) │ │ │ -0002cbb0: 2020 2020 2320 6e69 7820 6d65 6872 207a # nix mehr z │ │ │ -0002cbc0: 7520 686f 6c65 6e21 0a09 2020 2020 7b0a u holen!.. {. │ │ │ -0002cbd0: 0909 2466 696c 6573 4c65 6674 203d 2030 ..$filesLeft = 0 │ │ │ -0002cbe0: 3b0a 0909 6c61 7374 3b0a 0920 2020 207d ;...last;.. } │ │ │ -0002cbf0: 0a23 2320 2020 2070 7269 6e74 2022 2b2b .## print "++ │ │ │ -0002cc00: 2b2b 2b2b 2474 7970 653a 206d 6435 7375 ++++$type: md5su │ │ │ -0002cc10: 6d20 2824 6669 6c65 2920 3d20 246d 6435 m ($file) = $md5 │ │ │ -0002cc20: 5c6e 223b 0a23 0920 2020 2024 7072 4c6f \n";.#. $prLo │ │ │ -0002cc30: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0002cc40: 203d 3e20 2744 272c 0a23 0909 0920 2027 => 'D',.#... ' │ │ │ -0002cc50: 2d73 7472 2720 3d3e 205b 223c 2466 696c -str' => ["<$fil │ │ │ -0002cc60: 653e 206b 6f6d 6d74 225d 293b 0a0a 0920 e> kommt"]);... │ │ │ -0002cc70: 2020 2069 6620 2864 6566 696e 6564 2824 if (defined($ │ │ │ -0002cc80: 6669 6c65 2920 616e 640a 0909 2474 7970 file) and...$typ │ │ │ -0002cc90: 6520 6571 2027 6627 2061 6e64 0a09 0924 e eq 'f' and...$ │ │ │ -0002cca0: 6d69 7373 4c69 6e6b 732d 3e63 6865 636b missLinks->check │ │ │ -0002ccb0: 7375 6d46 6169 6c73 2827 2d63 6865 636b sumFails('-check │ │ │ -0002ccc0: 7375 6d27 203d 3e20 246d 6435 2929 0a09 sum' => $md5)).. │ │ │ -0002ccd0: 2020 2020 7b20 2020 2020 2020 2020 2020 { │ │ │ -0002cce0: 2020 2320 666f 756e 6420 6f6e 6520 6f66 # found one of │ │ │ -0002ccf0: 2074 6865 2027 6661 6669 6c27 2063 6865 the 'fafil' che │ │ │ -0002cd00: 636b 7375 6d73 0a23 0970 7269 6e74 2022 cksums.#.print " │ │ │ -0002cd10: 6368 6563 6b73 756d 2068 6974 2028 246d checksum hit ($m │ │ │ -0002cd20: 6435 2920 2f2f 206c 6174 654c 696e 6b73 d5) // lateLinks │ │ │ -0002cd30: 203d 2024 6c61 7465 4c69 6e6b 735c 6e22 = $lateLinks\n" │ │ │ -0002cd40: 3b0a 0909 6966 2028 246c 6174 654c 696e ;...if ($lateLin │ │ │ -0002cd50: 6b73 290a 0909 7b0a 2324 7072 4c6f 672d ks)...{.#$prLog- │ │ │ -0002cd60: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0002cd70: 3e20 2744 272c 0a23 0920 2020 2020 2027 > 'D',.#. ' │ │ │ -0002cd80: 2d73 7472 2720 3d3e 205b 2246 4149 4c20 -str' => ["FAIL │ │ │ -0002cd90: 4849 5420 2074 7970 653d 3c53 7479 7065 HIT type= // file=<$file │ │ │ -0002cdb0: 3e22 5d29 3b0a 2020 2466 6f72 6365 436f >"]);. $forceCo │ │ │ -0002cdc0: 7079 436f 6d70 727b 2466 696c 657d 203d pyCompr{$file} = │ │ │ -0002cdd0: 2031 3b0a 0909 2020 2020 2470 724c 6f67 1;... $prLog │ │ │ -0002cde0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -0002cdf0: 3d3e 2027 4927 2c0a 2020 2020 2020 2020 => 'I',. │ │ │ -0002ce00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002ce10: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ -0002ce20: 0909 0909 2020 5b22 636f 7272 6563 7469 .... ["correcti │ │ │ -0002ce30: 6e67 203c 2464 6972 2f24 6669 6c65 3e22 ng <$dir/$file>" │ │ │ -0002ce40: 5d29 3b0a 0a09 097d 0a09 2020 2020 7d0a ]);....}.. }. │ │ │ -0002ce50: 0a23 2323 2323 2323 2323 2121 2121 2121 .#########!!!!!! │ │ │ -0002ce60: 2121 0a23 6966 2028 2474 7970 6520 6571 !!.#if ($type eq │ │ │ -0002ce70: 2027 7265 7065 6174 2729 0a23 7b0a 2320 'repeat').#{.# │ │ │ -0002ce80: 2020 2070 7269 6e74 2022 676f 7420 7265 print "got re │ │ │ -0002ce90: 7065 6174 2024 7479 7065 203c 2464 6972 peat $type <$dir │ │ │ -0002cea0: 3e5c 6e22 3b0a 237d 0a23 656c 7365 0a23 >\n";.#}.#else.# │ │ │ -0002ceb0: 7b0a 2320 2020 206d 7920 246d 203d 2028 {.# my $m = ( │ │ │ -0002cec0: 246d 6435 203f 2024 6d64 3520 3a20 2275 $md5 ? $md5 : "u │ │ │ -0002ced0: 6e64 6566 2229 3b0a 2320 2020 2070 7269 ndef");.# pri │ │ │ -0002cee0: 6e74 2022 676f 7420 6669 6c65 4469 7220 nt "got fileDir │ │ │ -0002cef0: 2474 7970 6520 246d 203c 2464 6972 3e20 $type $m <$dir> │ │ │ -0002cf00: 3c24 6669 6c65 3e5c 6e22 3b0a 237d 0a09 <$file>\n";.#}.. │ │ │ -0002cf10: 2020 2020 6c61 7374 2069 6620 2824 7479 last if ($ty │ │ │ -0002cf20: 7065 2065 7120 2772 6570 6561 7427 293b pe eq 'repeat'); │ │ │ -0002cf30: 2023 204d 4435 5375 6d20 6cc3 a475 6674 # MD5Sum l..uft │ │ │ -0002cf40: 206e 6f63 680a 0a09 2020 2020 6966 2028 noch... if ( │ │ │ -0002cf50: 2466 696c 6520 3d7e 202f 5c6e 2f20 616e $file =~ /\n/ an │ │ │ -0002cf60: 640a 0909 6e6f 7420 6578 6973 7473 2024 d...not exists $ │ │ │ -0002cf70: 2473 7570 7072 6573 7357 6172 6e69 6e67 $suppressWarning │ │ │ -0002cf80: 7b27 6669 6c65 4e61 6d65 5769 7468 4c69 {'fileNameWithLi │ │ │ -0002cf90: 6e65 4665 6564 277d 290a 0920 2020 207b neFeed'}).. { │ │ │ -0002cfa0: 0a09 096d 7920 2466 203d 2024 6669 6c65 ...my $f = $file │ │ │ -0002cfb0: 3b0a 0909 2466 203d 7e20 732f 5c6e 2f5c ;...$f =~ s/\n/\ │ │ │ -0002cfc0: 5c6e 2f67 3b0a 0909 2470 724c 6f67 2d3e \n/g;...$prLog-> │ │ │ -0002cfd0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0002cfe0: 2027 5727 2c0a 0909 0920 2020 2020 2027 'W',.... ' │ │ │ -0002cff0: 2d73 7472 2720 3d3e 205b 223c 2464 6972 -str' => ["<$dir │ │ │ -0002d000: 2f24 663e 2068 6173 205c 5c6e 2069 6e20 /$f> has \\n in │ │ │ -0002d010: 7468 6520 6669 6c65 206e 616d 6522 5d29 the file name"]) │ │ │ -0002d020: 0a09 2020 2020 7d0a 0a20 2020 2020 2020 .. }.. │ │ │ -0002d030: 2020 2020 2023 204f 6b2c 2077 6972 2068 # Ok, wir h │ │ │ -0002d040: 6162 656e 2077 6173 207a 7520 6265 6172 aben was zu bear │ │ │ -0002d050: 6265 6974 656e 0a20 2020 2020 2020 2020 beiten. │ │ │ -0002d060: 2020 2024 6d61 696e 3a3a 7469 6e79 5761 $main::tinyWa │ │ │ -0002d070: 6974 5363 6865 6475 6c65 722d 3e72 6573 itScheduler->res │ │ │ -0002d080: 6574 2829 3b0a 0a09 2020 2020 2320 5265 et();... # Re │ │ │ -0002d090: 6368 7465 2065 7463 2e20 6465 7220 4f72 chte etc. der Or │ │ │ -0002d0a0: 6967 696e 616c 6461 7465 6920 6c65 7365 iginaldatei lese │ │ │ -0002d0b0: 6e0a 0920 2020 206d 7920 2824 6465 762c n.. my ($dev, │ │ │ -0002d0c0: 2024 696e 6f64 652c 2024 6d6f 6465 2c20 $inode, $mode, │ │ │ -0002d0d0: 2475 6964 2c20 2467 6964 2c20 2473 697a $uid, $gid, $siz │ │ │ -0002d0e0: 652c 2024 6174 696d 652c 0a09 0924 6d74 e, $atime,...$mt │ │ │ -0002d0f0: 696d 652c 2024 6374 696d 6529 3b0a 0920 ime, $ctime);.. │ │ │ -0002d100: 2020 206d 7920 245f 6465 7074 6820 3d20 my $_depth = │ │ │ -0002d110: 2d31 3b0a 0a09 2020 2020 6966 2028 6e6f -1;... if (no │ │ │ -0002d120: 7420 2d6c 2022 2464 6972 2f24 6669 6c65 t -l "$dir/$file │ │ │ -0002d130: 2220 616e 6420 6e6f 7420 2d65 2022 2464 " and not -e "$d │ │ │ -0002d140: 6972 2f24 6669 6c65 2229 0a09 2020 2020 ir/$file").. │ │ │ -0002d150: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin │ │ │ -0002d160: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ -0002d170: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -0002d180: 2720 3d3e 205b 223c 2464 6972 2f24 6669 ' => ["<$dir/$fi │ │ │ -0002d190: 6c65 3e20 7265 6d6f 7665 6420 6475 7269 le> removed duri │ │ │ -0002d1a0: 6e67 2062 6163 6b75 7022 5d29 3b0a 0909 ng backup"]);... │ │ │ -0002d1b0: 6e65 7874 3b0a 0920 2020 207d 0a0a 0920 next;.. }... │ │ │ -0002d1c0: 2020 2028 2464 6576 2c20 2469 6e6f 6465 ($dev, $inode │ │ │ -0002d1d0: 2c20 246d 6f64 652c 2024 7569 642c 2024 , $mode, $uid, $ │ │ │ -0002d1e0: 6769 642c 2024 7369 7a65 2c20 2461 7469 gid, $size, $ati │ │ │ -0002d1f0: 6d65 2c0a 0920 2020 2020 246d 7469 6d65 me,.. $mtime │ │ │ -0002d200: 2c20 2463 7469 6d65 2920 3d0a 0909 2028 , $ctime) =... ( │ │ │ -0002d210: 7374 6174 2822 2464 6972 2f24 6669 6c65 stat("$dir/$file │ │ │ -0002d220: 2229 295b 302c 312c 322c 342c 352c 372c "))[0,1,2,4,5,7, │ │ │ -0002d230: 382c 392c 3130 5d3b 0a23 7072 696e 7420 8,9,10];.#print │ │ │ -0002d240: 226c 6f6f 703a 203c 2474 7970 653e 2024 "loop: <$type> $ │ │ │ -0002d250: 6469 723a 2f3a 2466 696c 655c 6e22 3b0a dir:/:$file\n";. │ │ │ -0002d260: 0920 2020 2069 6620 2824 7479 7065 2065 . if ($type e │ │ │ -0002d270: 7120 2764 2729 0a09 2020 2020 7b0a 0909 q 'd').. {... │ │ │ -0002d280: 6d79 2028 4064 756d 6d79 293b 0a09 0924 my (@dummy);...$ │ │ │ -0002d290: 5f64 6570 7468 203d 2028 4064 756d 6d79 _depth = (@dummy │ │ │ -0002d2a0: 2920 3d20 2466 696c 6520 3d7e 206d 232f ) = $file =~ m#/ │ │ │ -0002d2b0: 2367 3b0a 0909 6966 2028 245f 6465 7074 #g;...if ($_dept │ │ │ -0002d2c0: 6820 2b20 3120 3c3d 2024 666f 6c6c 6f77 h + 1 <= $follow │ │ │ -0002d2d0: 4c69 6e6b 7320 616e 640a 0909 2020 2020 Links and... │ │ │ -0002d2e0: 2d6c 2022 2464 6972 2f24 6669 6c65 2229 -l "$dir/$file") │ │ │ -0002d2f0: 0a09 097b 0a09 0920 2020 2024 5f64 6570 ...{... $_dep │ │ │ -0002d300: 7468 203d 2031 3b0a 0909 7d0a 0909 656c th = 1;...}...el │ │ │ -0002d310: 7365 0a09 097b 0a09 0920 2020 2024 5f64 se...{... $_d │ │ │ -0002d320: 6570 7468 203d 202d 313b 0a09 097d 0a09 epth = -1;...}.. │ │ │ -0002d330: 2020 2020 7d0a 0920 2020 2069 6620 2824 }.. if ($ │ │ │ -0002d340: 5f64 6570 7468 203d 3d20 2d31 290a 0920 _depth == -1).. │ │ │ -0002d350: 2020 207b 0a09 0928 2464 6576 2c20 2469 {...($dev, $i │ │ │ -0002d360: 6e6f 6465 2c20 246d 6f64 652c 2024 7569 node, $mode, $ui │ │ │ -0002d370: 642c 2024 6769 642c 2024 7369 7a65 2c20 d, $gid, $size, │ │ │ -0002d380: 2461 7469 6d65 2c0a 0909 2024 6d74 696d $atime,... $mtim │ │ │ -0002d390: 652c 2024 6374 696d 6529 203d 0a09 0920 e, $ctime) =... │ │ │ -0002d3a0: 2020 2020 286c 7374 6174 2822 2464 6972 (lstat("$dir │ │ │ -0002d3b0: 2f24 6669 6c65 2229 295b 302c 312c 322c /$file"))[0,1,2, │ │ │ -0002d3c0: 342c 352c 372c 382c 392c 3130 5d3b 0a09 4,5,7,8,9,10];.. │ │ │ -0002d3d0: 2020 2020 7d0a 2020 2020 2020 2020 2020 }. │ │ │ -0002d3e0: 2020 6966 2028 6e6f 7420 6465 6669 6e65 if (not define │ │ │ -0002d3f0: 6420 2464 6576 290a 0920 2020 207b 0a09 d $dev).. {.. │ │ │ -0002d400: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0002d410: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ -0002d420: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0002d430: 3e20 5b22 6361 6e6e 6f74 2073 7461 7420 > ["cannot stat │ │ │ -0002d440: 3c24 6669 6c65 3e3a 2024 2122 5d29 3b0a <$file>: $!"]);. │ │ │ -0002d450: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002d460: 6e65 7874 3b0a 2020 2020 2020 2020 2020 next;. │ │ │ -0002d470: 2020 7d0a 2020 2020 2020 2020 2020 2020 }. │ │ │ -0002d480: 246d 6f64 6520 263d 2030 3737 3737 3b0a $mode &= 07777;. │ │ │ -0002d490: 0a09 2020 2020 6966 2028 2466 696c 6520 .. if ($file │ │ │ -0002d4a0: 6571 2024 616b 7449 6e66 6f46 696c 6520 eq $aktInfoFile │ │ │ -0002d4b0: 6f72 2024 6669 6c65 2065 7120 2224 616b or $file eq "$ak │ │ │ -0002d4c0: 7449 6e66 6f46 696c 652e 627a 3222 290a tInfoFile.bz2"). │ │ │ -0002d4d0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog- │ │ │ -0002d4e0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0002d4f0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... │ │ │ -0002d500: 272d 7374 7227 203d 3e20 5b22 6361 6e6e '-str' => ["cann │ │ │ -0002d510: 6f74 2068 616e 646c 6520 3c24 6669 6c65 ot handle <$file │ │ │ -0002d520: 3e2c 2022 202e 0a09 0909 0909 2022 636f >, " ....... "co │ │ │ -0002d530: 6c6c 6973 696f 6e20 7769 7468 2069 6e66 llision with inf │ │ │ -0002d540: 6f20 6669 6c65 225d 293b 0a09 096e 6578 o file"]);...nex │ │ │ -0002d550: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... │ │ │ -0002d560: 6966 2028 2474 7970 6520 6571 2027 6427 if ($type eq 'd' │ │ │ -0002d570: 2920 2020 2020 2020 2020 2020 2023 2064 ) # d │ │ │ -0002d580: 6972 6563 746f 7279 2061 6e6c 6567 656e irectory anlegen │ │ │ -0002d590: 0a09 2020 2020 7b0a 0909 6966 2028 246c .. {...if ($l │ │ │ -0002d5a0: 6174 654c 696e 6b73 2061 6e64 206e 6f74 ateLinks and not │ │ │ -0002d5b0: 0a09 0920 2020 2028 6465 6669 6e65 6428 ... (defined( │ │ │ -0002d5c0: 2466 696c 6529 2061 6e64 2065 7869 7374 $file) and exist │ │ │ -0002d5d0: 7320 2466 6f72 6365 436f 7079 436f 6d70 s $forceCopyComp │ │ │ -0002d5e0: 727b 2466 696c 657d 2929 0a09 097b 0a09 r{$file}))...{.. │ │ │ -0002d5f0: 0920 2020 206d 7920 246c 6174 6544 6972 . my $lateDir │ │ │ -0002d600: 203d 2024 6669 6c65 3b0a 0909 2020 2020 = $file;... │ │ │ -0002d610: 246c 6174 6544 6972 203d 7e20 732f 5c6e $lateDir =~ s/\n │ │ │ -0002d620: 2f5c 302f 6f67 3b0a 0909 2020 2020 2477 /\0/og;... $w │ │ │ -0002d630: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print │ │ │ -0002d640: 2822 6469 7220 246c 6174 6544 6972 5c6e ("dir $lateDir\n │ │ │ -0002d650: 2229 3b0a 0909 7d0a 0909 656c 7365 0a09 ");...}...else.. │ │ │ -0002d660: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog- │ │ │ -0002d670: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0002d680: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s │ │ │ -0002d690: 7472 2720 3d3e 0a09 0909 0920 205b 2263 tr' =>..... ["c │ │ │ -0002d6a0: 616e 6e6f 7420 6372 6561 7465 2064 6972 annot create dir │ │ │ -0002d6b0: 6563 746f 7279 203c 2474 6172 6765 7444 ectory <$targetD │ │ │ -0002d6c0: 6972 2f24 6669 6c65 3e22 5d2c 0a09 0909 ir/$file>"],.... │ │ │ -0002d6d0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ -0002d6e0: 0a09 0909 756e 6c65 7373 206d 6b64 6972 ....unless mkdir │ │ │ -0002d6f0: 2022 2474 6172 6765 7444 6972 2f24 6669 "$targetDir/$fi │ │ │ -0002d700: 6c65 222c 2030 3730 303b 0a0a 0909 2020 le", 0700;.... │ │ │ -0002d710: 2020 6966 2028 2470 7265 7365 7276 6550 if ($preserveP │ │ │ -0002d720: 6572 6d73 290a 0909 2020 2020 7b0a 0909 erms)... {... │ │ │ -0002d730: 0963 686f 776e 2024 7569 642c 2024 6769 .chown $uid, $gi │ │ │ -0002d740: 642c 2022 2474 6172 6765 7444 6972 2f24 d, "$targetDir/$ │ │ │ -0002d750: 6669 6c65 223b 0a09 0909 2473 6574 5265 file";....$setRe │ │ │ -0002d760: 7365 7444 6972 5469 6d65 732d 3e61 6464 setDirTimes->add │ │ │ -0002d770: 4469 7228 2466 696c 652c 2024 6174 696d Dir($file, $atim │ │ │ -0002d780: 652c 2024 6d74 696d 652c 2024 6d6f 6465 e, $mtime, $mode │ │ │ -0002d790: 293b 0a09 0920 2020 207d 0a09 0920 2020 );... }... │ │ │ -0002d7a0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -0002d7b0: 2d6b 696e 6427 203d 3e20 2744 272c 0a09 -kind' => 'D',.. │ │ │ -0002d7c0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ -0002d7d0: 0909 0920 205b 2263 7265 6174 6564 2064 ... ["created d │ │ │ -0002d7e0: 6972 6563 746f 7279 203c 2474 6172 6765 irectory <$targe │ │ │ -0002d7f0: 7444 6972 2f24 6669 6c65 225d 290a 0909 tDir/$file"])... │ │ │ -0002d800: 0969 6620 2824 6465 6275 674d 6f64 6520 .if ($debugMode │ │ │ -0002d810: 3e20 3029 3b0a 0909 7d0a 0a09 0924 6d61 > 0);...}....$ma │ │ │ -0002d820: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ -0002d830: 6f44 6972 7328 2475 6964 2c20 2467 6964 oDirs($uid, $gid │ │ │ -0002d840: 293b 0a0a 0909 2461 6b74 4669 6c65 6e61 );....$aktFilena │ │ │ -0002d850: 6d65 2d3e 7374 6f72 6544 6972 2827 2d64 me->storeDir('-d │ │ │ -0002d860: 6972 2720 3d3e 2024 6669 6c65 2c0a 0909 ir' => $file,... │ │ │ -0002d870: 0909 2020 2020 2020 2027 2d64 6576 2720 .. '-dev' │ │ │ -0002d880: 3d3e 2024 6465 762c 0a09 0909 0920 2020 => $dev,..... │ │ │ -0002d890: 2020 2020 272d 696e 6f64 6527 203d 3e20 '-inode' => │ │ │ -0002d8a0: 2469 6e6f 6465 2c0a 0909 0909 2020 2020 $inode,..... │ │ │ -0002d8b0: 2020 2027 2d63 7469 6d65 2720 3d3e 2024 '-ctime' => $ │ │ │ -0002d8c0: 6374 696d 652c 0a09 0909 0920 2020 2020 ctime,..... │ │ │ -0002d8d0: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m │ │ │ -0002d8e0: 7469 6d65 2c0a 0909 0909 2020 2020 2020 time,..... │ │ │ -0002d8f0: 2027 2d61 7469 6d65 2720 3d3e 2024 6174 '-atime' => $at │ │ │ -0002d900: 696d 652c 0a09 0909 0920 2020 2020 2020 ime,..... │ │ │ -0002d910: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,. │ │ │ -0002d920: 0909 0909 2020 2020 2020 2027 2d67 6964 .... '-gid │ │ │ -0002d930: 2720 3d3e 2024 6769 642c 0a09 0909 0920 ' => $gid,..... │ │ │ -0002d940: 2020 2020 2020 272d 6d6f 6465 2720 3d3e '-mode' => │ │ │ -0002d950: 2024 6d6f 6465 293b 0a09 096e 6578 743b $mode);...next; │ │ │ -0002d960: 0a09 2020 2020 7d0a 0a09 2020 2020 6966 .. }... if │ │ │ -0002d970: 2028 2474 7970 6520 6571 2027 6c27 2920 ($type eq 'l') │ │ │ -0002d980: 2020 2020 2020 2020 2020 2023 2073 796d # sym │ │ │ -0002d990: 626f 6c69 6320 6c69 6e6b 0a09 2020 2020 bolic link.. │ │ │ -0002d9a0: 7b0a 0909 6d79 2024 6c20 3d20 7265 6164 {...my $l = read │ │ │ -0002d9b0: 6c69 6e6b 2022 2464 6972 2f24 6669 6c65 link "$dir/$file │ │ │ -0002d9c0: 223b 0a0a 0909 6966 2028 246c 696e 6b53 ";....if ($linkS │ │ │ -0002d9d0: 796d 6c69 6e6b 7329 0a09 097b 0a09 0920 ymlinks)...{... │ │ │ -0002d9e0: 2020 2069 6620 2824 7072 6576 4261 636b if ($prevBack │ │ │ -0002d9f0: 7570 4f77 6e53 6572 6965 7320 616e 640a upOwnSeries and. │ │ │ -0002da00: 0909 092d 6c20 2224 7072 6576 4261 636b ...-l "$prevBack │ │ │ -0002da10: 7570 4f77 6e53 6572 6965 732f 2466 696c upOwnSeries/$fil │ │ │ -0002da20: 6522 290a 0909 2020 2020 7b0a 0909 096d e")... {....m │ │ │ -0002da30: 7920 246c 5f70 7265 7620 3d20 7265 6164 y $l_prev = read │ │ │ -0002da40: 6c69 6e6b 2022 2470 7265 7642 6163 6b75 link "$prevBacku │ │ │ -0002da50: 704f 776e 5365 7269 6573 2f24 6669 6c65 pOwnSeries/$file │ │ │ -0002da60: 223b 0a0a 0909 0969 6620 2824 6c20 6571 ";.....if ($l eq │ │ │ -0002da70: 2024 6c5f 7072 6576 290a 0909 097b 0a09 $l_prev)....{.. │ │ │ -0002da80: 0909 2020 2020 6966 2028 246c 6174 654c .. if ($lateL │ │ │ -0002da90: 696e 6b73 2061 6e64 206e 6f74 0a09 0909 inks and not.... │ │ │ -0002daa0: 0928 6465 6669 6e65 6428 2466 696c 6529 .(defined($file) │ │ │ -0002dab0: 2061 6e64 2065 7869 7374 7320 2466 6f72 and exists $for │ │ │ -0002dac0: 6365 436f 7079 436f 6d70 727b 2466 696c ceCopyCompr{$fil │ │ │ -0002dad0: 657d 2929 0a09 0909 2020 2020 7b0a 0909 e})).... {... │ │ │ -0002dae0: 0909 6d79 2024 5f6f 6c64 203d 2022 2470 ..my $_old = "$p │ │ │ -0002daf0: 7265 7642 6163 6b75 704f 776e 5365 7269 revBackupOwnSeri │ │ │ -0002db00: 6573 2f24 6669 6c65 223b 0a09 0909 0924 es/$file";.....$ │ │ │ -0002db10: 5f6f 6c64 203d 203a 3a72 656c 5061 7468 _old = ::relPath │ │ │ -0002db20: 2824 7461 7267 6574 4469 722c 2024 5f6f ($targetDir, $_o │ │ │ -0002db30: 6c64 293b 0a09 0909 0924 5f6f 6c64 203d ld);.....$_old = │ │ │ -0002db40: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 0909 ~ s/\n/\0/og;... │ │ │ -0002db50: 0909 6d79 2024 5f6e 6577 203d 2024 6669 ..my $_new = $fi │ │ │ -0002db60: 6c65 3b0a 0909 0909 245f 6e65 7720 3d7e le;.....$_new =~ │ │ │ -0002db70: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 s/\n/\0/og;.... │ │ │ -0002db80: 0924 7772 4c61 7465 4c69 6e6b 2d3e 7072 .$wrLateLink->pr │ │ │ -0002db90: 696e 7428 0a09 0909 0920 2020 2022 6c69 int(..... "li │ │ │ -0002dba0: 6e6b 5379 6d6c 696e 6b20 246c 5c6e 245f nkSymlink $l\n$_ │ │ │ -0002dbb0: 6f6c 645c 6e24 5f6e 6577 5c6e 2229 3b0a old\n$_new\n");. │ │ │ -0002dbc0: 0909 0909 2673 746f 7265 5379 6d4c 696e ....&storeSymLin │ │ │ -0002dbd0: 6b49 6e66 6f73 2824 7569 642c 2024 6769 kInfos($uid, $gi │ │ │ -0002dbe0: 642c 2024 7461 7267 6574 4469 722c 0a09 d, $targetDir,.. │ │ │ -0002dbf0: 0909 0909 0920 2020 2466 696c 652c 2024 ..... $file, $ │ │ │ -0002dc00: 6465 762c 2024 696e 6f64 652c 0a09 0909 dev, $inode,.... │ │ │ -0002dc10: 0909 0920 2020 2463 7469 6d65 2c20 246d ... $ctime, $m │ │ │ -0002dc20: 7469 6d65 2c20 2461 7469 6d65 2c0a 0909 time, $atime,... │ │ │ -0002dc30: 0909 0909 2020 2024 616b 7446 696c 656e .... $aktFilen │ │ │ -0002dc40: 616d 652c 2024 6465 6275 674d 6f64 652c ame, $debugMode, │ │ │ -0002dc50: 0a09 0909 0909 0920 2020 2470 724c 6f67 ....... $prLog │ │ │ -0002dc60: 293b 0a09 0909 096e 6578 743b 0a09 0909 );.....next;.... │ │ │ -0002dc70: 2020 2020 7d0a 0909 0920 2020 2024 7072 }.... $pr │ │ │ -0002dc80: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0002dc90: 6427 203d 3e20 2744 272c 0a09 0909 0909 d' => 'D',...... │ │ │ -0002dca0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ -0002dcb0: 0920 205b 226c 696e 6b20 2470 7265 7642 . ["link $prevB │ │ │ -0002dcc0: 6163 6b75 704f 776e 5365 7269 6573 2f24 ackupOwnSeries/$ │ │ │ -0002dcd0: 6669 6c65 2220 2e0a 0909 0909 0920 2022 file" ....... " │ │ │ -0002dce0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -0002dcf0: 225d 290a 0909 0909 6966 2024 6465 6275 "]).....if $debu │ │ │ -0002dd00: 674d 6f64 6520 3e3d 2032 3b0a 0909 0920 gMode >= 2;.... │ │ │ -0002dd10: 2020 206d 7920 2468 6c20 3d20 2d31 3b0a my $hl = -1;. │ │ │ -0002dd20: 0909 0920 2020 2069 6620 2824 6d61 7848 ... if ($maxH │ │ │ -0002dd30: 6172 644c 696e 6b73 203e 2030 290a 0909 ardLinks > 0)... │ │ │ -0002dd40: 0920 2020 207b 0a09 0909 0924 686c 203d . {.....$hl = │ │ │ -0002dd50: 2028 6c73 7461 7428 2224 7072 6576 4261 (lstat("$prevBa │ │ │ -0002dd60: 636b 7570 4f77 6e53 6572 6965 732f 2466 ckupOwnSeries/$f │ │ │ -0002dd70: 696c 6522 2929 5b33 5d3b 0a23 7072 696e ile"))[3];.#prin │ │ │ -0002dd80: 7420 2273 796d 6c69 6e6b 3a20 2470 7265 t "symlink: $pre │ │ │ -0002dd90: 7642 6163 6b75 704f 776e 5365 7269 6573 vBackupOwnSeries │ │ │ -0002dda0: 2f24 6669 6c65 3a20 2468 6c20 6861 7264 /$file: $hl hard │ │ │ -0002ddb0: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL │ │ │ -0002ddc0: 696e 6b73 295c 6e22 3b0a 0909 0920 2020 inks)\n";.... │ │ │ -0002ddd0: 207d 0a09 0909 2020 2020 6966 2028 2468 }.... if ($h │ │ │ -0002dde0: 6c20 3c20 246d 6178 4861 7264 4c69 6e6b l < $maxHardLink │ │ │ -0002ddf0: 7320 616e 640a 0909 0909 6c69 6e6b 2022 s and.....link " │ │ │ -0002de00: 2470 7265 7642 6163 6b75 704f 776e 5365 $prevBackupOwnSe │ │ │ -0002de10: 7269 6573 2f24 6669 6c65 222c 0a09 0909 ries/$file",.... │ │ │ -0002de20: 0922 2474 6172 6765 7444 6972 2f24 6669 ."$targetDir/$fi │ │ │ -0002de30: 6c65 2229 0a09 0909 2020 2020 7b0a 0909 le").... {... │ │ │ -0002de40: 0909 2663 6861 6e67 6553 796d 6c69 6e6b ..&changeSymlink │ │ │ -0002de50: 5065 726d 7328 2475 6964 2c20 2467 6964 Perms($uid, $gid │ │ │ -0002de60: 2c20 2474 6172 6765 7444 6972 2c0a 0909 , $targetDir,... │ │ │ -0002de70: 0909 0909 2020 2020 2466 696c 652c 2024 .... $file, $ │ │ │ -0002de80: 746d 7064 6972 2c20 2470 724c 6f67 290a tmpdir, $prLog). │ │ │ -0002de90: 0909 0909 2020 2020 6966 2028 2470 7265 .... if ($pre │ │ │ -0002dea0: 7365 7276 6550 6572 6d73 293b 0a09 0909 servePerms);.... │ │ │ -0002deb0: 0926 7374 6f72 6553 796d 4c69 6e6b 496e .&storeSymLinkIn │ │ │ -0002dec0: 666f 7328 2475 6964 2c20 2467 6964 2c20 fos($uid, $gid, │ │ │ -0002ded0: 2474 6172 6765 7444 6972 2c0a 0909 0909 $targetDir,..... │ │ │ -0002dee0: 0909 2020 2024 6669 6c65 2c20 2464 6576 .. $file, $dev │ │ │ -0002def0: 2c20 2469 6e6f 6465 2c0a 0909 0909 0909 , $inode,....... │ │ │ -0002df00: 2020 2024 6374 696d 652c 2024 6d74 696d $ctime, $mtim │ │ │ -0002df10: 652c 2024 6174 696d 652c 0a09 0909 0909 e, $atime,...... │ │ │ -0002df20: 0920 2020 2461 6b74 4669 6c65 6e61 6d65 . $aktFilename │ │ │ -0002df30: 2c20 2464 6562 7567 4d6f 6465 2c0a 0909 , $debugMode,... │ │ │ -0002df40: 0909 0909 2020 2024 7072 4c6f 6729 3b0a .... $prLog);. │ │ │ -0002df50: 0909 0909 6e65 7874 3b0a 0a09 0909 2020 ....next;..... │ │ │ -0002df60: 2020 7d0a 0909 097d 0a09 0920 2020 207d }....}... } │ │ │ -0002df70: 0a09 097d 0a09 0969 6620 2824 6c61 7465 ...}...if ($late │ │ │ -0002df80: 4c69 6e6b 7320 616e 6420 6e6f 740a 0909 Links and not... │ │ │ -0002df90: 2020 2020 2864 6566 696e 6564 2824 6669 (defined($fi │ │ │ -0002dfa0: 6c65 2920 616e 6420 6578 6973 7473 2024 le) and exists $ │ │ │ -0002dfb0: 666f 7263 6543 6f70 7943 6f6d 7072 7b24 forceCopyCompr{$ │ │ │ -0002dfc0: 6669 6c65 7d29 290a 0909 7b0a 0909 2020 file}))...{... │ │ │ -0002dfd0: 2020 6d79 2024 5f66 696c 6520 3d20 2224 my $_file = "$ │ │ │ -0002dfe0: 6669 6c65 223b 0a09 0920 2020 2024 5f66 file";... $_f │ │ │ -0002dff0: 696c 6520 3d7e 2073 2f5c 6e2f 5c30 2f6f ile =~ s/\n/\0/o │ │ │ -0002e000: 673b 0a09 0920 2020 206d 7920 245f 6c20 g;... my $_l │ │ │ -0002e010: 3d20 246c 3b0a 0909 2020 2020 246c 203d = $l;... $l = │ │ │ -0002e020: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 0909 ~ s/\n/\0/og;... │ │ │ -0002e030: 2020 2020 2477 724c 6174 654c 696e 6b2d $wrLateLink- │ │ │ -0002e040: 3e70 7269 6e74 2822 7379 6d6c 696e 6b20 >print("symlink │ │ │ -0002e050: 245f 6669 6c65 5c6e 246c 5c6e 2229 3b0a $_file\n$l\n");. │ │ │ -0002e060: 0909 7d0a 0909 656c 7365 0a09 097b 0a09 ..}...else...{.. │ │ │ -0002e070: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -0002e080: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -0002e090: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' │ │ │ -0002e0a0: 3d3e 205b 2263 616e 6e6f 7420 6372 6561 => ["cannot crea │ │ │ -0002e0b0: 7465 2073 796d 6c69 6e6b 2066 726f 6d20 te symlink from │ │ │ -0002e0c0: 2220 2e0a 0909 0909 0920 2020 2020 223c " ....... "< │ │ │ -0002e0d0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -0002e0e0: 3e20 2d3e 2024 6c22 5d2c 0a09 0909 0920 > -> $l"],..... │ │ │ -0002e0f0: 2027 2d65 7869 7427 203d 3e20 3129 0a09 '-exit' => 1).. │ │ │ -0002e100: 0909 756e 6c65 7373 2073 796d 6c69 6e6b ..unless symlink │ │ │ -0002e110: 2024 6c2c 2022 2474 6172 6765 7444 6972 $l, "$targetDir │ │ │ -0002e120: 2f24 6669 6c65 223b 0a0a 0909 2020 2020 /$file";.... │ │ │ -0002e130: 6966 2028 2470 7265 7365 7276 6550 6572 if ($preservePer │ │ │ -0002e140: 6d73 290a 0909 2020 2020 7b0a 0909 0926 ms)... {....& │ │ │ -0002e150: 6368 616e 6765 5379 6d6c 696e 6b50 6572 changeSymlinkPer │ │ │ -0002e160: 6d73 2824 7569 642c 2024 6769 642c 2024 ms($uid, $gid, $ │ │ │ -0002e170: 7461 7267 6574 4469 722c 0a09 0909 2020 targetDir,.... │ │ │ -0002e180: 2020 2466 696c 652c 2024 746d 7064 6972 $file, $tmpdir │ │ │ -0002e190: 2c20 2470 724c 6f67 293b 0a09 0920 2020 , $prLog);... │ │ │ -0002e1a0: 207d 0a09 097d 0a0a 0909 2673 746f 7265 }...}....&store │ │ │ -0002e1b0: 5379 6d4c 696e 6b49 6e66 6f73 2824 7569 SymLinkInfos($ui │ │ │ -0002e1c0: 642c 2024 6769 642c 2024 7461 7267 6574 d, $gid, $target │ │ │ -0002e1d0: 4469 722c 2024 6669 6c65 2c20 2464 6576 Dir, $file, $dev │ │ │ -0002e1e0: 2c0a 0909 0909 2020 2024 696e 6f64 652c ,..... $inode, │ │ │ -0002e1f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ -0002e200: 2024 6174 696d 652c 0a09 0909 0920 2020 $atime,..... │ │ │ -0002e210: 2461 6b74 4669 6c65 6e61 6d65 2c20 2464 $aktFilename, $d │ │ │ -0002e220: 6562 7567 4d6f 6465 2c20 2470 724c 6f67 ebugMode, $prLog │ │ │ -0002e230: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. │ │ │ -0002e240: 7d0a 0a09 2020 2020 6966 2028 2474 7970 }... if ($typ │ │ │ -0002e250: 6520 6571 2027 7027 290a 0920 2020 207b e eq 'p').. { │ │ │ -0002e260: 0a09 096d 7920 2824 6374 696d 652c 2024 ...my ($ctime, $ │ │ │ -0002e270: 6d74 696d 652c 2024 6174 696d 6529 203d mtime, $atime) = │ │ │ -0002e280: 0a09 0920 2020 2028 7374 6174 2822 2464 ... (stat("$d │ │ │ -0002e290: 6972 2f24 6669 6c65 2229 295b 3130 2c20 ir/$file"))[10, │ │ │ -0002e2a0: 392c 2038 5d3b 0a0a 0909 263a 3a6d 616b 9, 8];....&::mak │ │ │ -0002e2b0: 6546 696c 6550 6174 6843 6163 6865 2822 eFilePathCache(" │ │ │ -0002e2c0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -0002e2d0: 222c 2024 7072 4c6f 6729 2069 6620 246c ", $prLog) if $l │ │ │ -0002e2e0: 6174 654c 696e 6b73 3b0a 0a09 0969 6620 ateLinks;....if │ │ │ -0002e2f0: 2824 7370 6563 6961 6c54 7970 6541 7263 ($specialTypeArc │ │ │ -0002e300: 6869 7665 7220 616e 6420 2461 7263 6869 hiver and $archi │ │ │ -0002e310: 7665 5479 7065 7320 3d7e 202f 702f 290a veTypes =~ /p/). │ │ │ -0002e320: 0909 7b0a 0909 2020 2020 263a 3a63 7265 ..{... &::cre │ │ │ -0002e330: 6174 6541 7263 6869 7665 4672 6f6d 4669 ateArchiveFromFi │ │ │ -0002e340: 6c65 2824 6669 6c65 2c20 2464 6972 2c20 le($file, $dir, │ │ │ -0002e350: 2474 6172 6765 7444 6972 2c0a 0909 0909 $targetDir,..... │ │ │ -0002e360: 0920 2020 2020 2473 7065 6369 616c 5479 . $specialTy │ │ │ -0002e370: 7065 4172 6368 6976 6572 2c20 2470 724c peArchiver, $prL │ │ │ -0002e380: 6f67 2c0a 0909 0909 0920 2020 2020 2474 og,...... $t │ │ │ -0002e390: 6d70 6469 7229 3b0a 0909 7d0a 0909 656c mpdir);...}...el │ │ │ -0002e3a0: 7365 0a09 097b 0a09 0920 2020 206d 7920 se...{... my │ │ │ -0002e3b0: 246d 6b6e 6f64 203d 2066 6f72 6b50 726f $mknod = forkPro │ │ │ -0002e3c0: 632d 3e6e 6577 2827 2d65 7865 6327 203d c->new('-exec' = │ │ │ -0002e3d0: 3e20 276d 6b6e 6f64 272c 0a09 0909 0909 > 'mknod',...... │ │ │ -0002e3e0: 2020 2020 2020 272d 7061 7261 6d27 203d '-param' = │ │ │ -0002e3f0: 3e20 5b22 2474 6172 6765 7444 6972 2f24 > ["$targetDir/$ │ │ │ -0002e400: 6669 6c65 222c 2027 7027 5d2c 0a09 0909 file", 'p'],.... │ │ │ -0002e410: 0909 2020 2020 2020 272d 6f75 7452 616e .. '-outRan │ │ │ -0002e420: 646f 6d27 203d 3e20 2224 746d 7064 6972 dom' => "$tmpdir │ │ │ -0002e430: 2f6d 6b6e 6f64 2d22 2c0a 0909 0909 0920 /mknod-",...... │ │ │ -0002e440: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ -0002e450: 2024 7072 4c6f 6729 3b0a 0909 2020 2020 $prLog);... │ │ │ -0002e460: 246d 6b6e 6f64 2d3e 7761 6974 2829 3b0a $mknod->wait();. │ │ │ -0002e470: 0909 2020 2020 6d79 2024 6f75 7420 3d20 .. my $out = │ │ │ -0002e480: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU │ │ │ -0002e490: 5428 293b 0a09 0920 2020 2024 7072 4c6f T();... $prLo │ │ │ -0002e4a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0002e4b0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ -0002e4c0: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ -0002e4d0: 2253 5444 4f55 5420 6f66 203c 6d6b 6e6f "STDOUT of :", @$out]) │ │ │ -0002e500: 0a09 0909 6966 2028 4024 6f75 7420 3e20 ....if (@$out > │ │ │ -0002e510: 3029 3b0a 0909 2020 2020 246f 7574 203d 0);... $out = │ │ │ -0002e520: 2024 6d6b 6e6f 642d 3e67 6574 5354 4445 $mknod->getSTDE │ │ │ -0002e530: 5252 2829 3b0a 0909 2020 2020 2470 724c RR();... $prL │ │ │ -0002e540: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0002e550: 2720 3d3e 2027 4527 2c0a 0909 0909 2020 ' => 'E',..... │ │ │ -0002e560: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... │ │ │ -0002e570: 5b22 5354 4445 5252 206f 6620 3c6d 6b6e ["STDERR of :", @$out]) │ │ │ -0002e5a0: 0a09 0909 6966 2028 4024 6f75 7420 3e20 ....if (@$out > │ │ │ -0002e5b0: 3029 3b0a 0909 7d0a 0a09 0969 6620 2824 0);...}....if ($ │ │ │ -0002e5c0: 7072 6573 6572 7665 5065 726d 7329 0a09 preservePerms).. │ │ │ -0002e5d0: 097b 0a09 0920 2020 2063 686f 776e 2024 .{... chown $ │ │ │ -0002e5e0: 7569 642c 2024 6769 642c 2022 2474 6172 uid, $gid, "$tar │ │ │ -0002e5f0: 6765 7444 6972 2f24 6669 6c65 223b 0a09 getDir/$file";.. │ │ │ -0002e600: 0920 2020 2063 686d 6f64 2024 6d6f 6465 . chmod $mode │ │ │ -0002e610: 2c20 2224 7461 7267 6574 4469 722f 2466 , "$targetDir/$f │ │ │ -0002e620: 696c 6522 3b0a 0909 2020 2020 7574 696d ile";... utim │ │ │ -0002e630: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ -0002e640: 2c20 2224 6469 722f 2466 696c 6522 2069 , "$dir/$file" i │ │ │ -0002e650: 6620 2472 6573 6574 4174 696d 653b 3b0a f $resetAtime;;. │ │ │ -0002e660: 0909 2020 2020 7574 696d 6520 2461 7469 .. utime $ati │ │ │ -0002e670: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, "$ta │ │ │ -0002e680: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file";. │ │ │ -0002e690: 0909 7d0a 0909 246d 6169 6e3a 3a73 7461 ..}...$main::sta │ │ │ -0002e6a0: 742d 3e69 6e63 725f 6e6f 4e61 6d65 6450 t->incr_noNamedP │ │ │ -0002e6b0: 6970 6573 2824 7569 642c 2024 6769 6429 ipes($uid, $gid) │ │ │ -0002e6c0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin │ │ │ -0002e6d0: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D' │ │ │ -0002e6e0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -0002e6f0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [" │ │ │ -0002e700: 6372 6561 7465 6420 6e61 6d65 6420 7069 created named pi │ │ │ -0002e710: 7065 203c 2474 6172 6765 7444 6972 2f24 pe <$targetDir/$ │ │ │ -0002e720: 6669 6c65 225d 290a 0909 2020 2020 6966 file"])... if │ │ │ -0002e730: 2028 2464 6562 7567 4d6f 6465 203e 3d20 ($debugMode >= │ │ │ -0002e740: 3229 3b0a 0909 2461 6b74 4669 6c65 6e61 2);...$aktFilena │ │ │ -0002e750: 6d65 2d3e 7374 6f72 654e 616d 6564 5069 me->storeNamedPi │ │ │ -0002e760: 7065 2827 2d70 6970 6527 203d 3e20 2466 pe('-pipe' => $f │ │ │ -0002e770: 696c 652c 0a09 0909 0909 2020 2020 2027 ile,...... ' │ │ │ -0002e780: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,.. │ │ │ -0002e790: 0909 0909 2020 2020 2027 2d69 6e6f 6465 .... '-inode │ │ │ -0002e7a0: 2720 3d3e 2024 696e 6f64 652c 0a09 0909 ' => $inode,.... │ │ │ -0002e7b0: 0909 2020 2020 2027 2d63 7469 6d65 2720 .. '-ctime' │ │ │ -0002e7c0: 3d3e 2024 6374 696d 652c 0a09 0909 0909 => $ctime,...... │ │ │ -0002e7d0: 2020 2020 2027 2d6d 7469 6d65 2720 3d3e '-mtime' => │ │ │ -0002e7e0: 2024 6d74 696d 652c 0a09 0909 0909 2020 $mtime,...... │ │ │ -0002e7f0: 2020 2027 2d61 7469 6d65 2720 3d3e 2024 '-atime' => $ │ │ │ -0002e800: 6174 696d 652c 0a09 0909 0909 2020 2020 atime,...... │ │ │ -0002e810: 2027 2d75 6964 2720 3d3e 2024 7569 642c '-uid' => $uid, │ │ │ -0002e820: 0a09 0909 0909 2020 2020 2027 2d67 6964 ...... '-gid │ │ │ -0002e830: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,...... │ │ │ -0002e840: 2020 2020 2027 2d6d 6f64 6527 203d 3e20 '-mode' => │ │ │ -0002e850: 246d 6f64 6529 3b0a 0909 6e65 7874 3b0a $mode);...next;. │ │ │ -0002e860: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if │ │ │ -0002e870: 2824 7479 7065 2065 7120 2753 2720 6f72 ($type eq 'S' or │ │ │ -0002e880: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -0002e890: 2024 7479 7065 2065 7120 2762 2720 6f72 $type eq 'b' or │ │ │ -0002e8a0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -0002e8b0: 2024 7479 7065 2065 7120 2763 2729 0a09 $type eq 'c').. │ │ │ -0002e8c0: 2020 2020 7b0a 0909 263a 3a6d 616b 6546 {...&::makeF │ │ │ -0002e8d0: 696c 6550 6174 6843 6163 6865 2822 2474 ilePathCache("$t │ │ │ -0002e8e0: 6172 6765 7444 6972 2f24 6669 6c65 222c argetDir/$file", │ │ │ -0002e8f0: 2024 7072 4c6f 6729 2069 6620 246c 6174 $prLog) if $lat │ │ │ -0002e900: 654c 696e 6b73 3b0a 0a09 0969 6620 2824 eLinks;....if ($ │ │ │ -0002e910: 7370 6563 6961 6c54 7970 6541 7263 6869 specialTypeArchi │ │ │ -0002e920: 7665 7220 616e 6420 2461 7263 6869 7665 ver and $archive │ │ │ -0002e930: 5479 7065 7320 3d7e 202f 702f 290a 0909 Types =~ /p/)... │ │ │ -0002e940: 7b0a 0909 2020 2020 263a 3a63 7265 6174 {... &::creat │ │ │ -0002e950: 6541 7263 6869 7665 4672 6f6d 4669 6c65 eArchiveFromFile │ │ │ -0002e960: 2824 6669 6c65 2c20 2464 6972 2c20 2474 ($file, $dir, $t │ │ │ -0002e970: 6172 6765 7444 6972 2c0a 0909 0909 0920 argetDir,...... │ │ │ -0002e980: 2020 2020 2473 7065 6369 616c 5479 7065 $specialType │ │ │ -0002e990: 4172 6368 6976 6572 2c20 2470 724c 6f67 Archiver, $prLog │ │ │ -0002e9a0: 2c0a 0909 0909 0920 2020 2020 2474 6d70 ,...... $tmp │ │ │ -0002e9b0: 6469 7229 3b0a 0909 7d0a 0909 656c 7365 dir);...}...else │ │ │ -0002e9c0: 0a09 097b 0a09 0920 2020 2024 676e 7563 ...{... $gnuc │ │ │ -0002e9d0: 7020 6f72 0a09 0909 2470 724c 6f67 2d3e p or....$prLog-> │ │ │ -0002e9e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0002e9f0: 2027 4527 2c0a 0909 0909 2020 2020 2020 'E',..... │ │ │ -0002ea00: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... │ │ │ -0002ea10: 2020 2020 5b22 6e6f 2067 6e75 6370 3a20 ["no gnucp: │ │ │ -0002ea20: 696e 7465 726e 616c 2065 7272 6f72 3a20 internal error: │ │ │ -0002ea30: 2220 2e0a 0909 0909 2020 2020 2020 2022 " ...... " │ │ │ -0002ea40: 6361 6e6e 6f74 2073 6176 6520 6669 6c65 cannot save file │ │ │ -0002ea50: 2074 7965 7320 5362 6370 2c20 2220 2e0a tyes Sbcp, " .. │ │ │ -0002ea60: 0909 0909 2020 2020 2020 2273 6574 206f .... "set o │ │ │ -0002ea70: 7074 696f 6e20 6370 4973 476e 7520 6966 ption cpIsGnu if │ │ │ -0002ea80: 2067 6e75 6370 2069 7320 7573 6564 225d gnucp is used"] │ │ │ -0002ea90: 2c0a 0909 0909 2020 2020 2020 272d 6578 ,..... '-ex │ │ │ -0002eaa0: 6974 2720 3d3e 2031 293b 0a0a 0909 2020 it' => 1);.... │ │ │ -0002eab0: 2020 6d79 2024 6370 203d 2066 6f72 6b50 my $cp = forkP │ │ │ -0002eac0: 726f 632d 3e6e 6577 2827 2d65 7865 6327 roc->new('-exec' │ │ │ -0002ead0: 203d 3e20 2467 6e75 436f 7079 2c0a 0909 => $gnuCopy,... │ │ │ -0002eae0: 0909 0920 2020 272d 7061 7261 6d27 203d ... '-param' = │ │ │ -0002eaf0: 3e20 5b40 676e 7543 6f70 7950 6172 5370 > [@gnuCopyParSp │ │ │ -0002eb00: 6563 6961 6c2c 0a09 0909 0909 0909 2224 ecial,........"$ │ │ │ -0002eb10: 6469 722f 2466 696c 6522 2c0a 0909 0909 dir/$file",..... │ │ │ -0002eb20: 0909 0922 2474 6172 6765 7444 6972 2f24 ..."$targetDir/$ │ │ │ -0002eb30: 6669 6c65 225d 2c0a 0909 0909 0920 2020 file"],...... │ │ │ -0002eb40: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => │ │ │ -0002eb50: 2224 746d 7064 6972 2f67 6e75 6370 2d22 "$tmpdir/gnucp-" │ │ │ -0002eb60: 2c0a 0909 0909 0920 2020 272d 7072 4c6f ,...... '-prLo │ │ │ -0002eb70: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ -0002eb80: 0920 2020 2024 6370 2d3e 7761 6974 2829 . $cp->wait() │ │ │ -0002eb90: 3b0a 0909 2020 2020 6d79 2024 6f75 7420 ;... my $out │ │ │ -0002eba0: 3d20 2463 702d 3e67 6574 5354 444f 5554 = $cp->getSTDOUT │ │ │ -0002ebb0: 2829 3b0a 0909 2020 2020 2470 724c 6f67 ();... $prLog │ │ │ -0002ebc0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -0002ebd0: 3d3e 2027 4527 2c0a 0909 0909 2020 272d => 'E',..... '- │ │ │ -0002ebe0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -0002ebf0: 5354 444f 5554 206f 6620 3c24 676e 7543 STDOUT of <$gnuC │ │ │ -0002ec00: 6f70 7920 4067 6e75 436f 7079 5061 7253 opy @gnuCopyParS │ │ │ -0002ec10: 7065 6369 616c 203c 2464 6972 2f24 6669 pecial <$dir/$fi │ │ │ -0002ec20: 6c65 3e20 2220 2e0a 0909 0909 2020 2022 le> " ...... " │ │ │ -0002ec30: 3c24 7461 7267 6574 4469 722f 2466 696c <$targetDir/$fil │ │ │ -0002ec40: 653e 3a22 2c20 4024 6f75 745d 290a 0909 e>:", @$out])... │ │ │ -0002ec50: 0969 6620 2840 246f 7574 203e 2030 293b .if (@$out > 0); │ │ │ -0002ec60: 0a09 0920 2020 2024 6f75 7420 3d20 2463 ... $out = $c │ │ │ -0002ec70: 702d 3e67 6574 5354 4445 5252 2829 3b0a p->getSTDERR();. │ │ │ -0002ec80: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -0002ec90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -0002eca0: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str' │ │ │ -0002ecb0: 203d 3e0a 0909 0909 2020 5b22 5354 4445 =>..... ["STDE │ │ │ -0002ecc0: 5252 206f 6620 3c24 676e 7543 6f70 7920 RR of <$gnuCopy │ │ │ -0002ecd0: 4067 6e75 436f 7079 5061 7253 7065 6369 @gnuCopyParSpeci │ │ │ -0002ece0: 616c 203c 2464 6972 2f24 6669 6c65 3e22 al <$dir/$file>" │ │ │ -0002ecf0: 202e 0a09 0909 0920 2020 223c 2474 6172 ...... "<$tar │ │ │ -0002ed00: 6765 7444 6972 2f24 6469 723e 3a22 2c20 getDir/$dir>:", │ │ │ -0002ed10: 4024 6f75 745d 290a 0909 0969 6620 2840 @$out])....if (@ │ │ │ -0002ed20: 246f 7574 203e 2030 293b 0a09 097d 0a0a $out > 0);...}.. │ │ │ -0002ed30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002ed40: 6966 2028 2470 7265 7365 7276 6550 6572 if ($preservePer │ │ │ -0002ed50: 6d73 290a 0909 7b0a 2020 2020 2020 2020 ms)...{. │ │ │ -0002ed60: 2020 2020 2020 2020 2020 2020 6368 6f77 chow │ │ │ -0002ed70: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, "$ │ │ │ -0002ed80: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ -0002ed90: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -0002eda0: 2020 2020 2020 6368 6d6f 6420 246d 6f64 chmod $mod │ │ │ -0002edb0: 652c 2022 2474 6172 6765 7444 6972 2f24 e, "$targetDir/$ │ │ │ -0002edc0: 6669 6c65 223b 0a20 2020 2020 2020 2020 file";. │ │ │ -0002edd0: 2020 2020 2020 2020 2020 2075 7469 6d65 utime │ │ │ -0002ede0: 2024 6174 696d 652c 2024 6d74 696d 652c $atime, $mtime, │ │ │ -0002edf0: 2022 2464 6972 2f24 6669 6c65 2220 6966 "$dir/$file" if │ │ │ -0002ee00: 2024 7265 7365 7441 7469 6d65 3b3b 0a20 $resetAtime;;. │ │ │ -0002ee10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002ee20: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime, │ │ │ -0002ee30: 2024 6d74 696d 652c 2022 2474 6172 6765 $mtime, "$targe │ │ │ -0002ee40: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file";. │ │ │ -0002ee50: 2020 2020 2020 2020 2020 2020 207d 0a0a }.. │ │ │ -0002ee60: 0909 246d 6169 6e3a 3a73 7461 742d 3e69 ..$main::stat->i │ │ │ -0002ee70: 6e63 725f 6e6f 536f 636b 6574 7328 2475 ncr_noSockets($u │ │ │ -0002ee80: 6964 2c20 2467 6964 2920 6966 2024 7479 id, $gid) if $ty │ │ │ -0002ee90: 7065 2065 7120 2253 223b 0a09 0924 6d61 pe eq "S";...$ma │ │ │ -0002eea0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ -0002eeb0: 6f42 6c6f 636b 4465 7628 2475 6964 2c20 oBlockDev($uid, │ │ │ -0002eec0: 2467 6964 2920 6966 2024 7479 7065 2065 $gid) if $type e │ │ │ -0002eed0: 7120 2262 223b 0a09 0924 6d61 696e 3a3a q "b";...$main:: │ │ │ -0002eee0: 7374 6174 2d3e 696e 6372 5f6e 6f43 6861 stat->incr_noCha │ │ │ -0002eef0: 7244 6576 2824 7569 642c 2024 6769 6429 rDev($uid, $gid) │ │ │ -0002ef00: 2069 6620 2474 7970 6520 6571 2022 6322 if $type eq "c" │ │ │ -0002ef10: 3b0a 0a09 0924 7072 4c6f 672d 3e70 7269 ;....$prLog->pri │ │ │ -0002ef20: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D │ │ │ -0002ef30: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -0002ef40: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ -0002ef50: 2263 7265 6174 6564 2073 7065 6369 616c "created special │ │ │ -0002ef60: 2066 696c 6520 2824 7479 7065 2920 3c24 file ($type) <$ │ │ │ -0002ef70: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ -0002ef80: 5d29 0a09 0920 2020 2069 6620 2824 6465 ])... if ($de │ │ │ -0002ef90: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);.. │ │ │ -0002efa0: 0909 2461 6b74 4669 6c65 6e61 6d65 2d3e ..$aktFilename-> │ │ │ -0002efb0: 7374 6f72 6553 7065 6369 616c 2827 2d6e storeSpecial('-n │ │ │ -0002efc0: 616d 6527 203d 3e20 2466 696c 652c 0a20 ame' => $file,. │ │ │ -0002efd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002efe0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002eff0: 2020 2020 2020 2020 2020 272d 7479 7065 '-type │ │ │ -0002f000: 2720 3d3e 2024 7479 7065 2c0a 2020 2020 ' => $type,. │ │ │ -0002f010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f020: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f030: 2020 2020 2020 2027 2d64 6576 2720 3d3e '-dev' => │ │ │ -0002f040: 2024 6465 762c 0a20 2020 2020 2020 2020 $dev,. │ │ │ -0002f050: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f060: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f070: 2020 272d 696e 6f64 6527 203d 3e20 2469 '-inode' => $i │ │ │ -0002f080: 6e6f 6465 2c0a 2020 2020 2020 2020 2020 node,. │ │ │ -0002f090: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f0a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f0b0: 2027 2d63 7469 6d65 2720 3d3e 2024 6374 '-ctime' => $ct │ │ │ -0002f0c0: 696d 652c 0a20 2020 2020 2020 2020 2020 ime,. │ │ │ -0002f0d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f0e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f0f0: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti │ │ │ -0002f100: 6d65 2c0a 2020 2020 2020 2020 2020 2020 me,. │ │ │ -0002f110: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f120: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ -0002f130: 2d61 7469 6d65 2720 3d3e 2024 6174 696d -atime' => $atim │ │ │ -0002f140: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. │ │ │ -0002f150: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f160: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -0002f170: 7569 6427 203d 3e20 2475 6964 2c0a 2020 uid' => $uid,. │ │ │ -0002f180: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f190: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f1a0: 2020 2020 2020 2020 2027 2d67 6964 2720 '-gid' │ │ │ -0002f1b0: 3d3e 2024 6769 642c 0a20 2020 2020 2020 => $gid,. │ │ │ -0002f1c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f1d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f1e0: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $ │ │ │ -0002f1f0: 6d6f 6465 293b 0a09 096e 6578 743b 0a09 mode);...next;.. │ │ │ -0002f200: 2020 2020 7d0a 0a09 2020 2020 6966 2028 }... if ( │ │ │ -0002f210: 2474 7970 6520 6571 2027 6266 2729 2020 $type eq 'bf') │ │ │ -0002f220: 2020 2320 626c 6f63 6b20 6669 6c65 0a09 # block file.. │ │ │ -0002f230: 2020 2020 7b0a 2370 7269 6e74 2022 2d30 {.#print "-0 │ │ │ -0002f240: 2e31 2d20 626c 6f63 6b46 696c 653a 203c .1- blockFile: < │ │ │ -0002f250: 2474 6172 6765 7444 6972 3e3c 2466 696c $targetDir><$fil │ │ │ -0002f260: 653e 203c 246d 6435 3e5c 6e22 3b0a 0909 e> <$md5>\n";... │ │ │ -0002f270: 246d 6169 6e3a 3a73 7461 742d 3e69 6e63 $main::stat->inc │ │ │ -0002f280: 725f 6e6f 426c 6f63 6b65 6446 696c 6573 r_noBlockedFiles │ │ │ -0002f290: 2829 3b0a 0909 6966 2028 7265 6628 246d ();...if (ref($m │ │ │ -0002f2a0: 6435 2920 6571 2027 4152 5241 5927 290a d5) eq 'ARRAY'). │ │ │ -0002f2b0: 0909 7b0a 0909 2020 2020 6d79 2028 2472 ..{... my ($r │ │ │ -0002f2c0: 756c 6542 532c 2024 7275 6c65 436f 6d70 uleBS, $ruleComp │ │ │ -0002f2d0: 7265 7373 2c20 2470 6172 616c 6c65 6c2c ress, $parallel, │ │ │ -0002f2e0: 2040 7275 6c65 5265 6164 290a 0909 093d @ruleRead)....= │ │ │ -0002f2f0: 2040 246d 6435 3b0a 0909 2020 2020 2462 @$md5;... $b │ │ │ -0002f300: 6c6f 636b 5061 7261 6c6c 656c 203d 2024 lockParallel = $ │ │ │ -0002f310: 7061 7261 6c6c 656c 3b0a 0909 2020 2020 parallel;... │ │ │ -0002f320: 2466 6966 6f42 6c6f 636b 2d3e 6164 6428 $fifoBlock->add( │ │ │ -0002f330: 272d 7661 6c75 6527 203d 3e0a 0909 0909 '-value' =>..... │ │ │ -0002f340: 2020 2020 5b27 6669 6c65 272c 2024 6469 ['file', $di │ │ │ -0002f350: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, │ │ │ -0002f360: 2467 6964 2c0a 0909 0909 2020 2020 2024 $gid,..... $ │ │ │ -0002f370: 6d6f 6465 2c20 2464 6576 2c20 2469 6e6f mode, $dev, $ino │ │ │ -0002f380: 6465 2c20 2463 7469 6d65 2c20 246d 7469 de, $ctime, $mti │ │ │ -0002f390: 6d65 2c0a 0909 0909 2020 2020 2024 6174 me,..... $at │ │ │ -0002f3a0: 696d 652c 2024 7369 7a65 2c20 2472 756c ime, $size, $rul │ │ │ -0002f3b0: 6542 532c 2024 7275 6c65 436f 6d70 7265 eBS, $ruleCompre │ │ │ -0002f3c0: 7373 2c0a 0909 0909 2020 2020 5c40 7275 ss,..... \@ru │ │ │ -0002f3d0: 6c65 5265 6164 5d29 3b0a 0909 7d0a 0909 leRead]);...}... │ │ │ -0002f3e0: 656c 7365 2020 2320 6e6f 7468 696e 6720 else # nothing │ │ │ -0002f3f0: 6861 7320 6368 616e 6765 640a 0909 7b0a has changed...{. │ │ │ -0002f400: 0909 2020 2020 263a 3a6d 616b 6546 696c .. &::makeFil │ │ │ -0002f410: 6550 6174 6843 6163 6865 2822 2474 6172 ePathCache("$tar │ │ │ -0002f420: 6765 7444 6972 2f24 6669 6c65 222c 2024 getDir/$file", $ │ │ │ -0002f430: 7072 4c6f 6729 2069 6620 246c 6174 654c prLog) if $lateL │ │ │ -0002f440: 696e 6b73 3b0a 0a09 0920 2020 206d 6b64 inks;.... mkd │ │ │ -0002f450: 6972 2022 2474 6172 6765 7444 6972 2f24 ir "$targetDir/$ │ │ │ -0002f460: 6669 6c65 222c 2030 3730 3020 6f72 0a09 file", 0700 or.. │ │ │ -0002f470: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -0002f480: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -0002f490: 0909 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -0002f4a0: 203d 3e0a 0909 0909 2020 2020 2020 5b22 =>..... [" │ │ │ -0002f4b0: 6361 6e6e 6f74 206d 6b64 6972 203c 2474 cannot mkdir <$t │ │ │ -0002f4c0: 6172 6765 7444 6972 2f24 6669 6c65 3e22 argetDir/$file>" │ │ │ -0002f4d0: 5d2c 0a09 0909 0920 2020 2020 2027 2d65 ],..... '-e │ │ │ -0002f4e0: 7869 7427 203d 3e20 3129 3b0a 0909 2020 xit' => 1);... │ │ │ -0002f4f0: 2020 246d 6169 6e3a 3a73 7461 742d 3e69 $main::stat->i │ │ │ -0002f500: 6e63 725f 6e6f 4469 7273 2824 7569 642c ncr_noDirs($uid, │ │ │ -0002f510: 2024 6769 6429 3b0a 0a09 0920 2020 206d $gid);.... m │ │ │ -0002f520: 7920 2824 782c 2024 6261 636b 7570 4469 y ($x, $backupDi │ │ │ -0002f530: 7229 3b0a 0909 2020 2020 2824 782c 2024 r);... ($x, $ │ │ │ -0002f540: 782c 2024 782c 2024 6261 636b 7570 4469 x, $x, $backupDi │ │ │ -0002f550: 722c 2024 7829 203d 0a09 0909 246f 6c64 r, $x) =....$old │ │ │ -0002f560: 4669 6c65 6e61 6d65 2d3e 6765 7446 696c Filename->getFil │ │ │ -0002f570: 656e 616d 6528 246d 6435 293b 0a0a 0909 ename($md5);.... │ │ │ -0002f580: 2020 2020 6966 2028 246c 6174 654c 696e if ($lateLin │ │ │ -0002f590: 6b73 2061 6e64 206e 6f74 0a09 0909 2864 ks and not....(d │ │ │ -0002f5a0: 6566 696e 6564 2824 6669 6c65 2920 616e efined($file) an │ │ │ -0002f5b0: 6420 6578 6973 7473 2024 666f 7263 6543 d exists $forceC │ │ │ -0002f5c0: 6f70 7943 6f6d 7072 7b24 6669 6c65 7d29 opyCompr{$file}) │ │ │ -0002f5d0: 290a 0909 2020 2020 7b0a 0909 096d 7920 )... {....my │ │ │ -0002f5e0: 2466 726f 6d20 3d20 2224 6261 636b 7570 $from = "$backup │ │ │ -0002f5f0: 4469 722f 2466 696c 6522 3b0a 0909 096d Dir/$file";....m │ │ │ -0002f600: 7920 2474 6f20 3d20 2224 7461 7267 6574 y $to = "$target │ │ │ -0002f610: 4469 722f 2466 696c 6522 3b0a 0909 096d Dir/$file";....m │ │ │ -0002f620: 7920 2468 6c20 3d20 2d31 3b0a 0909 0969 y $hl = -1;....i │ │ │ -0002f630: 6620 2824 6d61 7848 6172 644c 696e 6b73 f ($maxHardLinks │ │ │ -0002f640: 2020 3e20 3029 0a09 0909 7b0a 0909 0920 > 0)....{.... │ │ │ -0002f650: 2020 2024 686c 203d 2028 7374 6174 2822 $hl = (stat(" │ │ │ -0002f660: 2466 726f 6d2f 2462 6c6f 636b 4368 6563 $from/$blockChec │ │ │ -0002f670: 6b53 756d 4669 6c65 2e62 7a32 2229 295b kSumFile.bz2"))[ │ │ │ -0002f680: 335d 3b0a 2370 7269 6e74 2022 2d30 2e31 3];.#print "-0.1 │ │ │ -0002f690: 2e31 2d20 2466 726f 6d2f 2462 6c6f 636b .1- $from/$block │ │ │ -0002f6a0: 4368 6563 6b53 756d 4669 6c65 2e62 7a32 CheckSumFile.bz2 │ │ │ -0002f6b0: 3a20 2468 6c20 6861 7264 6c69 6e6b 7320 : $hl hardlinks │ │ │ -0002f6c0: 2824 6d61 7848 6172 644c 696e 6b73 295c ($maxHardLinks)\ │ │ │ -0002f6d0: 6e22 3b0a 0909 097d 0a23 7072 696e 7420 n";....}.#print │ │ │ -0002f6e0: 222d 302e 312e 322d 206c 696e 6b20 2466 "-0.1.2- link $f │ │ │ -0002f6f0: 726f 6d2f 2462 6c6f 636b 4368 6563 6b53 rom/$blockCheckS │ │ │ -0002f700: 756d 4669 6c65 2e62 7a32 203c 2d20 2474 umFile.bz2 <- $t │ │ │ -0002f710: 6f2f 2462 6c6f 636b 4368 6563 6b53 756d o/$blockCheckSum │ │ │ -0002f720: 4669 6c65 2e62 7a32 5c6e 223b 0a09 0909 File.bz2\n";.... │ │ │ -0002f730: 6d79 2024 686c 436f 7079 203d 2030 3b0a my $hlCopy = 0;. │ │ │ -0002f740: 0909 0969 6620 2824 686c 203c 2024 6d61 ...if ($hl < $ma │ │ │ -0002f750: 7848 6172 644c 696e 6b73 2920 2023 2062 xHardLinks) # b │ │ │ -0002f760: 656c 6f77 206e 756d 6265 7220 6f66 2061 elow number of a │ │ │ -0002f770: 6c6c 6f77 6564 2068 6172 6420 6c69 6e6b llowed hard link │ │ │ -0002f780: 730a 0909 097b 0a09 0909 2020 2020 756e s....{.... un │ │ │ -0002f790: 6c65 7373 2028 6c69 6e6b 2022 2466 726f less (link "$fro │ │ │ -0002f7a0: 6d2f 2462 6c6f 636b 4368 6563 6b53 756d m/$blockCheckSum │ │ │ -0002f7b0: 4669 6c65 2e62 7a32 222c 0a09 0909 0920 File.bz2",..... │ │ │ -0002f7c0: 2020 2022 2474 6f2f 2462 6c6f 636b 4368 "$to/$blockCh │ │ │ -0002f7d0: 6563 6b53 756d 4669 6c65 2e62 7a32 2229 eckSumFile.bz2") │ │ │ -0002f7e0: 0a09 0909 2020 2020 7b0a 0909 0909 2468 .... {.....$h │ │ │ -0002f7f0: 6c43 6f70 7920 3d20 313b 2020 2023 2074 lCopy = 1; # t │ │ │ -0002f800: 7279 2074 6f20 6861 7264 206c 696e 6b20 ry to hard link │ │ │ -0002f810: 7761 7320 6e6f 7420 7375 6363 6573 7366 was not successf │ │ │ -0002f820: 756c 6c0a 0909 0920 2020 207d 0a09 0909 ull.... }.... │ │ │ -0002f830: 7d0a 0909 0965 6c73 6520 2020 2320 7265 }....else # re │ │ │ -0002f840: 6163 6865 6420 6e75 6d62 6572 206f 6620 ached number of │ │ │ -0002f850: 616c 6c6f 7765 6420 6861 7264 206c 696e allowed hard lin │ │ │ -0002f860: 6b73 0a09 0909 7b0a 0909 0920 2020 2024 ks....{.... $ │ │ │ -0002f870: 686c 436f 7079 203d 2031 3b20 2020 2023 hlCopy = 1; # │ │ │ -0002f880: 2064 6f6e 2774 2074 7279 2074 6f20 6861 don't try to ha │ │ │ -0002f890: 7264 206c 696e 6b20 2d3e 2063 6f70 7920 rd link -> copy │ │ │ -0002f8a0: 6669 6c65 0a09 0909 7d0a 2309 0909 756e file....}.#...un │ │ │ -0002f8b0: 6c65 7373 2028 6c69 6e6b 2022 2466 726f less (link "$fro │ │ │ -0002f8c0: 6d2f 2462 6c6f 636b 4368 6563 6b53 756d m/$blockCheckSum │ │ │ -0002f8d0: 4669 6c65 2e62 7a32 222c 0a23 0909 0909 File.bz2",.#.... │ │ │ -0002f8e0: 2224 746f 2f24 626c 6f63 6b43 6865 636b "$to/$blockCheck │ │ │ -0002f8f0: 5375 6d46 696c 652e 627a 3222 290a 0a20 SumFile.bz2").. │ │ │ -0002f900: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0002f910: 2020 2020 2020 2069 6620 2824 686c 436f if ($hlCo │ │ │ -0002f920: 7079 290a 0909 097b 0a09 0909 2020 2020 py)....{.... │ │ │ -0002f930: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -0002f940: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -0002f950: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ -0002f960: 0909 0909 2020 5b22 6361 6e6e 6f74 206c .... ["cannot l │ │ │ -0002f970: 696e 6b2f 636f 7079 2022 202e 0a09 0909 ink/copy " ..... │ │ │ -0002f980: 0909 2020 2022 3c24 6672 6f6d 2f24 626c .. "<$from/$bl │ │ │ -0002f990: 6f63 6b43 6865 636b 5375 6d46 696c 652e ockCheckSumFile. │ │ │ -0002f9a0: 627a 323e 222e 0a09 0909 0909 2020 2022 bz2>"....... " │ │ │ -0002f9b0: 203c 2474 6f2f 2462 6c6f 636b 4368 6563 <$to/$blockChec │ │ │ -0002f9c0: 6b53 756d 4669 6c65 2e62 7a32 3e22 5d2c kSumFile.bz2>"], │ │ │ -0002f9d0: 0a09 0909 0909 2020 272d 6578 6974 2720 ...... '-exit' │ │ │ -0002f9e0: 3d3e 2031 290a 0909 0909 756e 6c65 7373 => 1).....unless │ │ │ -0002f9f0: 2028 263a 3a63 6f70 7946 696c 6528 2224 (&::copyFile("$ │ │ │ -0002fa00: 6672 6f6d 2f24 626c 6f63 6b43 6865 636b from/$blockCheck │ │ │ -0002fa10: 5375 6d46 696c 652e 627a 3222 2c0a 0909 SumFile.bz2",... │ │ │ -0002fa20: 0909 0909 2020 2020 2224 746f 2f24 626c .... "$to/$bl │ │ │ -0002fa30: 6f63 6b43 6865 636b 5375 6d46 696c 652e ockCheckSumFile. │ │ │ -0002fa40: 627a 3222 2c0a 0909 0909 0909 2020 2020 bz2",....... │ │ │ -0002fa50: 2470 724c 6f67 2929 0a0a 0909 097d 0a09 $prLog)).....}.. │ │ │ -0002fa60: 0909 2466 726f 6d20 3d20 3a3a 7265 6c50 ..$from = ::relP │ │ │ -0002fa70: 6174 6828 2474 6172 6765 7444 6972 2c20 ath($targetDir, │ │ │ -0002fa80: 2466 726f 6d29 3b0a 0909 0924 6672 6f6d $from);....$from │ │ │ -0002fa90: 203d 7e20 732f 5c6e 2f5c 302f 6f67 3b0a =~ s/\n/\0/og;. │ │ │ -0002faa0: 0909 0924 746f 203d 203a 3a72 656c 5061 ...$to = ::relPa │ │ │ -0002fab0: 7468 2824 7461 7267 6574 4469 722c 2024 th($targetDir, $ │ │ │ -0002fac0: 746f 293b 0a09 0909 2474 6f20 3d7e 2073 to);....$to =~ s │ │ │ -0002fad0: 2f5c 6e2f 5c30 2f6f 673b 0a09 0909 2477 /\n/\0/og;....$w │ │ │ -0002fae0: 724c 6174 654c 696e 6b2d 3e70 7269 6e74 rLateLink->print │ │ │ -0002faf0: 2822 6c69 6e6b 626c 6f63 6b5c 6e24 6672 ("linkblock\n$fr │ │ │ -0002fb00: 6f6d 5c6e 2474 6f5c 6e22 293b 0a09 0909 om\n$to\n");.... │ │ │ -0002fb10: 246d 6169 6e3a 3a73 7461 742d 3e69 6e63 $main::stat->inc │ │ │ -0002fb20: 725f 6e6f 4c61 7465 4c69 6e6b 7328 2475 r_noLateLinks($u │ │ │ -0002fb30: 6964 2c20 2467 6964 293b 0a09 0920 2020 id, $gid);... │ │ │ -0002fb40: 207d 0a09 0920 2020 2065 6c73 650a 0909 }... else... │ │ │ -0002fb50: 2020 2020 7b0a 2370 7269 6e74 2022 2d30 {.#print "-0 │ │ │ -0002fb60: 2e32 2068 6172 6420 6c69 6e6b 2024 6261 .2 hard link $ba │ │ │ -0002fb70: 636b 7570 4469 722f 2466 696c 6520 2474 ckupDir/$file $t │ │ │ -0002fb80: 6172 6765 7444 6972 2f24 6669 6c65 5c6e argetDir/$file\n │ │ │ -0002fb90: 223b 0a09 0909 263a 3a68 6172 644c 696e ";....&::hardLin │ │ │ -0002fba0: 6b44 6972 2822 2462 6163 6b75 7044 6972 kDir("$backupDir │ │ │ -0002fbb0: 2f24 6669 6c65 222c 0a09 0909 0920 2020 /$file",..... │ │ │ -0002fbc0: 2020 2020 2224 7461 7267 6574 4469 722f "$targetDir/ │ │ │ -0002fbd0: 2466 696c 6522 2c20 272e 2a27 2c0a 0909 $file", '.*',... │ │ │ -0002fbe0: 0909 2020 2020 2020 2024 7569 642c 2024 .. $uid, $ │ │ │ -0002fbf0: 6769 642c 2024 6d6f 6465 2c20 2470 724c gid, $mode, $prL │ │ │ -0002fc00: 6f67 2c0a 0909 0909 2020 2020 2020 2024 og,..... $ │ │ │ -0002fc10: 6d61 7848 6172 644c 696e 6b73 2c0a 0909 maxHardLinks,... │ │ │ -0002fc20: 0909 2020 2020 2020 2022 2e6d 6435 426c .. ".md5Bl │ │ │ -0002fc30: 6f63 6b43 6865 636b 5375 6d73 2e62 7a32 ockCheckSums.bz2 │ │ │ -0002fc40: 2229 3b0a 0909 2020 2020 7d0a 0909 2020 ");... }... │ │ │ -0002fc50: 2020 6d79 2024 626c 6f63 6b4d 4435 4669 my $blockMD5Fi │ │ │ -0002fc60: 6c65 203d 2022 2474 6172 6765 7444 6972 le = "$targetDir │ │ │ -0002fc70: 2f24 6669 6c65 2f24 626c 6f63 6b43 6865 /$file/$blockChe │ │ │ -0002fc80: 636b 5375 6d46 696c 652e 627a 3222 3b0a ckSumFile.bz2";. │ │ │ -0002fc90: 0909 2020 2020 6d79 2024 626c 6f63 6b20 .. my $block │ │ │ -0002fca0: 3d20 7069 7065 4672 6f6d 466f 726b 2d3e = pipeFromFork-> │ │ │ -0002fcb0: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => ' │ │ │ -0002fcc0: 627a 6970 3227 2c0a 0909 0909 0909 2020 bzip2',....... │ │ │ -0002fcd0: 272d 7061 7261 6d27 203d 3e20 5b27 2d64 '-param' => ['-d │ │ │ -0002fce0: 275d 2c0a 0909 0909 0909 2020 272d 7374 '],....... '-st │ │ │ -0002fcf0: 6469 6e27 203d 3e20 2462 6c6f 636b 4d44 din' => $blockMD │ │ │ -0002fd00: 3546 696c 652c 0a09 0909 0909 0920 2027 5File,....... ' │ │ │ -0002fd10: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>.. │ │ │ -0002fd20: 0909 0909 0920 2022 2474 6d70 6469 722f ..... "$tmpdir/ │ │ │ -0002fd30: 7374 6275 5069 7065 4672 6f6d 3131 2d22 stbuPipeFrom11-" │ │ │ -0002fd40: 2c0a 0909 0909 0909 2020 272d 7072 4c6f ,....... '-prLo │ │ │ -0002fd50: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ -0002fd60: 0920 2020 206d 7920 246c 3b0a 0909 2020 . my $l;... │ │ │ -0002fd70: 2020 7768 696c 6520 2824 6c20 3d20 2462 while ($l = $b │ │ │ -0002fd80: 6c6f 636b 2d3e 7265 6164 2829 290a 0909 lock->read())... │ │ │ -0002fd90: 2020 2020 7b0a 0909 0963 686f 7020 246c {....chop $l │ │ │ -0002fda0: 3b0a 0909 096d 7920 2824 626c 6f63 6b4d ;....my ($blockM │ │ │ -0002fdb0: 4435 2c20 2463 6f6d 7072 2c20 2462 6c6f D5, $compr, $blo │ │ │ -0002fdc0: 636b 4669 6c65 6e61 6d65 290a 0909 0920 ckFilename).... │ │ │ -0002fdd0: 2020 203d 2073 706c 6974 282f 5c73 2f2c = split(/\s/, │ │ │ -0002fde0: 2024 6c2c 2033 293b 0a23 7072 696e 7420 $l, 3);.#print │ │ │ -0002fdf0: 2262 6c6f 636b 4d44 3520 3d20 2462 6c6f "blockMD5 = $blo │ │ │ -0002fe00: 636b 4d44 352c 2063 6f6d 7072 203d 2024 ckMD5, compr = $ │ │ │ -0002fe10: 636f 6d70 722c 2062 6c6f 636b 4669 6c65 compr, blockFile │ │ │ -0002fe20: 6e61 6d65 203d 2024 626c 6f63 6b46 696c name = $blockFil │ │ │ -0002fe30: 656e 616d 655c 6e22 3b0a 0909 2020 2020 ename\n";... │ │ │ -0002fe40: 7d0a 0909 2020 2020 6d79 2024 6f75 7420 }... my $out │ │ │ -0002fe50: 3d20 2462 6c6f 636b 2d3e 6765 7453 5444 = $block->getSTD │ │ │ -0002fe60: 4552 5228 293b 0a09 0920 2020 2069 6620 ERR();... if │ │ │ -0002fe70: 2840 246f 7574 290a 0909 2020 2020 7b0a (@$out)... {. │ │ │ -0002fe80: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -0002fe90: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -0002fea0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str │ │ │ -0002feb0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [ │ │ │ -0002fec0: 2272 6561 6469 6e67 2066 726f 6d20 2462 "reading from $b │ │ │ -0002fed0: 6c6f 636b 4d44 3546 696c 6520 6765 6e65 lockMD5File gene │ │ │ -0002fee0: 7261 7465 6422 2c0a 0909 0909 2020 2020 rated",..... │ │ │ -0002fef0: 2020 2040 246f 7574 5d29 3b0a 0909 0972 @$out]);....r │ │ │ -0002ff00: 6574 7572 6e20 303b 0a09 0920 2020 207d eturn 0;... } │ │ │ -0002ff10: 0a09 0920 2020 2024 626c 6f63 6b2d 3e63 ... $block->c │ │ │ -0002ff20: 6c6f 7365 2829 3b0a 0a09 0920 2020 2069 lose();.... i │ │ │ -0002ff30: 6620 2824 7072 6573 6572 7665 5065 726d f ($preservePerm │ │ │ -0002ff40: 7329 0a09 0920 2020 207b 0a09 0909 6368 s)... {....ch │ │ │ -0002ff50: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ -0002ff60: 2224 7461 7267 6574 4469 722f 2466 696c "$targetDir/$fil │ │ │ -0002ff70: 6522 3b0a 0909 096d 7920 246d 203d 2024 e";....my $m = $ │ │ │ -0002ff80: 6d6f 6465 3b0a 0909 0924 6d20 263d 2030 mode;....$m &= 0 │ │ │ -0002ff90: 3737 373b 2020 2020 2320 7374 7269 7020 777; # strip │ │ │ -0002ffa0: 7370 6563 6961 6c20 7065 726d 6973 7369 special permissi │ │ │ -0002ffb0: 6f6e 730a 0909 0924 6d20 7c3d 2030 3131 ons....$m |= 011 │ │ │ -0002ffc0: 313b 2020 2020 2320 6164 6420 6469 7265 1; # add dire │ │ │ -0002ffd0: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission │ │ │ -0002ffe0: 730a 0909 0963 686d 6f64 2024 6d2c 2022 s....chmod $m, " │ │ │ -0002fff0: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -00030000: 223b 0a09 0909 7574 696d 6520 2461 7469 ";....utime $ati │ │ │ -00030010: 6d65 2c20 246d 7469 6d65 2c20 2244 6972 me, $mtime, "Dir │ │ │ -00030020: 2f24 6669 6c65 2220 6966 2024 7265 7365 /$file" if $rese │ │ │ -00030030: 7441 7469 6d65 3b3b 0a09 0909 7574 696d tAtime;;....utim │ │ │ -00030040: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ -00030050: 2c20 2224 7461 7267 6574 4469 722f 2466 , "$targetDir/$f │ │ │ -00030060: 696c 6522 3b0a 0909 2020 2020 7d0a 0a09 ile";... }... │ │ │ -00030070: 0920 2020 2024 616b 7446 696c 656e 616d . $aktFilenam │ │ │ -00030080: 652d 3e73 746f 7265 2827 2d66 696c 656e e->store('-filen │ │ │ -00030090: 616d 6527 203d 3e20 2466 696c 652c 2320 ame' => $file,# │ │ │ -000300a0: 7370 6569 6368 6572 7420 696e 2064 626d speichert in dbm │ │ │ -000300b0: 0a09 0909 0909 272d 6d64 3573 756d 2720 ......'-md5sum' │ │ │ -000300c0: 3d3e 2024 6d64 352c 2020 2023 202e 6d64 => $md5, # .md │ │ │ -000300d0: 3573 756d 2d44 6174 6569 0a09 0909 0909 5sum-Datei...... │ │ │ -000300e0: 272d 636f 6d70 7227 203d 3e20 2762 272c '-compr' => 'b', │ │ │ -000300f0: 0a09 0909 0909 272d 6465 7627 203d 3e20 ......'-dev' => │ │ │ -00030100: 2464 6576 2c0a 0909 0909 0927 2d69 6e6f $dev,......'-ino │ │ │ -00030110: 6465 2720 3d3e 2024 696e 6f64 652c 0a09 de' => $inode,.. │ │ │ -00030120: 0909 0909 272d 696e 6f64 6542 6163 6b75 ....'-inodeBacku │ │ │ -00030130: 7027 203d 3e20 302c 0a09 0909 0909 272d p' => 0,......'- │ │ │ -00030140: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ -00030150: 2c0a 0909 0909 0927 2d6d 7469 6d65 2720 ,......'-mtime' │ │ │ -00030160: 3d3e 2024 6d74 696d 652c 0a09 0909 0909 => $mtime,...... │ │ │ -00030170: 272d 6d74 696d 6527 203d 3e20 246d 7469 '-mtime' => $mti │ │ │ -00030180: 6d65 2c0a 0909 0909 0927 2d61 7469 6d65 me,......'-atime │ │ │ -00030190: 2720 3d3e 2024 6174 696d 652c 0a09 0909 ' => $atime,.... │ │ │ -000301a0: 0909 272d 7369 7a65 2720 3d3e 2024 7369 ..'-size' => $si │ │ │ -000301b0: 7a65 2c0a 0909 0909 0927 2d75 6964 2720 ze,......'-uid' │ │ │ -000301c0: 3d3e 2024 7569 642c 0a09 0909 0909 272d => $uid,......'- │ │ │ -000301d0: 6769 6427 203d 3e20 2467 6964 2c0a 0909 gid' => $gid,... │ │ │ -000301e0: 0909 0927 2d6d 6f64 6527 203d 3e20 246d ...'-mode' => $m │ │ │ -000301f0: 6f64 6529 3b0a 0909 7d0a 0909 6e65 7874 ode);...}...next │ │ │ -00030200: 3b0a 0a09 2020 2020 7d0a 0a09 2020 2020 ;... }... │ │ │ -00030210: 230a 0920 2020 2023 2028 2474 7970 6520 #.. # ($type │ │ │ -00030220: 6571 2027 6627 2920 2d3e 206e 6f72 6d61 eq 'f') -> norma │ │ │ -00030230: 6c20 6669 6c65 0a09 2020 2020 230a 0920 l file.. #.. │ │ │ -00030240: 2020 2024 6d61 696e 3a3a 7374 6174 2d3e $main::stat-> │ │ │ -00030250: 6164 6453 756d 4f72 6967 4669 6c65 7328 addSumOrigFiles( │ │ │ -00030260: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi │ │ │ -00030270: 6429 3b0a 0a09 2020 2020 6d79 2028 2463 d);... my ($c │ │ │ -00030280: 6f6d 7072 4f6c 642c 2024 6c69 6e6b 4669 omprOld, $linkFi │ │ │ -00030290: 6c65 2c20 246e 6577 4669 6c65 2c20 246f le, $newFile, $o │ │ │ -000302a0: 6c64 4669 6c65 293b 0a09 2020 2020 6d79 ldFile);.. my │ │ │ -000302b0: 2028 2469 6e6f 6465 4261 636b 7570 2c20 ($inodeBackup, │ │ │ -000302c0: 2462 6163 6b75 7044 6972 496e 6465 782c $backupDirIndex, │ │ │ -000302d0: 2024 6261 636b 7570 4469 7229 3b0a 0920 $backupDir);.. │ │ │ -000302e0: 2020 206d 7920 2469 6e74 6572 6e61 6c4f my $internalO │ │ │ -000302f0: 6c64 3b0a 0920 2020 2069 6620 2824 7479 ld;.. if ($ty │ │ │ -00030300: 7065 2065 7120 2766 6e65 7727 2920 2020 pe eq 'fnew') │ │ │ -00030310: 2020 2320 7072 6576 696f 7573 2062 6163 # previous bac │ │ │ -00030320: 6b75 7020 7769 7468 2074 6869 730a 0920 kup with this.. │ │ │ -00030330: 2020 207b 2020 2020 2020 2020 2020 2020 { │ │ │ -00030340: 2020 2020 2020 2020 2020 2020 2320 6669 # fi │ │ │ -00030350: 6c65 2077 6173 2064 6f6e 6520 6173 2062 le was done as b │ │ │ -00030360: 6c6f 636b 6564 2066 696c 652c 0a09 0924 locked file,...$ │ │ │ -00030370: 6c69 6e6b 4669 6c65 203d 2075 6e64 6566 linkFile = undef │ │ │ -00030380: 3b20 2020 2320 736f 2066 6f72 6365 2063 ; # so force c │ │ │ -00030390: 6f6d 7072 6573 7320 6f72 2063 6f70 790a ompress or copy. │ │ │ -000303a0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ -000303b0: 0a09 2020 2020 7b0a 0909 2320 6a65 747a .. {...# jetz │ │ │ -000303c0: 7420 696e 2044 424d 2d46 696c 6573 206e t in DBM-Files n │ │ │ -000303d0: 6163 6873 6568 656e 2075 6e64 206c 696e achsehen und lin │ │ │ -000303e0: 6b65 6e0a 0909 6966 2028 2828 2469 6e6f ken...if ((($ino │ │ │ -000303f0: 6465 4261 636b 7570 2c20 2463 6f6d 7072 deBackup, $compr │ │ │ -00030400: 4f6c 642c 2024 6261 636b 7570 4469 7249 Old, $backupDirI │ │ │ -00030410: 6e64 6578 2c0a 0909 2020 2020 2020 2462 ndex,... $b │ │ │ -00030420: 6163 6b75 7044 6972 2c20 246c 696e 6b46 ackupDir, $linkF │ │ │ -00030430: 696c 6529 203d 0a09 0920 2020 2020 246f ile) =... $o │ │ │ -00030440: 6c64 4669 6c65 6e61 6d65 2d3e 6765 7446 ldFilename->getF │ │ │ -00030450: 696c 656e 616d 6528 246d 6435 2929 203d ilename($md5)) = │ │ │ -00030460: 3d20 3529 0a09 097b 0a23 7072 696e 7420 = 5)...{.#print │ │ │ -00030470: 222d 302e 382d 3c62 6163 6b75 7044 6972 "-0.8-
  • \n";... if │ │ │ -000304d0: 2824 6261 636b 7570 4469 7249 6e64 6578 ($backupDirIndex │ │ │ -000304e0: 2021 3d20 3129 2020 2320 6964 656e 7469 != 1) # identi │ │ │ -000304f0: 6361 6c20 6669 6c65 2069 7320 696e 2061 cal file is in a │ │ │ -00030500: 6e6f 7468 6572 2073 6572 6965 730a 0909 nother series... │ │ │ -00030510: 2020 2020 7b20 2020 2020 2020 2020 2020 { │ │ │ -00030520: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00030530: 202d 2d3e 2072 6563 616c 6320 6d64 3520 --> recalc md5 │ │ │ -00030540: 7375 6d0a 2370 7269 6e74 2022 2d30 2e39 sum.#print "-0.9 │ │ │ -00030550: 2d24 6d61 696e 3a3a 736f 7572 6365 4469 -$main::sourceDi │ │ │ -00030560: 722f 2466 696c 652d 5c6e 223b 0a09 0909 r/$file-\n";.... │ │ │ -00030570: 246d 6435 203d 2026 3a3a 6361 6c63 4d44 $md5 = &::calcMD │ │ │ -00030580: 3528 2224 6d61 696e 3a3a 736f 7572 6365 5("$main::source │ │ │ -00030590: 4469 722f 2466 696c 6522 2c20 2470 724c Dir/$file", $prL │ │ │ -000305a0: 6f67 293b 0a09 0909 246d 6169 6e3a 3a73 og);....$main::s │ │ │ -000305b0: 7461 742d 3e61 6464 5f6e 6f4d 4435 6564 tat->add_noMD5ed │ │ │ -000305c0: 4669 6c65 7328 3129 3b0a 0909 0975 6e6c Files(1);....unl │ │ │ -000305d0: 6573 7320 2824 6d64 3529 0a09 0909 7b0a ess ($md5)....{. │ │ │ -000305e0: 0909 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -000305f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00030600: 2757 272c 0a09 0909 0909 2020 272d 7374 'W',...... '-st │ │ │ -00030610: 7227 203d 3e0a 0909 0920 205b 2266 696c r' =>.... ["fil │ │ │ -00030620: 6520 3c24 6d61 696e 3a3a 736f 7572 6365 e <$main::source │ │ │ -00030630: 4469 722f 2466 696c 653e 2064 656c 6574 Dir/$file> delet │ │ │ -00030640: 6564 2064 7572 696e 6720 6261 636b 7570 ed during backup │ │ │ -00030650: 2028 3629 225d 290a 0909 0909 756e 6c65 (6)"]).....unle │ │ │ -00030660: 7373 2065 7869 7374 7320 2424 7375 7070 ss exists $$supp │ │ │ -00030670: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ -00030680: 6543 6861 6e67 6527 7d3b 0a09 0909 2020 eChange'};.... │ │ │ -00030690: 2020 6e65 7874 3b0a 0909 097d 0a09 0920 next;....}... │ │ │ -000306a0: 2020 207d 0a0a 0909 2020 2020 246e 6577 }.... $new │ │ │ -000306b0: 4669 6c65 203d 2022 2474 6172 6765 7444 File = "$targetD │ │ │ -000306c0: 6972 2f24 6669 6c65 223b 0a09 0920 2020 ir/$file";... │ │ │ -000306d0: 2024 6f6c 6446 696c 6520 3d20 2224 6261 $oldFile = "$ba │ │ │ -000306e0: 636b 7570 4469 722f 246c 696e 6b46 696c ckupDir/$linkFil │ │ │ -000306f0: 6522 3b0a 0909 2020 2020 2469 6e74 6572 e";... $inter │ │ │ -00030700: 6e61 6c4f 6c64 203d 2028 2462 6163 6b75 nalOld = ($backu │ │ │ -00030710: 7044 6972 496e 6465 7820 3d3d 2030 2920 pDirIndex == 0) │ │ │ -00030720: 3f0a 0909 0927 696e 7465 726e 616c 2720 ?....'internal' │ │ │ -00030730: 3a20 276f 6c64 273b 0a23 7072 696e 7420 : 'old';.#print │ │ │ -00030740: 222d 312d 2024 6e65 7746 696c 6520 246f "-1- $newFile $o │ │ │ -00030750: 6c64 4669 6c65 5c6e 223b 0a23 7072 696e ldFile\n";.#prin │ │ │ -00030760: 7420 2224 7461 7267 6574 4469 7228 2466 t "$targetDir($f │ │ │ -00030770: 696c 6529 2024 6261 636b 7570 4469 7228 ile) $backupDir( │ │ │ -00030780: 246c 696e 6b46 696c 6529 2024 6261 636b $linkFile) $back │ │ │ -00030790: 7570 4469 7249 6e64 6578 5c6e 223b 0a09 upDirIndex\n";.. │ │ │ -000307a0: 0920 2020 206d 7920 2824 782c 2024 6f6c . my ($x, $ol │ │ │ -000307b0: 6453 697a 6529 3b0a 0909 2020 2020 6966 dSize);... if │ │ │ -000307c0: 2028 2462 6163 6b75 7044 6972 496e 6465 ($backupDirInde │ │ │ -000307d0: 7820 3d3d 2030 2920 2023 2066 6972 7374 x == 0) # first │ │ │ -000307e0: 206f 6363 7572 7265 6e63 650a 0909 2020 occurrence... │ │ │ -000307f0: 2020 7b20 2020 2020 2020 2020 2020 2020 { │ │ │ -00030800: 2020 2020 2020 2020 2020 2020 2023 2069 # i │ │ │ -00030810: 6e20 736f 7572 6365 4469 720a 2370 7269 n sourceDir.#pri │ │ │ -00030820: 6e74 2022 312e 325c 6e22 3b0a 0909 0969 nt "1.2\n";....i │ │ │ -00030830: 6620 282d 6520 2224 6d61 696e 3a3a 736f f (-e "$main::so │ │ │ -00030840: 7572 6365 4469 722f 246c 696e 6b46 696c urceDir/$linkFil │ │ │ -00030850: 6522 290a 0909 097b 0a09 0909 2020 2020 e")....{.... │ │ │ -00030860: 246f 6c64 5369 7a65 203d 2028 7374 6174 $oldSize = (stat │ │ │ -00030870: 2822 246d 6169 6e3a 3a73 6f75 7263 6544 ("$main::sourceD │ │ │ -00030880: 6972 2f24 6c69 6e6b 4669 6c65 2229 295b ir/$linkFile"))[ │ │ │ -00030890: 375d 3b0a 2370 7269 6e74 2022 312e 335c 7];.#print "1.3\ │ │ │ -000308a0: 6e22 3b0a 0909 097d 0a09 0909 656c 7365 n";....}....else │ │ │ -000308b0: 0a09 0909 7b0a 0909 0920 2020 2024 6f6c ....{.... $ol │ │ │ -000308c0: 6453 697a 6520 3d20 2d31 3b0a 2370 7269 dSize = -1;.#pri │ │ │ -000308d0: 6e74 2022 312e 345c 6e22 3b0a 0909 097d nt "1.4\n";....} │ │ │ -000308e0: 0a09 0920 2020 207d 0a23 0909 2020 2020 ... }.#.. │ │ │ -000308f0: 656c 7369 6620 2824 6261 636b 7570 4469 elsif ($backupDi │ │ │ -00030900: 7249 6e64 6578 2021 3d20 3129 2020 2020 rIndex != 1) │ │ │ -00030910: 2320 6669 6c65 2066 6f75 6e64 2069 6e20 # file found in │ │ │ -00030920: 6f74 6865 7220 6261 636b 7570 2073 6572 other backup ser │ │ │ -00030930: 6965 730a 2309 0920 2020 207b 0a23 0909 ies.#.. {.#.. │ │ │ -00030940: 0924 6c69 6e6b 4669 6c65 203d 2075 6e64 .$linkFile = und │ │ │ -00030950: 6566 3b0a 2309 0909 246f 6c64 5369 7a65 ef;.#...$oldSize │ │ │ -00030960: 203d 202d 313b 0a23 7072 696e 7420 2231 = -1;.#print "1 │ │ │ -00030970: 2e31 5c6e 223b 0a23 0909 2020 2020 7d0a .1\n";.#.. }. │ │ │ -00030980: 0909 2020 2020 656c 7365 0a09 0920 2020 .. else... │ │ │ -00030990: 207b 0a23 7072 696e 7420 2231 2e35 5c6e {.#print "1.5\n │ │ │ -000309a0: 223b 0a09 0909 2824 782c 2024 782c 2024 ";....($x, $x, $ │ │ │ -000309b0: 782c 2024 6f6c 6453 697a 652c 2024 7829 x, $oldSize, $x) │ │ │ -000309c0: 203d 0a09 0909 2020 2020 246f 6c64 4669 =.... $oldFi │ │ │ -000309d0: 6c65 6e61 6d65 2d3e 6765 7449 6e6f 6465 lename->getInode │ │ │ -000309e0: 6261 636b 7570 436f 6d70 7243 7469 6d65 backupComprCtime │ │ │ -000309f0: 4d74 696d 6553 697a 654d 4435 2824 6c69 MtimeSizeMD5($li │ │ │ -00030a00: 6e6b 4669 6c65 293b 0a09 0920 2020 207d nkFile);... } │ │ │ -00030a10: 0a09 0920 2020 2069 6620 2824 6f6c 6453 ... if ($oldS │ │ │ -00030a20: 697a 6520 213d 2024 7369 7a65 2061 6e64 ize != $size and │ │ │ -00030a30: 2024 6f6c 6453 697a 6520 3e20 2d31 290a $oldSize > -1). │ │ │ -00030a40: 0909 2020 2020 7b0a 0909 096d 7920 2463 .. {....my $c │ │ │ -00030a50: 6f6d 6d65 6e74 203d 2024 636f 6d70 724f omment = $comprO │ │ │ -00030a60: 6c64 2065 7120 2775 273f 2027 2720 3a0a ld eq 'u'? '' :. │ │ │ -00030a70: 0909 0920 2020 2027 2028 7769 7468 2075 ... ' (with u │ │ │ -00030a80: 6e63 6f6d 7072 6573 7365 6420 6669 6c65 ncompressed file │ │ │ -00030a90: 7320 6672 6f6d 2062 6163 6b75 7029 273b s from backup)'; │ │ │ -00030aa0: 0a09 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin │ │ │ -00030ab0: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ -00030ac0: 2c0a 0909 0909 2020 2020 2020 272d 7374 ,..... '-st │ │ │ -00030ad0: 7227 203d 3e0a 0909 0909 2020 2020 2020 r' =>..... │ │ │ -00030ae0: 5b22 706f 7373 6962 6c65 2068 6173 6820 ["possible hash │ │ │ -00030af0: 636f 6c6c 6973 696f 6e20 6265 7477 6565 collision betwee │ │ │ -00030b00: 6e22 2c0a 0909 0909 2020 2020 2020 223c n",..... "< │ │ │ -00030b10: 246f 6c64 4669 6c65 3e20 2873 697a 6520 $oldFile> (size │ │ │ -00030b20: 3d20 246f 6c64 5369 7a65 2920 616e 6422 = $oldSize) and" │ │ │ -00030b30: 2c0a 0909 0909 2020 2020 2020 223c 246e ,..... "<$n │ │ │ -00030b40: 6577 4669 6c65 3e20 2873 697a 6520 3d20 ewFile> (size = │ │ │ -00030b50: 2473 697a 6529 222c 0a09 0909 0920 2020 $size)",..... │ │ │ -00030b60: 2020 2020 226e 6f74 206c 696e 6b65 642c "not linked, │ │ │ -00030b70: 2063 6865 636b 206d 6435 2073 756d 7324 check md5 sums$ │ │ │ -00030b80: 636f 6d6d 656e 7422 5d29 0a09 0909 2020 comment"]).... │ │ │ -00030b90: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists │ │ │ -00030ba0: 2424 7375 7070 7265 7373 5761 726e 696e $$suppressWarnin │ │ │ -00030bb0: 677b 2768 6173 6843 6f6c 6c69 7369 6f6e g{'hashCollision │ │ │ -00030bc0: 277d 3b0a 0909 0924 6c69 6e6b 4669 6c65 '};....$linkFile │ │ │ -00030bd0: 203d 2075 6e64 6566 3b20 2020 2320 646f = undef; # do │ │ │ -00030be0: 206e 6f74 206c 696e 6b0a 0909 2020 2020 not link... │ │ │ -00030bf0: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else │ │ │ -00030c00: 2020 2020 2020 2020 2023 2044 6174 6569 # Datei │ │ │ -00030c10: 2069 7374 206e 6f63 6820 6e69 6368 7420 ist noch nicht │ │ │ -00030c20: 6265 6b61 6e6e 740a 0909 7b0a 0909 2020 bekannt...{... │ │ │ -00030c30: 2020 246c 696e 6b46 696c 6520 3d20 756e $linkFile = un │ │ │ -00030c40: 6465 663b 0a09 097d 0a09 2020 2020 7d0a def;...}.. }. │ │ │ -00030c50: 0a23 7072 696e 7420 222d 2d2d 2d2d 2d2d .#print "------- │ │ │ -00030c60: 2d2d 2d2d 2d2d 2024 6469 722f 2466 696c ------ $dir/$fil │ │ │ -00030c70: 6524 706f 7374 6669 785c 6e22 3b0a 2020 e$postfix\n";. │ │ │ -00030c80: 2020 2020 2020 2020 2020 6966 2028 246c if ($l │ │ │ -00030c90: 696e 6b46 696c 6520 616e 640a 2020 2020 inkFile and. │ │ │ -00030ca0: 2020 2020 2020 2020 2020 2020 2463 6f6d $com │ │ │ -00030cb0: 7072 4f6c 6420 6571 2027 6327 2061 6e64 prOld eq 'c' and │ │ │ -00030cc0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00030cd0: 202d 6520 2224 6469 722f 2466 696c 6524 -e "$dir/$file$ │ │ │ -00030ce0: 706f 7374 6669 7822 290a 0920 2020 207b postfix").. { │ │ │ -00030cf0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00030d00: 2024 6c69 6e6b 4669 6c65 203d 2075 6e64 $linkFile = und │ │ │ -00030d10: 6566 3b0a 2370 7269 6e74 2022 2d2d 2d2d ef;.#print "---- │ │ │ -00030d20: 2d2d 2d2d 2d2d 2d2d 2d20 666f 756e 6420 --------- found │ │ │ -00030d30: 7468 6174 2066 696c 655c 6e22 3b0a 2020 that file\n";. │ │ │ -00030d40: 2020 2020 2020 2020 2020 7d0a 0a23 7072 }..#pr │ │ │ -00030d50: 696e 7420 222d 322d 5c6e 223b 0a09 2020 int "-2-\n";.. │ │ │ -00030d60: 2020 6966 2028 246c 696e 6b46 696c 6529 if ($linkFile) │ │ │ -00030d70: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print " │ │ │ -00030d80: 2d33 2d5c 6e22 3b0a 2020 2020 2020 2020 -3-\n";. │ │ │ -00030d90: 2020 2020 2020 2020 2320 416c 7465 2044 # Alte D │ │ │ -00030da0: 6174 6569 206b 6f6d 7072 696d 6965 7274 atei komprimiert │ │ │ -00030db0: 0a09 0969 6620 2824 636f 6d70 724f 6c64 ...if ($comprOld │ │ │ -00030dc0: 2065 7120 2763 2729 0a09 097b 0a20 2020 eq 'c')...{. │ │ │ -00030dd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00030de0: 2024 6e65 7746 696c 6520 2e3d 2024 706f $newFile .= $po │ │ │ -00030df0: 7374 6669 783b 0a20 2020 2020 2020 2020 stfix;. │ │ │ -00030e00: 2020 2020 2020 2020 2020 2024 6f6c 6446 $oldF │ │ │ -00030e10: 696c 6520 2e3d 2024 706f 7374 6669 783b ile .= $postfix; │ │ │ -00030e20: 0a09 097d 0a0a 2020 2020 2020 2020 2020 ...}.. │ │ │ -00030e30: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ -00030e40: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00030e50: 4427 2c0a 2020 2020 2020 2020 2020 2020 D',. │ │ │ -00030e60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00030e70: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. │ │ │ -00030e80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00030e90: 2020 2020 2020 2020 2020 5b22 6c69 6e6b ["link │ │ │ -00030ea0: 2024 6f6c 6446 696c 6520 246e 6577 4669 $oldFile $newFi │ │ │ -00030eb0: 6c65 225d 290a 2020 2020 2020 2020 2020 le"]). │ │ │ -00030ec0: 2020 2020 2020 2020 2020 6966 2028 2464 if ($d │ │ │ -00030ed0: 6562 7567 4d6f 6465 203e 3d20 3229 3b0a ebugMode >= 2);. │ │ │ -00030ee0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00030ef0: 2023 2043 6865 636b 2065 7869 7374 656e # Check existen │ │ │ -00030f00: 6365 2c20 6c61 7465 4c69 6e6b 7320 6e6f ce, lateLinks no │ │ │ -00030f10: 7420 7365 7420 616e 6420 6f6c 6446 696c t set and oldFil │ │ │ -00030f20: 6520 646f 6573 206e 6f74 2065 7869 7374 e does not exist │ │ │ -00030f30: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00030f40: 2075 6e6c 6573 7320 2824 6c61 7465 4c69 unless ($lateLi │ │ │ -00030f50: 6e6b 7320 6f72 2024 6f6c 6446 696c 6529 nks or $oldFile) │ │ │ -00030f60: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo │ │ │ -00030f70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00030f80: 203d 3e20 2757 272c 0a09 0909 0920 2027 => 'W',..... ' │ │ │ -00030f90: 2d73 7472 2720 3d3e 0a09 0909 0920 205b -str' =>..... [ │ │ │ -00030fa0: 2228 7769 7468 206f 6c64 2920 6361 6e6e "(with old) cann │ │ │ -00030fb0: 6f74 206c 696e 6b20 2876 6961 206d 6435 ot link (via md5 │ │ │ -00030fc0: 2920 2220 2e0a 0909 0909 2020 2022 3c24 ) " ...... "<$ │ │ │ -00030fd0: 6f6c 6446 696c 653e 203c 246e 6577 4669 oldFile> <$newFi │ │ │ -00030fe0: 6c65 3e22 5d29 0a09 0909 6966 2028 2464 le>"])....if ($d │ │ │ -00030ff0: 6562 7567 4d6f 6465 203e 3d20 3129 3b0a ebugMode >= 1);. │ │ │ -00031000: 0909 2020 2020 246c 696e 6b46 696c 6520 .. $linkFile │ │ │ -00031010: 3d20 756e 6465 663b 0a09 0920 2020 2024 = undef;... $ │ │ │ -00031020: 6f6c 6446 696c 656e 616d 652d 3e64 656c oldFilename->del │ │ │ -00031030: 6574 6545 6e74 7279 2824 6d64 352c 2020 eteEntry($md5, │ │ │ -00031040: 2020 2320 696e 205a 756b 756e 6674 206e # in Zukunft n │ │ │ -00031050: 6963 6874 206d 6568 720a 0909 0909 0920 icht mehr...... │ │ │ -00031060: 2020 2020 2024 6669 6c65 293b 2020 2320 $file); # │ │ │ -00031070: 6d69 7420 6469 6573 6572 2044 6174 6569 mit dieser Datei │ │ │ -00031080: 206c 696e 6b65 6e0a 2020 2020 2020 2020 linken. │ │ │ -00031090: 2020 2020 2020 2020 7d0a 0a20 2020 2020 }.. │ │ │ -000310a0: 2020 2020 2020 2020 2020 2023 2049 6e20 # In │ │ │ -000310b0: 4461 7465 6920 7363 6872 6569 6265 6e0a Datei schreiben. │ │ │ -000310c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000310d0: 6966 2028 246c 6174 654c 696e 6b73 2061 if ($lateLinks a │ │ │ -000310e0: 6e64 206e 6f74 0a09 0920 2020 2028 6465 nd not... (de │ │ │ -000310f0: 6669 6e65 6428 2466 696c 6529 2061 6e64 fined($file) and │ │ │ -00031100: 2065 7869 7374 7320 2466 6f72 6365 436f exists $forceCo │ │ │ -00031110: 7079 436f 6d70 727b 2466 696c 657d 2929 pyCompr{$file})) │ │ │ -00031120: 0a09 097b 0a09 0920 2020 202b 2b24 616c ...{... ++$al │ │ │ -00031130: 6c42 6163 6b75 7044 6972 737b 2462 6163 lBackupDirs{$bac │ │ │ -00031140: 6b75 7044 6972 7d0a 0909 2020 2020 2020 kupDir}... │ │ │ -00031150: 2020 6966 2024 6261 636b 7570 4469 7220 if $backupDir │ │ │ -00031160: 6e65 2024 7461 7267 6574 4469 723b 0a09 ne $targetDir;.. │ │ │ -00031170: 0920 2020 206d 7920 2465 7869 7374 696e . my $existin │ │ │ -00031180: 6746 696c 6520 3d20 3a3a 7265 6c50 6174 gFile = ::relPat │ │ │ -00031190: 6828 2474 6172 6765 7444 6972 2c20 246f h($targetDir, $o │ │ │ -000311a0: 6c64 4669 6c65 293b 0a09 0920 2020 206d ldFile);... m │ │ │ -000311b0: 7920 246e 6577 4c69 6e6b 203d 203a 3a72 y $newLink = ::r │ │ │ -000311c0: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi │ │ │ -000311d0: 722c 2024 6e65 7746 696c 6529 3b0a 0a09 r, $newFile);... │ │ │ -000311e0: 0920 2020 2024 6578 6973 7469 6e67 4669 . $existingFi │ │ │ -000311f0: 6c65 203d 7e20 732f 5c6e 2f5c 302f 6f67 le =~ s/\n/\0/og │ │ │ -00031200: 3b0a 0909 2020 2020 246e 6577 4c69 6e6b ;... $newLink │ │ │ -00031210: 203d 7e20 732f 5c6e 2f5c 302f 6f67 3b0a =~ s/\n/\0/og;. │ │ │ -00031220: 0909 2020 2020 2477 724c 6174 654c 696e .. $wrLateLin │ │ │ -00031230: 6b2d 3e70 7269 6e74 2822 6c69 6e6b 2024 k->print("link $ │ │ │ -00031240: 6d64 355c 6e24 6578 6973 7469 6e67 4669 md5\n$existingFi │ │ │ -00031250: 6c65 5c6e 246e 6577 4c69 6e6b 5c6e 2229 le\n$newLink\n") │ │ │ -00031260: 3b0a 0a09 0920 2020 2024 6d61 696e 3a3a ;.... $main:: │ │ │ -00031270: 7374 6174 2d3e 696e 6372 5f6e 6f4c 6174 stat->incr_noLat │ │ │ -00031280: 654c 696e 6b73 2824 7569 642c 2024 6769 eLinks($uid, $gi │ │ │ -00031290: 6429 3b0a 0a20 2020 2020 2020 2020 2020 d);.. │ │ │ -000312a0: 2020 2020 2020 2020 2023 2053 6368 7265 # Schre │ │ │ -000312b0: 6962 656e 2064 6572 2049 6e66 6f72 6d61 iben der Informa │ │ │ -000312c0: 7469 6f6e 656e 0a20 2020 2020 2020 2020 tionen. │ │ │ -000312d0: 2020 2020 2020 2020 2020 2024 616b 7446 $aktF │ │ │ -000312e0: 696c 656e 616d 652d 3e73 746f 7265 2827 ilename->store(' │ │ │ -000312f0: 2d66 696c 656e 616d 6527 203d 3e20 2466 -filename' => $f │ │ │ -00031300: 696c 652c 0a20 2020 2020 2020 2020 2020 ile,. │ │ │ -00031310: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031320: 2020 2020 2020 2020 2020 2020 2027 2d6d '-m │ │ │ -00031330: 6435 7375 6d27 203d 3e20 246d 6435 2c0a d5sum' => $md5,. │ │ │ -00031340: 0909 0909 0927 2d63 6f6d 7072 2720 3d3e .....'-compr' => │ │ │ -00031350: 2024 636f 6d70 724f 6c64 2c0a 0909 0909 $comprOld,..... │ │ │ -00031360: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev, │ │ │ -00031370: 0a09 0909 0909 272d 696e 6f64 6527 203d ......'-inode' = │ │ │ -00031380: 3e20 2469 6e6f 6465 2c0a 0909 0909 0927 > $inode,......' │ │ │ -00031390: 2d69 6e6f 6465 4261 636b 7570 2720 3d3e -inodeBackup' => │ │ │ -000313a0: 2024 696e 6f64 6542 6163 6b75 702c 0a09 $inodeBackup,.. │ │ │ -000313b0: 0909 0909 272d 6374 696d 6527 203d 3e20 ....'-ctime' => │ │ │ -000313c0: 2463 7469 6d65 2c0a 0909 0909 0927 2d6d $ctime,......'-m │ │ │ -000313d0: 7469 6d65 2720 3d3e 2024 6d74 696d 652c time' => $mtime, │ │ │ -000313e0: 0a09 0909 0909 272d 6174 696d 6527 203d ......'-atime' = │ │ │ -000313f0: 3e20 2461 7469 6d65 2c0a 0909 0909 0927 > $atime,......' │ │ │ -00031400: 2d73 697a 6527 203d 3e20 2473 697a 652c -size' => $size, │ │ │ -00031410: 0a09 0909 0909 272d 7569 6427 203d 3e20 ......'-uid' => │ │ │ -00031420: 2475 6964 2c0a 0909 0909 0927 2d67 6964 $uid,......'-gid │ │ │ -00031430: 2720 3d3e 2024 6769 642c 0a09 0909 0909 ' => $gid,...... │ │ │ -00031440: 272d 6d6f 6465 2720 3d3e 2024 6d6f 6465 '-mode' => $mode │ │ │ -00031450: 2c0a 0909 0909 0927 2d73 746f 7265 496e ,......'-storeIn │ │ │ -00031460: 4442 4d27 203d 3e20 3020 2023 2069 6e20 DBM' => 0 # in │ │ │ -00031470: 6462 6d20 7369 6e6e 6c6f 730a 2020 2020 dbm sinnlos. │ │ │ -00031480: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031490: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000314a0: 2020 2029 3b0a 2020 2020 2020 2020 2020 );. │ │ │ -000314b0: 2020 2020 2020 7d0a 0909 656c 7365 2020 }...else │ │ │ -000314c0: 2320 4f64 6572 2064 6972 656b 7420 6c69 # Oder direkt li │ │ │ -000314d0: 6e6b 656e 0a09 097b 0a09 0920 2020 206d nken...{... m │ │ │ -000314e0: 7920 2468 6c20 3d20 2d31 3b0a 0909 2020 y $hl = -1;... │ │ │ -000314f0: 2020 6966 2028 246d 6178 4861 7264 4c69 if ($maxHardLi │ │ │ -00031500: 6e6b 7320 3e20 3029 0a09 0920 2020 207b nks > 0)... { │ │ │ -00031510: 0a09 0909 2468 6c20 3d20 2873 7461 7428 ....$hl = (stat( │ │ │ -00031520: 246f 6c64 4669 6c65 2929 5b33 5d3b 0a23 $oldFile))[3];.# │ │ │ -00031530: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00031540: 2321 2121 2121 2121 2121 2121 2121 2121 #!!!!!!!!!!!!!!! │ │ │ -00031550: 2121 210a 2370 7269 6e74 2022 2d33 2e35 !!!.#print "-3.5 │ │ │ -00031560: 2d20 246f 6c64 4669 6c65 202d 3e20 246e - $oldFile -> $n │ │ │ -00031570: 6577 4669 6c65 3a20 2468 6c20 6861 7264 ewFile: $hl hard │ │ │ -00031580: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL │ │ │ -00031590: 696e 6b73 295c 6e22 3b0a 0909 2020 2020 inks)\n";... │ │ │ -000315a0: 7d0a 0909 2020 2020 6966 2028 2468 6c20 }... if ($hl │ │ │ -000315b0: 3c20 246d 6178 4861 7264 4c69 6e6b 7320 < $maxHardLinks │ │ │ -000315c0: 616e 6420 6c69 6e6b 2024 6f6c 6446 696c and link $oldFil │ │ │ -000315d0: 652c 2024 6e65 7746 696c 6529 0a23 0909 e, $newFile).#.. │ │ │ -000315e0: 2020 2020 6966 2028 6c69 6e6b 2024 6f6c if (link $ol │ │ │ -000315f0: 6446 696c 652c 2024 6e65 7746 696c 6529 dFile, $newFile) │ │ │ -00031600: 0a09 0920 2020 207b 0a09 0909 6966 2028 ... {....if ( │ │ │ -00031610: 2470 7265 7365 7276 6550 6572 6d73 290a $preservePerms). │ │ │ -00031620: 0909 097b 0a09 0909 2020 2020 6368 6f77 ...{.... chow │ │ │ -00031630: 6e20 2475 6964 2c20 2467 6964 2c20 246e n $uid, $gid, $n │ │ │ -00031640: 6577 4669 6c65 3b0a 0909 0920 2020 2063 ewFile;.... c │ │ │ -00031650: 686d 6f64 2024 6d6f 6465 2c20 246e 6577 hmod $mode, $new │ │ │ -00031660: 4669 6c65 3b0a 0909 097d 0a0a 0909 0923 File;....}.....# │ │ │ -00031670: 2053 6368 7265 6962 656e 2064 6572 2049 Schreiben der I │ │ │ -00031680: 6e66 6f72 6d61 7469 6f6e 656e 0a09 0909 nformationen.... │ │ │ -00031690: 2461 6b74 4669 6c65 6e61 6d65 2d3e 7374 $aktFilename->st │ │ │ -000316a0: 6f72 6528 272d 6669 6c65 6e61 6d65 2720 ore('-filename' │ │ │ -000316b0: 3d3e 2024 6669 6c65 2c0a 0909 0909 0920 => $file,...... │ │ │ -000316c0: 2020 2027 2d6d 6435 7375 6d27 203d 3e20 '-md5sum' => │ │ │ -000316d0: 246d 6435 2c0a 0909 0909 0920 2020 2027 $md5,...... ' │ │ │ -000316e0: 2d63 6f6d 7072 2720 3d3e 2024 636f 6d70 -compr' => $comp │ │ │ -000316f0: 724f 6c64 2c0a 0909 0909 0920 2020 2027 rOld,...... ' │ │ │ -00031700: 2d64 6576 2720 3d3e 2024 6465 762c 0a09 -dev' => $dev,.. │ │ │ -00031710: 0909 0909 2020 2020 272d 696e 6f64 6527 .... '-inode' │ │ │ -00031720: 203d 3e20 2469 6e6f 6465 2c0a 0909 0909 => $inode,..... │ │ │ -00031730: 0920 2020 2027 2d69 6e6f 6465 4261 636b . '-inodeBack │ │ │ -00031740: 7570 2720 3d3e 2024 696e 6f64 6542 6163 up' => $inodeBac │ │ │ -00031750: 6b75 702c 0a09 0909 0909 2020 2020 272d kup,...... '- │ │ │ -00031760: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ -00031770: 2c0a 0909 0909 0920 2020 2027 2d6d 7469 ,...... '-mti │ │ │ -00031780: 6d65 2720 3d3e 2024 6d74 696d 652c 0a09 me' => $mtime,.. │ │ │ -00031790: 0909 0909 2020 2020 272d 6174 696d 6527 .... '-atime' │ │ │ -000317a0: 203d 3e20 2461 7469 6d65 2c0a 0909 0909 => $atime,..... │ │ │ -000317b0: 0920 2020 2027 2d73 697a 6527 203d 3e20 . '-size' => │ │ │ -000317c0: 2473 697a 652c 0a09 0909 0909 2020 2020 $size,...... │ │ │ -000317d0: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,. │ │ │ -000317e0: 0909 0909 0920 2020 2027 2d67 6964 2720 ..... '-gid' │ │ │ -000317f0: 3d3e 2024 6769 642c 0a09 0909 0909 2020 => $gid,...... │ │ │ -00031800: 2020 272d 6d6f 6465 2720 3d3e 2024 6d6f '-mode' => $mo │ │ │ -00031810: 6465 2c0a 0909 0909 0920 2020 2027 2d73 de,...... '-s │ │ │ -00031820: 746f 7265 496e 4442 4d27 203d 3e20 3020 toreInDBM' => 0 │ │ │ -00031830: 2023 2069 6e20 6462 6d20 7369 6e6e 6c6f # in dbm sinnlo │ │ │ -00031840: 730a 0909 0920 2020 2029 3b0a 0909 0969 s.... );....i │ │ │ -00031850: 6620 2824 636f 6d70 724f 6c64 2065 7120 f ($comprOld eq │ │ │ -00031860: 2775 2729 0a09 0909 7b0a 0909 0920 2020 'u')....{.... │ │ │ -00031870: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad │ │ │ -00031880: 6453 756d 556e 6368 616e 6765 6443 6f70 dSumUnchangedCop │ │ │ -00031890: 7928 2473 697a 6529 3b0a 0909 097d 0a09 y($size);....}.. │ │ │ -000318a0: 0909 656c 7365 2020 2023 2024 636f 6d70 ..else # $comp │ │ │ -000318b0: 724f 6c64 2065 7120 2763 270a 0909 097b rOld eq 'c'....{ │ │ │ -000318c0: 0a09 0909 2020 2020 246d 6169 6e3a 3a73 .... $main::s │ │ │ -000318d0: 7461 742d 3e61 6464 5375 6d55 6e63 6861 tat->addSumUncha │ │ │ -000318e0: 6e67 6564 436f 6d70 7228 2473 697a 6529 ngedCompr($size) │ │ │ -000318f0: 3b0a 0909 097d 0a09 0920 2020 207d 0a09 ;....}... }.. │ │ │ -00031900: 0920 2020 2065 6c73 650a 0909 2020 2020 . else... │ │ │ -00031910: 7b0a 0909 0924 7072 4c6f 672d 3e70 7269 {....$prLog->pri │ │ │ -00031920: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W │ │ │ -00031930: 272c 0a09 0909 0920 2020 2020 2027 2d73 ',..... '-s │ │ │ -00031940: 7472 2720 3d3e 0a09 0909 0920 2020 2020 tr' =>..... │ │ │ -00031950: 205b 2228 7769 7468 206f 6c64 2920 6361 ["(with old) ca │ │ │ -00031960: 6e6e 6f74 206c 696e 6b20 2876 6961 206d nnot link (via m │ │ │ -00031970: 6435 2920 2220 2e0a 0909 0909 2020 2020 d5) " ...... │ │ │ -00031980: 2020 2022 3c24 6f6c 6446 696c 653e 203c "<$oldFile> < │ │ │ -00031990: 246e 6577 4669 6c65 3e22 5d29 0a09 0909 $newFile>"]).... │ │ │ -000319a0: 2020 2020 6966 2028 2464 6562 7567 4d6f if ($debugMo │ │ │ -000319b0: 6465 203e 3d20 3129 3b0a 0909 0924 6c69 de >= 1);....$li │ │ │ -000319c0: 6e6b 4669 6c65 203d 2075 6e64 6566 3b20 nkFile = undef; │ │ │ -000319d0: 2020 2020 2020 2020 2320 3d3e 206b 6f70 # => kop │ │ │ -000319e0: 6965 7265 6e20 6f64 6572 206b 6f6d 7072 ieren oder kompr │ │ │ -000319f0: 696d 6965 7265 6e0a 0909 0924 6f6c 6446 imieren....$oldF │ │ │ -00031a00: 696c 656e 616d 652d 3e64 656c 6574 6545 ilename->deleteE │ │ │ -00031a10: 6e74 7279 2824 6d64 352c 2020 2020 2320 ntry($md5, # │ │ │ -00031a20: 696e 205a 756b 756e 6674 206e 6963 6874 in Zukunft nicht │ │ │ -00031a30: 206d 6568 720a 0909 0909 0909 2020 2466 mehr....... $f │ │ │ -00031a40: 696c 6529 3b20 2023 206d 6974 2064 6965 ile); # mit die │ │ │ -00031a50: 7365 7220 4461 7465 6920 6c69 6e6b 656e ser Datei linken │ │ │ -00031a60: 0a09 0920 2020 207d 0a09 097d 0a0a 2020 ... }...}.. │ │ │ -00031a70: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -00031a80: 5374 6174 7320 6e75 7220 7765 6e6e 2077 Stats nur wenn w │ │ │ -00031a90: 6972 6b6c 6963 6820 6765 6c69 6e6b 740a irklich gelinkt. │ │ │ -00031aa0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031ab0: 6966 2028 6465 6669 6e65 6420 246c 696e if (defined $lin │ │ │ -00031ac0: 6b46 696c 6529 0a09 097b 0a20 2020 2020 kFile)...{. │ │ │ -00031ad0: 2020 2020 2020 2020 2020 2020 2020 2069 i │ │ │ -00031ae0: 6620 2824 636f 6d70 724f 6c64 2065 7120 f ($comprOld eq │ │ │ -00031af0: 2775 2729 0a09 0920 2020 207b 0a20 2020 'u')... {. │ │ │ -00031b00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031b10: 2020 2020 2069 6620 2824 696e 7465 726e if ($intern │ │ │ -00031b20: 616c 4f6c 6420 6571 2027 696e 7465 726e alOld eq 'intern │ │ │ -00031b30: 616c 2729 0a09 0909 7b0a 2020 2020 2020 al')....{. │ │ │ -00031b40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031b50: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta │ │ │ -00031b60: 742d 3e61 6464 5375 6d4c 696e 6b65 6449 t->addSumLinkedI │ │ │ -00031b70: 6e74 6572 6e61 6c43 6f70 7928 2473 697a nternalCopy($siz │ │ │ -00031b80: 6529 3b0a 2020 2020 2020 2020 2020 2020 e);. │ │ │ -00031b90: 2020 2020 2020 2020 2020 2020 7d0a 2020 }. │ │ │ -00031ba0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031bb0: 2020 2020 2020 656c 7365 0a09 0909 7b0a else....{. │ │ │ -00031bc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031bd0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai │ │ │ -00031be0: 6e3a 3a73 7461 742d 3e61 6464 5375 6d4c n::stat->addSumL │ │ │ -00031bf0: 696e 6b65 644f 6c64 436f 7079 2824 7369 inkedOldCopy($si │ │ │ -00031c00: 7a65 293b 0a20 2020 2020 2020 2020 2020 ze);. │ │ │ -00031c10: 2020 2020 2020 2020 2020 2020 207d 0a20 }. │ │ │ -00031c20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031c30: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ -00031c40: 2020 2020 2020 2020 2065 6c73 650a 0909 else... │ │ │ -00031c50: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. │ │ │ -00031c60: 2020 2020 2020 2020 2020 2020 2020 6966 if │ │ │ -00031c70: 2028 2469 6e74 6572 6e61 6c4f 6c64 2065 ($internalOld e │ │ │ -00031c80: 7120 2769 6e74 6572 6e61 6c27 290a 0909 q 'internal')... │ │ │ -00031c90: 097b 0a20 2020 2020 2020 2020 2020 2020 .{. │ │ │ -00031ca0: 2020 2020 2020 2020 2020 2020 2020 2024 $ │ │ │ -00031cb0: 6d61 696e 3a3a 7374 6174 2d3e 6164 6453 main::stat->addS │ │ │ -00031cc0: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal │ │ │ -00031cd0: 436f 6d70 7228 2473 697a 6529 3b0a 2020 Compr($size);. │ │ │ -00031ce0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031cf0: 2020 2020 2020 7d0a 2020 2020 2020 2020 }. │ │ │ -00031d00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031d10: 656c 7365 0a09 0909 7b0a 2020 2020 2020 else....{. │ │ │ -00031d20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031d30: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta │ │ │ -00031d40: 742d 3e61 6464 5375 6d4c 696e 6b65 644f t->addSumLinkedO │ │ │ -00031d50: 6c64 436f 6d70 7228 2473 697a 6529 3b0a ldCompr($size);. │ │ │ -00031d60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031d70: 2020 2020 2020 2020 7d0a 2020 2020 2020 }. │ │ │ -00031d80: 2020 2020 2020 2020 2020 2020 2020 7d0a }. │ │ │ -00031d90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00031da0: 7d0a 0920 2020 207d 0a0a 2020 2020 2020 }.. }.. │ │ │ -00031db0: 2020 2020 2020 2320 6578 6973 7469 6572 # existier │ │ │ -00031dc0: 7420 6e6f 6368 206e 6963 6874 2c20 636f t noch nicht, co │ │ │ -00031dd0: 7079 206f 6465 7220 636f 6d70 7265 7373 py oder compress │ │ │ -00031de0: 0a23 7072 696e 7420 222d 2034 202d 5c6e .#print "- 4 -\n │ │ │ -00031df0: 223b 0a09 2020 2020 6966 2028 6e6f 7420 ";.. if (not │ │ │ -00031e00: 6465 6669 6e65 6420 246c 696e 6b46 696c defined $linkFil │ │ │ -00031e10: 6529 0a09 2020 2020 7b0a 2370 7269 6e74 e).. {.#print │ │ │ -00031e20: 2022 2d20 3520 2d5c 6e22 3b0a 0909 6966 "- 5 -\n";...if │ │ │ -00031e30: 2028 6578 6973 7473 2024 696e 5072 6f67 (exists $inProg │ │ │ -00031e40: 7265 7373 7b24 6d64 357d 2920 2320 4175 ress{$md5}) # Au │ │ │ -00031e50: 6620 4b6f 6d70 7265 7373 696f 6e2f 4b6f f Kompression/Ko │ │ │ -00031e60: 7069 6520 7761 7274 656e 0a09 097b 0a23 pie warten...{.# │ │ │ -00031e70: 7072 696e 7420 222d 2036 202d 5c6e 223b print "- 6 -\n"; │ │ │ -00031e80: 0a09 0920 2020 2070 7573 6820 407b 2469 ... push @{$i │ │ │ -00031e90: 6e50 726f 6772 6573 737b 246d 6435 7d7d nProgress{$md5}} │ │ │ -00031ea0: 2c20 5b24 6469 722c 2024 6669 6c65 2c20 , [$dir, $file, │ │ │ -00031eb0: 246d 6435 2c20 2766 275d 3b0a 0909 2020 $md5, 'f'];... │ │ │ -00031ec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00031ed0: 272d 6b69 6e64 2720 3d3e 2027 4427 2c0a '-kind' => 'D',. │ │ │ -00031ee0: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ -00031ef0: 5b22 666f 756e 6420 6964 656e 7469 6361 ["found identica │ │ │ -00031f00: 6c20 6669 6c65 2074 6f20 3c24 6669 6c65 l file to <$file │ │ │ -00031f10: 3e22 5d29 0a09 0909 6966 2024 6465 6275 >"])....if $debu │ │ │ -00031f20: 674d 6f64 6520 3e3d 2033 3b0a 0909 2020 gMode >= 3;... │ │ │ -00031f30: 2020 6e65 7874 3b0a 0909 7d0a 0a20 2020 next;...}.. │ │ │ -00031f40: 2020 2020 2020 2020 2020 2020 2024 696e $in │ │ │ -00031f50: 5072 6f67 7265 7373 7b24 6d64 357d 203d Progress{$md5} = │ │ │ -00031f60: 205b 5d3b 2020 2023 206d 6572 6b65 6e2c []; # merken, │ │ │ -00031f70: 2077 6972 6420 6b6f 7069 6572 742f 6b6f wird kopiert/ko │ │ │ -00031f80: 6d70 7269 6d69 6572 740a 0a09 0926 3a3a mprimiert....&:: │ │ │ -00031f90: 6d61 6b65 4669 6c65 5061 7468 4361 6368 makeFilePathCach │ │ │ -00031fa0: 6528 2224 7461 7267 6574 4469 722f 2466 e("$targetDir/$f │ │ │ -00031fb0: 696c 6522 2c20 2470 724c 6f67 2920 6966 ile", $prLog) if │ │ │ -00031fc0: 2024 6c61 7465 4c69 6e6b 733b 0a0a 2370 $lateLinks;..#p │ │ │ -00031fd0: 7269 6e74 2022 2d20 3720 2d5c 6e22 3b0a rint "- 7 -\n";. │ │ │ -00031fe0: 0909 6e6f 2077 6172 6e69 6e67 7320 276e ..no warnings 'n │ │ │ -00031ff0: 6577 6c69 6e65 273b 0a09 0969 6620 2828 ewline';...if (( │ │ │ -00032000: 2463 6f6d 7072 5275 6c65 2d3e 6861 734c $comprRule->hasL │ │ │ -00032010: 696e 6528 2920 3d3d 2031 2061 6e64 0a09 ine() == 1 and.. │ │ │ -00032020: 0920 2020 2020 2463 6f6d 7072 5275 6c65 . $comprRule │ │ │ -00032030: 2d3e 6368 6563 6b52 756c 6528 2466 696c ->checkRule($fil │ │ │ -00032040: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode, │ │ │ -00032050: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ -00032060: 0a09 0909 0909 2020 2020 2020 2475 6964 ...... $uid │ │ │ -00032070: 2c20 2467 6964 2c20 2474 7970 6529 203d , $gid, $type) = │ │ │ -00032080: 3d20 3129 0a09 0920 2020 206f 7220 2d65 = 1)... or -e │ │ │ -00032090: 2022 2464 6972 2f24 6669 6c65 2470 6f73 "$dir/$file$pos │ │ │ -000320a0: 7466 6978 2229 2023 2044 6174 6569 2068 tfix") # Datei h │ │ │ -000320b0: 6174 206e 6963 6874 202e 627a 322c 2065 at nicht .bz2, e │ │ │ -000320c0: 730a 0909 7b20 2020 2020 2020 2020 2020 s...{ │ │ │ -000320d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000320e0: 2020 2020 2320 6578 6973 7469 6572 7420 # existiert │ │ │ -000320f0: 6162 6572 2044 6174 6569 206d 6974 202e aber Datei mit . │ │ │ -00032100: 627a 320a 0909 2020 2020 6966 2028 2d65 bz2... if (-e │ │ │ -00032110: 2022 2464 6972 2f24 6669 6c65 2470 6f73 "$dir/$file$pos │ │ │ -00032120: 7466 6978 2229 0a09 0920 2020 207b 0a23 tfix")... {.# │ │ │ -00032130: 7072 696e 7420 222d 2038 202d 5c6e 223b print "- 8 -\n"; │ │ │ -00032140: 0a09 0909 2466 6966 6f43 6f70 792d 3e61 ....$fifoCopy->a │ │ │ -00032150: 6464 2827 2d76 616c 7565 2720 3d3e 0a09 dd('-value' =>.. │ │ │ -00032160: 0909 0920 2020 2020 2020 5b24 6469 722c ... [$dir, │ │ │ -00032170: 2024 6669 6c65 2c20 2475 6964 2c20 2467 $file, $uid, $g │ │ │ -00032180: 6964 2c20 246d 6f64 652c 0a09 0909 0909 id, $mode,...... │ │ │ -00032190: 246d 6435 2c20 2763 6f70 7927 5d29 3b0a $md5, 'copy']);. │ │ │ -000321a0: 0909 2020 2020 7d0a 0909 2020 2020 656c .. }... el │ │ │ -000321b0: 7369 6620 2824 6c61 7465 436f 6d70 7265 sif ($lateCompre │ │ │ -000321c0: 7373 290a 0909 2020 2020 7b0a 2370 7269 ss)... {.#pri │ │ │ -000321d0: 6e74 2022 2d20 3920 2d5c 6e22 3b0a 0909 nt "- 9 -\n";... │ │ │ -000321e0: 0924 6669 666f 436f 7079 2d3e 6164 6428 .$fifoCopy->add( │ │ │ -000321f0: 272d 7661 6c75 6527 203d 3e0a 0909 0909 '-value' =>..... │ │ │ -00032200: 2020 2020 2020 205b 2464 6972 2c20 2466 [$dir, $f │ │ │ -00032210: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid, │ │ │ -00032220: 2024 6d6f 6465 2c0a 0909 0909 0924 6d64 $mode,......$md │ │ │ -00032230: 352c 2027 636f 6d70 7227 5d29 3b0a 0909 5, 'compr']);... │ │ │ -00032240: 2020 2020 7d0a 0909 2020 2020 656c 7365 }... else │ │ │ -00032250: 2020 2023 2063 6f6d 7072 6573 7320 6669 # compress fi │ │ │ -00032260: 6c65 0a09 0920 2020 207b 0a23 7072 696e le... {.#prin │ │ │ -00032270: 7420 222d 2031 3020 2d5c 6e22 3b0a 0909 t "- 10 -\n";... │ │ │ -00032280: 0924 6669 666f 436f 6d70 722d 3e61 6464 .$fifoCompr->add │ │ │ -00032290: 2827 2d76 616c 7565 2720 3d3e 0a09 0909 ('-value' =>.... │ │ │ -000322a0: 0909 5b24 6469 722c 2024 6669 6c65 2c20 ..[$dir, $file, │ │ │ -000322b0: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod │ │ │ -000322c0: 652c 0a09 0909 0909 2024 6d64 352c 2027 e,...... $md5, ' │ │ │ -000322d0: 636f 6d70 7227 5d29 3b0a 0909 2020 2020 compr']);... │ │ │ -000322e0: 7d0a 0909 7d0a 0909 656c 7365 2020 2020 }...}...else │ │ │ -000322f0: 2020 2023 2063 6f70 7920 6669 6c65 0a09 # copy file.. │ │ │ -00032300: 097b 0a23 7072 696e 7420 222d 2031 3120 .{.#print "- 11 │ │ │ -00032310: 2d5c 6e22 3b0a 0909 2020 2020 2466 6966 -\n";... $fif │ │ │ -00032320: 6f43 6f70 792d 3e61 6464 2827 2d76 616c oCopy->add('-val │ │ │ -00032330: 7565 2720 3d3e 0a09 0909 0920 2020 5b24 ue' =>..... [$ │ │ │ -00032340: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid │ │ │ -00032350: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,.. │ │ │ -00032360: 0909 0920 2020 2024 6d64 352c 2027 636f ... $md5, 'co │ │ │ -00032370: 7079 275d 293b 0a20 2020 2020 2020 2020 py']);. │ │ │ -00032380: 2020 2020 2020 207d 0a09 2020 2020 7d0a }.. }. │ │ │ -00032390: 097d 2023 2045 6e64 6520 5363 686c 6569 .} # Ende Schlei │ │ │ -000323a0: 6665 2057 6172 7465 7363 686c 6167 656e fe Warteschlagen │ │ │ -000323b0: 2066 c3bc 6c6c 656e 0a0a 2020 2020 2020 f..llen.. │ │ │ -000323c0: 2020 2320 416c 7465 204b 6f70 6965 722d # Alte Kopier- │ │ │ -000323d0: 4a6f 6273 2061 6268 6f6c 656e 0a20 2020 Jobs abholen. │ │ │ -000323e0: 2020 2020 2066 6f72 6561 6368 206d 7920 foreach my │ │ │ -000323f0: 2469 2028 2470 6172 466f 726b 436f 7079 $i ($parForkCopy │ │ │ -00032400: 2d3e 6368 6563 6b41 6c6c 2829 290a 2020 ->checkAll()). │ │ │ -00032410: 2020 2020 2020 7b0a 2020 2020 2020 2020 {. │ │ │ -00032420: 2020 2020 2320 5765 2064 6964 2073 6f6d # We did som │ │ │ -00032430: 6574 6869 6e67 0a20 2020 2020 2020 2020 ething. │ │ │ -00032440: 2020 2024 6d61 696e 3a3a 7469 6e79 5761 $main::tinyWa │ │ │ -00032450: 6974 5363 6865 6475 6c65 722d 3e72 6573 itScheduler->res │ │ │ -00032460: 6574 2829 3b0a 0a20 2020 2020 2020 2020 et();.. │ │ │ -00032470: 2020 206d 7920 2473 7464 6572 7220 3d20 my $stderr = │ │ │ -00032480: 2469 2d3e 6765 7453 5444 4552 5228 293b $i->getSTDERR(); │ │ │ -00032490: 0a20 2020 2020 2020 2020 2020 206d 7920 . my │ │ │ -000324a0: 2824 6465 762c 2024 696e 6f64 652c 2024 ($dev, $inode, $ │ │ │ -000324b0: 6469 722c 2024 6669 6c65 2c20 2475 6964 dir, $file, $uid │ │ │ -000324c0: 2c20 2467 6964 2c20 246d 6f64 652c 2024 , $gid, $mode, $ │ │ │ -000324d0: 6d64 352c 0a20 2020 2020 2020 2020 2020 md5,. │ │ │ -000324e0: 2020 2020 2024 6374 696d 652c 2024 6d74 $ctime, $mt │ │ │ -000324f0: 696d 652c 2024 6174 696d 652c 2024 7369 ime, $atime, $si │ │ │ -00032500: 7a65 2c20 2463 6f6d 7072 2c20 2474 6d70 ze, $compr, $tmp │ │ │ -00032510: 4d44 3546 696c 6529 203d 0a20 2020 2020 MD5File) =. │ │ │ -00032520: 2020 2020 2020 2020 2020 2020 2020 2040 @ │ │ │ -00032530: 7b24 692d 3e67 6574 2827 2d77 6861 7427 {$i->get('-what' │ │ │ -00032540: 203d 3e20 2769 6e66 6f27 297d 3b0a 0a09 => 'info')};... │ │ │ -00032550: 2020 2020 6966 2028 263a 3a77 6169 7446 if (&::waitF │ │ │ -00032560: 6f72 4669 6c65 2822 2474 6172 6765 7444 orFile("$targetD │ │ │ -00032570: 6972 2f24 6669 6c65 2229 290a 0920 2020 ir/$file")).. │ │ │ -00032580: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ -00032590: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000325a0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -000325b0: 7227 203d 3e20 5b22 3c24 7461 7267 6574 r' => ["<$target │ │ │ -000325c0: 4469 722f 2466 696c 653e 2077 6173 206e Dir/$file> was n │ │ │ -000325d0: 6f74 2063 7265 6174 6564 2028 3129 225d ot created (1)"] │ │ │ -000325e0: 293b 0a09 096e 6578 743b 0a09 2020 2020 );...next;.. │ │ │ -000325f0: 7d0a 2020 2020 2020 2020 2020 2020 6966 }. if │ │ │ -00032600: 2028 2470 7265 7365 7276 6550 6572 6d73 ($preservePerms │ │ │ -00032610: 2061 6e64 206e 6f74 2024 6c61 7465 4c69 and not $lateLi │ │ │ -00032620: 6e6b 7329 0a09 2020 2020 7b0a 2020 2020 nks).. {. │ │ │ -00032630: 2020 2020 2020 2020 2020 2020 6368 6f77 chow │ │ │ -00032640: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, "$ │ │ │ -00032650: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ -00032660: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -00032670: 2020 6368 6d6f 6420 246d 6f64 652c 2022 chmod $mode, " │ │ │ -00032680: 2474 6172 6765 7444 6972 2f24 6669 6c65 $targetDir/$file │ │ │ -00032690: 223b 0a20 2020 2020 2020 2020 2020 2020 ";. │ │ │ -000326a0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime, │ │ │ -000326b0: 2024 6d74 696d 652c 2022 2464 6972 2f24 $mtime, "$dir/$ │ │ │ -000326c0: 6669 6c65 2220 6966 2024 7265 7365 7441 file" if $resetA │ │ │ -000326d0: 7469 6d65 3b0a 2020 2020 2020 2020 2020 time;. │ │ │ -000326e0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati │ │ │ -000326f0: 6d65 2c20 246d 7469 6d65 2c20 2224 7461 me, $mtime, "$ta │ │ │ -00032700: 7267 6574 4469 722f 2466 696c 6522 3b0a rgetDir/$file";. │ │ │ -00032710: 2020 2020 2020 2020 2020 2020 7d0a 0a20 }.. │ │ │ -00032720: 2020 2020 2020 2020 2020 206d 7920 2469 my $i │ │ │ -00032730: 6e6f 6465 4261 636b 7570 203d 2028 7374 nodeBackup = (st │ │ │ -00032740: 6174 2822 2474 6172 6765 7444 6972 2f24 at("$targetDir/$ │ │ │ -00032750: 6669 6c65 2229 295b 315d 3b0a 0920 2020 file"))[1];.. │ │ │ -00032760: 2024 696e 6f64 6542 6163 6b75 7020 3d20 $inodeBackup = │ │ │ -00032770: 3020 756e 6c65 7373 2024 696e 6f64 6542 0 unless $inodeB │ │ │ -00032780: 6163 6b75 703b 2020 2023 2069 6620 7469 ackup; # if ti │ │ │ -00032790: 6d69 6e67 2069 7373 7565 2c0a 0920 2020 ming issue,.. │ │ │ -000327a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000327b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000327c0: 2020 2020 2020 2020 2023 2076 616c 7565 # value │ │ │ -000327d0: 2069 7320 6e6f 7420 7573 6564 2061 7420 is not used at │ │ │ -000327e0: 616c 6c0a 0a20 2020 2020 2020 2020 2020 all.. │ │ │ -000327f0: 2069 6620 2840 2473 7464 6572 7220 3e20 if (@$stderr > │ │ │ -00032800: 3029 0a20 2020 2020 2020 2020 2020 207b 0). { │ │ │ -00032810: 0a09 0975 6e6c 6573 7320 282d 6520 2224 ...unless (-e "$ │ │ │ -00032820: 6469 722f 2466 696c 6522 2920 2320 6669 dir/$file") # fi │ │ │ -00032830: 6c65 2077 6173 2064 656c 6574 6564 2064 le was deleted d │ │ │ -00032840: 7572 696e 6720 636f 7079 696e 670a 0909 uring copying... │ │ │ -00032850: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog-> │ │ │ -00032860: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00032870: 2027 5727 2c0a 0909 0909 2020 272d 7374 'W',..... '-st │ │ │ -00032880: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... ["fi │ │ │ -00032890: 6c65 203c 2464 6972 2f24 6669 6c65 3e20 le <$dir/$file> │ │ │ -000328a0: 6465 6c65 7465 6420 6475 7269 6e67 2062 deleted during b │ │ │ -000328b0: 6163 6b75 7020 2832 2922 5d29 3b0a 0909 ackup (2)"]);... │ │ │ -000328c0: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... │ │ │ -000328d0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -000328e0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -000328f0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ -00032900: 0a09 0909 0920 205b 2263 6f70 7969 6e67 ..... ["copying │ │ │ -00032910: 203c 2464 6972 2f24 6669 6c65 3e20 2d3e <$dir/$file> -> │ │ │ -00032920: 203c 2474 6172 6765 7444 6972 2f24 6669 <$targetDir/$fi │ │ │ -00032930: 6c65 3e22 202e 0a09 0909 0920 2020 2220 le>" ...... " │ │ │ -00032940: 6765 6e65 7261 7465 6420 7468 6520 666f generated the fo │ │ │ -00032950: 6c6c 6f77 696e 6720 6572 726f 7220 6d65 llowing error me │ │ │ -00032960: 7373 6167 6573 3a22 2c0a 0909 0909 2020 ssages:",..... │ │ │ -00032970: 2040 2473 7464 6572 725d 293b 0a09 097d @$stderr]);...} │ │ │ -00032980: 0a09 0975 6e6c 696e 6b20 2224 7461 7267 ...unlink "$targ │ │ │ -00032990: 6574 4469 722f 2466 696c 6522 3b0a 2020 etDir/$file";. │ │ │ -000329a0: 2020 2020 2020 2020 2020 2020 2020 6e65 ne │ │ │ -000329b0: 7874 3b0a 2020 2020 2020 2020 2020 2020 xt;. │ │ │ -000329c0: 7d0a 0a09 2020 2020 6c6f 6361 6c20 2a54 }... local *T │ │ │ -000329d0: 4d50 4d44 353b 0a09 2020 2020 756e 6c65 MPMD5;.. unle │ │ │ -000329e0: 7373 2028 263a 3a77 6169 7446 6f72 4669 ss (&::waitForFi │ │ │ -000329f0: 6c65 2824 746d 704d 4435 4669 6c65 2920 le($tmpMD5File) │ │ │ -00032a00: 3d3d 2030 2061 6e64 0a09 096f 7065 6e28 == 0 and...open( │ │ │ -00032a10: 544d 504d 4435 2c20 2474 6d70 4d44 3546 TMPMD5, $tmpMD5F │ │ │ -00032a20: 696c 6529 290a 0920 2020 207b 0a09 0924 ile)).. {...$ │ │ │ -00032a30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00032a40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00032a50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00032a60: 5b22 6361 6e6e 6f74 2072 6561 6420 7265 ["cannot read re │ │ │ -00032a70: 6361 6c63 6564 206d 6435 7375 6d20 2220 calced md5sum " │ │ │ -00032a80: 2e0a 0909 0909 0920 226f 6620 3c24 7461 ....... "of <$ta │ │ │ -00032a90: 7267 6574 4469 722f 2466 696c 653e 2220 rgetDir/$file>" │ │ │ -00032aa0: 2e0a 0909 0909 0920 223b 2066 696c 6520 ....... "; file │ │ │ -00032ab0: 6973 206e 6f74 2062 6163 6b65 6420 7570 is not backed up │ │ │ -00032ac0: 2028 3129 225d 293b 0a09 096e 6578 743b (1)"]);...next; │ │ │ -00032ad0: 0a09 2020 2020 7d0a 0920 2020 206d 7920 .. }.. my │ │ │ -00032ae0: 246c 6173 744d 4435 203d 203c 544d 504d $lastMD5 = ;.. chomp │ │ │ -00032b00: 246c 6173 744d 4435 3b0a 0920 2020 206d $lastMD5;.. m │ │ │ -00032b10: 7920 246c 6173 7453 697a 6520 3d20 3c54 y $lastSize = ;.. cho │ │ │ -00032b30: 6d70 2024 6c61 7374 5369 7a65 3b0a 0920 mp $lastSize;.. │ │ │ -00032b40: 2020 2063 6c6f 7365 2854 4d50 4d44 3529 close(TMPMD5) │ │ │ -00032b50: 3b0a 0920 2020 2075 6e6c 696e 6b20 2474 ;.. unlink $t │ │ │ -00032b60: 6d70 4d44 3546 696c 653b 0a0a 0920 2020 mpMD5File;... │ │ │ -00032b70: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad │ │ │ -00032b80: 645f 6e6f 4d44 3565 6446 696c 6573 2831 d_noMD5edFiles(1 │ │ │ -00032b90: 293b 0a09 2020 2020 756e 6c65 7373 2028 );.. unless ( │ │ │ -00032ba0: 246c 6173 744d 4435 290a 0920 2020 207b $lastMD5).. { │ │ │ -00032bb0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00032bc0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W', │ │ │ -00032bd0: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -00032be0: 203d 3e0a 0909 0920 2020 2020 205b 2266 =>.... ["f │ │ │ -00032bf0: 696c 6520 3c24 6469 722f 2466 696c 653e ile <$dir/$file> │ │ │ -00032c00: 2064 656c 6574 6564 2064 7572 696e 6720 deleted during │ │ │ -00032c10: 6261 636b 7570 2028 3329 225d 290a 0909 backup (3)"])... │ │ │ -00032c20: 2020 2020 756e 6c65 7373 2065 7869 7374 unless exist │ │ │ -00032c30: 7320 2424 7375 7070 7265 7373 5761 726e s $$suppressWarn │ │ │ -00032c40: 696e 677b 2766 696c 6543 6861 6e67 6527 ing{'fileChange' │ │ │ -00032c50: 7d3b 0a09 096e 6578 743b 0a09 2020 2020 };...next;.. │ │ │ -00032c60: 7d0a 0920 2020 2069 6620 2824 6c61 7374 }.. if ($last │ │ │ -00032c70: 4d44 3520 6e65 2024 6d64 3520 6f72 2024 MD5 ne $md5 or $ │ │ │ -00032c80: 6c61 7374 5369 7a65 2021 3d20 2473 697a lastSize != $siz │ │ │ -00032c90: 6529 0a09 2020 2020 7b0a 0909 2470 724c e).. {...$prL │ │ │ -00032ca0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00032cb0: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... │ │ │ -00032cc0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>.... │ │ │ -00032cd0: 2020 2020 2020 5b22 6669 6c65 203c 2464 ["file <$d │ │ │ -00032ce0: 6972 2f24 6669 6c65 3e20 6368 616e 6765 ir/$file> change │ │ │ -00032cf0: 6420 6475 7269 6e67 2062 6163 6b75 7022 d during backup" │ │ │ -00032d00: 5d29 0a09 0920 2020 2075 6e6c 6573 7320 ])... unless │ │ │ -00032d10: 6578 6973 7473 2024 2473 7570 7072 6573 exists $$suppres │ │ │ -00032d20: 7357 6172 6e69 6e67 7b27 6669 6c65 4368 sWarning{'fileCh │ │ │ -00032d30: 616e 6765 277d 3b0a 0909 246d 6435 203d ange'};...$md5 = │ │ │ -00032d40: 2024 6c61 7374 4d44 353b 0a09 0924 7369 $lastMD5;...$si │ │ │ -00032d50: 7a65 203d 2024 6c61 7374 5369 7a65 3b0a ze = $lastSize;. │ │ │ -00032d60: 0920 2020 207d 0a0a 2020 2020 2020 2020 . }.. │ │ │ -00032d70: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00032d80: 7428 272d 6b69 6e64 2720 3d3e 2027 4427 t('-kind' => 'D' │ │ │ -00032d90: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00032da0: 2020 2020 2020 2020 2020 2020 272d 7374 '-st │ │ │ -00032db0: 7227 203d 3e0a 2020 2020 2020 2020 2020 r' =>. │ │ │ -00032dc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032dd0: 5b22 6669 6e69 7368 6564 2063 6f70 7920 ["finished copy │ │ │ -00032de0: 3c24 6469 722f 2466 696c 653e 2022 202e <$dir/$file> " . │ │ │ -00032df0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00032e00: 2020 2020 2020 2020 2020 2020 223c 2474 "<$t │ │ │ -00032e10: 6172 6765 7444 6972 2f24 6669 6c65 3e22 argetDir/$file>" │ │ │ -00032e20: 5d29 0a20 2020 2020 2020 2020 2020 2020 ]). │ │ │ -00032e30: 2020 2069 6620 2824 6465 6275 674d 6f64 if ($debugMod │ │ │ -00032e40: 6520 3e3d 2032 293b 0a0a 2020 2020 2020 e >= 2);.. │ │ │ -00032e50: 2020 2020 2020 246d 6169 6e3a 3a73 7461 $main::sta │ │ │ -00032e60: 742d 3e69 6e63 725f 6e6f 466f 726b 7343 t->incr_noForksC │ │ │ -00032e70: 5028 293b 0a20 2020 2020 2020 2020 2020 P();. │ │ │ -00032e80: 2024 6d61 696e 3a3a 7374 6174 2d3e 6164 $main::stat->ad │ │ │ -00032e90: 6453 756d 4e65 7743 6f70 7928 2473 697a dSumNewCopy($siz │ │ │ -00032ea0: 6529 3b0a 0a20 2020 2020 2020 2020 2020 e);.. │ │ │ -00032eb0: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s │ │ │ -00032ec0: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename' │ │ │ -00032ed0: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp │ │ │ -00032ee0: 6569 6368 6572 7420 696e 2064 626d 0a20 eichert in dbm. │ │ │ -00032ef0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032f00: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ -00032f10: 2d6d 6435 7375 6d27 203d 3e20 246d 6435 -md5sum' => $md5 │ │ │ -00032f20: 2c20 2020 2020 2320 2e6d 6435 7375 6d2d , # .md5sum- │ │ │ -00032f30: 4461 7465 690a 2020 2020 2020 2020 2020 Datei. │ │ │ -00032f40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032f50: 2020 2020 2020 272d 636f 6d70 7227 203d '-compr' = │ │ │ -00032f60: 3e20 2463 6f6d 7072 2c0a 2020 2020 2020 > $compr,. │ │ │ -00032f70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032f80: 2020 2020 2020 2020 2020 272d 6465 7627 '-dev' │ │ │ -00032f90: 203d 3e20 2464 6576 2c0a 2020 2020 2020 => $dev,. │ │ │ -00032fa0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032fb0: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod │ │ │ -00032fc0: 6527 203d 3e20 2469 6e6f 6465 2c0a 2020 e' => $inode,. │ │ │ -00032fd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00032fe0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00032ff0: 696e 6f64 6542 6163 6b75 7027 203d 3e20 inodeBackup' => │ │ │ -00033000: 2469 6e6f 6465 4261 636b 7570 2c0a 2020 $inodeBackup,. │ │ │ -00033010: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033020: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00033030: 6374 696d 6527 203d 3e20 2463 7469 6d65 ctime' => $ctime │ │ │ -00033040: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00033050: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033060: 2020 272d 6d74 696d 6527 203d 3e20 246d '-mtime' => $m │ │ │ -00033070: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. │ │ │ -00033080: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033090: 2020 2020 2020 272d 6174 696d 6527 203d '-atime' = │ │ │ -000330a0: 3e20 2461 7469 6d65 2c0a 2020 2020 2020 > $atime,. │ │ │ -000330b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000330c0: 2020 2020 2020 2020 2020 272d 7369 7a65 '-size │ │ │ -000330d0: 2720 3d3e 2024 7369 7a65 2c0a 2020 2020 ' => $size,. │ │ │ -000330e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000330f0: 2020 2020 2020 2020 2020 2020 272d 7569 '-ui │ │ │ -00033100: 6427 203d 3e20 2475 6964 2c0a 2020 2020 d' => $uid,. │ │ │ -00033110: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033120: 2020 2020 2020 2020 2020 2020 272d 6769 '-gi │ │ │ -00033130: 6427 203d 3e20 2467 6964 2c0a 2020 2020 d' => $gid,. │ │ │ -00033140: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033150: 2020 2020 2020 2020 2020 2020 272d 6d6f '-mo │ │ │ -00033160: 6465 2720 3d3e 2024 6d6f 6465 293b 0a0a de' => $mode);.. │ │ │ -00033170: 0a20 2020 2020 2020 2020 2020 2069 6620 . if │ │ │ -00033180: 2865 7869 7374 7320 2469 6e50 726f 6772 (exists $inProgr │ │ │ -00033190: 6573 737b 246d 6435 7d20 616e 640a 2020 ess{$md5} and. │ │ │ -000331a0: 2020 2020 2020 2020 2020 2020 2020 407b @{ │ │ │ -000331b0: 2469 6e50 726f 6772 6573 737b 246d 6435 $inProgress{$md5 │ │ │ -000331c0: 7d7d 203e 2030 2920 2023 2067 6570 7566 }} > 0) # gepuf │ │ │ -000331d0: 6665 7274 6520 4669 6c65 7320 6d69 740a ferte Files mit. │ │ │ -000331e0: 2020 2020 2020 2020 2020 2020 7b20 2020 { │ │ │ -000331f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00033200: 2020 2020 2020 2020 2020 2023 2067 6c65 # gle │ │ │ -00033210: 6963 6865 7220 6d64 3520 5375 6d6d 6520 icher md5 Summe │ │ │ -00033220: 6265 6172 6265 6974 656e 0a20 2020 2020 bearbeiten. │ │ │ -00033230: 2020 2020 2020 2020 2020 2024 6669 6c65 $file │ │ │ -00033240: 734c 6566 7420 3d20 313b 0a20 2020 2020 sLeft = 1;. │ │ │ -00033250: 2020 2020 2020 2020 2020 2024 7265 6164 $read │ │ │ -00033260: 4469 7241 6e64 4368 6563 6b2d 3e70 7573 DirAndCheck->pus │ │ │ -00033270: 6862 6163 6b28 2469 6e50 726f 6772 6573 hback($inProgres │ │ │ -00033280: 737b 246d 6435 7d2c 2024 7072 4c6f 672c s{$md5}, $prLog, │ │ │ -00033290: 0a09 0920 2020 2024 6465 6275 674d 6f64 ... $debugMod │ │ │ -000332a0: 6520 3e3d 2033 203f 2031 203a 2030 293b e >= 3 ? 1 : 0); │ │ │ -000332b0: 0a20 2020 2020 2020 2020 2020 207d 0a20 . }. │ │ │ -000332c0: 2020 2020 2020 2020 2020 2064 656c 6574 delet │ │ │ -000332d0: 6520 2469 6e50 726f 6772 6573 737b 246d e $inProgress{$m │ │ │ -000332e0: 6435 7d3b 0a20 2020 2020 2020 207d 0a0a d5};. }.. │ │ │ -000332f0: 0923 206e 6575 6520 426c 6f63 6b2d 6d64 .# neue Block-md │ │ │ -00033300: 3520 4a6f 6273 2065 696e 68c3 a467 656e 5 Jobs einh..gen │ │ │ -00033310: 0a09 7768 696c 6520 2824 7061 7246 6f72 ..while ($parFor │ │ │ -00033320: 6b42 6c6f 636b 2d3e 6765 744e 6f46 7265 kBlock->getNoFre │ │ │ -00033330: 6545 6e74 7269 6573 2829 203e 2030 2061 eEntries() > 0 a │ │ │ -00033340: 6e64 0a09 2020 2020 2020 2024 6669 666f nd.. $fifo │ │ │ -00033350: 426c 6f63 6b2d 3e67 6574 4e6f 5573 6564 Block->getNoUsed │ │ │ -00033360: 456e 7472 6965 7328 2920 3e20 3029 0a09 Entries() > 0).. │ │ │ -00033370: 7b0a 2020 2020 2020 2020 2020 2020 2320 {. # │ │ │ -00033380: 5765 2064 6964 2073 6f6d 6574 6869 6e67 We did something │ │ │ -00033390: 0a20 2020 2020 2020 2020 2020 2024 6d61 . $ma │ │ │ -000333a0: 696e 3a3a 7469 6e79 5761 6974 5363 6865 in::tinyWaitSche │ │ │ -000333b0: 6475 6c65 722d 3e72 6573 6574 2829 3b0a duler->reset();. │ │ │ -000333c0: 0a09 2020 2020 6d79 2028 2464 6576 6669 .. my ($devfi │ │ │ -000333d0: 6c65 2c20 4070 6172 616d 2920 3d20 407b le, @param) = @{ │ │ │ -000333e0: 2466 6966 6f42 6c6f 636b 2d3e 6765 7428 $fifoBlock->get( │ │ │ -000333f0: 297d 3b0a 0a09 2020 2020 2320 616c 6c65 )};... # alle │ │ │ -00033400: 206d 6435 2053 756d 6d65 6e20 6265 7265 md5 Summen bere │ │ │ -00033410: 6368 6e65 6e2c 0a23 7072 696e 7420 222d chnen,.#print "- │ │ │ -00033420: 3131 2d20 6368 6563 6b42 6c6f 636b 2c20 11- checkBlock, │ │ │ -00033430: 6669 666f 426c 6f63 6b2d 3e67 6574 3a20 fifoBlock->get: │ │ │ -00033440: 2464 6576 6669 6c65 5c6e 223b 0a09 2020 $devfile\n";.. │ │ │ -00033450: 2020 6d79 2024 746d 704e 616d 6520 3d20 my $tmpName = │ │ │ -00033460: 263a 3a75 6e69 7146 696c 654e 616d 6528 &::uniqFileName( │ │ │ -00033470: 2224 746d 7064 6972 2f73 746f 7265 4261 "$tmpdir/storeBa │ │ │ -00033480: 636b 7570 2d62 6c6f 636b 2e22 293b 0a23 ckup-block.");.# │ │ │ -00033490: 7072 696e 7420 222d 3132 2d5c 6e22 3b0a print "-12-\n";. │ │ │ -000334a0: 0920 2020 2069 6620 2824 6465 7666 696c . if ($devfil │ │ │ -000334b0: 6520 6571 2027 6669 6c65 2729 0a09 2020 e eq 'file').. │ │ │ -000334c0: 2020 7b0a 0909 6d79 2028 2464 6972 2c20 {...my ($dir, │ │ │ -000334d0: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi │ │ │ -000334e0: 642c 2024 6d6f 6465 2c20 2464 6576 2c0a d, $mode, $dev,. │ │ │ -000334f0: 0909 2020 2020 2469 6e6f 6465 2c20 2463 .. $inode, $c │ │ │ -00033500: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a │ │ │ -00033510: 7469 6d65 2c20 2473 697a 652c 2024 6368 time, $size, $ch │ │ │ -00033520: 6563 6b42 6c6f 636b 7342 532c 0a09 0920 eckBlocksBS,... │ │ │ -00033530: 2020 2024 636f 6d70 7265 7373 426c 6f63 $compressBloc │ │ │ -00033540: 6b2c 2024 626c 6f63 6b52 6561 6429 203d k, $blockRead) = │ │ │ -00033550: 2028 4070 6172 616d 293b 0a0a 0909 756e (@param);....un │ │ │ -00033560: 6c65 7373 2028 246c 6174 654c 696e 6b73 less ($lateLinks │ │ │ -00033570: 290a 0909 7b0a 0909 2020 2020 6d6b 6469 )...{... mkdi │ │ │ -00033580: 7220 2224 7461 7267 6574 4469 722f 2466 r "$targetDir/$f │ │ │ -00033590: 696c 6522 206f 720a 0909 0924 7072 4c6f ile" or....$prLo │ │ │ -000335a0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000335b0: 203d 3e20 2745 272c 0a09 0909 0920 2020 => 'E',..... │ │ │ -000335c0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -000335d0: 616e 6e6f 7420 6d6b 6469 7220 3c24 7461 annot mkdir <$ta │ │ │ -000335e0: 7267 6574 4469 722f 2466 696c 653e 225d rgetDir/$file>"] │ │ │ -000335f0: 2c0a 0909 0909 2020 2020 2020 272d 6578 ,..... '-ex │ │ │ -00033600: 6974 2720 3d3e 2031 293b 0a09 0920 2020 it' => 1);... │ │ │ -00033610: 2063 686f 776e 2024 7569 642c 2024 6769 chown $uid, $gi │ │ │ -00033620: 642c 2022 2474 6172 6765 7444 6972 2f24 d, "$targetDir/$ │ │ │ -00033630: 6669 6c65 223b 0a09 097d 0a0a 0909 2470 file";...}....$p │ │ │ -00033640: 6172 466f 726b 426c 6f63 6b2d 3e61 6464 arForkBlock->add │ │ │ -00033650: 5f6e 6f62 6c6f 636b 2827 2d66 756e 6374 _noblock('-funct │ │ │ -00033660: 696f 6e27 203d 3e20 5c26 3a3a 6361 6c63 ion' => \&::calc │ │ │ -00033670: 426c 6f63 6b4d 4435 5375 6d73 2c0a 0909 BlockMD5Sums,... │ │ │ -00033680: 0909 0920 2020 272d 6675 6e63 5061 7227 ... '-funcPar' │ │ │ -00033690: 203d 3e20 5b22 2464 6972 2f24 6669 6c65 => ["$dir/$file │ │ │ -000336a0: 222c 2024 7461 7267 6574 4469 722c 0a09 ", $targetDir,.. │ │ │ -000336b0: 0909 0909 0909 2020 2466 696c 652c 2024 ...... $file, $ │ │ │ -000336c0: 6368 6563 6b42 6c6f 636b 7342 532c 0a09 checkBlocksBS,.. │ │ │ -000336d0: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres │ │ │ -000336e0: 7342 6c6f 636b 2c0a 0909 0909 0909 0920 sBlock,........ │ │ │ -000336f0: 2024 626c 6f63 6b52 6561 642c 0a09 0909 $blockRead,.... │ │ │ -00033700: 0909 0909 2020 2463 6f6d 7072 6573 7343 .... $compressC │ │ │ -00033710: 6f6d 6d61 6e64 2c0a 0909 0909 0909 0920 ommand,........ │ │ │ -00033720: 2024 636f 6d70 7265 7373 4f70 7469 6f6e $compressOption │ │ │ -00033730: 732c 0a09 0909 0909 0909 2020 2470 6f73 s,........ $pos │ │ │ -00033740: 7466 6978 2c0a 0909 0909 0909 0920 2024 tfix,........ $ │ │ │ -00033750: 6f6c 6446 696c 656e 616d 652c 2024 6c61 oldFilename, $la │ │ │ -00033760: 7465 4c69 6e6b 732c 0a09 0909 0909 0909 teLinks,........ │ │ │ -00033770: 2020 246c 6174 6543 6f6d 7072 6573 732c $lateCompress, │ │ │ -00033780: 0a09 0909 0909 0909 2020 246e 6f43 6f6d ........ $noCom │ │ │ -00033790: 7072 6573 732c 2024 7072 4c6f 672c 0a09 press, $prLog,.. │ │ │ -000337a0: 0909 0909 0909 2020 2474 6d70 4e61 6d65 ...... $tmpName │ │ │ -000337b0: 2c0a 0909 0909 0909 0920 2024 626c 6f63 ,........ $bloc │ │ │ -000337c0: 6b43 6865 636b 5375 6d46 696c 652c 0a09 kCheckSumFile,.. │ │ │ -000337d0: 0909 0909 0909 2020 2463 7469 6d65 2c20 ...... $ctime, │ │ │ -000337e0: 246d 7469 6d65 2c0a 0909 0909 0909 0920 $mtime,........ │ │ │ -000337f0: 2024 696e 7465 726e 616c 5069 7065 4275 $internalPipeBu │ │ │ -00033800: 6653 697a 655d 2c0a 0909 0909 0920 2020 fSize],...... │ │ │ -00033810: 272d 696e 666f 2720 3d3e 205b 2464 6576 '-info' => [$dev │ │ │ -00033820: 2c20 2469 6e6f 6465 2c20 2464 6972 2c0a , $inode, $dir,. │ │ │ -00033830: 0909 0909 0909 2020 2020 2020 2024 6669 ...... $fi │ │ │ -00033840: 6c65 2c20 2475 6964 2c20 2467 6964 2c0a le, $uid, $gid,. │ │ │ -00033850: 0909 0909 0909 2020 2020 2020 2024 6d6f ...... $mo │ │ │ -00033860: 6465 2c0a 0909 0909 0909 2020 2020 2020 de,....... │ │ │ -00033870: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ -00033880: 0a09 0909 0909 0920 2020 2020 2020 2461 ....... $a │ │ │ -00033890: 7469 6d65 2c20 2473 697a 652c 0a09 0909 time, $size,.... │ │ │ -000338a0: 0909 0920 2020 2020 2020 2463 6f6d 7072 ... $compr │ │ │ -000338b0: 6573 7342 6c6f 636b 2c0a 0909 0909 0909 essBlock,....... │ │ │ -000338c0: 2020 2020 2020 2024 746d 704e 616d 655d $tmpName] │ │ │ -000338d0: 293b 0a0a 0909 2470 724c 6f67 2d3e 7072 );....$prLog->pr │ │ │ -000338e0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000338f0: 4927 2c0a 0909 0920 2020 2020 2027 2d73 I',.... '-s │ │ │ -00033900: 7472 2720 3d3e 205b 2273 6176 696e 6720 tr' => ["saving │ │ │ -00033910: 626c 6f63 6b65 6420 6669 6c65 203c 2466 blocked file <$f │ │ │ -00033920: 696c 653e 2028 2220 2e0a 0909 0920 2020 ile> (" ..... │ │ │ -00033930: 2020 2028 263a 3a68 756d 616e 5265 6164 (&::humanRead │ │ │ -00033940: 6162 6c65 2824 7369 7a65 2929 5b30 5d20 able($size))[0] │ │ │ -00033950: 2e20 2729 275d 293b 0a09 2020 2020 7d0a . ')']);.. }. │ │ │ -00033960: 0920 2020 2065 6c73 6966 2028 2464 6576 . elsif ($dev │ │ │ -00033970: 6669 6c65 2065 7120 2764 6576 6963 6527 file eq 'device' │ │ │ -00033980: 290a 0920 2020 207b 0a09 096d 7920 2824 ).. {...my ($ │ │ │ -00033990: 6465 7669 6365 2c20 2472 656c 4469 722c device, $relDir, │ │ │ -000339a0: 2024 626c 6f63 6b53 697a 652c 2024 636f $blockSize, $co │ │ │ -000339b0: 6d70 7265 7373 426c 6f63 6b2c 2024 7061 mpressBlock, $pa │ │ │ -000339c0: 7261 6c6c 656c 290a 0909 2020 2020 3d20 rallel)... = │ │ │ -000339d0: 2840 7061 7261 6d29 3b0a 0909 2462 6c6f (@param);...$blo │ │ │ -000339e0: 636b 5061 7261 6c6c 656c 203d 2024 7061 ckParallel = $pa │ │ │ -000339f0: 7261 6c6c 656c 3b0a 0909 6d79 2024 7265 rallel;...my $re │ │ │ -00033a00: 6c44 6972 3220 3d20 2464 6576 6963 653b lDir2 = $device; │ │ │ -00033a10: 0a09 0924 7265 6c44 6972 3220 3d7e 2073 ...$relDir2 =~ s │ │ │ -00033a20: 2f5c 2f2f 5f2f 673b 0a09 0924 7265 6c44 /\//_/g;...$relD │ │ │ -00033a30: 6972 3220 3d7e 2073 2f5c 415f 2a28 2e2a ir2 =~ s/\A_*(.* │ │ │ -00033a40: 295f 2a5c 5a2f 2431 2f3b 0a23 7072 696e )_*\Z/$1/;.#prin │ │ │ -00033a50: 7420 225c 6e56 4f52 206d 616b 6544 6972 t "\nVOR makeDir │ │ │ -00033a60: 5061 7468 4361 6368 6520 2474 6172 6765 PathCache $targe │ │ │ -00033a70: 7444 6972 2f24 7265 6c44 6972 2f24 7265 tDir/$relDir/$re │ │ │ -00033a80: 6c44 6972 325c 6e5c 7464 6576 6963 653d lDir2\n\tdevice= │ │ │ -00033a90: 2464 6576 6963 655c 6e5c 7474 6172 6765 $device\n\ttarge │ │ │ -00033aa0: 7444 6972 3d24 7461 7267 6574 4469 725c tDir=$targetDir\ │ │ │ -00033ab0: 6e22 3b0a 0909 4064 6576 4469 7273 203d n";...@devDirs = │ │ │ -00033ac0: 0a09 0920 2020 2026 3a3a 6d61 6b65 4469 ... &::makeDi │ │ │ -00033ad0: 7250 6174 6843 6163 6865 2822 2474 6172 rPathCache("$tar │ │ │ -00033ae0: 6765 7444 6972 2f24 7265 6c44 6972 2f24 getDir/$relDir/$ │ │ │ -00033af0: 7265 6c44 6972 3222 2c0a 0909 0909 0924 relDir2",......$ │ │ │ -00033b00: 7072 4c6f 6729 3b0a 0a23 0909 666f 7265 prLog);..#..fore │ │ │ -00033b10: 6163 6820 6d79 2024 6420 2840 6465 7644 ach my $d (@devD │ │ │ -00033b20: 6972 7329 0a23 0909 7b0a 2309 0920 2020 irs).#..{.#.. │ │ │ -00033b30: 2070 7269 6e74 2022 5c74 2464 5c6e 223b print "\t$d\n"; │ │ │ -00033b40: 0a23 0909 7d0a 2370 7269 6e74 2022 4e41 .#..}.#print "NA │ │ │ -00033b50: 4348 206d 616b 6544 6972 5061 7468 4361 CH makeDirPathCa │ │ │ -00033b60: 6368 6520 2474 6172 6765 7444 6972 2f24 che $targetDir/$ │ │ │ -00033b70: 7265 6c44 6972 2f24 7265 6c44 6972 325c relDir/$relDir2\ │ │ │ -00033b80: 6e22 3b0a 0909 2470 6172 466f 726b 426c n";...$parForkBl │ │ │ -00033b90: 6f63 6b2d 3e61 6464 5f6e 6f62 6c6f 636b ock->add_noblock │ │ │ -00033ba0: 2827 2d66 756e 6374 696f 6e27 203d 3e20 ('-function' => │ │ │ -00033bb0: 5c26 3a3a 6361 6c63 426c 6f63 6b4d 4435 \&::calcBlockMD5 │ │ │ -00033bc0: 5375 6d73 2c0a 0909 0909 0920 2020 272d Sums,...... '- │ │ │ -00033bd0: 6675 6e63 5061 7227 203d 3e20 5b24 6465 funcPar' => [$de │ │ │ -00033be0: 7669 6365 2c20 2474 6172 6765 7444 6972 vice, $targetDir │ │ │ -00033bf0: 2c0a 0909 0909 0909 0920 2022 2472 656c ,........ "$rel │ │ │ -00033c00: 4469 722f 2472 656c 4469 7232 222c 0a09 Dir/$relDir2",.. │ │ │ -00033c10: 0909 0909 0909 2020 2462 6c6f 636b 5369 ...... $blockSi │ │ │ -00033c20: 7a65 2c0a 0909 0909 0909 0920 2024 636f ze,........ $co │ │ │ -00033c30: 6d70 7265 7373 426c 6f63 6b2c 0a09 0909 mpressBlock,.... │ │ │ -00033c40: 0909 0909 2020 5b27 6464 272c 2022 6273 .... ['dd', "bs │ │ │ -00033c50: 3d24 626c 6f63 6b53 697a 6522 5d2c 0a09 =$blockSize"],.. │ │ │ -00033c60: 0909 0909 0909 2020 2463 6f6d 7072 6573 ...... $compres │ │ │ -00033c70: 7343 6f6d 6d61 6e64 2c0a 0909 0909 0909 sCommand,....... │ │ │ -00033c80: 0920 2024 636f 6d70 7265 7373 4f70 7469 . $compressOpti │ │ │ -00033c90: 6f6e 732c 0a09 0909 0909 0909 2020 2470 ons,........ $p │ │ │ -00033ca0: 6f73 7466 6978 2c0a 0909 0909 0909 0920 ostfix,........ │ │ │ -00033cb0: 2024 6f6c 6446 696c 656e 616d 652c 2024 $oldFilename, $ │ │ │ -00033cc0: 6c61 7465 4c69 6e6b 732c 0a09 0909 0909 lateLinks,...... │ │ │ -00033cd0: 0909 2020 246c 6174 6543 6f6d 7072 6573 .. $lateCompres │ │ │ -00033ce0: 732c 0a09 0909 0909 0909 2020 246e 6f43 s,........ $noC │ │ │ -00033cf0: 6f6d 7072 6573 732c 2024 7072 4c6f 672c ompress, $prLog, │ │ │ -00033d00: 0a09 0909 0909 0909 2020 2474 6d70 4e61 ........ $tmpNa │ │ │ -00033d10: 6d65 2c0a 0909 0909 0909 0920 2024 626c me,........ $bl │ │ │ -00033d20: 6f63 6b43 6865 636b 5375 6d46 696c 652c ockCheckSumFile, │ │ │ -00033d30: 0a09 0909 0909 0909 2020 302c 2030 2c0a ........ 0, 0,. │ │ │ -00033d40: 0909 0909 0909 0920 2024 696e 7465 726e ....... $intern │ │ │ -00033d50: 616c 5069 7065 4275 6653 697a 655d 2c0a alPipeBufSize],. │ │ │ -00033d60: 0909 0909 0920 2020 272d 696e 666f 2720 ..... '-info' │ │ │ -00033d70: 3d3e 205b 2744 4556 4943 4527 2c20 302c => ['DEVICE', 0, │ │ │ -00033d80: 2024 6465 7669 6365 2c0a 0909 0909 0909 $device,....... │ │ │ -00033d90: 2020 2020 2020 2022 2472 656c 4469 722f "$relDir/ │ │ │ -00033da0: 2472 656c 4469 7232 222c 0a09 0909 0909 $relDir2",...... │ │ │ -00033db0: 0920 2020 2020 2020 302c 2030 2c0a 0909 . 0, 0,... │ │ │ -00033dc0: 0909 0909 2020 2020 2020 2030 3630 302c .... 0600, │ │ │ -00033dd0: 0a09 0909 0909 0920 2020 2020 2020 302c ....... 0, │ │ │ -00033de0: 2030 2c0a 0909 0909 0909 2020 2020 2020 0,....... │ │ │ -00033df0: 2030 2c20 302c 0a09 0909 0909 0920 2020 0, 0,....... │ │ │ -00033e00: 2020 2020 2463 6f6d 7072 6573 7342 6c6f $compressBlo │ │ │ -00033e10: 636b 2c0a 0909 0909 0909 2020 2020 2020 ck,....... │ │ │ -00033e20: 2024 746d 704e 616d 655d 293b 0a09 0924 $tmpName]);...$ │ │ │ -00033e30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00033e40: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',.... │ │ │ -00033e50: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00033e60: 5b22 7361 7669 6e67 2064 6576 6963 6520 ["saving device │ │ │ -00033e70: 3c24 6465 7669 6365 3e20 746f 2022 202e <$device> to " . │ │ │ -00033e80: 0a09 0909 0909 2022 2474 6172 6765 7444 ...... "$targetD │ │ │ -00033e90: 6972 2f24 7265 6c44 6972 2f24 7265 6c44 ir/$relDir/$relD │ │ │ -00033ea0: 6972 3222 5d29 3b0a 0920 2020 207d 0a09 ir2"]);.. }.. │ │ │ -00033eb0: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {. │ │ │ -00033ec0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00033ed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00033ee0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00033ef0: 3d3e 205b 2261 7373 6572 7469 6f6e 203c => ["assertion < │ │ │ -00033f00: 2464 6576 6669 6c65 3e20 4070 6172 616d $devfile> @param │ │ │ -00033f10: 225d 2c0a 0909 0920 2020 2020 2027 2d65 "],.... '-e │ │ │ -00033f20: 7869 7427 203d 3e20 3129 3b0a 0920 2020 xit' => 1);.. │ │ │ -00033f30: 207d 0a23 7072 696e 7420 222d 3133 2d5c }.#print "-13-\ │ │ │ -00033f40: 6e22 3b0a 097d 0a23 7072 696e 7420 222d n";..}.#print "- │ │ │ -00033f50: 3134 2d5c 6e22 3b0a 0a20 2020 2020 2020 14-\n";.. │ │ │ -00033f60: 2023 206e 6575 6520 4b6f 7069 6572 2d4a # neue Kopier-J │ │ │ -00033f70: 6f62 7320 6569 6e68 c3a4 6e67 656e 0a20 obs einh..ngen. │ │ │ -00033f80: 2020 2020 2020 2077 6869 6c65 2028 2470 while ($p │ │ │ -00033f90: 6172 466f 726b 436f 7079 2d3e 6765 744e arForkCopy->getN │ │ │ -00033fa0: 6f46 7265 6545 6e74 7269 6573 2829 203e oFreeEntries() > │ │ │ -00033fb0: 2030 2061 6e64 0a20 2020 2020 2020 2020 0 and. │ │ │ -00033fc0: 2020 2020 2020 2466 6966 6f43 6f70 792d $fifoCopy- │ │ │ -00033fd0: 3e67 6574 4e6f 5573 6564 456e 7472 6965 >getNoUsedEntrie │ │ │ -00033fe0: 7328 2920 3e20 3029 0a20 2020 2020 2020 s() > 0). │ │ │ -00033ff0: 207b 0a20 2020 2020 2020 2020 2020 2023 {. # │ │ │ -00034000: 2057 6520 6469 6420 736f 6d65 7468 696e We did somethin │ │ │ -00034010: 670a 2020 2020 2020 2020 2020 2020 246d g. $m │ │ │ -00034020: 6169 6e3a 3a74 696e 7957 6169 7453 6368 ain::tinyWaitSch │ │ │ -00034030: 6564 756c 6572 2d3e 7265 7365 7428 293b eduler->reset(); │ │ │ -00034040: 0a0a 2020 2020 2020 2020 2020 2020 6d79 .. my │ │ │ -00034050: 2028 2464 6972 2c20 2466 696c 652c 2024 ($dir, $file, $ │ │ │ -00034060: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode │ │ │ -00034070: 2c20 246d 6435 2c20 2463 6f70 7943 6f6d , $md5, $copyCom │ │ │ -00034080: 7072 2920 3d0a 2020 2020 2020 2020 2020 pr) =. │ │ │ -00034090: 2020 2020 2020 407b 2466 6966 6f43 6f70 @{$fifoCop │ │ │ -000340a0: 792d 3e67 6574 2829 7d3b 2020 2020 2320 y->get()}; # │ │ │ -000340b0: 636f 7079 436f 6d70 7220 6973 2066 6f72 copyCompr is for │ │ │ -000340c0: 206c 6174 6543 6f6d 7072 6573 7369 6f6e lateCompression │ │ │ -000340d0: 0a09 2020 2020 756e 6c65 7373 2028 2d65 .. unless (-e │ │ │ -000340e0: 2022 2464 6972 2f24 6669 6c65 2229 2020 "$dir/$file") │ │ │ -000340f0: 2020 2320 6669 6c65 2077 6173 2064 656c # file was del │ │ │ -00034100: 6574 6564 2064 7572 696e 6720 7761 6974 eted during wait │ │ │ -00034110: 2069 6e20 7175 6575 650a 0920 2020 207b in queue.. { │ │ │ -00034120: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00034130: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W', │ │ │ -00034140: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -00034150: 203d 3e0a 0909 0920 2020 2020 205b 2266 =>.... ["f │ │ │ -00034160: 696c 6520 3c24 6469 722f 2466 696c 653e ile <$dir/$file> │ │ │ -00034170: 2064 656c 6574 6564 2064 7572 696e 6720 deleted during │ │ │ -00034180: 6261 636b 7570 2028 3429 225d 293b 0a09 backup (4)"]);.. │ │ │ -00034190: 096e 6578 743b 0a09 2020 2020 7d0a 2370 .next;.. }.#p │ │ │ -000341a0: 7269 6e74 2022 2d31 352d 2466 696c 655c rint "-15-$file\ │ │ │ -000341b0: 6e22 3b0a 2020 2020 2020 2020 2020 2020 n";. │ │ │ -000341c0: 6d79 2028 2464 6576 2c20 2469 6e6f 6465 my ($dev, $inode │ │ │ -000341d0: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime │ │ │ -000341e0: 2c20 2461 7469 6d65 2c20 2473 697a 6529 , $atime, $size) │ │ │ -000341f0: 203d 0a20 2020 2020 2020 2020 2020 2020 =. │ │ │ -00034200: 2020 2028 6c73 7461 7428 2224 6469 722f (lstat("$dir/ │ │ │ -00034210: 2466 696c 6522 2929 5b30 2c20 312c 2031 $file"))[0, 1, 1 │ │ │ -00034220: 302c 2039 2c20 382c 2037 5d3b 0a20 2020 0, 9, 8, 7];. │ │ │ -00034230: 2020 2020 2020 2020 2024 6d6f 6465 2026 $mode & │ │ │ -00034240: 3d20 3037 3737 373b 0a0a 0920 2020 206d = 07777;... m │ │ │ -00034250: 7920 2463 6f6d 7072 203d 2027 7527 3b0a y $compr = 'u';. │ │ │ -00034260: 2370 7269 6e74 2022 636f 7079 436f 6d70 #print "copyComp │ │ │ -00034270: 7220 3d20 3c24 636f 7079 436f 6d70 723e r = <$copyCompr> │ │ │ -00034280: 5c6e 223b 0a09 2020 2020 6966 2028 2463 \n";.. if ($c │ │ │ -00034290: 6f70 7943 6f6d 7072 2065 7120 2763 6f6d opyCompr eq 'com │ │ │ -000342a0: 7072 2729 0a09 2020 2020 7b0a 2370 7269 pr').. {.#pri │ │ │ -000342b0: 6e74 2022 2d31 362d 5c6e 223b 0a09 0924 nt "-16-\n";...$ │ │ │ -000342c0: 636f 6d70 7220 3d20 2763 273b 0a09 0923 compr = 'c';...# │ │ │ -000342d0: 2027 636f 6d70 7265 7373 2720 7265 6665 'compress' refe │ │ │ -000342e0: 7273 2074 6f20 656e 7472 7920 696e 202e rs to entry in . │ │ │ -000342f0: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf │ │ │ -00034300: 6f0a 0909 6d79 2024 6578 6973 7469 6e67 o...my $existing │ │ │ -00034310: 4669 6c65 203d 2024 6669 6c65 3b0a 0909 File = $file;... │ │ │ -00034320: 2465 7869 7374 696e 6746 696c 6520 3d7e $existingFile =~ │ │ │ -00034330: 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 0924 s/\n/\0/og;...$ │ │ │ -00034340: 7772 4c61 7465 4c69 6e6b 2d3e 7072 696e wrLateLink->prin │ │ │ -00034350: 7428 2263 6f6d 7072 6573 7320 246d 6435 t("compress $md5 │ │ │ -00034360: 5c6e 2465 7869 7374 696e 6746 696c 655c \n$existingFile\ │ │ │ -00034370: 6e22 293b 0a09 2020 2020 7d0a 0a20 2020 n");.. }.. │ │ │ -00034380: 2020 2020 2020 2020 2069 6620 2824 7369 if ($si │ │ │ -00034390: 7a65 203c 3d20 246d 6169 6e3a 3a6d 696e ze <= $main::min │ │ │ -000343a0: 436f 7079 5769 7468 466f 726b 2920 2320 CopyWithFork) # │ │ │ -000343b0: 6469 7265 6b74 206b 6f70 6965 7265 6e20 direkt kopieren │ │ │ -000343c0: 286f 686e 6520 666f 726b 290a 2020 2020 (ohne fork). │ │ │ -000343d0: 2020 2020 2020 2020 7b0a 2370 7269 6e74 {.#print │ │ │ -000343e0: 2022 2d31 372d 5c6e 223b 0a20 2020 2020 "-17-\n";. │ │ │ -000343f0: 2020 2020 2020 2020 2020 2024 7072 4c6f $prLo │ │ │ -00034400: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00034410: 203d 3e20 2744 272c 0a20 2020 2020 2020 => 'D',. │ │ │ -00034420: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034430: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' => │ │ │ -00034440: 205b 2263 6f70 7920 2464 6972 2f24 6669 ["copy $dir/$fi │ │ │ -00034450: 6c65 2024 7461 7267 6574 4469 722f 2466 le $targetDir/$f │ │ │ -00034460: 696c 6522 5d29 0a20 2020 2020 2020 2020 ile"]). │ │ │ -00034470: 2020 2020 2020 2020 2020 2069 6620 2824 if ($ │ │ │ -00034480: 6465 6275 674d 6f64 6520 3e3d 2032 293b debugMode >= 2); │ │ │ -00034490: 0a0a 2020 2020 2020 2020 2020 2020 2020 .. │ │ │ -000344a0: 2020 756e 6c65 7373 2028 263a 3a63 6f70 unless (&::cop │ │ │ -000344b0: 7946 696c 6528 2224 6469 722f 2466 696c yFile("$dir/$fil │ │ │ -000344c0: 6522 2c20 2224 7461 7267 6574 4469 722f e", "$targetDir/ │ │ │ -000344d0: 2466 696c 6522 2c20 2470 724c 6f67 2929 $file", $prLog)) │ │ │ -000344e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -000344f0: 207b 0a20 2020 2020 2020 2020 2020 2020 {. │ │ │ -00034500: 2020 2020 2020 2024 7072 4c6f 672d 3e70 $prLog->p │ │ │ -00034510: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00034520: 2745 272c 0a20 2020 2020 2020 2020 2020 'E',. │ │ │ -00034530: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034540: 2020 2020 2020 2027 2d73 7472 2720 3d3e '-str' => │ │ │ -00034550: 205b 2263 6f75 6c64 206e 6f74 2063 6f70 ["could not cop │ │ │ -00034560: 7920 2464 6972 2f24 6669 6c65 2022 202e y $dir/$file " . │ │ │ -00034570: 0a09 0909 0909 2020 2020 2022 2474 6172 ...... "$tar │ │ │ -00034580: 6765 7444 6972 2f24 6669 6c65 225d 293b getDir/$file"]); │ │ │ -00034590: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -000345a0: 2020 2020 206e 6578 743b 0a20 2020 2020 next;. │ │ │ -000345b0: 2020 2020 2020 2020 2020 207d 0a0a 0909 }.... │ │ │ -000345c0: 6d79 2024 6c61 7374 4d44 3520 3d20 263a my $lastMD5 = &: │ │ │ -000345d0: 3a63 616c 634d 4435 2822 2464 6972 2f24 :calcMD5("$dir/$ │ │ │ -000345e0: 6669 6c65 2229 3b0a 0909 6966 2028 2464 file");...if ($d │ │ │ -000345f0: 6562 7567 4d6f 6465 203e 3d20 3329 0a09 ebugMode >= 3).. │ │ │ -00034600: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog- │ │ │ -00034610: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00034620: 3e20 2744 272c 0a09 0909 0920 2027 2d73 > 'D',..... '-s │ │ │ -00034630: 7472 2720 3d3e 205b 226d 6435 7375 6d20 tr' => ["md5sum │ │ │ -00034640: 2872 6563 616c 6329 2024 6469 722f 2466 (recalc) $dir/$f │ │ │ -00034650: 696c 6522 5d29 3b0a 0909 7d0a 0909 246d ile"]);...}...$m │ │ │ -00034660: 6169 6e3a 3a73 7461 742d 3e61 6464 5f6e ain::stat->add_n │ │ │ -00034670: 6f4d 4435 6564 4669 6c65 7328 3129 3b0a oMD5edFiles(1);. │ │ │ -00034680: 0909 756e 6c65 7373 2028 246c 6173 744d ..unless ($lastM │ │ │ -00034690: 4435 290a 0909 7b0a 0909 2020 2020 2470 D5)...{... $p │ │ │ -000346a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -000346b0: 6e64 2720 3d3e 2027 5727 2c0a 0909 0909 nd' => 'W',..... │ │ │ -000346c0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ -000346d0: 2020 5b22 6669 6c65 203c 2464 6972 2f24 ["file <$dir/$ │ │ │ -000346e0: 6669 6c65 3e20 6465 6c65 7465 6420 6475 file> deleted du │ │ │ -000346f0: 7269 6e67 2062 6163 6b75 7020 2835 2922 ring backup (5)" │ │ │ -00034700: 5d29 0a09 0909 756e 6c65 7373 2065 7869 ])....unless exi │ │ │ -00034710: 7374 7320 2424 7375 7070 7265 7373 5761 sts $$suppressWa │ │ │ -00034720: 726e 696e 677b 2766 696c 6543 6861 6e67 rning{'fileChang │ │ │ -00034730: 6527 7d3b 0a0a 0909 2020 2020 6e65 7874 e'};.... next │ │ │ -00034740: 3b0a 0909 7d0a 0909 6966 2028 246c 6173 ;...}...if ($las │ │ │ -00034750: 744d 4435 206e 6520 246d 6435 290a 0909 tMD5 ne $md5)... │ │ │ -00034760: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog-> │ │ │ -00034770: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00034780: 2027 5727 2c0a 0909 0909 2020 272d 7374 'W',..... '-st │ │ │ -00034790: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... ["fi │ │ │ -000347a0: 6c65 203c 2464 6972 2f24 6669 6c65 3e20 le <$dir/$file> │ │ │ -000347b0: 6368 616e 6765 6420 6475 7269 6e67 2062 changed during b │ │ │ -000347c0: 6163 6b75 7022 5d29 0a09 0909 756e 6c65 ackup"])....unle │ │ │ -000347d0: 7373 2065 7869 7374 7320 2424 7375 7070 ss exists $$supp │ │ │ -000347e0: 7265 7373 5761 726e 696e 677b 2766 696c ressWarning{'fil │ │ │ -000347f0: 6543 6861 6e67 6527 7d3b 0a0a 0909 2020 eChange'};.... │ │ │ -00034800: 2020 246d 6435 203d 2027 6727 2078 2033 $md5 = 'g' x 3 │ │ │ -00034810: 323b 0a09 097d 0a0a 2020 2020 2020 2020 2;...}.. │ │ │ -00034820: 2020 2020 2020 2020 6966 2028 2470 7265 if ($pre │ │ │ -00034830: 7365 7276 6550 6572 6d73 2061 6e64 206e servePerms and n │ │ │ -00034840: 6f74 2024 6c61 7465 4c69 6e6b 7329 0a09 ot $lateLinks).. │ │ │ -00034850: 097b 0a20 2020 2020 2020 2020 2020 2020 .{. │ │ │ -00034860: 2020 2020 2020 2063 686f 776e 2024 7569 chown $ui │ │ │ -00034870: 642c 2024 6769 642c 2022 2474 6172 6765 d, $gid, "$targe │ │ │ -00034880: 7444 6972 2f24 6669 6c65 223b 0a20 2020 tDir/$file";. │ │ │ -00034890: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000348a0: 2063 686d 6f64 2024 6d6f 6465 2c20 2224 chmod $mode, "$ │ │ │ -000348b0: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ -000348c0: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -000348d0: 2020 2020 2020 7574 696d 6520 2461 7469 utime $ati │ │ │ -000348e0: 6d65 2c20 246d 7469 6d65 2c20 2224 6469 me, $mtime, "$di │ │ │ -000348f0: 722f 2466 696c 6522 2069 6620 2472 6573 r/$file" if $res │ │ │ -00034900: 6574 4174 696d 653b 0a20 2020 2020 2020 etAtime;. │ │ │ -00034910: 2020 2020 2020 2020 2020 2020 2075 7469 uti │ │ │ -00034920: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim │ │ │ -00034930: 652c 2022 2474 6172 6765 7444 6972 2f24 e, "$targetDir/$ │ │ │ -00034940: 6669 6c65 223b 0a20 2020 2020 2020 2020 file";. │ │ │ -00034950: 2020 2020 2020 207d 0a0a 2020 2020 2020 }.. │ │ │ -00034960: 2020 2020 2020 2020 2020 6d79 2024 696e my $in │ │ │ -00034970: 6f64 6542 6163 6b75 7020 3d20 2873 7461 odeBackup = (sta │ │ │ -00034980: 7428 2224 7461 7267 6574 4469 722f 2466 t("$targetDir/$f │ │ │ -00034990: 696c 6522 2929 5b31 5d3b 0a09 0924 696e ile"))[1];...$in │ │ │ -000349a0: 6f64 6542 6163 6b75 7020 3d20 3020 756e odeBackup = 0 un │ │ │ -000349b0: 6c65 7373 2024 696e 6f64 6542 6163 6b75 less $inodeBacku │ │ │ -000349c0: 703b 2020 2023 2069 6620 7469 6d69 6e67 p; # if timing │ │ │ -000349d0: 2069 7373 7565 2c0a 0920 2020 2020 2020 issue,.. │ │ │ -000349e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000349f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034a00: 2020 2020 2023 2076 616c 7565 2069 7320 # value is │ │ │ -00034a10: 6e6f 7420 7573 6564 2061 7420 616c 6c0a not used at all. │ │ │ -00034a20: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00034a30: 2024 616b 7446 696c 656e 616d 652d 3e73 $aktFilename->s │ │ │ -00034a40: 746f 7265 2827 2d66 696c 656e 616d 6527 tore('-filename' │ │ │ -00034a50: 203d 3e20 2466 696c 652c 2020 2320 7370 => $file, # sp │ │ │ -00034a60: 6569 6368 6572 7420 696e 2064 626d 0a20 eichert in dbm. │ │ │ -00034a70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034a80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034a90: 2020 2027 2d6d 6435 7375 6d27 203d 3e20 '-md5sum' => │ │ │ -00034aa0: 246d 6435 2c20 2020 2020 2320 2e6d 6435 $md5, # .md5 │ │ │ -00034ab0: 7375 6d2d 4461 7465 690a 2020 2020 2020 sum-Datei. │ │ │ -00034ac0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034ad0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00034ae0: 636f 6d70 7227 203d 3e20 2463 6f6d 7072 compr' => $compr │ │ │ -00034af0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00034b00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034b10: 2020 2020 2020 272d 6465 7627 203d 3e20 '-dev' => │ │ │ -00034b20: 2464 6576 2c0a 2020 2020 2020 2020 2020 $dev,. │ │ │ -00034b30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034b40: 2020 2020 2020 2020 2020 272d 696e 6f64 '-inod │ │ │ -00034b50: 6527 203d 3e20 2469 6e6f 6465 2c0a 2020 e' => $inode,. │ │ │ -00034b60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034b70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034b80: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup' │ │ │ -00034b90: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup │ │ │ -00034ba0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00034bb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034bc0: 2020 2020 2020 272d 6374 696d 6527 203d '-ctime' = │ │ │ -00034bd0: 3e20 2463 7469 6d65 2c0a 2020 2020 2020 > $ctime,. │ │ │ -00034be0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034bf0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00034c00: 6d74 696d 6527 203d 3e20 246d 7469 6d65 mtime' => $mtime │ │ │ -00034c10: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00034c20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034c30: 2020 2020 2020 272d 6174 696d 6527 203d '-atime' = │ │ │ -00034c40: 3e20 2461 7469 6d65 2c0a 2020 2020 2020 > $atime,. │ │ │ -00034c50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034c60: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00034c70: 7369 7a65 2720 3d3e 2024 7369 7a65 2c0a size' => $size,. │ │ │ -00034c80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034c90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034ca0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u │ │ │ -00034cb0: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. │ │ │ -00034cc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034cd0: 2020 2020 2020 2020 272d 6769 6427 203d '-gid' = │ │ │ -00034ce0: 3e20 2467 6964 2c0a 2020 2020 2020 2020 > $gid,. │ │ │ -00034cf0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034d00: 2020 2020 2020 2020 2020 2020 272d 6d6f '-mo │ │ │ -00034d10: 6465 2720 3d3e 2024 6d6f 6465 293b 0a0a de' => $mode);.. │ │ │ -00034d20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034d30: 246d 6169 6e3a 3a73 7461 742d 3e61 6464 $main::stat->add │ │ │ -00034d40: 5375 6d4e 6577 436f 7079 2824 7369 7a65 SumNewCopy($size │ │ │ -00034d50: 293b 0a0a 2020 2020 2020 2020 2020 2020 );.. │ │ │ -00034d60: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $ │ │ │ -00034d70: 696e 5072 6f67 7265 7373 7b24 6d64 357d inProgress{$md5} │ │ │ -00034d80: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ -00034d90: 2020 2020 2020 2020 2040 7b24 696e 5072 @{$inPr │ │ │ -00034da0: 6f67 7265 7373 7b24 6d64 357d 7d20 3e20 ogress{$md5}} > │ │ │ -00034db0: 3029 2020 2320 6765 7075 6666 6572 7465 0) # gepufferte │ │ │ -00034dc0: 2046 696c 6573 206d 6974 0a20 2020 2020 Files mit. │ │ │ -00034dd0: 2020 2020 2020 2020 2020 207b 2020 2020 { │ │ │ -00034de0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034df0: 2020 2020 2020 2020 2020 2320 676c 6569 # glei │ │ │ -00034e00: 6368 6572 206d 6435 2053 756d 6d65 2062 cher md5 Summe b │ │ │ -00034e10: 6561 7262 6569 7465 6e0a 2020 2020 2020 earbeiten. │ │ │ -00034e20: 2020 2020 2020 2020 2020 2020 2020 2466 $f │ │ │ -00034e30: 696c 6573 4c65 6674 203d 2031 3b0a 2020 ilesLeft = 1;. │ │ │ -00034e40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034e50: 2020 2472 6561 6444 6972 416e 6443 6865 $readDirAndChe │ │ │ -00034e60: 636b 2d3e 7075 7368 6261 636b 2824 696e ck->pushback($in │ │ │ -00034e70: 5072 6f67 7265 7373 7b24 6d64 357d 2c20 Progress{$md5}, │ │ │ -00034e80: 2470 724c 6f67 2c0a 0909 0924 6465 6275 $prLog,....$debu │ │ │ -00034e90: 674d 6f64 6520 3e3d 2033 203f 2031 203a gMode >= 3 ? 1 : │ │ │ -00034ea0: 2030 293b 0a20 2020 2020 2020 2020 2020 0);. │ │ │ -00034eb0: 2020 2020 207d 0a20 2020 2020 2020 2020 }. │ │ │ -00034ec0: 2020 2020 2020 2064 656c 6574 6520 2469 delete $i │ │ │ -00034ed0: 6e50 726f 6772 6573 737b 246d 6435 7d3b nProgress{$md5}; │ │ │ -00034ee0: 0a20 2020 2020 2020 2020 2020 207d 0a20 . }. │ │ │ -00034ef0: 2020 2020 2020 2020 2020 2065 6c73 6520 else │ │ │ -00034f00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034f10: 2020 2020 2020 2020 2320 6d69 7420 666f # mit fo │ │ │ -00034f20: 726b 2f63 702c 7273 796e 6320 6b6f 7069 rk/cp,rsync kopi │ │ │ -00034f30: 6572 656e 0a20 2020 2020 2020 2020 2020 eren. │ │ │ -00034f40: 207b 0a20 2020 2020 2020 2020 2020 2020 {. │ │ │ -00034f50: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00034f60: 2827 2d6b 696e 6427 203d 3e20 2744 272c ('-kind' => 'D', │ │ │ -00034f70: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00034f80: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ -00034f90: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. │ │ │ -00034fa0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034fb0: 2020 2020 2020 205b 2263 6f70 7920 2464 ["copy $d │ │ │ -00034fc0: 6972 2f24 6669 6c65 2024 7461 7267 6574 ir/$file $target │ │ │ -00034fd0: 4469 722f 2466 696c 6522 5d29 0a20 2020 Dir/$file"]). │ │ │ -00034fe0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00034ff0: 2069 6620 2824 6465 6275 674d 6f64 6520 if ($debugMode │ │ │ -00035000: 3e3d 2032 293b 0a0a 2309 0969 6620 2824 >= 2);..#..if ($ │ │ │ -00035010: 6c61 7465 4c69 6e6b 7353 7769 7463 6865 lateLinksSwitche │ │ │ -00035020: 644f 6666 290a 2309 097b 0a23 0909 2020 dOff).#..{.#.. │ │ │ -00035030: 2020 6d79 2028 2464 6972 2c20 2466 696c my ($dir, $fil │ │ │ -00035040: 6529 203d 0a23 0909 0926 3a3a 7370 6c69 e) =.#...&::spli │ │ │ -00035050: 7446 696c 6544 6972 2822 2474 6172 6765 tFileDir("$targe │ │ │ -00035060: 7444 6972 2f24 6669 6c65 2229 3b0a 2309 tDir/$file");.#. │ │ │ -00035070: 0920 2020 2026 3a3a 6d61 6b65 4469 7250 . &::makeDirP │ │ │ -00035080: 6174 6828 2464 6972 2c20 2470 724c 6f67 ath($dir, $prLog │ │ │ -00035090: 293b 0a23 0909 7d0a 0909 0a09 096d 7920 );.#..}......my │ │ │ -000350a0: 2474 6d70 4d44 3546 696c 6520 3d20 263a $tmpMD5File = &: │ │ │ -000350b0: 3a75 6e69 7146 696c 654e 616d 6528 2224 :uniqFileName("$ │ │ │ -000350c0: 746d 7064 6972 2f73 746f 7265 4261 636b tmpdir/storeBack │ │ │ -000350d0: 7570 2d6d 6435 2e22 293b 0a09 0924 7061 up-md5.");...$pa │ │ │ -000350e0: 7246 6f72 6b43 6f70 792d 3e61 6464 5f6e rForkCopy->add_n │ │ │ -000350f0: 6f62 6c6f 636b 2827 2d65 7865 6327 203d oblock('-exec' = │ │ │ -00035100: 3e20 246d 6169 6e3a 3a73 7462 754d 6435 > $main::stbuMd5 │ │ │ -00035110: 6370 2c0a 0909 0909 0920 2027 2d70 6172 cp,...... '-par │ │ │ -00035120: 616d 2720 3d3e 0a09 0909 0909 2020 5b22 am' =>...... [" │ │ │ -00035130: 2464 6972 2f24 6669 6c65 222c 0a09 0909 $dir/$file",.... │ │ │ -00035140: 0909 2020 2224 7461 7267 6574 4469 722f .. "$targetDir/ │ │ │ -00035150: 2466 696c 6522 2c20 2474 6d70 4d44 3546 $file", $tmpMD5F │ │ │ -00035160: 696c 655d 2c0a 2020 2020 2020 2020 2020 ile],. │ │ │ -00035170: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035180: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035190: 272d 776f 726b 696e 6744 6972 2720 3d3e '-workingDir' => │ │ │ -000351a0: 2027 2e27 2c0a 2020 2020 2020 2020 2020 '.',. │ │ │ -000351b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000351c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000351d0: 272d 6f75 7452 616e 646f 6d27 203d 3e20 '-outRandom' => │ │ │ -000351e0: 2224 746d 7064 6972 2f73 7464 6572 7222 "$tmpdir/stderr" │ │ │ -000351f0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00035200: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035210: 2020 2020 2020 2020 2020 2020 272d 696e '-in │ │ │ -00035220: 666f 2720 3d3e 0a20 2020 2020 2020 2020 fo' =>. │ │ │ -00035230: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035240: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035250: 205b 2464 6576 2c20 2469 6e6f 6465 2c20 [$dev, $inode, │ │ │ -00035260: 2464 6972 2c20 2466 696c 652c 2024 7569 $dir, $file, $ui │ │ │ -00035270: 642c 0a20 2020 2020 2020 2020 2020 2020 d,. │ │ │ -00035280: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035290: 2020 2020 2020 2020 2020 2020 2020 2467 $g │ │ │ -000352a0: 6964 2c20 246d 6f64 652c 2024 6d64 352c id, $mode, $md5, │ │ │ -000352b0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ -000352c0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -000352d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000352e0: 2020 2020 2020 2020 2020 2020 2461 7469 $ati │ │ │ -000352f0: 6d65 2c20 2473 697a 652c 2024 636f 6d70 me, $size, $comp │ │ │ -00035300: 722c 2024 746d 704d 4435 4669 6c65 5d29 r, $tmpMD5File]) │ │ │ -00035310: 0a09 0920 2020 206f 7220 6469 6520 224d ... or die "M │ │ │ -00035320: 7573 7420 6e6f 7420 6861 7070 656e 2028 ust not happen ( │ │ │ -00035330: 636f 7079 2922 3b0a 2020 2020 2020 2020 copy)";. │ │ │ -00035340: 2020 2020 7d0a 2020 2020 2020 2020 7d0a }. }. │ │ │ -00035350: 2370 7269 6e74 2022 2d31 382d 5c6e 223b #print "-18-\n"; │ │ │ -00035360: 0a0a 2020 2020 2020 2020 2320 4b6f 6d70 .. # Komp │ │ │ -00035370: 7269 6d69 6572 204a 6f62 7320 6162 686f rimier Jobs abho │ │ │ -00035380: 6c65 6e0a 2020 2020 2020 2020 666f 7265 len. fore │ │ │ -00035390: 6163 6820 6d79 2024 6920 2824 7061 7246 ach my $i ($parF │ │ │ -000353a0: 6f72 6b43 6f6d 7072 2d3e 6368 6563 6b41 orkCompr->checkA │ │ │ -000353b0: 6c6c 2829 290a 2020 2020 2020 2020 7b0a ll()). {. │ │ │ -000353c0: 2370 7269 6e74 2022 2d31 392d 5c6e 223b #print "-19-\n"; │ │ │ -000353d0: 0a20 2020 2020 2020 2020 2020 2023 2057 . # W │ │ │ -000353e0: 6520 6469 6420 736f 6d65 7468 696e 670a e did something. │ │ │ -000353f0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai │ │ │ -00035400: 6e3a 3a74 696e 7957 6169 7453 6368 6564 n::tinyWaitSched │ │ │ -00035410: 756c 6572 2d3e 7265 7365 7428 293b 0a0a uler->reset();.. │ │ │ -00035420: 2020 2020 2020 2020 2020 2020 6d79 2024 my $ │ │ │ -00035430: 7374 6465 7272 203d 2024 692d 3e67 6574 stderr = $i->get │ │ │ -00035440: 5354 4445 5252 2829 3b0a 2020 2020 2020 STDERR();. │ │ │ -00035450: 2020 2020 2020 6d79 2028 2464 6576 2c20 my ($dev, │ │ │ -00035460: 2469 6e6f 6465 2c20 2464 6972 2c20 2466 $inode, $dir, $f │ │ │ -00035470: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid, │ │ │ -00035480: 2024 6d6f 6465 2c20 246d 6435 2c0a 0909 $mode, $md5,... │ │ │ -00035490: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, │ │ │ -000354a0: 2461 7469 6d65 2c20 2473 697a 652c 2024 $atime, $size, $ │ │ │ -000354b0: 746d 704d 4435 4669 6c65 2920 3d0a 0909 tmpMD5File) =... │ │ │ -000354c0: 2020 2020 407b 2469 2d3e 6765 7428 272d @{$i->get('- │ │ │ -000354d0: 7768 6174 2720 3d3e 2027 696e 666f 2729 what' => 'info') │ │ │ -000354e0: 7d3b 0a0a 2370 7269 6e74 2022 3130 2e31 };..#print "10.1 │ │ │ -000354f0: 2024 7461 7267 6574 4469 723a 2f3a 2466 $targetDir:/:$f │ │ │ -00035500: 696c 653a 2470 6f73 7466 6978 5c6e 223b ile:$postfix\n"; │ │ │ -00035510: 0a0a 0920 2020 2069 6620 2826 3a3a 7761 ... if (&::wa │ │ │ -00035520: 6974 466f 7246 696c 6528 2224 7461 7267 itForFile("$targ │ │ │ -00035530: 6574 4469 722f 2466 696c 6524 706f 7374 etDir/$file$post │ │ │ -00035540: 6669 7822 2929 0a09 2020 2020 7b0a 0909 fix")).. {... │ │ │ -00035550: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00035560: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00035570: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00035580: 205b 223c 2474 6172 6765 7444 6972 2f24 ["<$targetDir/$ │ │ │ -00035590: 6669 6c65 2470 6f73 7466 6978 3e20 2220 file$postfix> " │ │ │ -000355a0: 2e0a 0909 0909 0920 2277 6173 206e 6f74 ....... "was not │ │ │ -000355b0: 2063 7265 6174 6564 2028 3229 225d 293b created (2)"]); │ │ │ -000355c0: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }. │ │ │ -000355d0: 0a20 2020 2020 2020 2020 2020 2069 6620 . if │ │ │ -000355e0: 2824 7072 6573 6572 7665 5065 726d 7320 ($preservePerms │ │ │ -000355f0: 616e 6420 6e6f 7420 246c 6174 654c 696e and not $lateLin │ │ │ -00035600: 6b73 290a 0920 2020 207b 0a20 2020 2020 ks).. {. │ │ │ -00035610: 2020 2020 2020 2020 2020 2063 686f 776e chown │ │ │ -00035620: 2024 7569 642c 2024 6769 642c 2022 2474 $uid, $gid, "$t │ │ │ -00035630: 6172 6765 7444 6972 2f24 6669 6c65 2470 argetDir/$file$p │ │ │ -00035640: 6f73 7466 6978 223b 0a20 2020 2020 2020 ostfix";. │ │ │ -00035650: 2020 2020 2020 2020 2063 686d 6f64 2024 chmod $ │ │ │ -00035660: 6d6f 6465 2c20 2224 7461 7267 6574 4469 mode, "$targetDi │ │ │ -00035670: 722f 2466 696c 6524 706f 7374 6669 7822 r/$file$postfix" │ │ │ -00035680: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -00035690: 2020 7574 696d 6520 2461 7469 6d65 2c20 utime $atime, │ │ │ -000356a0: 246d 7469 6d65 2c20 2224 6469 722f 2466 $mtime, "$dir/$f │ │ │ -000356b0: 696c 6522 2069 6620 2472 6573 6574 4174 ile" if $resetAt │ │ │ -000356c0: 696d 653b 0a20 2020 2020 2020 2020 2020 ime;. │ │ │ -000356d0: 2020 2020 2075 7469 6d65 2024 6174 696d utime $atim │ │ │ -000356e0: 652c 2024 6d74 696d 652c 2022 2474 6172 e, $mtime, "$tar │ │ │ -000356f0: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos │ │ │ -00035700: 7466 6978 223b 0a20 2020 2020 2020 2020 tfix";. │ │ │ -00035710: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ -00035720: 206d 7920 2469 6e6f 6465 4261 636b 7570 my $inodeBackup │ │ │ -00035730: 203d 2028 7374 6174 2822 2474 6172 6765 = (stat("$targe │ │ │ -00035740: 7444 6972 2f24 6669 6c65 2470 6f73 7466 tDir/$file$postf │ │ │ -00035750: 6978 2229 295b 315d 3b0a 0920 2020 2024 ix"))[1];.. $ │ │ │ -00035760: 696e 6f64 6542 6163 6b75 7020 3d20 3020 inodeBackup = 0 │ │ │ -00035770: 756e 6c65 7373 2024 696e 6f64 6542 6163 unless $inodeBac │ │ │ -00035780: 6b75 703b 2020 2023 2069 6620 7469 6d69 kup; # if timi │ │ │ -00035790: 6e67 2069 7373 7565 2c0a 0920 2020 2020 ng issue,.. │ │ │ -000357a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000357b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000357c0: 2020 2020 2020 2023 2076 616c 7565 2069 # value i │ │ │ -000357d0: 7320 6e6f 7420 7573 6564 2061 7420 616c s not used at al │ │ │ -000357e0: 6c0a 0a20 2020 2020 2020 2020 2020 2069 l.. i │ │ │ -000357f0: 6620 2840 2473 7464 6572 7220 3e20 3029 f (@$stderr > 0) │ │ │ -00035800: 0a20 2020 2020 2020 2020 2020 207b 0a09 . {.. │ │ │ -00035810: 0975 6e6c 6573 7320 282d 6520 2224 6469 .unless (-e "$di │ │ │ -00035820: 722f 2466 696c 6522 2920 2320 6669 6c65 r/$file") # file │ │ │ -00035830: 2077 6173 2064 656c 6574 6564 2064 7572 was deleted dur │ │ │ -00035840: 696e 6720 636f 6d70 7265 7373 696f 6e0a ing compression. │ │ │ -00035850: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog │ │ │ -00035860: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00035870: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ -00035880: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -00035890: 6669 6c65 203c 2464 6972 2f24 6669 6c65 file <$dir/$file │ │ │ -000358a0: 3e20 6465 6c65 7465 6420 6475 7269 6e67 > deleted during │ │ │ -000358b0: 2062 6163 6b75 7020 2836 2922 5d29 3b0a backup (6)"]);. │ │ │ -000358c0: 0909 7d0a 0909 656c 7365 0a09 097b 0a09 ..}...else...{.. │ │ │ -000358d0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -000358e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000358f0: 272c 0a09 0909 0920 2027 2d73 7472 2720 ',..... '-str' │ │ │ -00035900: 3d3e 0a09 0909 0920 205b 2263 6f6d 7072 =>..... ["compr │ │ │ -00035910: 6573 7369 6e67 203c 2464 6972 2f24 6669 essing <$dir/$fi │ │ │ -00035920: 6c65 3e20 2d3e 2022 202e 0a09 0909 0920 le> -> " ...... │ │ │ -00035930: 2020 223c 2474 6172 6765 7444 6972 2f24 "<$targetDir/$ │ │ │ -00035940: 6669 6c65 2470 6f73 7466 6978 3e22 202e file$postfix>" . │ │ │ -00035950: 0a09 0909 0920 2020 2220 6765 6e65 7261 ..... " genera │ │ │ -00035960: 7465 6420 7468 6520 666f 6c6c 6f77 696e ted the followin │ │ │ -00035970: 6720 6572 726f 7220 6d65 7373 6167 6573 g error messages │ │ │ -00035980: 3a22 2c0a 0909 0909 2020 2040 2473 7464 :",..... @$std │ │ │ -00035990: 6572 725d 293b 0a09 097d 0a09 0975 6e6c err]);...}...unl │ │ │ -000359a0: 696e 6b20 2224 7461 7267 6574 4469 722f ink "$targetDir/ │ │ │ -000359b0: 2466 696c 6524 706f 7374 6669 7822 3b0a $file$postfix";. │ │ │ -000359c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000359d0: 6e65 7874 3b0a 2020 2020 2020 2020 2020 next;. │ │ │ -000359e0: 2020 7d0a 0a09 2020 2020 6c6f 6361 6c20 }... local │ │ │ -000359f0: 2a54 4d50 4d44 353b 0a09 2020 2020 756e *TMPMD5;.. un │ │ │ -00035a00: 6c65 7373 2028 263a 3a77 6169 7446 6f72 less (&::waitFor │ │ │ -00035a10: 4669 6c65 2824 746d 704d 4435 4669 6c65 File($tmpMD5File │ │ │ -00035a20: 2920 3d3d 2030 2061 6e64 0a09 096f 7065 ) == 0 and...ope │ │ │ -00035a30: 6e28 544d 504d 4435 2c20 2474 6d70 4d44 n(TMPMD5, $tmpMD │ │ │ -00035a40: 3546 696c 6529 290a 0920 2020 207b 0a09 5File)).. {.. │ │ │ -00035a50: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00035a60: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00035a70: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00035a80: 3e20 5b22 6361 6e6e 6f74 2072 6561 6420 > ["cannot read │ │ │ -00035a90: 7265 6361 6c63 6564 206d 6435 7375 6d20 recalced md5sum │ │ │ -00035aa0: 2220 2e0a 0909 0909 0920 226f 6620 3c24 " ....... "of <$ │ │ │ -00035ab0: 7461 7267 6574 4469 722f 2466 696c 653e targetDir/$file> │ │ │ -00035ac0: 2220 2e0a 0909 0920 2020 2020 2022 3b20 " ..... "; │ │ │ -00035ad0: 6669 6c65 2069 7320 6e6f 7420 6261 636b file is not back │ │ │ -00035ae0: 6564 2075 7020 2832 2922 5d29 3b0a 0909 ed up (2)"]);... │ │ │ -00035af0: 756e 6c69 6e6b 2024 746d 704d 4435 4669 unlink $tmpMD5Fi │ │ │ -00035b00: 6c65 3b0a 0909 6e65 7874 3b0a 0920 2020 le;...next;.. │ │ │ -00035b10: 207d 0a23 0920 2020 2075 6e6c 6573 7320 }.#. unless │ │ │ -00035b20: 2826 3a3a 7761 6974 466f 7246 696c 6528 (&::waitForFile( │ │ │ -00035b30: 2474 6d70 4d44 3546 696c 6529 206f 720a $tmpMD5File) or. │ │ │ -00035b40: 2309 0920 2020 206f 7065 6e28 544d 504d #.. open(TMPM │ │ │ -00035b50: 4435 2c20 2474 6d70 4d44 3546 696c 6529 D5, $tmpMD5File) │ │ │ -00035b60: 290a 2309 2020 2020 7b0a 2309 0924 7072 ).#. {.#..$pr │ │ │ -00035b70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00035b80: 6427 203d 3e20 2745 272c 0a23 0909 0920 d' => 'E',.#... │ │ │ -00035b90: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00035ba0: 2263 616e 6e6f 7420 7265 6164 2072 6563 "cannot read rec │ │ │ -00035bb0: 616c 6365 6420 6d64 3573 756d 2022 202e alced md5sum " . │ │ │ -00035bc0: 0a23 0909 0909 0920 226f 6620 3c24 7461 .#..... "of <$ta │ │ │ -00035bd0: 7267 6574 4469 722f 2466 696c 653e 2220 rgetDir/$file>" │ │ │ -00035be0: 2e0a 2309 0909 2020 2020 2020 223b 2066 ..#... "; f │ │ │ -00035bf0: 696c 6520 6973 206e 6f74 2062 6163 6b65 ile is not backe │ │ │ -00035c00: 6420 7570 225d 293b 0a23 0909 6e65 7874 d up"]);.#..next │ │ │ -00035c10: 3b0a 2309 2020 2020 7d0a 0920 2020 206d ;.#. }.. m │ │ │ -00035c20: 7920 246c 6173 744d 4435 203d 203c 544d y $lastMD5 = ;.. my $ │ │ │ -00035c40: 6c61 7374 5369 7a65 203d 203c 544d 504d lastSize = ;.. close( │ │ │ -00035c60: 544d 504d 4435 293b 0a09 2020 2020 6966 TMPMD5);.. if │ │ │ -00035c70: 2028 286e 6f74 2064 6566 696e 6564 2024 ((not defined $ │ │ │ -00035c80: 6c61 7374 4d44 3529 206f 7220 286e 6f74 lastMD5) or (not │ │ │ -00035c90: 2064 6566 696e 6564 2024 6c61 7374 5369 defined $lastSi │ │ │ -00035ca0: 7a65 2929 0a09 2020 2020 7b0a 0909 2470 ze)).. {...$p │ │ │ -00035cb0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00035cc0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -00035cd0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00035ce0: 2263 616e 6e6f 7420 7265 6164 2072 6563 "cannot read rec │ │ │ -00035cf0: 616c 6365 6420 6d64 3573 756d 2022 202e alced md5sum " . │ │ │ -00035d00: 0a09 0909 0909 2022 6f66 203c 2474 6172 ...... "of <$tar │ │ │ -00035d10: 6765 7444 6972 2f24 6669 6c65 3e22 202e getDir/$file>" . │ │ │ -00035d20: 0a09 0909 2020 2020 2020 223b 2066 696c .... "; fil │ │ │ -00035d30: 6520 6973 206e 6f74 2062 6163 6b65 6420 e is not backed │ │ │ -00035d40: 7570 2028 3329 225d 293b 0a09 0975 6e6c up (3)"]);...unl │ │ │ -00035d50: 696e 6b20 2474 6d70 4d44 3546 696c 653b ink $tmpMD5File; │ │ │ -00035d60: 0a09 096e 6578 743b 0a09 2020 2020 7d0a ...next;.. }. │ │ │ -00035d70: 0920 2020 2075 6e6c 696e 6b20 2474 6d70 . unlink $tmp │ │ │ -00035d80: 4d44 3546 696c 653b 0a09 2020 2020 6368 MD5File;.. ch │ │ │ -00035d90: 6f6d 7020 246c 6173 744d 4435 3b0a 0920 omp $lastMD5;.. │ │ │ -00035da0: 2020 2063 686f 6d70 2024 6c61 7374 5369 chomp $lastSi │ │ │ -00035db0: 7a65 3b0a 0a09 2020 2020 246d 6169 6e3a ze;... $main: │ │ │ -00035dc0: 3a73 7461 742d 3e61 6464 5f6e 6f4d 4435 :stat->add_noMD5 │ │ │ -00035dd0: 6564 4669 6c65 7328 3129 3b0a 0920 2020 edFiles(1);.. │ │ │ -00035de0: 2075 6e6c 6573 7320 2824 6c61 7374 4d44 unless ($lastMD │ │ │ -00035df0: 3529 0a09 2020 2020 7b0a 0909 2470 724c 5).. {...$prL │ │ │ -00035e00: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00035e10: 2720 3d3e 2027 5727 2c0a 0909 0920 2020 ' => 'W',.... │ │ │ -00035e20: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>.... │ │ │ -00035e30: 2020 2020 2020 5b22 6669 6c65 203c 2464 ["file <$d │ │ │ -00035e40: 6972 2f24 6669 6c65 3e20 6465 6c65 7465 ir/$file> delete │ │ │ -00035e50: 6420 6475 7269 6e67 2062 6163 6b75 7020 d during backup │ │ │ -00035e60: 2837 2922 5d29 0a09 0920 2020 2075 6e6c (7)"])... unl │ │ │ -00035e70: 6573 7320 6578 6973 7473 2024 2473 7570 ess exists $$sup │ │ │ -00035e80: 7072 6573 7357 6172 6e69 6e67 7b27 6669 pressWarning{'fi │ │ │ -00035e90: 6c65 4368 616e 6765 277d 3b0a 0909 6e65 leChange'};...ne │ │ │ -00035ea0: 7874 3b0a 0920 2020 207d 0a09 2020 2020 xt;.. }.. │ │ │ -00035eb0: 6966 2028 246c 6173 744d 4435 206e 6520 if ($lastMD5 ne │ │ │ -00035ec0: 246d 6435 206f 7220 246c 6173 7453 697a $md5 or $lastSiz │ │ │ -00035ed0: 6520 213d 2024 7369 7a65 290a 0920 2020 e != $size).. │ │ │ -00035ee0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ -00035ef0: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W │ │ │ -00035f00: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00035f10: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ -00035f20: 2266 696c 6520 3c24 6469 722f 2466 696c "file <$dir/$fil │ │ │ -00035f30: 653e 2063 6861 6e67 6564 2064 7572 696e e> changed durin │ │ │ -00035f40: 6720 6261 636b 7570 225d 290a 0909 2020 g backup"])... │ │ │ -00035f50: 2020 756e 6c65 7373 2065 7869 7374 7320 unless exists │ │ │ -00035f60: 2424 7375 7070 7265 7373 5761 726e 696e $$suppressWarnin │ │ │ -00035f70: 677b 2766 696c 6543 6861 6e67 6527 7d3b g{'fileChange'}; │ │ │ -00035f80: 0a09 0924 6d64 3520 3d20 246c 6173 744d ...$md5 = $lastM │ │ │ -00035f90: 4435 3b0a 0909 2473 697a 6520 3d20 246c D5;...$size = $l │ │ │ -00035fa0: 6173 7453 697a 653b 0a09 2020 2020 7d0a astSize;.. }. │ │ │ -00035fb0: 0a20 2020 2020 2020 2020 2020 2024 7072 . $pr │ │ │ -00035fc0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00035fd0: 6427 203d 3e20 2744 272c 0a20 2020 2020 d' => 'D',. │ │ │ -00035fe0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00035ff0: 2020 2020 2027 2d73 7472 2720 3d3e 0a20 '-str' =>. │ │ │ -00036000: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036010: 2020 2020 2020 2020 205b 2266 696e 6973 ["finis │ │ │ -00036020: 6865 6420 2463 6f6d 7072 6573 7320 3c24 hed $compress <$ │ │ │ -00036030: 6469 722f 2466 696c 653e 2022 202e 0a20 dir/$file> " .. │ │ │ -00036040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036050: 2020 2020 2020 2020 2020 223c 2474 6172 "<$tar │ │ │ -00036060: 6765 7444 6972 2f24 6669 6c65 2470 6f73 getDir/$file$pos │ │ │ -00036070: 7466 6978 3e22 5d29 0a20 2020 2020 2020 tfix>"]). │ │ │ -00036080: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de │ │ │ -00036090: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);.. │ │ │ -000360a0: 2020 2020 2020 2020 2020 2020 246d 6169 $mai │ │ │ -000360b0: 6e3a 3a73 7461 742d 3e69 6e63 725f 6e6f n::stat->incr_no │ │ │ -000360c0: 466f 726b 7343 6f6d 7072 6573 7328 293b ForksCompress(); │ │ │ -000360d0: 0a09 2020 2020 6d79 2024 636f 6d70 7253 .. my $comprS │ │ │ -000360e0: 697a 6520 3d20 2873 7461 7428 2224 7461 ize = (stat("$ta │ │ │ -000360f0: 7267 6574 4469 722f 2466 696c 6524 706f rgetDir/$file$po │ │ │ -00036100: 7374 6669 7822 2929 5b37 5d3b 0a20 2020 stfix"))[7];. │ │ │ -00036110: 2020 2020 2020 2020 2024 6d61 696e 3a3a $main:: │ │ │ -00036120: 7374 6174 2d3e 6164 6453 756d 4e65 7743 stat->addSumNewC │ │ │ -00036130: 6f6d 7072 2824 636f 6d70 7253 697a 652c ompr($comprSize, │ │ │ -00036140: 2024 7369 7a65 293b 0a0a 2370 7269 6e74 $size);..#print │ │ │ -00036150: 2022 2d20 3232 202d 2066 696c 6520 3d20 "- 22 - file = │ │ │ -00036160: 3c24 6669 6c65 3e5c 6e22 3b0a 2020 2020 <$file>\n";. │ │ │ -00036170: 2020 2020 2020 2020 2461 6b74 4669 6c65 $aktFile │ │ │ -00036180: 6e61 6d65 2d3e 7374 6f72 6528 272d 6669 name->store('-fi │ │ │ -00036190: 6c65 6e61 6d65 2720 3d3e 2024 6669 6c65 lename' => $file │ │ │ -000361a0: 2c20 2023 2073 7065 6963 6865 7274 2069 , # speichert i │ │ │ -000361b0: 6e20 6462 6d0a 2020 2020 2020 2020 2020 n dbm. │ │ │ -000361c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000361d0: 2020 2020 2020 272d 6d64 3573 756d 2720 '-md5sum' │ │ │ -000361e0: 3d3e 2024 6d64 352c 2020 2020 2023 202e => $md5, # . │ │ │ -000361f0: 6d64 3573 756d 2d44 6174 6569 0a20 2020 md5sum-Datei. │ │ │ -00036200: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036210: 2020 2020 2020 2020 2020 2020 2027 2d63 '-c │ │ │ -00036220: 6f6d 7072 2720 3d3e 2027 6327 2c0a 2020 ompr' => 'c',. │ │ │ -00036230: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036240: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00036250: 6465 7627 203d 3e20 2464 6576 2c0a 2020 dev' => $dev,. │ │ │ -00036260: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036270: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00036280: 696e 6f64 6527 203d 3e20 2469 6e6f 6465 inode' => $inode │ │ │ -00036290: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -000362a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000362b0: 2020 272d 696e 6f64 6542 6163 6b75 7027 '-inodeBackup' │ │ │ -000362c0: 203d 3e20 2469 6e6f 6465 4261 636b 7570 => $inodeBackup │ │ │ -000362d0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -000362e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000362f0: 2020 272d 6374 696d 6527 203d 3e20 2463 '-ctime' => $c │ │ │ -00036300: 7469 6d65 2c0a 2020 2020 2020 2020 2020 time,. │ │ │ -00036310: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036320: 2020 2020 2020 272d 6d74 696d 6527 203d '-mtime' = │ │ │ -00036330: 3e20 246d 7469 6d65 2c0a 2020 2020 2020 > $mtime,. │ │ │ -00036340: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036350: 2020 2020 2020 2020 2020 272d 6d74 696d '-mtim │ │ │ -00036360: 6527 203d 3e20 246d 7469 6d65 2c0a 2020 e' => $mtime,. │ │ │ -00036370: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036380: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00036390: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime │ │ │ -000363a0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -000363b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000363c0: 2020 272d 7369 7a65 2720 3d3e 2024 7369 '-size' => $si │ │ │ -000363d0: 7a65 2c0a 2020 2020 2020 2020 2020 2020 ze,. │ │ │ -000363e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000363f0: 2020 2020 272d 7569 6427 203d 3e20 2475 '-uid' => $u │ │ │ -00036400: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. │ │ │ -00036410: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036420: 2020 2020 272d 6769 6427 203d 3e20 2467 '-gid' => $g │ │ │ -00036430: 6964 2c0a 2020 2020 2020 2020 2020 2020 id,. │ │ │ -00036440: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036450: 2020 2020 272d 6d6f 6465 2720 3d3e 2024 '-mode' => $ │ │ │ -00036460: 6d6f 6465 293b 0a0a 2020 2020 2020 2020 mode);.. │ │ │ -00036470: 2020 2020 6966 2028 6578 6973 7473 2024 if (exists $ │ │ │ -00036480: 696e 5072 6f67 7265 7373 7b24 6d64 357d inProgress{$md5} │ │ │ -00036490: 2061 6e64 0a20 2020 2020 2020 2020 2020 and. │ │ │ -000364a0: 2020 2020 2040 7b24 696e 5072 6f67 7265 @{$inProgre │ │ │ -000364b0: 7373 7b24 6d64 357d 7d20 3e20 3029 2020 ss{$md5}} > 0) │ │ │ -000364c0: 2320 6765 7075 6666 6572 7465 2046 696c # gepufferte Fil │ │ │ -000364d0: 6573 206d 6974 0a20 2020 2020 2020 2020 es mit. │ │ │ -000364e0: 2020 207b 2020 2020 2020 2020 2020 2020 { │ │ │ -000364f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00036500: 2020 2320 676c 6569 6368 6572 206d 6435 # gleicher md5 │ │ │ -00036510: 2053 756d 6d65 2062 6561 7262 6569 7465 Summe bearbeite │ │ │ -00036520: 6e0a 2020 2020 2020 2020 2020 2020 2020 n. │ │ │ -00036530: 2020 2466 696c 6573 4c65 6674 203d 2031 $filesLeft = 1 │ │ │ -00036540: 3b0a 2020 2020 2020 2020 2020 2020 2020 ;. │ │ │ -00036550: 2020 2472 6561 6444 6972 416e 6443 6865 $readDirAndChe │ │ │ -00036560: 636b 2d3e 7075 7368 6261 636b 2824 696e ck->pushback($in │ │ │ -00036570: 5072 6f67 7265 7373 7b24 6d64 357d 2c20 Progress{$md5}, │ │ │ -00036580: 2470 724c 6f67 2c0a 0909 2020 2020 2464 $prLog,... $d │ │ │ -00036590: 6562 7567 4d6f 6465 203e 3d20 3320 3f20 ebugMode >= 3 ? │ │ │ -000365a0: 3120 3a20 3029 3b0a 2020 2020 2020 2020 1 : 0);. │ │ │ -000365b0: 2020 2020 7d0a 2020 2020 2020 2020 2020 }. │ │ │ -000365c0: 2020 6465 6c65 7465 2024 696e 5072 6f67 delete $inProg │ │ │ -000365d0: 7265 7373 7b24 6d64 357d 3b0a 2020 2020 ress{$md5};. │ │ │ -000365e0: 2020 2020 7d0a 2370 7269 6e74 2022 2d32 }.#print "-2 │ │ │ -000365f0: 332d 5c6e 223b 0a0a 2020 2020 2020 2020 3-\n";.. │ │ │ -00036600: 2320 426c 6f63 6b2d 6d64 3520 4a6f 6273 # Block-md5 Jobs │ │ │ -00036610: 2061 6268 6f6c 656e 0a09 7768 696c 6520 abholen..while │ │ │ -00036620: 2831 290a 2020 2020 2020 2020 7b0a 0920 (1). {.. │ │ │ -00036630: 2020 206d 7920 2469 3b0a 0920 2020 2069 my $i;.. i │ │ │ -00036640: 6620 2824 626c 6f63 6b50 6172 616c 6c65 f ($blockParalle │ │ │ -00036650: 6c29 0a09 2020 2020 7b0a 0909 2469 203d l).. {...$i = │ │ │ -00036660: 2024 7061 7246 6f72 6b42 6c6f 636b 2d3e $parForkBlock-> │ │ │ -00036670: 6368 6563 6b4f 6e65 2829 3b0a 0920 2020 checkOne();.. │ │ │ -00036680: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00036690: 2020 7b0a 0909 2469 203d 2024 7061 7246 {...$i = $parF │ │ │ -000366a0: 6f72 6b42 6c6f 636b 2d3e 7761 6974 466f orkBlock->waitFo │ │ │ -000366b0: 7241 6c6c 4a6f 6273 2829 3b0a 0920 2020 rAllJobs();.. │ │ │ -000366c0: 207d 0a09 2020 2020 6c61 7374 2075 6e6c }.. last unl │ │ │ -000366d0: 6573 7320 2469 3b0a 0a20 2020 2020 2020 ess $i;.. │ │ │ -000366e0: 2020 2020 2023 2057 6520 6469 6420 736f # We did so │ │ │ -000366f0: 6d65 7468 696e 670a 0920 2020 2024 6d61 mething.. $ma │ │ │ -00036700: 696e 3a3a 7469 6e79 5761 6974 5363 6865 in::tinyWaitSche │ │ │ -00036710: 6475 6c65 722d 3e72 6573 6574 2829 3b0a duler->reset();. │ │ │ -00036720: 0a09 2020 2020 6d79 2028 2464 6576 2c20 .. my ($dev, │ │ │ -00036730: 2469 6e6f 6465 2c20 2464 6972 2c20 2466 $inode, $dir, $f │ │ │ -00036740: 696c 652c 2024 7569 642c 2024 6769 642c ile, $uid, $gid, │ │ │ -00036750: 0a09 0924 6d6f 6465 2c20 2463 7469 6d65 ...$mode, $ctime │ │ │ -00036760: 2c20 246d 7469 6d65 2c20 2461 7469 6d65 , $mtime, $atime │ │ │ -00036770: 2c20 2473 697a 652c 2024 636f 6d70 7265 , $size, $compre │ │ │ -00036780: 7373 426c 6f63 6b2c 0a09 0924 746d 704e ssBlock,...$tmpN │ │ │ -00036790: 616d 6529 203d 0a09 0920 2020 2040 7b24 ame) =... @{$ │ │ │ -000367a0: 692d 3e67 6574 2827 2d77 6861 7427 203d i->get('-what' = │ │ │ -000367b0: 3e20 2769 6e66 6f27 297d 3b0a 0920 2020 > 'info')};.. │ │ │ -000367c0: 2063 686f 776e 2024 7569 642c 2024 6769 chown $uid, $gi │ │ │ -000367d0: 642c 2024 6669 6c65 3b0a 0920 2020 2024 d, $file;.. $ │ │ │ -000367e0: 7365 7452 6573 6574 4469 7254 696d 6573 setResetDirTimes │ │ │ -000367f0: 2d3e 6164 6444 6972 2824 6669 6c65 2c20 ->addDir($file, │ │ │ -00036800: 2461 7469 6d65 2c20 246d 7469 6d65 2c0a $atime, $mtime,. │ │ │ -00036810: 0909 0909 2020 2020 2020 2828 246d 6f64 .... (($mod │ │ │ -00036820: 6520 2620 3037 3737 2920 7c20 3031 3131 e & 0777) | 0111 │ │ │ -00036830: 2929 3b0a 0a09 2020 2020 756e 6c65 7373 ));... unless │ │ │ -00036840: 2028 2d72 2024 746d 704e 616d 6529 0a09 (-r $tmpName).. │ │ │ -00036850: 2020 2020 7b0a 0909 2320 6d65 7373 6167 {...# messag │ │ │ -00036860: 6520 6973 2069 6d70 6f72 7461 6e74 2074 e is important t │ │ │ -00036870: 6f20 696e 6372 656d 656e 7420 4552 524f o increment ERRO │ │ │ -00036880: 5220 636f 756e 7465 7220 696e 2070 724c R counter in prL │ │ │ -00036890: 6f67 0a09 0923 2045 7272 6f72 206d 6573 og...# Error mes │ │ │ -000368a0: 7361 6765 2069 6e20 6361 6c63 426c 6f63 sage in calcBloc │ │ │ -000368b0: 6b4d 4435 5375 6d73 2069 7320 6361 6c6c kMD5Sums is call │ │ │ -000368c0: 6564 2069 6e20 666f 726b 210a 0909 2470 ed in fork!...$p │ │ │ -000368d0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -000368e0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -000368f0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00036900: 2273 6b69 7070 696e 6720 626c 6f63 6b65 "skipping blocke │ │ │ -00036910: 6420 6669 6c65 225d 293b 0a09 096e 6578 d file"]);...nex │ │ │ -00036920: 743b 0a09 2020 2020 7d0a 0a09 2020 2020 t;.. }... │ │ │ -00036930: 6c6f 6361 6c20 2a42 4c4f 434b 3b0a 0920 local *BLOCK;.. │ │ │ -00036940: 2020 2075 6e6c 6573 7320 2826 3a3a 7761 unless (&::wa │ │ │ -00036950: 6974 466f 7246 696c 6528 2474 6d70 4e61 itForFile($tmpNa │ │ │ -00036960: 6d65 2920 3d3d 2030 2061 6e64 0a09 0920 me) == 0 and... │ │ │ -00036970: 2020 206f 7065 6e28 424c 4f43 4b2c 2022 open(BLOCK, " │ │ │ -00036980: 3c20 2474 6d70 4e61 6d65 2229 290a 0920 < $tmpName")).. │ │ │ -00036990: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ -000369a0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -000369b0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -000369c0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -000369d0: 206f 7065 6e20 3c24 746d 704e 616d 653e open <$tmpName> │ │ │ -000369e0: 225d 2c0a 0909 0920 2020 2020 2027 2d61 "],.... '-a │ │ │ -000369f0: 6464 2720 3d3e 205b 5f5f 4649 4c45 5f5f dd' => [__FILE__ │ │ │ -00036a00: 2c20 5f5f 4c49 4e45 5f5f 5d2c 0a09 0909 , __LINE__],.... │ │ │ -00036a10: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00036a20: 2031 293b 0a09 2020 2020 7d0a 0920 2020 1);.. }.. │ │ │ -00036a30: 206d 7920 2824 7374 6174 536f 7572 6365 my ($statSource │ │ │ -00036a40: 5369 7a65 2c20 2473 7461 7453 7462 7553 Size, $statStbuS │ │ │ -00036a50: 697a 652c 2024 7374 6174 4e6f 466f 726b ize, $statNoFork │ │ │ -00036a60: 7343 502c 2024 7374 6174 4e6f 466f 726b sCP, $statNoFork │ │ │ -00036a70: 7343 6f6d 7072 6573 732c 0a09 0924 7374 sCompress,...$st │ │ │ -00036a80: 6174 4e6f 426c 6f63 6b73 2c20 2473 7461 atNoBlocks, $sta │ │ │ -00036a90: 744e 6f4c 6174 654c 696e 6b73 2c20 2461 tNoLateLinks, $a │ │ │ -00036aa0: 6c6c 4d44 352c 2024 626c 6f63 6b4d 4435 llMD5, $blockMD5 │ │ │ -00036ab0: 2c0a 0909 2462 6c6f 636b 4669 6c65 6e61 ,...$blockFilena │ │ │ -00036ac0: 6d65 2c20 246c 2c20 246e 6f57 6172 6e69 me, $l, $noWarni │ │ │ -00036ad0: 6e67 732c 2024 6e6f 4572 726f 7273 2c0a ngs, $noErrors,. │ │ │ -00036ae0: 0909 246e 6f42 6c6f 636b 436f 6d70 7243 ..$noBlockComprC │ │ │ -00036af0: 6865 636b 436f 6d70 722c 2024 6e6f 426c heckCompr, $noBl │ │ │ -00036b00: 6f63 6b43 6f6d 7072 4368 6563 6b43 7029 ockComprCheckCp) │ │ │ -00036b10: 3b0a 0a09 2020 2020 7768 696c 6520 2824 ;... while ($ │ │ │ -00036b20: 6c20 3d20 3c42 4c4f 434b 3e29 0a09 2020 l = ).. │ │ │ -00036b30: 2020 7b0a 0909 6368 6f70 2024 6c3b 0a09 {...chop $l;.. │ │ │ -00036b40: 096d 7920 2466 6972 7374 3b0a 0909 2824 .my $first;...($ │ │ │ -00036b50: 6669 7273 742c 2024 6c29 203d 2073 706c first, $l) = spl │ │ │ -00036b60: 6974 282f 5c73 2f2c 2024 6c2c 2032 293b it(/\s/, $l, 2); │ │ │ -00036b70: 0a09 0969 6620 2824 6669 7273 7420 6571 ...if ($first eq │ │ │ -00036b80: 2027 616c 6c4d 4435 2729 0a09 097b 0a09 'allMD5')...{.. │ │ │ -00036b90: 0920 2020 2028 2461 6c6c 4d44 352c 2024 . ($allMD5, $ │ │ │ -00036ba0: 7374 6174 536f 7572 6365 5369 7a65 2c20 statSourceSize, │ │ │ -00036bb0: 2473 7461 7453 7462 7553 697a 652c 2024 $statStbuSize, $ │ │ │ -00036bc0: 7374 6174 4e6f 466f 726b 7343 502c 0a09 statNoForksCP,.. │ │ │ -00036bd0: 0920 2020 2020 2473 7461 744e 6f46 6f72 . $statNoFor │ │ │ -00036be0: 6b73 436f 6d70 7265 7373 2c20 2473 7461 ksCompress, $sta │ │ │ -00036bf0: 744e 6f42 6c6f 636b 732c 2024 7374 6174 tNoBlocks, $stat │ │ │ -00036c00: 4e6f 4c61 7465 4c69 6e6b 732c 0a09 0920 NoLateLinks,... │ │ │ -00036c10: 2020 2020 246e 6f57 6172 6e69 6e67 732c $noWarnings, │ │ │ -00036c20: 2024 6e6f 4572 726f 7273 2c20 246e 6f42 $noErrors, $noB │ │ │ -00036c30: 6c6f 636b 436f 6d70 7243 6865 636b 436f lockComprCheckCo │ │ │ -00036c40: 6d70 722c 0a09 0920 2020 2020 246e 6f42 mpr,... $noB │ │ │ -00036c50: 6c6f 636b 436f 6d70 7243 6865 636b 4370 lockComprCheckCp │ │ │ -00036c60: 2920 3d0a 0909 0920 7370 6c69 7428 2f5c ) =.... split(/\ │ │ │ -00036c70: 732f 2c20 246c 293b 0a23 7072 696e 7420 s/, $l);.#print │ │ │ -00036c80: 2273 6574 7469 6e67 2061 6c6c 4d44 355c "setting allMD5\ │ │ │ -00036c90: 6e22 3b0a 0909 7d0a 0909 656c 7369 6620 n";...}...elsif │ │ │ -00036ca0: 2824 6669 7273 7420 6571 2027 6c69 6e6b ($first eq 'link │ │ │ -00036cb0: 2729 0a09 097b 0a09 0920 2020 2024 7772 ')...{... $wr │ │ │ -00036cc0: 4c61 7465 4c69 6e6b 2d3e 7072 696e 7428 LateLink->print( │ │ │ -00036cd0: 2224 6669 7273 7420 246c 5c6e 2229 3b20 "$first $l\n"); │ │ │ -00036ce0: 2020 2020 2320 276c 696e 6b20 6d64 3527 # 'link md5' │ │ │ -00036cf0: 0a09 0920 2020 206d 7920 2465 7869 7374 ... my $exist │ │ │ -00036d00: 696e 6746 696c 6520 3d20 3c42 4c4f 434b ingFile = ;... chop $e │ │ │ -00036d20: 7869 7374 696e 6746 696c 653b 0a09 0920 xistingFile;... │ │ │ -00036d30: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00036d40: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00036d50: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ -00036d60: 0a09 0909 0920 205b 2266 696c 6520 3c24 ..... ["file <$ │ │ │ -00036d70: 746d 704e 616d 653e 2065 6e64 7320 756e tmpName> ends un │ │ │ -00036d80: 6578 7065 6374 6564 2061 7420 6c69 6e65 expected at line │ │ │ -00036d90: 2024 2e22 5d2c 0a09 0909 0920 2027 2d65 $."],..... '-e │ │ │ -00036da0: 7869 7427 203d 3e20 3129 0a09 0909 756e xit' => 1)....un │ │ │ -00036db0: 6c65 7373 2024 6578 6973 7469 6e67 4669 less $existingFi │ │ │ -00036dc0: 6c65 3b0a 0909 2020 2020 2465 7869 7374 le;... $exist │ │ │ -00036dd0: 696e 6746 696c 6520 3d20 3a3a 7265 6c50 ingFile = ::relP │ │ │ -00036de0: 6174 6828 2474 6172 6765 7444 6972 2c20 ath($targetDir, │ │ │ -00036df0: 2465 7869 7374 696e 6746 696c 6529 3b0a $existingFile);. │ │ │ -00036e00: 0909 2020 2020 2465 7869 7374 696e 6746 .. $existingF │ │ │ -00036e10: 696c 6520 3d7e 2073 2f5c 6e2f 5c30 2f6f ile =~ s/\n/\0/o │ │ │ -00036e20: 673b 0a09 0920 2020 2024 7772 4c61 7465 g;... $wrLate │ │ │ -00036e30: 4c69 6e6b 2d3e 7072 696e 7428 2224 6578 Link->print("$ex │ │ │ -00036e40: 6973 7469 6e67 4669 6c65 5c6e 2229 3b0a istingFile\n");. │ │ │ -00036e50: 0909 2020 2020 6d79 2024 6e65 774c 696e .. my $newLin │ │ │ -00036e60: 6b20 3d20 3c42 4c4f 434b 3e3b 0a09 0920 k = ;... │ │ │ -00036e70: 2020 2063 686f 7020 246e 6577 4c69 6e6b chop $newLink │ │ │ -00036e80: 3b0a 0909 2020 2020 2470 724c 6f67 2d3e ;... $prLog-> │ │ │ -00036e90: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00036ea0: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st │ │ │ -00036eb0: 7227 203d 3e0a 0909 0909 2020 5b22 6669 r' =>..... ["fi │ │ │ -00036ec0: 6c65 203c 2474 6d70 4e61 6d65 3e20 656e le <$tmpName> en │ │ │ -00036ed0: 6473 2075 6e65 7870 6563 7465 6420 6174 ds unexpected at │ │ │ -00036ee0: 206c 696e 6520 242e 225d 2c0a 0909 0909 line $."],..... │ │ │ -00036ef0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ -00036f00: 0909 0975 6e6c 6573 7320 246e 6577 4c69 ...unless $newLi │ │ │ -00036f10: 6e6b 3b0a 0909 2020 2020 246e 6577 4c69 nk;... $newLi │ │ │ -00036f20: 6e6b 203d 203a 3a72 656c 5061 7468 2824 nk = ::relPath($ │ │ │ -00036f30: 7461 7267 6574 4469 722c 2024 6e65 774c targetDir, $newL │ │ │ -00036f40: 696e 6b29 3b0a 0909 2020 2020 246e 6577 ink);... $new │ │ │ -00036f50: 4c69 6e6b 203d 7e20 732f 5c6e 2f5c 302f Link =~ s/\n/\0/ │ │ │ -00036f60: 6f67 3b0a 0909 2020 2020 2477 724c 6174 og;... $wrLat │ │ │ -00036f70: 654c 696e 6b2d 3e70 7269 6e74 2822 246e eLink->print("$n │ │ │ -00036f80: 6577 4c69 6e6b 5c6e 2229 3b0a 2370 7269 ewLink\n");.#pri │ │ │ -00036f90: 6e74 2022 626c 6f63 6b6c 6174 656c 696e nt "blocklatelin │ │ │ -00036fa0: 6b73 3a20 2466 6972 7374 2024 6c2c 2024 ks: $first $l, $ │ │ │ -00036fb0: 6578 6973 7469 6e67 4669 6c65 202d 3e20 existingFile -> │ │ │ -00036fc0: 246e 6577 4c69 6e6b 5c6e 223b 0a09 097d $newLink\n";...} │ │ │ -00036fd0: 0a09 0965 6c73 6966 2028 2466 6972 7374 ...elsif ($first │ │ │ -00036fe0: 2065 7120 2763 6f6d 7072 6573 7327 290a eq 'compress'). │ │ │ -00036ff0: 0909 7b0a 0909 2020 2020 2477 724c 6174 ..{... $wrLat │ │ │ -00037000: 654c 696e 6b2d 3e70 7269 6e74 2822 2466 eLink->print("$f │ │ │ -00037010: 6972 7374 2024 6c5c 6e22 293b 2020 2023 irst $l\n"); # │ │ │ -00037020: 2027 636f 6d70 7265 7373 206d 6435 270a 'compress md5'. │ │ │ -00037030: 0909 2020 2020 6d79 2024 6578 6973 7469 .. my $existi │ │ │ -00037040: 6e67 4669 6c65 203d 203c 424c 4f43 4b3e ngFile = │ │ │ -00037050: 3b0a 0909 2020 2020 6368 6f70 2024 6578 ;... chop $ex │ │ │ -00037060: 6973 7469 6e67 4669 6c65 3b0a 0909 2020 istingFile;... │ │ │ -00037070: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00037080: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00037090: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -000370a0: 0909 0909 2020 5b22 6669 6c65 203c 2474 .... ["file <$t │ │ │ -000370b0: 6d70 4e61 6d65 3e20 656e 6473 2075 6e65 mpName> ends une │ │ │ -000370c0: 7870 6563 7465 6420 6174 206c 696e 6520 xpected at line │ │ │ -000370d0: 242e 225d 2c0a 0909 0909 2020 272d 6578 $."],..... '-ex │ │ │ -000370e0: 6974 2720 3d3e 2031 290a 0909 0975 6e6c it' => 1)....unl │ │ │ -000370f0: 6573 7320 2465 7869 7374 696e 6746 696c ess $existingFil │ │ │ -00037100: 653b 0a09 0920 2020 2024 6578 6973 7469 e;... $existi │ │ │ -00037110: 6e67 4669 6c65 203d 203a 3a72 656c 5061 ngFile = ::relPa │ │ │ -00037120: 7468 2824 7461 7267 6574 4469 722c 2024 th($targetDir, $ │ │ │ -00037130: 6578 6973 7469 6e67 4669 6c65 293b 0a09 existingFile);.. │ │ │ -00037140: 0920 2020 2024 6578 6973 7469 6e67 4669 . $existingFi │ │ │ -00037150: 6c65 203d 7e20 732f 5c6e 2f5c 302f 6f67 le =~ s/\n/\0/og │ │ │ -00037160: 3b0a 0909 2020 2020 2477 724c 6174 654c ;... $wrLateL │ │ │ -00037170: 696e 6b2d 3e70 7269 6e74 2822 2465 7869 ink->print("$exi │ │ │ -00037180: 7374 696e 6746 696c 655c 6e22 293b 0a09 stingFile\n");.. │ │ │ -00037190: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{... │ │ │ -000371a0: 2020 2020 6d79 2024 636f 6d70 723b 0a09 my $compr;.. │ │ │ -000371b0: 0920 2020 2028 2462 6c6f 636b 4d44 352c . ($blockMD5, │ │ │ -000371c0: 2024 636f 6d70 722c 2024 626c 6f63 6b46 $compr, $blockF │ │ │ -000371d0: 696c 656e 616d 6529 203d 0a09 0909 2824 ilename) =....($ │ │ │ -000371e0: 6669 7273 742c 2073 706c 6974 282f 5c73 first, split(/\s │ │ │ -000371f0: 2f2c 2024 6c2c 2032 2929 3b0a 0909 2020 /, $l, 2));... │ │ │ -00037200: 2020 246f 6c64 4669 6c65 6e61 6d65 2d3e $oldFilename-> │ │ │ -00037210: 7365 7442 6c6f 636b 4669 6c65 6e61 6d65 setBlockFilename │ │ │ -00037220: 436f 6d70 7228 2462 6c6f 636b 4d44 352c Compr($blockMD5, │ │ │ -00037230: 0a09 0909 0909 0920 2020 2224 7461 7267 ....... "$targ │ │ │ -00037240: 6574 4469 722f 2462 6c6f 636b 4669 6c65 etDir/$blockFile │ │ │ -00037250: 6e61 6d65 222c 0a09 0909 0909 0909 2463 name",........$c │ │ │ -00037260: 6f6d 7072 293b 0a23 7072 696e 7420 2262 ompr);.#print "b │ │ │ -00037270: 6c6f 636b 4d44 3520 3d20 2462 6c6f 636b lockMD5 = $block │ │ │ -00037280: 4d44 352c 2062 6c6f 636b 4669 6c65 6e61 MD5, blockFilena │ │ │ -00037290: 6d65 203d 2024 626c 6f63 6b46 696c 656e me = $blockFilen │ │ │ -000372a0: 616d 655c 6e22 3b0a 0909 2020 2020 6368 ame\n";... ch │ │ │ -000372b0: 6d6f 6420 246d 6f64 652c 2022 2474 6172 mod $mode, "$tar │ │ │ -000372c0: 6765 7444 6972 2f24 626c 6f63 6b46 696c getDir/$blockFil │ │ │ -000372d0: 656e 616d 6522 3b0a 0909 2020 2020 6368 ename";... ch │ │ │ -000372e0: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ -000372f0: 2224 7461 7267 6574 4469 722f 2462 6c6f "$targetDir/$blo │ │ │ -00037300: 636b 4669 6c65 6e61 6d65 223b 0a09 097d ckFilename";...} │ │ │ -00037310: 0a09 2020 2020 7d0a 2370 7269 6e74 2022 .. }.#print " │ │ │ -00037320: 616c 6c4d 4435 203d 2024 616c 6c4d 4435 allMD5 = $allMD5 │ │ │ -00037330: 2c20 7374 6174 536f 7572 6365 5369 7a65 , statSourceSize │ │ │ -00037340: 203d 2024 7374 6174 536f 7572 6365 5369 = $statSourceSi │ │ │ -00037350: 7a65 2c20 7374 6174 5374 6275 5369 7a65 ze, statStbuSize │ │ │ -00037360: 203d 2024 7374 6174 5374 6275 5369 7a65 = $statStbuSize │ │ │ -00037370: 5c6e 2220 2e0a 2320 2020 2022 7374 6174 \n" ..# "stat │ │ │ -00037380: 4e6f 466f 726b 7343 5020 3d20 2473 7461 NoForksCP = $sta │ │ │ -00037390: 744e 6f46 6f72 6b73 4350 2c20 7374 6174 tNoForksCP, stat │ │ │ -000373a0: 4e6f 466f 726b 7343 6f6d 7072 6573 7320 NoForksCompress │ │ │ -000373b0: 3d20 2473 7461 744e 6f46 6f72 6b73 436f = $statNoForksCo │ │ │ -000373c0: 6d70 7265 7373 5c6e 2220 2e0a 2320 2020 mpress\n" ..# │ │ │ -000373d0: 2022 7374 6174 4e6f 426c 6f63 6b73 203d "statNoBlocks = │ │ │ -000373e0: 2024 7374 6174 4e6f 426c 6f63 6b73 2c20 $statNoBlocks, │ │ │ -000373f0: 7374 6174 4e6f 4c61 7465 4c69 6e6b 7320 statNoLateLinks │ │ │ -00037400: 3d20 2473 7461 744e 6f4c 6174 654c 696e = $statNoLateLin │ │ │ -00037410: 6b73 5c6e 2220 2e0a 2320 2020 2022 6e6f ks\n" ..# "no │ │ │ -00037420: 5761 726e 696e 6773 203d 2024 6e6f 5761 Warnings = $noWa │ │ │ -00037430: 726e 696e 6773 2c20 6e6f 4572 726f 7273 rnings, noErrors │ │ │ -00037440: 203d 2024 6e6f 4572 726f 7273 5c6e 2220 = $noErrors\n" │ │ │ -00037450: 2e0a 2320 2020 2022 6e6f 426c 6f63 6b43 ..# "noBlockC │ │ │ -00037460: 6f6d 7072 4368 6563 6b43 6f6d 7072 203d omprCheckCompr = │ │ │ -00037470: 2024 6e6f 426c 6f63 6b43 6f6d 7072 4368 $noBlockComprCh │ │ │ -00037480: 6563 6b43 6f6d 7072 2c20 6e6f 426c 6f63 eckCompr, noBloc │ │ │ -00037490: 6b43 6f6d 7072 4368 6563 6b43 7020 3d20 kComprCheckCp = │ │ │ -000374a0: 246e 6f42 6c6f 636b 436f 6d70 7243 6865 $noBlockComprChe │ │ │ -000374b0: 636b 4370 5c6e 223b 0a09 2020 2020 636c ckCp\n";.. cl │ │ │ -000374c0: 6f73 6528 424c 4f43 4b29 3b0a 0920 2020 ose(BLOCK);.. │ │ │ -000374d0: 2075 6e6c 696e 6b20 2474 6d70 4e61 6d65 unlink $tmpName │ │ │ -000374e0: 3b0a 0a09 2020 2020 246d 6169 6e3a 3a73 ;... $main::s │ │ │ -000374f0: 7461 742d 3e61 6464 5375 6d4f 7269 6746 tat->addSumOrigF │ │ │ -00037500: 696c 6573 2824 7374 6174 536f 7572 6365 iles($statSource │ │ │ -00037510: 5369 7a65 2c20 2475 6964 2c20 2467 6964 Size, $uid, $gid │ │ │ -00037520: 293b 0a09 2020 2020 246d 6169 6e3a 3a73 );.. $main::s │ │ │ -00037530: 7461 742d 3e61 6464 5375 6d4d 4435 5375 tat->addSumMD5Su │ │ │ -00037540: 6d28 2473 7461 7453 6f75 7263 6553 697a m($statSourceSiz │ │ │ -00037550: 6529 3b0a 0920 2020 2024 6d61 696e 3a3a e);.. $main:: │ │ │ -00037560: 7374 6174 2d3e 696e 6372 5f6e 6f4c 6174 stat->incr_noLat │ │ │ -00037570: 654c 696e 6b73 2824 7569 642c 2024 6769 eLinks($uid, $gi │ │ │ -00037580: 642c 2024 7374 6174 4e6f 4c61 7465 4c69 d, $statNoLateLi │ │ │ -00037590: 6e6b 7329 3b0a 0920 2020 2024 6d61 696e nks);.. $main │ │ │ -000375a0: 3a3a 7374 6174 2d3e 696e 6372 5f6e 6f46 ::stat->incr_noF │ │ │ -000375b0: 6f72 6b73 4350 2824 7374 6174 4e6f 466f orksCP($statNoFo │ │ │ -000375c0: 726b 7343 5029 3b0a 0920 2020 2024 6d61 rksCP);.. $ma │ │ │ -000375d0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ -000375e0: 6f46 6f72 6b73 436f 6d70 7265 7373 2824 oForksCompress($ │ │ │ -000375f0: 7374 6174 4e6f 466f 726b 7343 6f6d 7072 statNoForksCompr │ │ │ -00037600: 6573 7329 3b0a 0920 2020 2024 6d61 696e ess);.. $main │ │ │ -00037610: 3a3a 7374 6174 2d3e 6164 6453 756d 426c ::stat->addSumBl │ │ │ -00037620: 6f63 6b43 6f6d 7072 4368 6563 6b43 6f6d ockComprCheckCom │ │ │ -00037630: 7072 2824 6e6f 426c 6f63 6b43 6f6d 7072 pr($noBlockCompr │ │ │ -00037640: 4368 6563 6b43 6f6d 7072 293b 0a09 2020 CheckCompr);.. │ │ │ -00037650: 2020 246d 6169 6e3a 3a73 7461 742d 3e61 $main::stat->a │ │ │ -00037660: 6464 5375 6d42 6c6f 636b 436f 6d70 7243 ddSumBlockComprC │ │ │ -00037670: 6865 636b 4370 2824 6e6f 426c 6f63 6b43 heckCp($noBlockC │ │ │ -00037680: 6f6d 7072 4368 6563 6b43 7029 3b0a 0920 omprCheckCp);.. │ │ │ -00037690: 2020 2024 7072 4c6f 672d 3e61 6464 456e $prLog->addEn │ │ │ -000376a0: 636f 756e 7465 7228 272d 6b69 6e64 2720 counter('-kind' │ │ │ -000376b0: 3d3e 2027 4527 2c0a 0909 0909 2027 2d61 => 'E',..... '-a │ │ │ -000376c0: 6464 2720 3d3e 2024 6e6f 4572 726f 7273 dd' => $noErrors │ │ │ -000376d0: 293b 0a09 2020 2020 2470 724c 6f67 2d3e );.. $prLog-> │ │ │ -000376e0: 6164 6445 6e63 6f75 6e74 6572 2827 2d6b addEncounter('-k │ │ │ -000376f0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ -00037700: 0920 272d 6164 6427 203d 3e20 246e 6f57 . '-add' => $noW │ │ │ -00037710: 6172 6e69 6e67 7329 3b0a 0a09 2020 2020 arnings);... │ │ │ -00037720: 6966 2028 2463 6f6d 7072 6573 7342 6c6f if ($compressBlo │ │ │ -00037730: 636b 2065 7120 2775 2720 6f72 2024 6c61 ck eq 'u' or $la │ │ │ -00037740: 7465 436f 6d70 7265 7373 290a 0920 2020 teCompress).. │ │ │ -00037750: 207b 0a09 0924 6d61 696e 3a3a 7374 6174 {...$main::stat │ │ │ -00037760: 2d3e 6164 6453 756d 4e65 7743 6f70 7928 ->addSumNewCopy( │ │ │ -00037770: 2473 7461 7453 7462 7553 697a 6529 3b0a $statStbuSize);. │ │ │ -00037780: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ -00037790: 0a09 2020 2020 7b0a 0909 246d 6169 6e3a .. {...$main: │ │ │ -000377a0: 3a73 7461 742d 3e61 6464 5375 6d4e 6577 :stat->addSumNew │ │ │ -000377b0: 436f 6d70 7228 2473 7461 7453 7462 7553 Compr($statStbuS │ │ │ -000377c0: 697a 652c 2024 7374 6174 536f 7572 6365 ize, $statSource │ │ │ -000377d0: 5369 7a65 293b 0a09 2020 2020 7d0a 0920 Size);.. }.. │ │ │ -000377e0: 2020 2024 6d61 696e 3a3a 7374 6174 2d3e $main::stat-> │ │ │ -000377f0: 6164 645f 6e6f 4d44 3565 6446 696c 6573 add_noMD5edFiles │ │ │ -00037800: 2824 7374 6174 4e6f 426c 6f63 6b73 202b ($statNoBlocks + │ │ │ -00037810: 2031 293b 0a09 2020 2020 246d 6169 6e3a 1);.. $main: │ │ │ -00037820: 3a73 7461 742d 3e69 6e63 725f 6e6f 466f :stat->incr_noFo │ │ │ -00037830: 726b 734d 4435 2829 3b0a 2309 2020 2020 rksMD5();.#. │ │ │ -00037840: 7072 696e 7420 222c 2c2c 2c2c 2c2c 2c2c print ",,,,,,,,, │ │ │ -00037850: 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c 2c2c ,,,,,,,,,,,,,,,, │ │ │ -00037860: 2c2c 2c2c 2c2c 2066 696c 6520 3d20 3c24 ,,,,,, file = <$ │ │ │ -00037870: 6669 6c65 3e5c 6e22 3b0a 2309 2020 2020 file>\n";.#. │ │ │ -00037880: 7072 696e 7420 2264 6576 4469 7273 203d print "devDirs = │ │ │ -00037890: 2040 6465 7644 6972 735c 6e22 3b0a 2309 @devDirs\n";.#. │ │ │ -000378a0: 2020 2020 7072 696e 7420 2274 6172 6765 print "targe │ │ │ -000378b0: 7444 6972 203d 2024 7461 7267 6574 4469 tDir = $targetDi │ │ │ -000378c0: 725c 6e22 3b0a 0920 2020 2023 7772 6974 r\n";.. #writ │ │ │ -000378d0: 6520 7061 7468 2074 6f20 626c 6f63 6b65 e path to blocke │ │ │ -000378e0: 6420 6669 6c65 2069 6e20 6368 6563 6b73 d file in checks │ │ │ -000378f0: 756d 2066 696c 650a 0920 2020 2070 6f70 um file.. pop │ │ │ -00037900: 2040 6465 7644 6972 733b 2020 2023 2072 @devDirs; # r │ │ │ -00037910: 656d 6f76 6520 6469 722d 6669 6c65 2065 emove dir-file e │ │ │ -00037920: 6e74 7279 2066 726f 6d20 6765 6e65 7261 ntry from genera │ │ │ -00037930: 7465 6420 6c69 7374 0a09 2020 2020 666f ted list.. fo │ │ │ -00037940: 7265 6163 6820 6d79 2024 6465 7644 6972 reach my $devDir │ │ │ -00037950: 2028 4064 6576 4469 7273 290a 0920 2020 (@devDirs).. │ │ │ -00037960: 207b 0a09 096d 7920 2472 7020 3d20 263a {...my $rp = &: │ │ │ -00037970: 3a72 656c 5061 7468 2824 7461 7267 6574 :relPath($target │ │ │ -00037980: 4469 722c 2024 6465 7644 6972 293b 0a09 Dir, $devDir);.. │ │ │ -00037990: 0924 616b 7446 696c 656e 616d 652d 3e73 .$aktFilename->s │ │ │ -000379a0: 746f 7265 4469 7228 272d 6469 7227 2020 toreDir('-dir' │ │ │ -000379b0: 203d 3e20 2472 702c 2020 2320 6162 7320 => $rp, # abs │ │ │ -000379c0: 7061 7468 0a09 0909 0920 2020 2020 2020 path..... │ │ │ -000379d0: 272d 6465 7627 2020 203d 3e20 302c 0a09 '-dev' => 0,.. │ │ │ -000379e0: 0909 0920 2020 2020 2020 272d 696e 6f64 ... '-inod │ │ │ -000379f0: 6527 203d 3e20 302c 0a09 0909 0920 2020 e' => 0,..... │ │ │ -00037a00: 2020 2020 272d 6374 696d 6527 203d 3e20 '-ctime' => │ │ │ -00037a10: 2463 7469 6d65 2c0a 0909 0909 2020 2020 $ctime,..... │ │ │ -00037a20: 2020 2027 2d6d 7469 6d65 2720 3d3e 2024 '-mtime' => $ │ │ │ -00037a30: 6d74 696d 652c 0a09 0909 0920 2020 2020 mtime,..... │ │ │ -00037a40: 2020 272d 6174 696d 6527 203d 3e20 2461 '-atime' => $a │ │ │ -00037a50: 7469 6d65 2c0a 0909 0909 2020 2020 2020 time,..... │ │ │ -00037a60: 2027 2d75 6964 2720 2020 3d3e 2024 7569 '-uid' => $ui │ │ │ -00037a70: 642c 0a09 0909 0920 2020 2020 2020 272d d,..... '- │ │ │ -00037a80: 6769 6427 2020 203d 3e20 2467 6964 2c0a gid' => $gid,. │ │ │ -00037a90: 0909 0909 2020 2020 2020 2027 2d6d 6f64 .... '-mod │ │ │ -00037aa0: 6527 2020 3d3e 2024 6d6f 6465 293b 0a09 e' => $mode);.. │ │ │ -00037ab0: 2020 2020 7d0a 0920 2020 2040 6465 7644 }.. @devD │ │ │ -00037ac0: 6972 7320 3d20 2829 3b0a 0920 2020 2024 irs = ();.. $ │ │ │ -00037ad0: 616b 7446 696c 656e 616d 652d 3e73 746f aktFilename->sto │ │ │ -00037ae0: 7265 2827 2d66 696c 656e 616d 6527 203d re('-filename' = │ │ │ -00037af0: 3e20 2466 696c 652c 2020 2320 7370 6569 > $file, # spei │ │ │ -00037b00: 6368 6572 7420 696e 2064 626d 0a09 0909 chert in dbm.... │ │ │ -00037b10: 0927 2d6d 6435 7375 6d27 203d 3e20 2461 .'-md5sum' => $a │ │ │ -00037b20: 6c6c 4d44 352c 2020 2320 2e6d 6435 7375 llMD5, # .md5su │ │ │ -00037b30: 6d2d 4461 7465 690a 0909 0909 272d 636f m-Datei.....'-co │ │ │ -00037b40: 6d70 7227 203d 3e20 2762 272c 0a09 0909 mpr' => 'b',.... │ │ │ -00037b50: 0927 2d64 6576 2720 3d3e 2024 6465 762c .'-dev' => $dev, │ │ │ -00037b60: 0a09 0909 0927 2d69 6e6f 6465 2720 3d3e .....'-inode' => │ │ │ -00037b70: 2024 696e 6f64 652c 0a09 0909 0927 2d69 $inode,.....'-i │ │ │ -00037b80: 6e6f 6465 4261 636b 7570 2720 3d3e 2030 nodeBackup' => 0 │ │ │ -00037b90: 2c0a 0909 0909 272d 6374 696d 6527 203d ,.....'-ctime' = │ │ │ -00037ba0: 3e20 2463 7469 6d65 2c0a 0909 0909 272d > $ctime,.....'- │ │ │ -00037bb0: 6d74 696d 6527 203d 3e20 246d 7469 6d65 mtime' => $mtime │ │ │ -00037bc0: 2c0a 0909 0909 272d 6d74 696d 6527 203d ,.....'-mtime' = │ │ │ -00037bd0: 3e20 246d 7469 6d65 2c0a 0909 0909 272d > $mtime,.....'- │ │ │ -00037be0: 6174 696d 6527 203d 3e20 2461 7469 6d65 atime' => $atime │ │ │ -00037bf0: 2c0a 0909 0909 272d 7369 7a65 2720 3d3e ,.....'-size' => │ │ │ -00037c00: 2024 7369 7a65 2c0a 0909 0909 272d 7569 $size,.....'-ui │ │ │ -00037c10: 6427 203d 3e20 2475 6964 2c0a 0909 0909 d' => $uid,..... │ │ │ -00037c20: 272d 6769 6427 203d 3e20 2467 6964 2c0a '-gid' => $gid,. │ │ │ -00037c30: 0909 0909 272d 6d6f 6465 2720 3d3e 2024 ....'-mode' => $ │ │ │ -00037c40: 6d6f 6465 293b 0a09 7d0a 2370 7269 6e74 mode);..}.#print │ │ │ -00037c50: 2022 2d32 352d 5c6e 223b 0a20 2020 2020 "-25-\n";. │ │ │ -00037c60: 2020 2023 206e 6575 6520 4b6f 6d70 7269 # neue Kompri │ │ │ -00037c70: 6d69 6572 2d4a 6f62 7320 6569 6e68 c3a4 mier-Jobs einh.. │ │ │ -00037c80: 6e67 656e 0a20 2020 2020 2020 2077 6869 ngen. whi │ │ │ -00037c90: 6c65 2028 2470 6172 466f 726b 436f 6d70 le ($parForkComp │ │ │ -00037ca0: 722d 3e67 6574 4e6f 4672 6565 456e 7472 r->getNoFreeEntr │ │ │ -00037cb0: 6965 7328 2920 3e20 3020 616e 640a 2020 ies() > 0 and. │ │ │ -00037cc0: 2020 2020 2020 2020 2020 2020 2024 6669 $fi │ │ │ -00037cd0: 666f 436f 6d70 722d 3e67 6574 4e6f 5573 foCompr->getNoUs │ │ │ -00037ce0: 6564 456e 7472 6965 7328 2920 3e20 3029 edEntries() > 0) │ │ │ -00037cf0: 0a20 2020 2020 2020 207b 0a20 2020 2020 . {. │ │ │ -00037d00: 2020 2020 2020 2023 2057 6520 6469 6420 # We did │ │ │ -00037d10: 736f 6d65 7468 696e 670a 2020 2020 2020 something. │ │ │ -00037d20: 2020 2020 2020 246d 6169 6e3a 3a74 696e $main::tin │ │ │ -00037d30: 7957 6169 7453 6368 6564 756c 6572 2d3e yWaitScheduler-> │ │ │ -00037d40: 7265 7365 7428 293b 0a0a 2020 2020 2020 reset();.. │ │ │ -00037d50: 2020 2020 2020 6d79 2028 2464 6972 2c20 my ($dir, │ │ │ -00037d60: 2466 696c 652c 2024 7569 642c 2024 6769 $file, $uid, $gi │ │ │ -00037d70: 642c 2024 6d6f 6465 2c20 246d 6435 2920 d, $mode, $md5) │ │ │ -00037d80: 3d0a 2020 2020 2020 2020 2020 2020 2020 =. │ │ │ -00037d90: 2020 407b 2466 6966 6f43 6f6d 7072 2d3e @{$fifoCompr-> │ │ │ -00037da0: 6765 7428 297d 3b0a 0920 2020 2075 6e6c get()};.. unl │ │ │ -00037db0: 6573 7320 282d 6520 2224 6469 722f 2466 ess (-e "$dir/$f │ │ │ -00037dc0: 696c 6522 2920 2020 2023 2066 696c 6520 ile") # file │ │ │ -00037dd0: 7761 7320 6465 6c65 7465 6420 6475 7269 was deleted duri │ │ │ -00037de0: 6e67 2077 6169 7420 696e 2071 7565 7565 ng wait in queue │ │ │ -00037df0: 0a09 2020 2020 7b0a 0909 2470 724c 6f67 .. {...$prLog │ │ │ -00037e00: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00037e10: 3d3e 2027 5727 2c0a 0909 0920 2020 2020 => 'W',.... │ │ │ -00037e20: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... │ │ │ -00037e30: 2020 2020 5b22 6669 6c65 203c 2464 6972 ["file <$dir │ │ │ -00037e40: 2f24 6669 6c65 3e20 6465 6c65 7465 6420 /$file> deleted │ │ │ -00037e50: 6475 7269 6e67 2062 6163 6b75 7020 2838 during backup (8 │ │ │ -00037e60: 2922 5d29 3b0a 0909 6e65 7874 3b0a 0920 )"]);...next;.. │ │ │ -00037e70: 2020 207d 0a20 2020 2020 2020 2020 2020 }. │ │ │ -00037e80: 206d 7920 2824 6465 762c 2024 696e 6f64 my ($dev, $inod │ │ │ -00037e90: 652c 2024 6374 696d 652c 2024 6d74 696d e, $ctime, $mtim │ │ │ -00037ea0: 652c 2024 6174 696d 652c 2024 7369 7a65 e, $atime, $size │ │ │ -00037eb0: 2920 3d0a 2020 2020 2020 2020 2020 2020 ) =. │ │ │ -00037ec0: 2020 2020 2873 7461 7428 2224 6469 722f (stat("$dir/ │ │ │ -00037ed0: 2466 696c 6522 2929 5b30 2c20 312c 2031 $file"))[0, 1, 1 │ │ │ -00037ee0: 302c 2039 2c20 382c 2037 5d3b 0a20 2020 0, 9, 8, 7];. │ │ │ -00037ef0: 2020 2020 2020 2020 2024 6d6f 6465 2026 $mode & │ │ │ -00037f00: 3d20 3037 3737 373b 0a0a 2020 2020 2020 = 07777;.. │ │ │ -00037f10: 2020 2020 2020 2470 724c 6f67 2d3e 7072 $prLog->pr │ │ │ -00037f20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00037f30: 4427 2c0a 2020 2020 2020 2020 2020 2020 D',. │ │ │ -00037f40: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00037f50: 7374 7227 203d 3e20 5b22 2463 6f6d 7072 str' => ["$compr │ │ │ -00037f60: 6573 7320 3c20 2464 6972 2f24 6669 6c65 ess < $dir/$file │ │ │ -00037f70: 203e 2022 202e 0a20 2020 2020 2020 2020 > " .. │ │ │ -00037f80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00037f90: 2020 2020 2020 2020 2020 2020 2224 7461 "$ta │ │ │ -00037fa0: 7267 6574 4469 722f 2466 696c 6524 706f rgetDir/$file$po │ │ │ -00037fb0: 7374 6669 7822 5d29 0a20 2020 2020 2020 stfix"]). │ │ │ -00037fc0: 2020 2020 2020 2020 2069 6620 2824 6465 if ($de │ │ │ -00037fd0: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);.. │ │ │ -00037fe0: 2309 2020 2020 6966 2028 246c 6174 654c #. if ($lateL │ │ │ -00037ff0: 696e 6b73 5377 6974 6368 6564 4f66 6629 inksSwitchedOff) │ │ │ -00038000: 0a23 0920 2020 207b 0a23 0909 6d79 2028 .#. {.#..my ( │ │ │ -00038010: 2464 6972 2c20 2466 696c 6529 203d 0a23 $dir, $file) =.# │ │ │ -00038020: 0909 2020 2020 263a 3a73 706c 6974 4669 .. &::splitFi │ │ │ -00038030: 6c65 4469 7228 2224 7461 7267 6574 4469 leDir("$targetDi │ │ │ -00038040: 722f 2466 696c 6524 706f 7374 6669 7822 r/$file$postfix" │ │ │ -00038050: 293b 0a23 0909 263a 3a6d 616b 6544 6972 );.#..&::makeDir │ │ │ -00038060: 5061 7468 2824 6469 722c 2024 7072 4c6f Path($dir, $prLo │ │ │ -00038070: 6729 3b0a 2309 2020 2020 7d0a 0a09 2020 g);.#. }... │ │ │ -00038080: 2020 6d79 2024 746d 704d 4435 4669 6c65 my $tmpMD5File │ │ │ -00038090: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa │ │ │ -000380a0: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me("$tmpdir/stor │ │ │ -000380b0: 6542 6163 6b75 702d 6d64 352e 2229 3b0a eBackup-md5.");. │ │ │ -000380c0: 0920 2020 2024 7061 7246 6f72 6b43 6f6d . $parForkCom │ │ │ -000380d0: 7072 2d3e 6164 645f 6e6f 626c 6f63 6b28 pr->add_noblock( │ │ │ -000380e0: 272d 6578 6563 2720 3d3e 2024 6d61 696e '-exec' => $main │ │ │ -000380f0: 3a3a 7374 6275 4d64 3545 7865 632c 0a20 ::stbuMd5Exec,. │ │ │ -00038100: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00038110: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00038120: 7061 7261 6d27 203d 3e20 5b24 636f 6d70 param' => [$comp │ │ │ -00038130: 7265 7373 436f 6d6d 616e 642c 2022 2464 ressCommand, "$d │ │ │ -00038140: 6972 2f24 6669 6c65 222c 0a09 0909 2020 ir/$file",.... │ │ │ -00038150: 2020 2020 2022 2474 6172 6765 7444 6972 "$targetDir │ │ │ -00038160: 2f24 6669 6c65 2470 6f73 7466 6978 222c /$file$postfix", │ │ │ -00038170: 0a09 0909 2020 2020 2020 2024 746d 704d .... $tmpM │ │ │ -00038180: 4435 4669 6c65 2c20 2474 6d70 6469 722c D5File, $tmpdir, │ │ │ -00038190: 0a09 0909 2020 2020 2020 2040 2463 6f6d .... @$com │ │ │ -000381a0: 7072 6573 734f 7074 696f 6e73 5d2c 0a20 pressOptions],. │ │ │ -000381b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000381c0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -000381d0: 776f 726b 696e 6744 6972 2720 3d3e 2027 workingDir' => ' │ │ │ -000381e0: 2e27 2c0a 2020 2020 2020 2020 2020 2020 .',. │ │ │ -000381f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00038200: 2020 2027 2d6f 7574 5261 6e64 6f6d 2720 '-outRandom' │ │ │ -00038210: 3d3e 2022 2474 6d70 6469 722f 7374 6465 => "$tmpdir/stde │ │ │ -00038220: 7272 222c 0a20 2020 2020 2020 2020 2020 rr",. │ │ │ -00038230: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00038240: 2020 2020 272d 696e 666f 2720 3d3e 0a20 '-info' =>. │ │ │ -00038250: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00038260: 2020 2020 2020 2020 2020 2020 2020 5b24 [$ │ │ │ -00038270: 6465 762c 2024 696e 6f64 652c 2024 6469 dev, $inode, $di │ │ │ -00038280: 722c 2024 6669 6c65 2c20 2475 6964 2c20 r, $file, $uid, │ │ │ -00038290: 2467 6964 2c0a 2020 2020 2020 2020 2020 $gid,. │ │ │ -000382a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000382b0: 2020 2020 2020 246d 6f64 652c 2024 6d64 $mode, $md │ │ │ -000382c0: 352c 2024 6374 696d 652c 2024 6d74 696d 5, $ctime, $mtim │ │ │ -000382d0: 652c 0a20 2020 2020 2020 2020 2020 2020 e,. │ │ │ -000382e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000382f0: 2020 2024 6174 696d 652c 2024 7369 7a65 $atime, $size │ │ │ -00038300: 2c20 2474 6d70 4d44 3546 696c 655d 290a , $tmpMD5File]). │ │ │ -00038310: 0909 6f72 2064 6965 2022 6d75 7374 206e ..or die "must n │ │ │ -00038320: 6f74 2068 6170 7065 6e20 2863 6f6d 7072 ot happen (compr │ │ │ -00038330: 2922 3b0a 0a0a 2020 2020 2020 2020 7d0a )";... }. │ │ │ -00038340: 0a20 2020 2020 2020 2024 6d61 696e 3a3a . $main:: │ │ │ -00038350: 7374 6174 2d3e 6368 6563 6b50 7269 6e74 stat->checkPrint │ │ │ -00038360: 5469 6d65 5072 6f67 7265 7373 5265 706f TimeProgressRepo │ │ │ -00038370: 7274 2829 3b0a 2020 2020 2020 2020 2320 rt();. # │ │ │ -00038380: 5761 6974 2069 6e20 6361 7365 2077 6520 Wait in case we │ │ │ -00038390: 6469 6420 6e6f 7468 696e 6720 696e 2074 did nothing in t │ │ │ -000383a0: 6869 7320 6c6f 6f70 2072 756e 0a20 2020 his loop run. │ │ │ -000383b0: 2020 2020 2024 6d61 696e 3a3a 7469 6e79 $main::tiny │ │ │ -000383c0: 5761 6974 5363 6865 6475 6c65 722d 3e77 WaitScheduler->w │ │ │ -000383d0: 6169 7428 293b 0a20 2020 207d 0a23 7072 ait();. }.#pr │ │ │ -000383e0: 696e 7420 222d 3236 2d5c 6e22 3b0a 0a20 int "-26-\n";.. │ │ │ -000383f0: 2020 2069 6620 2825 696e 5072 6f67 7265 if (%inProgre │ │ │ -00038400: 7373 290a 2020 2020 7b0a 096d 7920 246d ss). {..my $m │ │ │ -00038410: 6435 3b0a 0924 7072 4c6f 672d 3e70 7269 d5;..$prLog->pri │ │ │ -00038420: 6e74 2827 2d6b 696e 6427 203d 3e20 2744 nt('-kind' => 'D │ │ │ -00038430: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -00038440: 2720 3d3e 205b 2272 6570 6561 7420 6368 ' => ["repeat ch │ │ │ -00038450: 6563 6b69 6e67 206f 6620 6964 656e 7469 ecking of identi │ │ │ -00038460: 6361 6c20 6669 6c65 7322 5d29 0a09 2020 cal files"]).. │ │ │ -00038470: 2020 6966 2024 6465 6275 674d 6f64 6520 if $debugMode │ │ │ -00038480: 3e3d 2033 3b0a 0966 6f72 6561 6368 2024 >= 3;..foreach $ │ │ │ -00038490: 6d64 3520 286b 6579 7320 2569 6e50 726f md5 (keys %inPro │ │ │ -000384a0: 6772 6573 7329 0a09 7b0a 0920 2020 2024 gress)..{.. $ │ │ │ -000384b0: 7265 6164 4469 7241 6e64 4368 6563 6b2d readDirAndCheck- │ │ │ -000384c0: 3e70 7573 6862 6163 6b28 2469 6e50 726f >pushback($inPro │ │ │ -000384d0: 6772 6573 737b 246d 6435 7d2c 2024 7072 gress{$md5}, $pr │ │ │ -000384e0: 4c6f 672c 0a09 0924 6465 6275 674d 6f64 Log,...$debugMod │ │ │ -000384f0: 6520 3e3d 2033 203f 2031 203a 2030 293b e >= 3 ? 1 : 0); │ │ │ -00038500: 0a09 7d0a 0928 2569 6e50 726f 6772 6573 ..}..(%inProgres │ │ │ -00038510: 7329 203d 2028 293b 0a09 6e6f 2077 6172 s) = ();..no war │ │ │ -00038520: 6e69 6e67 7320 2764 6570 7265 6361 7465 nings 'deprecate │ │ │ -00038530: 6427 3b0a 0967 6f74 6f20 6265 6769 6e4d d';..goto beginM │ │ │ -00038540: 6169 6e4c 6f6f 704e 6f72 6d61 6c4f 7065 ainLoopNormalOpe │ │ │ -00038550: 7261 7469 6f6e 3b0a 2020 2020 7d0a 2020 ration;. }. │ │ │ -00038560: 2020 246d 6169 6e3a 3a73 7461 742d 3e70 $main::stat->p │ │ │ -00038570: 7269 6e74 5072 6f67 7265 7373 5265 706f rintProgressRepo │ │ │ -00038580: 7274 2829 3b0a 0a23 7072 696e 7420 222d rt();..#print "- │ │ │ -00038590: 3237 2d5c 6e22 3b0a 2020 2020 6966 2028 27-\n";. if ( │ │ │ -000385a0: 246c 6174 654c 696e 6b73 2061 6e64 206e $lateLinks and n │ │ │ -000385b0: 6f74 0a09 2864 6566 696e 6564 2824 6669 ot..(defined($fi │ │ │ -000385c0: 6c65 2920 616e 6420 6578 6973 7473 2024 le) and exists $ │ │ │ -000385d0: 666f 7263 6543 6f70 7943 6f6d 7072 7b24 forceCopyCompr{$ │ │ │ -000385e0: 6669 6c65 7d29 290a 2020 2020 7b0a 2370 file})). {.#p │ │ │ -000385f0: 7269 6e74 2022 2d32 382d 5c6e 223b 0a09 rint "-28-\n";.. │ │ │ -00038600: 2477 724c 6174 654c 696e 6b2d 3e77 6169 $wrLateLink->wai │ │ │ -00038610: 7428 293b 0a23 7072 696e 7420 222d 3239 t();.#print "-29 │ │ │ -00038620: 2d5c 6e22 3b0a 096d 7920 246f 7574 203d -\n";..my $out = │ │ │ -00038630: 2024 7772 4c61 7465 4c69 6e6b 2d3e 6765 $wrLateLink->ge │ │ │ -00038640: 7453 5444 4552 5228 293b 0a09 6966 2028 tSTDERR();..if ( │ │ │ -00038650: 4024 6f75 7429 0a09 7b0a 0920 2020 2024 @$out)..{.. $ │ │ │ -00038660: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00038670: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00038680: 2020 272d 7374 7227 203d 3e20 5b22 7772 '-str' => ["wr │ │ │ -00038690: 6974 696e 6720 6c61 7465 4c69 6e6b 7320 iting lateLinks │ │ │ -000386a0: 6669 6c65 2072 6570 6f72 7473 2065 7272 file reports err │ │ │ -000386b0: 6f72 733a 222c 0a09 0909 0920 2020 2020 ors:",..... │ │ │ -000386c0: 4024 6f75 745d 293b 0a09 2020 2020 6578 @$out]);.. ex │ │ │ -000386d0: 6974 2031 3b0a 097d 0a09 2477 724c 6174 it 1;..}..$wrLat │ │ │ -000386e0: 654c 696e 6b2d 3e63 6c6f 7365 2829 3b0a eLink->close();. │ │ │ -000386f0: 0a23 7072 696e 7420 222d 3330 2d5c 6e22 .#print "-30-\n" │ │ │ -00038700: 3b0a 0969 6620 2873 6361 6c61 7228 2561 ;..if (scalar(%a │ │ │ -00038710: 6c6c 4261 636b 7570 4469 7273 2929 0a09 llBackupDirs)).. │ │ │ -00038720: 7b0a 2370 7269 6e74 2022 2d33 312d 5c6e {.#print "-31-\n │ │ │ -00038730: 223b 0a09 2020 2020 2320 6765 6e65 7261 ";.. # genera │ │ │ -00038740: 7465 2069 6e66 6f72 6d61 7469 6f6e 2074 te information t │ │ │ -00038750: 6861 7420 7265 6665 7265 6e63 6573 2068 hat references h │ │ │ -00038760: 6176 6520 746f 2062 6520 7265 736f 6c76 ave to be resolv │ │ │ -00038770: 6564 0a09 2020 2020 6d79 2024 746f 203d ed.. my $to = │ │ │ -00038780: 2022 2474 6172 6765 7444 6972 2f2e 7374 "$targetDir/.st │ │ │ -00038790: 6f72 6542 6163 6b75 704c 696e 6b73 2f6c oreBackupLinks/l │ │ │ -000387a0: 696e 6b54 6f22 3b0a 0920 2020 206c 6f63 inkTo";.. loc │ │ │ -000387b0: 616c 202a 544f 3b0a 0920 2020 206f 7065 al *TO;.. ope │ │ │ -000387c0: 6e28 544f 2c20 223e 222c 2024 746f 2920 n(TO, ">", $to) │ │ │ -000387d0: 6f72 0a09 0924 7072 4c6f 672d 3e70 7269 or...$prLog->pri │ │ │ -000387e0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000387f0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00038800: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => ["cannot o │ │ │ -00038810: 7065 6e20 3c24 746f 3e22 5d2c 0a09 0909 pen <$to>"],.... │ │ │ -00038820: 2020 2020 2020 272d 6164 6427 203d 3e20 '-add' => │ │ │ -00038830: 5b5f 5f46 494c 455f 5f2c 205f 5f4c 494e [__FILE__, __LIN │ │ │ -00038840: 455f 5f5d 2c0a 0909 0920 2020 2020 2027 E__],.... ' │ │ │ -00038850: 2d65 7869 7427 203d 3e20 3129 3b0a 0a09 -exit' => 1);... │ │ │ -00038860: 2020 2020 6d79 2024 6162 643b 0a09 2020 my $abd;.. │ │ │ -00038870: 2020 666f 7265 6163 6820 2461 6264 2028 foreach $abd ( │ │ │ -00038880: 2561 6c6c 4261 636b 7570 4469 7273 290a %allBackupDirs). │ │ │ -00038890: 0920 2020 207b 0a23 7072 696e 7420 222d . {.#print "- │ │ │ -000388a0: 3332 2d24 6162 642d 5c6e 223b 0a09 096d 32-$abd-\n";...m │ │ │ -000388b0: 7920 2472 656c 7061 7468 203d 203a 3a72 y $relpath = ::r │ │ │ -000388c0: 656c 5061 7468 2824 7461 7267 6574 4469 elPath($targetDi │ │ │ -000388d0: 722c 2024 6162 6429 3b0a 0909 6e65 7874 r, $abd);...next │ │ │ -000388e0: 2069 6620 2472 656c 7061 7468 2065 7120 if $relpath eq │ │ │ -000388f0: 272e 273b 0a09 0969 6620 2821 7072 696e '.';...if (!prin │ │ │ -00038900: 7420 544f 2022 2472 656c 7061 7468 5c6e t TO "$relpath\n │ │ │ -00038910: 2229 0a09 097b 0a09 0920 2020 2024 7072 ")...{... $pr │ │ │ -00038920: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00038930: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -00038940: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -00038950: 6e6f 7420 7772 6974 6520 746f 203c 2474 not write to <$t │ │ │ -00038960: 6f3e 225d 2c0a 0909 0909 2020 272d 6578 o>"],..... '-ex │ │ │ -00038970: 6974 2720 3d3e 2031 293b 0a09 0920 2020 it' => 1);... │ │ │ -00038980: 206e 6578 743b 0a09 097d 0a09 096d 7920 next;...}...my │ │ │ -00038990: 2469 203d 2030 3b0a 0909 6c6f 6361 6c20 $i = 0;...local │ │ │ -000389a0: 2a46 524f 4d3b 0a09 096d 7920 2466 726f *FROM;...my $fro │ │ │ -000389b0: 6d20 3d20 2224 6162 642f 2e73 746f 7265 m = "$abd/.store │ │ │ -000389c0: 4261 636b 7570 4c69 6e6b 732f 6c69 6e6b BackupLinks/link │ │ │ -000389d0: 4672 6f6d 223b 0a09 0924 692b 2b20 7768 From";...$i++ wh │ │ │ -000389e0: 696c 6520 2d65 2022 2466 726f 6d24 6922 ile -e "$from$i" │ │ │ -000389f0: 3b0a 0909 6f70 656e 2846 524f 4d2c 2022 ;...open(FROM, " │ │ │ -00038a00: 3e22 2c20 2224 6672 6f6d 2469 2229 206f >", "$from$i") o │ │ │ -00038a10: 720a 0909 2020 2020 2470 724c 6f67 2d3e r... $prLog-> │ │ │ -00038a20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00038a30: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st │ │ │ -00038a40: 7227 203d 3e20 5b22 6361 6e6e 6f74 2077 r' => ["cannot w │ │ │ -00038a50: 7269 7465 2074 6f20 3c24 6672 6f6d 2469 rite to <$from$i │ │ │ -00038a60: 3e22 5d2c 0a09 0909 0920 2027 2d65 7869 >"],..... '-exi │ │ │ -00038a70: 7427 203d 3e20 3129 3b0a 0909 2472 656c t' => 1);...$rel │ │ │ -00038a80: 7061 7468 203d 203a 3a72 656c 5061 7468 path = ::relPath │ │ │ -00038a90: 2824 6162 642c 2024 7461 7267 6574 4469 ($abd, $targetDi │ │ │ -00038aa0: 7229 3b0a 0909 6e65 7874 2069 6620 2472 r);...next if $r │ │ │ -00038ab0: 656c 7061 7468 2065 7120 272e 273b 0a09 elpath eq '.';.. │ │ │ -00038ac0: 0970 7269 6e74 2046 524f 4d20 2224 7265 .print FROM "$re │ │ │ -00038ad0: 6c70 6174 685c 6e22 206f 720a 0909 2020 lpath\n" or... │ │ │ -00038ae0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00038af0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00038b00: 0909 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ -00038b10: 5b22 6361 6e6e 6f74 2077 7269 7465 2074 ["cannot write t │ │ │ -00038b20: 6f20 3c24 6672 6f6d 2469 3e22 5d2c 0a09 o <$from$i>"],.. │ │ │ -00038b30: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -00038b40: 3129 3b0a 0909 636c 6f73 6528 4652 4f4d 1);...close(FROM │ │ │ -00038b50: 2920 6f72 0a09 0920 2020 2024 7072 4c6f ) or... $prLo │ │ │ -00038b60: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00038b70: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ -00038b80: 2d73 7472 2720 3d3e 205b 2263 616e 6e6f -str' => ["canno │ │ │ -00038b90: 7420 636c 6f73 6520 3c24 6672 6f6d 2469 t close <$from$i │ │ │ -00038ba0: 3e22 5d2c 0a09 0909 0920 2027 2d65 7869 >"],..... '-exi │ │ │ -00038bb0: 7427 203d 3e20 3129 3b0a 0920 2020 207d t' => 1);.. } │ │ │ -00038bc0: 0a09 2020 2020 636c 6f73 6528 544f 2920 .. close(TO) │ │ │ -00038bd0: 6f72 0a09 0924 7072 4c6f 672d 3e70 7269 or...$prLog->pri │ │ │ -00038be0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00038bf0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00038c00: 7227 203d 3e20 5b22 6361 6e6e 6f74 2063 r' => ["cannot c │ │ │ -00038c10: 6c6f 7365 203c 2474 6f3e 225d 2c0a 0909 lose <$to>"],... │ │ │ -00038c20: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00038c30: 3e20 3129 3b0a 097d 0a20 2020 207d 0a23 > 1);..}. }.# │ │ │ -00038c40: 7072 696e 7420 222d 3333 2d5c 6e22 3b0a print "-33-\n";. │ │ │ -00038c50: 7d0a 0a0a 2323 2323 2323 2323 2323 2323 }...############ │ │ │ -00038c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00038c70: 2323 2323 2323 2323 2323 2323 0a23 2068 ############.# h │ │ │ -00038c80: 656c 7065 7220 7375 6272 6f75 7469 6e65 elper subroutine │ │ │ -00038c90: 7320 696e 2070 6163 6b61 6765 2073 6368 s in package sch │ │ │ -00038ca0: 6564 756c 6572 0a73 7562 2063 6861 6e67 eduler.sub chang │ │ │ -00038cb0: 6553 796d 6c69 6e6b 5065 726d 730a 7b0a eSymlinkPerms.{. │ │ │ -00038cc0: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g │ │ │ -00038cd0: 6964 2c20 2474 6172 6765 7444 6972 2c20 id, $targetDir, │ │ │ -00038ce0: 2466 696c 652c 2024 746d 7064 6972 2c20 $file, $tmpdir, │ │ │ -00038cf0: 2470 724c 6f67 2920 3d20 2840 5f29 3b0a $prLog) = (@_);. │ │ │ -00038d00: 2020 2020 2320 536f 6d65 204f 5320 2865 # Some OS (e │ │ │ -00038d10: 672e 204c 696e 7578 2920 646f 206e 6f74 g. Linux) do not │ │ │ -00038d20: 2063 6861 6e67 6520 7468 6520 7379 6d6c change the syml │ │ │ -00038d30: 696e 6b20 6974 7365 6c66 0a20 2020 2023 ink itself. # │ │ │ -00038d40: 2077 6865 6e20 6361 6c6c 696e 6720 7468 when calling th │ │ │ -00038d50: 6520 7379 7374 656d 2063 616c 6c20 6368 e system call ch │ │ │ -00038d60: 6d6f 642e 2054 6865 7920 6368 616e 6765 mod. They change │ │ │ -00038d70: 2074 6865 206f 776e 6572 7368 6970 0a20 the ownership. │ │ │ -00038d80: 2020 2023 206f 6620 7468 6520 6669 6c65 # of the file │ │ │ -00038d90: 2072 6566 6572 7265 6420 746f 2062 7920 referred to by │ │ │ -00038da0: 7468 6520 7379 6d70 6f6c 6963 206c 696e the sympolic lin │ │ │ -00038db0: 6b2e 0a20 2020 2023 2054 6865 7265 666f k.. # Therefo │ │ │ -00038dc0: 7265 2c20 6c63 686f 776e 2068 6173 2074 re, lchown has t │ │ │ -00038dd0: 6f20 6265 2075 7365 640a 2020 2020 6d79 o be used. my │ │ │ -00038de0: 2024 6368 6f77 6e20 3d0a 0966 6f72 6b50 $chown =..forkP │ │ │ -00038df0: 726f 632d 3e6e 6577 2827 2d65 7865 6327 roc->new('-exec' │ │ │ -00038e00: 203d 3e20 2763 686f 776e 272c 0a09 0920 => 'chown',... │ │ │ -00038e10: 2020 2020 2027 2d70 6172 616d 2720 3d3e '-param' => │ │ │ -00038e20: 205b 272d 6827 2c20 2224 7569 643a 2467 ['-h', "$uid:$g │ │ │ -00038e30: 6964 222c 0a09 0909 0920 2020 2224 7461 id",..... "$ta │ │ │ -00038e40: 7267 6574 4469 722f 2466 696c 6522 5d2c rgetDir/$file"], │ │ │ -00038e50: 0a09 0920 2020 2020 2027 2d6f 7574 5261 ... '-outRa │ │ │ -00038e60: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => "$tmpdi │ │ │ -00038e70: 722f 6368 6f77 6e2d 222c 0a09 0920 2020 r/chown-",... │ │ │ -00038e80: 2020 2027 2d70 724c 6f67 2720 3d3e 2024 '-prLog' => $ │ │ │ -00038e90: 7072 4c6f 6729 3b0a 2020 2020 2463 686f prLog);. $cho │ │ │ -00038ea0: 776e 2d3e 7761 6974 2829 3b0a 0a23 0909 wn->wait();..#.. │ │ │ -00038eb0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $ │ │ │ -00038ec0: 6d74 696d 652c 2022 2464 6972 2f24 6669 mtime, "$dir/$fi │ │ │ -00038ed0: 6c65 2220 6966 2024 7265 7365 7441 7469 le" if $resetAti │ │ │ -00038ee0: 6d65 3b0a 2309 0909 7574 696d 6520 2461 me;.#...utime $a │ │ │ -00038ef0: 7469 6d65 2c20 246d 7469 6d65 2c20 2224 time, $mtime, "$ │ │ │ -00038f00: 7461 7267 6574 4469 722f 2466 696c 6522 targetDir/$file" │ │ │ -00038f10: 3b0a 2309 0909 5e5e 2075 7469 6d65 2063 ;.#...^^ utime c │ │ │ -00038f20: 6861 6e67 6573 206f 7269 6769 6e61 6c20 hanges original │ │ │ -00038f30: 6669 6c65 210a 7d0a 0a23 2323 2323 2323 file!.}..####### │ │ │ -00038f40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00038f50: 2323 2323 2323 230a 7375 6220 7374 6f72 #######.sub stor │ │ │ -00038f60: 6553 796d 4c69 6e6b 496e 666f 730a 7b0a eSymLinkInfos.{. │ │ │ -00038f70: 2020 2020 6d79 2028 2475 6964 2c20 2467 my ($uid, $g │ │ │ -00038f80: 6964 2c20 2474 6172 6765 7444 6972 2c20 id, $targetDir, │ │ │ -00038f90: 2466 696c 652c 2024 6465 762c 2024 696e $file, $dev, $in │ │ │ -00038fa0: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt │ │ │ -00038fb0: 696d 652c 0a09 2461 7469 6d65 2c20 2461 ime,..$atime, $a │ │ │ -00038fc0: 6b74 4669 6c65 6e61 6d65 2c20 2464 6562 ktFilename, $deb │ │ │ -00038fd0: 7567 4d6f 6465 2c20 2470 724c 6f67 2920 ugMode, $prLog) │ │ │ -00038fe0: 3d20 2840 5f29 3b0a 0a20 2020 2024 6d61 = (@_);.. $ma │ │ │ -00038ff0: 696e 3a3a 7374 6174 2d3e 696e 6372 5f6e in::stat->incr_n │ │ │ -00039000: 6f53 796d 4c69 6e6b 7328 2475 6964 2c20 oSymLinks($uid, │ │ │ -00039010: 2467 6964 293b 0a20 2020 2024 7072 4c6f $gid);. $prLo │ │ │ -00039020: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00039030: 203d 3e20 2744 272c 0a09 0920 2027 2d73 => 'D',... '-s │ │ │ -00039040: 7472 2720 3d3e 0a09 0920 205b 2263 7265 tr' =>... ["cre │ │ │ -00039050: 6174 6564 2073 796d 626f 6c69 6320 6c69 ated symbolic li │ │ │ -00039060: 6e6b 203c 2474 6172 6765 7444 6972 2f24 nk <$targetDir/$ │ │ │ -00039070: 6669 6c65 225d 290a 0969 6620 2824 6465 file"])..if ($de │ │ │ -00039080: 6275 674d 6f64 6520 3e3d 2032 293b 0a0a bugMode >= 2);.. │ │ │ -00039090: 2020 2020 2461 6b74 4669 6c65 6e61 6d65 $aktFilename │ │ │ -000390a0: 2d3e 7374 6f72 6553 796d 6c69 6e6b 2827 ->storeSymlink(' │ │ │ -000390b0: 2d73 796d 6c69 6e6b 2720 3d3e 2024 6669 -symlink' => $fi │ │ │ -000390c0: 6c65 2c0a 0909 0920 2020 2020 2020 272d le,.... '- │ │ │ -000390d0: 6465 7627 203d 3e20 2464 6576 2c0a 0909 dev' => $dev,... │ │ │ -000390e0: 0920 2020 2020 2020 272d 696e 6f64 6527 . '-inode' │ │ │ -000390f0: 203d 3e20 2469 6e6f 6465 2c0a 0909 0920 => $inode,.... │ │ │ -00039100: 2020 2020 2020 272d 6374 696d 6527 203d '-ctime' = │ │ │ -00039110: 3e20 2463 7469 6d65 2c0a 0909 0920 2020 > $ctime,.... │ │ │ -00039120: 2020 2020 272d 6d74 696d 6527 203d 3e20 '-mtime' => │ │ │ -00039130: 246d 7469 6d65 2c0a 0909 0920 2020 2020 $mtime,.... │ │ │ -00039140: 2020 272d 6174 696d 6527 203d 3e20 2461 '-atime' => $a │ │ │ -00039150: 7469 6d65 2c0a 0909 0920 2020 2020 2020 time,.... │ │ │ -00039160: 272d 7569 6427 203d 3e20 2475 6964 2c0a '-uid' => $uid,. │ │ │ -00039170: 0909 0920 2020 2020 2020 272d 6769 6427 ... '-gid' │ │ │ -00039180: 203d 3e20 2467 6964 293b 0a7d 0a0a 0a23 => $gid);.}...# │ │ │ -00039190: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000391a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000391b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000391c0: 230a 7061 636b 6167 6520 5374 6174 6973 #.package Statis │ │ │ -000391d0: 7469 633b 0a6f 7572 2040 4953 4120 3d20 tic;.our @ISA = │ │ │ -000391e0: 7177 2820 7374 6174 6973 7469 6344 656c qw( statisticDel │ │ │ -000391f0: 6574 654f 6c64 4261 636b 7570 4469 7273 eteOldBackupDirs │ │ │ -00039200: 2029 3b0a 0a23 2323 2323 2323 2323 2323 );..########### │ │ │ -00039210: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00039220: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -00039230: 6220 6e65 770a 7b0a 2020 2020 6d79 2024 b new.{. my $ │ │ │ -00039240: 636c 6173 7320 3d20 7368 6966 743b 0a0a class = shift;.. │ │ │ -00039250: 2020 2020 6d79 2028 2570 6172 616d 7329 my (%params) │ │ │ -00039260: 203d 2028 272d 7374 6172 7444 6174 6527 = ('-startDate' │ │ │ -00039270: 2020 2020 2020 2020 203d 3e20 756e 6465 => unde │ │ │ -00039280: 662c 0a09 0920 2020 2027 2d61 6b74 4461 f,... '-aktDa │ │ │ -00039290: 7465 2720 2020 2020 2020 2020 2020 3d3e te' => │ │ │ -000392a0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -000392b0: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil │ │ │ -000392c0: 6527 203d 3e20 756e 6465 662c 2020 2020 e' => undef, │ │ │ -000392d0: 2023 2046 6c61 670a 0909 2020 2020 272d # Flag... '- │ │ │ -000392e0: 6578 6365 7074 5375 6666 6978 2720 2020 exceptSuffix' │ │ │ -000392f0: 2020 203d 3e20 756e 6465 662c 2020 2020 => undef, │ │ │ -00039300: 2023 2046 696c 656e 616d 6520 2869 6620 # Filename (if │ │ │ -00039310: 7365 7429 0a09 0920 2020 2027 2d70 724c set)... '-prL │ │ │ -00039320: 6f67 2720 2020 2020 2020 2020 2020 2020 og' │ │ │ -00039330: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -00039340: 272d 7072 6f67 7265 7373 5265 706f 7274 '-progressReport │ │ │ -00039350: 2720 2020 203d 3e20 756e 6465 662c 0a09 ' => undef,.. │ │ │ -00039360: 0920 2020 2027 2d70 726f 6772 6573 7344 . '-progressD │ │ │ -00039370: 656c 7461 5469 6d65 2720 3d3e 2030 2c0a eltaTime' => 0,. │ │ │ -00039380: 0909 2020 2020 272d 7769 7468 5573 6572 .. '-withUser │ │ │ -00039390: 4772 6f75 7053 7461 7427 203d 3e20 756e GroupStat' => un │ │ │ -000393a0: 6465 662c 0a09 0920 2020 2027 2d75 7365 def,... '-use │ │ │ -000393b0: 7247 726f 7570 5374 6174 4669 6c65 2720 rGroupStatFile' │ │ │ -000393c0: 3d3e 2075 6e64 6566 2c0a 0909 2020 2020 => undef,... │ │ │ -000393d0: 272d 636f 6d70 7265 7373 2720 2020 2020 '-compress' │ │ │ -000393e0: 2020 2020 203d 3e20 756e 6465 660a 0909 => undef... │ │ │ -000393f0: 2020 2020 293b 0a0a 2020 2020 263a 3a63 );.. &::c │ │ │ -00039400: 6865 636b 4f62 6a65 6374 5061 7261 6d73 heckObjectParams │ │ │ -00039410: 285c 2570 6172 616d 732c 205c 405f 2c20 (\%params, \@_, │ │ │ -00039420: 2753 7461 7469 7374 6963 3a3a 6e65 7727 'Statistic::new' │ │ │ -00039430: 2c0a 0909 0920 5b27 2d70 724c 6f67 272c ,.... ['-prLog', │ │ │ -00039440: 2027 2d70 726f 6772 6573 7352 6570 6f72 '-progressRepor │ │ │ -00039450: 7427 2c0a 0909 0920 2027 2d77 6974 6855 t',.... '-withU │ │ │ -00039460: 7365 7247 726f 7570 5374 6174 272c 2027 serGroupStat', ' │ │ │ -00039470: 2d75 7365 7247 726f 7570 5374 6174 4669 -userGroupStatFi │ │ │ -00039480: 6c65 272c 0a09 0909 2020 272d 636f 6d70 le',.... '-comp │ │ │ -00039490: 7265 7373 275d 293b 0a20 2020 206d 7920 ress']);. my │ │ │ -000394a0: 2473 656c 6620 3d0a 0973 7461 7469 7374 $self =..statist │ │ │ -000394b0: 6963 4465 6c65 7465 4f6c 6442 6163 6b75 icDeleteOldBacku │ │ │ -000394c0: 7044 6972 732d 3e6e 6577 2827 2d70 724c pDirs->new('-prL │ │ │ -000394d0: 6f67 2720 3d3e 2024 7061 7261 6d73 7b27 og' => $params{' │ │ │ -000394e0: 2d70 724c 6f67 277d 2c0a 0909 0909 0920 -prLog'},...... │ │ │ -000394f0: 2027 2d6b 696e 6427 203d 3e20 2753 2729 '-kind' => 'S') │ │ │ -00039500: 3b0a 0a20 2020 2026 3a3a 7365 7450 6172 ;.. &::setPar │ │ │ -00039510: 616d 7344 6972 6563 7428 2473 656c 662c amsDirect($self, │ │ │ -00039520: 205c 2570 6172 616d 7329 3b0a 0a20 2020 \%params);.. │ │ │ -00039530: 2024 7365 6c66 2d3e 7b27 7573 6572 4772 $self->{'userGr │ │ │ -00039540: 6f75 7046 6c61 6727 7d20 3d20 2824 7365 oupFlag'} = ($se │ │ │ -00039550: 6c66 2d3e 7b27 7769 7468 5573 6572 4772 lf->{'withUserGr │ │ │ -00039560: 6f75 7053 7461 7427 7d20 6f72 0a09 0909 oupStat'} or.... │ │ │ -00039570: 0924 7365 6c66 2d3e 7b27 7573 6572 4772 .$self->{'userGr │ │ │ -00039580: 6f75 7053 7461 7446 696c 6527 7d29 203f oupStatFile'}) ? │ │ │ -00039590: 2031 203a 2075 6e64 6566 3b0a 0a20 2020 1 : undef;.. │ │ │ -000395a0: 2069 6620 2824 7365 6c66 2d3e 7b27 7573 if ($self->{'us │ │ │ -000395b0: 6572 4772 6f75 7046 6c61 6727 7d29 0a20 erGroupFlag'}). │ │ │ -000395c0: 2020 207b 0a09 6d79 2028 2575 6964 5374 {..my (%uidSt │ │ │ -000395d0: 6174 496e 6f64 6573 2920 3d20 2829 3b0a atInodes) = ();. │ │ │ -000395e0: 096d 7920 2825 7569 6453 7461 7453 697a .my (%uidStatSiz │ │ │ -000395f0: 6529 203d 2028 293b 0a09 6d79 2028 2567 e) = ();..my (%g │ │ │ -00039600: 6964 5374 6174 496e 6f64 6573 2920 3d20 idStatInodes) = │ │ │ -00039610: 2829 3b0a 096d 7920 2825 6769 6453 7461 ();..my (%gidSta │ │ │ -00039620: 7453 697a 6529 203d 2028 293b 0a09 2473 tSize) = ();..$s │ │ │ -00039630: 656c 662d 3e7b 2775 6964 5374 6174 496e elf->{'uidStatIn │ │ │ -00039640: 6f64 6573 277d 203d 205c 2575 6964 5374 odes'} = \%uidSt │ │ │ -00039650: 6174 496e 6f64 6573 3b0a 0924 7365 6c66 atInodes;..$self │ │ │ -00039660: 2d3e 7b27 7569 6453 7461 7453 697a 6527 ->{'uidStatSize' │ │ │ -00039670: 7d20 3d20 5c25 7569 6453 7461 7453 697a } = \%uidStatSiz │ │ │ -00039680: 653b 0a09 2473 656c 662d 3e7b 2767 6964 e;..$self->{'gid │ │ │ -00039690: 5374 6174 496e 6f64 6573 277d 203d 205c StatInodes'} = \ │ │ │ -000396a0: 2567 6964 5374 6174 496e 6f64 6573 3b0a %gidStatInodes;. │ │ │ -000396b0: 0924 7365 6c66 2d3e 7b27 6769 6453 7461 .$self->{'gidSta │ │ │ -000396c0: 7453 697a 6527 7d20 3d20 5c25 6769 6453 tSize'} = \%gidS │ │ │ -000396d0: 7461 7453 697a 653b 0a20 2020 207d 0a0a tatSize;. }.. │ │ │ -000396e0: 2020 2020 6d79 2028 2575 6964 536f 7572 my (%uidSour │ │ │ -000396f0: 6365 2920 3d20 2829 3b20 2020 2020 2020 ce) = (); │ │ │ -00039700: 2320 4861 7368 206d 6974 206b 6579 203d # Hash mit key = │ │ │ -00039710: 2075 6964 2c20 7661 6c75 6520 3d20 7369 uid, value = si │ │ │ -00039720: 7a65 0a20 2020 206d 7920 2825 6769 6453 ze. my (%gidS │ │ │ -00039730: 6f75 7263 6529 203d 2028 293b 2020 2020 ource) = (); │ │ │ -00039740: 2020 2023 2048 6173 6820 6d69 7420 6b65 # Hash mit ke │ │ │ -00039750: 7920 3d20 6769 642c 2076 616c 7565 203d y = gid, value = │ │ │ -00039760: 2073 697a 650a 2020 2020 6d79 2028 2575 size. my (%u │ │ │ -00039770: 6964 4261 636b 7570 2920 3d20 2829 3b20 idBackup) = (); │ │ │ -00039780: 2020 2020 2020 2320 4861 7368 206d 6974 # Hash mit │ │ │ -00039790: 206b 6579 203d 2075 6964 2c20 7661 6c75 key = uid, valu │ │ │ -000397a0: 6520 3d20 7369 7a65 0a20 2020 206d 7920 e = size. my │ │ │ -000397b0: 2825 6769 6442 6163 6b75 7029 203d 2028 (%gidBackup) = ( │ │ │ -000397c0: 293b 2020 2020 2020 2023 2048 6173 6820 ); # Hash │ │ │ -000397d0: 6d69 7420 6b65 7920 3d20 6769 642c 2076 mit key = gid, v │ │ │ -000397e0: 616c 7565 203d 2073 697a 650a 2020 2020 alue = size. │ │ │ -000397f0: 2473 656c 662d 3e7b 2775 6964 536f 7572 $self->{'uidSour │ │ │ -00039800: 6365 277d 203d 205c 2575 6964 536f 7572 ce'} = \%uidSour │ │ │ -00039810: 6365 3b0a 2020 2020 2473 656c 662d 3e7b ce;. $self->{ │ │ │ -00039820: 2767 6964 536f 7572 6365 277d 203d 205c 'gidSource'} = \ │ │ │ -00039830: 2567 6964 536f 7572 6365 3b0a 2020 2020 %gidSource;. │ │ │ -00039840: 2473 656c 662d 3e7b 2775 6964 4261 636b $self->{'uidBack │ │ │ -00039850: 7570 277d 203d 205c 2575 6964 4261 636b up'} = \%uidBack │ │ │ -00039860: 7570 3b0a 2020 2020 2473 656c 662d 3e7b up;. $self->{ │ │ │ -00039870: 2767 6964 4261 636b 7570 277d 203d 205c 'gidBackup'} = \ │ │ │ -00039880: 2567 6964 4261 636b 7570 3b0a 0a20 2020 %gidBackup;.. │ │ │ -00039890: 2024 7365 6c66 2d3e 7b27 6e6f 4469 7273 $self->{'noDirs │ │ │ -000398a0: 277d 203d 2030 3b20 2020 2020 2023 206e '} = 0; # n │ │ │ -000398b0: 756d 6265 7220 6f66 2064 6972 6563 746f umber of directo │ │ │ -000398c0: 7269 6573 2069 6e20 6261 636b 7570 0a20 ries in backup. │ │ │ -000398d0: 2020 2024 7365 6c66 2d3e 7b27 6e6f 4669 $self->{'noFi │ │ │ -000398e0: 6c65 7327 7d20 3d20 303b 2020 2020 2023 les'} = 0; # │ │ │ -000398f0: 206f 7665 7261 6c6c 206e 756d 6265 7220 overall number │ │ │ -00039900: 6f66 2066 696c 6573 2069 6e20 6261 636b of files in back │ │ │ -00039910: 7570 0a20 2020 2024 7365 6c66 2d3e 7b27 up. $self->{' │ │ │ -00039920: 6e6f 5379 6d4c 696e 6b73 277d 203d 2030 noSymLinks'} = 0 │ │ │ -00039930: 3b20 2023 206e 756d 6265 7220 6f66 2073 ; # number of s │ │ │ -00039940: 796d 626f 6c69 6320 6c69 6e6b 7320 696e ymbolic links in │ │ │ -00039950: 2062 6163 6b75 700a 2020 2020 2473 656c backup. $sel │ │ │ -00039960: 662d 3e7b 276e 6f4c 6174 654c 696e 6b73 f->{'noLateLinks │ │ │ -00039970: 277d 203d 2030 3b20 2320 6e75 6d62 6572 '} = 0; # number │ │ │ -00039980: 206f 6620 6669 6c65 7320 7769 7468 206c of files with l │ │ │ -00039990: 6174 654c 696e 6b73 2069 6e0a 2020 2020 ateLinks in. │ │ │ -000399a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000399b0: 2020 2020 2020 2020 2020 2020 2320 6261 # ba │ │ │ -000399c0: 636b 7570 2c20 6561 6368 2062 6c6f 636b ckup, each block │ │ │ -000399d0: 6564 2066 696c 6520 6672 6167 6d65 6e74 ed file fragment │ │ │ -000399e0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -000399f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039a00: 2023 2069 6e63 7265 6173 6573 2074 6869 # increases thi │ │ │ -00039a10: 7320 6e75 6d62 6572 0a20 2020 2024 7365 s number. $se │ │ │ -00039a20: 6c66 2d3e 7b27 6e6f 4e61 6d65 6450 6970 lf->{'noNamedPip │ │ │ -00039a30: 6573 277d 203d 2030 3b23 206e 756d 6265 es'} = 0;# numbe │ │ │ -00039a40: 7220 6f66 206e 616d 6564 2070 6970 6573 r of named pipes │ │ │ -00039a50: 2069 6e20 6261 636b 7570 0a20 2020 2024 in backup. $ │ │ │ -00039a60: 7365 6c66 2d3e 7b27 6e6f 536f 636b 6574 self->{'noSocket │ │ │ -00039a70: 7327 7d20 3d20 303b 2020 2023 206e 756d s'} = 0; # num │ │ │ -00039a80: 6265 7220 6f66 2073 6f63 6b65 7473 2069 ber of sockets i │ │ │ -00039a90: 6e20 6261 636b 7570 0a20 2020 2024 7365 n backup. $se │ │ │ -00039aa0: 6c66 2d3e 7b27 6e6f 4368 6172 4465 7627 lf->{'noCharDev' │ │ │ -00039ab0: 7d20 3d20 303b 2020 2023 206e 756d 6265 } = 0; # numbe │ │ │ -00039ac0: 7220 6f66 2063 6861 7261 6374 6572 2064 r of character d │ │ │ -00039ad0: 6576 6963 6573 2069 6e20 6261 636b 7570 evices in backup │ │ │ -00039ae0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no │ │ │ -00039af0: 426c 6f63 6b44 6576 277d 203d 2030 3b20 BlockDev'} = 0; │ │ │ -00039b00: 2023 206e 756d 6265 7220 6f66 2062 6c6f # number of blo │ │ │ -00039b10: 636b 2064 6576 6963 6573 2069 6e20 6261 ck devices in ba │ │ │ -00039b20: 636b 7570 0a20 2020 2024 7365 6c66 2d3e ckup. $self-> │ │ │ -00039b30: 7b27 6e6f 4d44 3565 6446 696c 6573 277d {'noMD5edFiles'} │ │ │ -00039b40: 203d 2030 3b23 206e 756d 6265 7220 6f66 = 0;# number of │ │ │ -00039b50: 2066 696c 6573 2077 6865 7265 2061 6e20 files where an │ │ │ -00039b60: 6d64 3520 7375 6d20 7761 730a 2020 2020 md5 sum was. │ │ │ -00039b70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039b80: 2020 2020 2020 2020 2020 2020 2320 6361 # ca │ │ │ -00039b90: 6c63 756c 6174 6564 2c20 6561 6368 2062 lculated, each b │ │ │ -00039ba0: 6c6f 636b 6564 2066 696c 6520 6672 6167 locked file frag │ │ │ -00039bb0: 6d65 6e74 0a20 2020 2020 2020 2020 2020 ment. │ │ │ -00039bc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039bd0: 2020 2020 2023 2069 6e63 7265 6173 6573 # increases │ │ │ -00039be0: 2074 6869 7320 6e75 6d62 6572 0a20 2020 this number. │ │ │ -00039bf0: 2024 7365 6c66 2d3e 7b27 6e6f 496e 7465 $self->{'noInte │ │ │ -00039c00: 726e 616c 4c69 6e6b 6564 4669 6c65 7327 rnalLinkedFiles' │ │ │ -00039c10: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o │ │ │ -00039c20: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we │ │ │ -00039c30: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. │ │ │ -00039c40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039c50: 2020 2020 2020 2020 2020 2320 696e 7369 # insi │ │ │ -00039c60: 6465 2074 6865 206a 7573 7420 7275 6e6e de the just runn │ │ │ -00039c70: 696e 6720 6261 636b 7570 0a20 2020 2024 ing backup. $ │ │ │ -00039c80: 7365 6c66 2d3e 7b27 6e6f 4f6c 644c 696e self->{'noOldLin │ │ │ -00039c90: 6b65 6446 696c 6573 277d 203d 2030 3b23 kedFiles'} = 0;# │ │ │ -00039ca0: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files │ │ │ -00039cb0: 2077 6869 6368 2077 6572 6520 6c69 6e6b which were link │ │ │ -00039cc0: 6564 0a20 2020 2020 2020 2020 2020 2020 ed. │ │ │ -00039cd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039ce0: 2020 2023 2074 6f20 6f74 6865 7220 6261 # to other ba │ │ │ -00039cf0: 636b 7570 730a 2020 2020 2473 656c 662d ckups. $self- │ │ │ -00039d00: 3e7b 2775 6e63 6861 6e67 6564 4669 6c65 >{'unchangedFile │ │ │ -00039d10: 7327 7d20 3d20 303b 2320 7369 7a65 206f s'} = 0;# size o │ │ │ -00039d20: 6620 6669 6c65 732c 2077 6865 7265 2073 f files, where s │ │ │ -00039d30: 697a 6520 616e 640a 2020 2020 2020 2020 ize and. │ │ │ -00039d40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039d50: 2020 2020 2020 2020 2320 7469 6d65 7374 # timest │ │ │ -00039d60: 616d 7020 7765 7265 206e 6f74 2063 6861 amp were not cha │ │ │ -00039d70: 6e67 6564 2073 696e 6365 2074 6865 0a20 nged since the. │ │ │ -00039d80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039d90: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00039da0: 206c 6173 7420 6261 636b 7570 2c20 7468 last backup, th │ │ │ -00039db0: 6579 2077 6572 6520 6469 7265 6374 6c79 ey were directly │ │ │ -00039dc0: 206c 696e 6b65 640a 2020 2020 2020 2020 linked. │ │ │ -00039dd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039de0: 2020 2020 2020 2020 2320 616e 6420 7468 # and th │ │ │ -00039df0: 6520 6d64 3520 7375 6d20 7761 7320 6e6f e md5 sum was no │ │ │ -00039e00: 7420 6361 6c63 756c 6174 6564 2061 6761 t calculated aga │ │ │ -00039e10: 696e 0a20 2020 2024 7365 6c66 2d3e 7b27 in. $self->{' │ │ │ -00039e20: 6e6f 436f 7069 6564 4669 6c65 7327 7d20 noCopiedFiles'} │ │ │ -00039e30: 3d20 303b 2320 6e75 6d62 6572 206f 6620 = 0;# number of │ │ │ -00039e40: 6669 6c65 7320 7768 6963 6820 7765 7265 files which were │ │ │ -00039e50: 2063 6f70 6965 640a 2020 2020 2473 656c copied. $sel │ │ │ -00039e60: 662d 3e7b 276e 6f43 6f6d 7072 6573 7365 f->{'noCompresse │ │ │ -00039e70: 6446 696c 6573 277d 203d 2030 3b23 206e dFiles'} = 0;# n │ │ │ -00039e80: 756d 6265 7220 6f66 2066 696c 6573 2077 umber of files w │ │ │ -00039e90: 6869 6368 2077 6572 6520 636f 6d70 7265 hich were compre │ │ │ -00039ea0: 7373 6564 0a20 2020 2024 7365 6c66 2d3e ssed. $self-> │ │ │ -00039eb0: 7b27 6e6f 466f 726b 734d 4435 277d 203d {'noForksMD5'} = │ │ │ -00039ec0: 2030 3b20 2023 206e 756d 6265 7220 6f66 0; # number of │ │ │ -00039ed0: 2066 6f72 6b73 2074 6f20 6361 6c63 6c75 forks to calclu │ │ │ -00039ee0: 6174 6564 2061 6e20 6d64 350a 2020 2020 ated an md5. │ │ │ -00039ef0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks │ │ │ -00039f00: 4350 277d 203d 2030 3b20 2020 2320 6e75 CP'} = 0; # nu │ │ │ -00039f10: 6d62 6572 206f 6620 666f 726b 7320 746f mber of forks to │ │ │ -00039f20: 2063 6f70 7920 6120 6669 6c65 0a20 2020 copy a file. │ │ │ -00039f30: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ -00039f40: 7343 6f6d 7072 6573 7327 7d20 3d20 303b sCompress'} = 0; │ │ │ -00039f50: 2320 6e75 6d62 6572 206f 6620 666f 726b # number of fork │ │ │ -00039f60: 7320 746f 2063 6f6d 7072 6573 7320 6120 s to compress a │ │ │ -00039f70: 6669 6c65 0a20 2020 2024 7365 6c66 2d3e file. $self-> │ │ │ -00039f80: 7b27 6e6f 4578 636c 7564 6552 756c 6527 {'noExcludeRule' │ │ │ -00039f90: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o │ │ │ -00039fa0: 6620 6669 6c65 7320 6578 636c 7564 6564 f files excluded │ │ │ -00039fb0: 2062 6563 6175 7365 206f 660a 2020 2020 because of. │ │ │ -00039fc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00039fd0: 2020 2020 2020 2020 2020 2020 2320 6578 # ex │ │ │ -00039fe0: 636c 7564 6520 7275 6c65 0a20 2020 2024 clude rule. $ │ │ │ -00039ff0: 7365 6c66 2d3e 7b27 7369 7a65 4578 636c self->{'sizeExcl │ │ │ -0003a000: 7564 6552 756c 6527 7d20 3d20 303b 2320 udeRule'} = 0;# │ │ │ -0003a010: 7369 7a65 206f 6620 6669 6c65 7320 6578 size of files ex │ │ │ -0003a020: 636c 7564 6564 2062 6563 6175 7365 206f cluded because o │ │ │ -0003a030: 660a 2020 2020 2020 2020 2020 2020 2020 f. │ │ │ -0003a040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a050: 2020 2320 6578 636c 7564 6520 7275 6c65 # exclude rule │ │ │ -0003a060: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no │ │ │ -0003a070: 496e 636c 7564 6552 756c 6527 7d20 3d20 IncludeRule'} = │ │ │ -0003a080: 303b 2320 6e75 6d62 6572 206f 6620 6669 0;# number of fi │ │ │ -0003a090: 6c65 7320 696e 636c 7564 6564 2062 6563 les included bec │ │ │ -0003a0a0: 6175 7365 206f 660a 2020 2020 2020 2020 ause of. │ │ │ -0003a0b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a0c0: 2020 2020 2020 2020 2320 696e 636c 7564 # includ │ │ │ -0003a0d0: 6520 7275 6c65 0a20 2020 2024 7365 6c66 e rule. $self │ │ │ -0003a0e0: 2d3e 7b27 7369 7a65 496e 636c 7564 6552 ->{'sizeIncludeR │ │ │ -0003a0f0: 756c 6527 7d20 3d20 303b 2320 7369 7a65 ule'} = 0;# size │ │ │ -0003a100: 206f 6620 6669 6c65 7320 696e 636c 7564 of files includ │ │ │ -0003a110: 6564 2062 6563 6175 7365 206f 660a 2020 ed because of. │ │ │ -0003a120: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a130: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -0003a140: 696e 636c 7564 6520 7275 6c65 0a20 2020 include rule. │ │ │ -0003a150: 2024 7365 6c66 2d3e 7b27 6e6f 426c 6f63 $self->{'noBloc │ │ │ -0003a160: 6b65 6446 696c 6573 277d 203d 2030 3b23 kedFiles'} = 0;# │ │ │ -0003a170: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files │ │ │ -0003a180: 2074 7265 6174 6564 2061 7320 626c 6f63 treated as bloc │ │ │ -0003a190: 6b65 640a 2020 2020 2020 2020 2020 2020 ked. │ │ │ -0003a1a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a1b0: 2020 2020 2320 6669 6c65 7320 2862 6563 # files (bec │ │ │ -0003a1c0: 6175 7365 206f 6620 626c 6f63 6b65 6420 ause of blocked │ │ │ -0003a1d0: 7275 6c65 7329 0a20 2020 2024 7365 6c66 rules). $self │ │ │ -0003a1e0: 2d3e 7b27 6e6f 436f 6d70 7243 6865 636b ->{'noComprCheck │ │ │ -0003a1f0: 436f 6d70 7227 7d20 3d20 303b 2320 6e75 Compr'} = 0;# nu │ │ │ -0003a200: 6d62 6572 206f 6620 6669 6c65 7320 636f mber of files co │ │ │ -0003a210: 6d70 7265 7373 6564 2062 6563 6175 7365 mpressed because │ │ │ -0003a220: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -0003a230: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a240: 2023 206f 6620 434f 4d50 5245 5353 494f # of COMPRESSIO │ │ │ -0003a250: 4e5f 4348 4543 4b20 7275 6c65 0a20 2020 N_CHECK rule. │ │ │ -0003a260: 2024 7365 6c66 2d3e 7b27 6e6f 436f 6d70 $self->{'noComp │ │ │ -0003a270: 7243 6865 636b 4370 277d 203d 2030 3b23 rCheckCp'} = 0;# │ │ │ -0003a280: 206e 756d 6265 7220 6f66 2066 696c 6573 number of files │ │ │ -0003a290: 2063 6f70 6965 6420 6265 6361 7573 650a copied because. │ │ │ -0003a2a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a2b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a2c0: 2320 6f66 2043 4f4d 5052 4553 5349 4f4e # of COMPRESSION │ │ │ -0003a2d0: 5f43 4845 434b 2072 756c 650a 2020 2020 _CHECK rule. │ │ │ -0003a2e0: 2473 656c 662d 3e7b 276e 6f42 6c6f 636b $self->{'noBlock │ │ │ -0003a2f0: 436f 6d70 7243 6865 636b 436f 6d70 7227 ComprCheckCompr' │ │ │ -0003a300: 7d20 3d20 303b 2320 6e75 6d62 6572 206f } = 0;# number o │ │ │ -0003a310: 6620 6669 6c65 7320 696e 2062 6c6f 636b f files in block │ │ │ -0003a320: 6564 0a20 2020 2020 2020 2020 2020 2020 ed. │ │ │ -0003a330: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a340: 2020 2023 2066 696c 6573 2064 6972 6563 # files direc │ │ │ -0003a350: 746f 7269 6573 2063 6f6d 7072 6573 7365 tories compresse │ │ │ -0003a360: 6420 6265 6361 7573 650a 2020 2020 2020 d because. │ │ │ -0003a370: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a380: 2020 2020 2020 2020 2020 2320 6f66 2043 # of C │ │ │ -0003a390: 4f4d 5052 4553 5349 4f4e 5f43 4845 434b OMPRESSION_CHECK │ │ │ -0003a3a0: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no │ │ │ -0003a3b0: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC │ │ │ -0003a3c0: 7027 7d20 3d20 303b 2320 6e75 6d62 6572 p'} = 0;# number │ │ │ -0003a3d0: 206f 6620 6669 6c65 7320 696e 2062 6c6f of files in blo │ │ │ -0003a3e0: 636b 6564 0a20 2020 2020 2020 2020 2020 cked. │ │ │ -0003a3f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a400: 2020 2020 2023 2066 696c 6573 2064 6972 # files dir │ │ │ -0003a410: 6563 746f 7269 6573 2063 6f70 6965 6420 ectories copied │ │ │ -0003a420: 6265 6361 7573 650a 2020 2020 2020 2020 because. │ │ │ -0003a430: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a440: 2020 2020 2020 2020 2320 6f66 2043 4f4d # of COM │ │ │ -0003a450: 5052 4553 5349 4f4e 5f43 4845 434b 0a0a PRESSION_CHECK.. │ │ │ -0003a460: 2020 2020 2320 6469 736b 2073 7061 6365 # disk space │ │ │ -0003a470: 2072 656c 6174 6564 0a20 2020 2024 7365 related. $se │ │ │ -0003a480: 6c66 2d3e 7b27 7375 6d4f 7269 6746 696c lf->{'sumOrigFil │ │ │ -0003a490: 6573 277d 203d 2030 3b23 2073 697a 6520 es'} = 0;# size │ │ │ -0003a4a0: 6f66 2066 696c 6573 2069 6e20 736f 7572 of files in sour │ │ │ -0003a4b0: 6365 2064 6972 0a20 2020 2024 7365 6c66 ce dir. $self │ │ │ -0003a4c0: 2d3e 7b27 7375 6d4d 4435 5375 6d27 7d20 ->{'sumMD5Sum'} │ │ │ -0003a4d0: 3d20 303b 2020 2023 206e 756d 6265 7220 = 0; # number │ │ │ -0003a4e0: 6f66 2062 7974 6573 2066 6f72 2077 6869 of bytes for whi │ │ │ -0003a4f0: 6368 2061 6e20 6d64 3520 7375 6d0a 2020 ch an md5 sum. │ │ │ -0003a500: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a510: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -0003a520: 7761 7320 6361 6c63 756c 6174 6564 0a20 was calculated. │ │ │ -0003a530: 2020 2024 7365 6c66 2d3e 7b27 7375 6d4c $self->{'sumL │ │ │ -0003a540: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop │ │ │ -0003a550: 7927 7d20 3d20 303b 2320 7369 7a65 206f y'} = 0;# size o │ │ │ -0003a560: 6620 6669 6c65 7320 7768 6963 6820 7765 f files which we │ │ │ -0003a570: 7265 206c 696e 6b65 640a 2020 2020 2020 re linked. │ │ │ -0003a580: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a590: 2020 2020 2020 2020 2020 2320 696e 7369 # insi │ │ │ -0003a5a0: 6465 2074 6865 206a 7573 7420 7275 6e6e de the just runn │ │ │ -0003a5b0: 696e 6720 6261 636b 7570 0a20 2020 2024 ing backup. $ │ │ │ -0003a5c0: 7365 6c66 2d3e 7b27 7375 6d4c 696e 6b65 self->{'sumLinke │ │ │ -0003a5d0: 6449 6e74 6572 6e61 6c43 6f6d 7072 277d dInternalCompr'} │ │ │ -0003a5e0: 203d 2030 3b23 2073 697a 6520 6f66 2066 = 0;# size of f │ │ │ -0003a5f0: 696c 6573 2077 6869 6368 2077 6572 6520 iles which were │ │ │ -0003a600: 6c69 6e6b 6564 0a20 2020 2020 2020 2020 linked. │ │ │ -0003a610: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a620: 2020 2020 2020 2023 2074 6f20 6f74 6865 # to othe │ │ │ -0003a630: 7220 6261 636b 7570 730a 2020 2020 2473 r backups. $s │ │ │ -0003a640: 656c 662d 3e7b 2773 756d 4c69 6e6b 6564 elf->{'sumLinked │ │ │ -0003a650: 4f6c 6443 6f70 7927 7d20 3d20 303b 2320 OldCopy'} = 0;# │ │ │ -0003a660: 7369 7a65 206f 6620 6669 6c65 7320 7768 size of files wh │ │ │ -0003a670: 6963 6820 7765 7265 206c 696e 6b65 6420 ich were linked │ │ │ -0003a680: 746f 0a20 2020 2020 2020 2020 2020 2020 to. │ │ │ -0003a690: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a6a0: 2020 2023 206f 7468 6572 2028 6f6c 6429 # other (old) │ │ │ -0003a6b0: 2062 6163 6b75 7073 0a20 2020 2024 7365 backups. $se │ │ │ -0003a6c0: 6c66 2d3e 7b27 7375 6d4c 696e 6b65 644f lf->{'sumLinkedO │ │ │ -0003a6d0: 6c64 436f 6d70 7227 7d20 3d20 303b 2320 ldCompr'} = 0;# │ │ │ -0003a6e0: 7369 7a65 206f 6620 6669 6c65 7320 7768 size of files wh │ │ │ -0003a6f0: 6963 6820 7765 7265 206c 696e 6b65 6420 ich were linked │ │ │ -0003a700: 746f 0a20 2020 2020 2020 2020 2020 2020 to. │ │ │ -0003a710: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a720: 2020 2023 206f 7468 6572 2028 6f6c 6429 # other (old) │ │ │ -0003a730: 2062 6163 6b75 7073 0a20 2020 2024 7365 backups. $se │ │ │ -0003a740: 6c66 2d3e 7b27 7375 6d55 6e63 6861 6e67 lf->{'sumUnchang │ │ │ -0003a750: 6564 436f 7079 277d 203d 2030 3b23 2073 edCopy'} = 0;# s │ │ │ -0003a760: 697a 6520 6f66 2066 696c 6573 2c20 7768 ize of files, wh │ │ │ -0003a770: 6572 6520 7369 7a65 2061 6e64 0a20 2020 ere size and. │ │ │ -0003a780: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a790: 2020 2020 2020 2020 2020 2020 2023 2074 # t │ │ │ -0003a7a0: 696d 6573 7461 6d70 2077 6572 6520 6e6f imestamp were no │ │ │ -0003a7b0: 7420 6368 616e 6765 6420 7369 6e63 6520 t changed since │ │ │ -0003a7c0: 7468 650a 2020 2020 2020 2020 2020 2020 the. │ │ │ -0003a7d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a7e0: 2020 2020 2320 6c61 7374 2062 6163 6b75 # last backu │ │ │ -0003a7f0: 702c 2074 6865 7920 7765 7265 2064 6972 p, they were dir │ │ │ -0003a800: 6563 746c 7920 6c69 6e6b 6564 0a20 2020 ectly linked. │ │ │ -0003a810: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a820: 2020 2020 2020 2020 2020 2020 2023 2061 # a │ │ │ -0003a830: 6e64 2074 6865 206d 6435 2073 756d 2077 nd the md5 sum w │ │ │ -0003a840: 6173 206e 6f74 2063 616c 6375 6c61 7465 as not calculate │ │ │ -0003a850: 6420 6167 6169 6e0a 2020 2020 2473 656c d again. $sel │ │ │ -0003a860: 662d 3e7b 2773 756d 556e 6368 616e 6765 f->{'sumUnchange │ │ │ -0003a870: 6443 6f6d 7072 277d 203d 2030 3b23 2073 dCompr'} = 0;# s │ │ │ -0003a880: 697a 6520 6f66 2066 696c 6573 2c20 7768 ize of files, wh │ │ │ -0003a890: 6572 6520 7369 7a65 2061 6e64 0a20 2020 ere size and. │ │ │ -0003a8a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a8b0: 2020 2020 2020 2020 2020 2020 2023 2074 # t │ │ │ -0003a8c0: 696d 6573 7461 6d70 2077 6572 6520 6e6f imestamp were no │ │ │ -0003a8d0: 7420 6368 616e 6765 6420 7369 6e63 6520 t changed since │ │ │ -0003a8e0: 7468 650a 2020 2020 2020 2020 2020 2020 the. │ │ │ -0003a8f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a900: 2020 2020 2320 6c61 7374 2062 6163 6b75 # last backu │ │ │ -0003a910: 702c 2074 6865 7920 7765 7265 2064 6972 p, they were dir │ │ │ -0003a920: 6563 746c 7920 6c69 6e6b 6564 0a20 2020 ectly linked. │ │ │ -0003a930: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a940: 2020 2020 2020 2020 2020 2020 2023 2061 # a │ │ │ -0003a950: 6e64 2074 6865 206d 6435 2073 756d 2077 nd the md5 sum w │ │ │ -0003a960: 6173 206e 6f74 2063 616c 6375 6c61 7465 as not calculate │ │ │ -0003a970: 6420 6167 6169 6e0a 2020 2020 2473 656c d again. $sel │ │ │ -0003a980: 662d 3e7b 2773 756d 4e65 7743 6f70 7927 f->{'sumNewCopy' │ │ │ -0003a990: 7d20 3d20 303b 2020 2320 7375 6d20 6f66 } = 0; # sum of │ │ │ -0003a9a0: 206e 6577 6c79 2063 6f70 7969 6564 2066 newly copyied f │ │ │ -0003a9b0: 696c 6573 2069 6e74 6f20 7468 650a 2020 iles into the. │ │ │ -0003a9c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003a9d0: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -0003a9e0: 6261 636b 7570 0a20 2020 2024 7365 6c66 backup. $self │ │ │ -0003a9f0: 2d3e 7b27 7375 6d4e 6577 436f 6d70 7227 ->{'sumNewCompr' │ │ │ -0003aa00: 7d20 3d20 303b 2023 2073 756d 206f 6620 } = 0; # sum of │ │ │ -0003aa10: 6e65 776c 7920 636f 6d70 7265 7373 6564 newly compressed │ │ │ -0003aa20: 2066 696c 6573 2069 6e74 6f0a 2020 2020 files into. │ │ │ -0003aa30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003aa40: 2020 2020 2020 2020 2020 2020 2320 7468 # th │ │ │ -0003aa50: 6520 6261 636b 7570 2028 636f 6d70 7265 e backup (compre │ │ │ -0003aa60: 7373 6564 2073 697a 6529 0a20 2020 2024 ssed size). $ │ │ │ -0003aa70: 7365 6c66 2d3e 7b27 7375 6d4e 6577 436f self->{'sumNewCo │ │ │ -0003aa80: 6d70 724f 7269 6753 697a 6527 7d20 3d20 mprOrigSize'} = │ │ │ -0003aa90: 303b 2320 7375 6d20 6f66 206e 6577 7920 0;# sum of newy │ │ │ -0003aaa0: 636f 6d70 7265 7373 6564 2066 696c 6573 compressed files │ │ │ -0003aab0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -0003aac0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003aad0: 2023 2069 6e74 6f20 7468 6520 6261 636b # into the back │ │ │ -0003aae0: 7570 2028 756e 636f 6d70 7265 7373 6564 up (uncompressed │ │ │ -0003aaf0: 2073 697a 6529 0a0a 2020 2020 2473 656c size).. $sel │ │ │ -0003ab00: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum │ │ │ -0003ab10: 277d 203d 2030 3b0a 2020 2020 2473 656c '} = 0;. $sel │ │ │ -0003ab20: 662d 3e7b 2773 756d 4442 4d46 696c 6573 f->{'sumDBMFiles │ │ │ -0003ab30: 277d 203d 2030 3b0a 0a20 2020 2024 7365 '} = 0;.. $se │ │ │ -0003ab40: 6c66 2d3e 7b27 7469 6d65 5072 6f67 7252 lf->{'timeProgrR │ │ │ -0003ab50: 6570 6f72 7427 7d20 3d0a 0928 2473 656c eport'} =..($sel │ │ │ -0003ab60: 662d 3e7b 2770 726f 6772 6573 7344 656c f->{'progressDel │ │ │ -0003ab70: 7461 5469 6d65 277d 203e 2030 2920 3f20 taTime'} > 0) ? │ │ │ -0003ab80: 7469 6d65 203a 2030 3b0a 0a20 2020 2062 time : 0;.. b │ │ │ -0003ab90: 6c65 7373 2024 7365 6c66 2c20 2463 6c61 less $self, $cla │ │ │ -0003aba0: 7373 3b0a 7d0a 0a0a 2323 2323 2323 2323 ss;.}...######## │ │ │ -0003abb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003abc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003abd0: 0a73 7562 2069 6e63 725f 6e6f 4465 6c65 .sub incr_noDele │ │ │ -0003abe0: 7465 644f 6c64 4469 7273 0a7b 0a20 2020 tedOldDirs.{. │ │ │ -0003abf0: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -0003ac00: 743b 0a0a 2020 2020 2473 656c 662d 3e73 t;.. $self->s │ │ │ -0003ac10: 7461 7469 7374 6963 4465 6c65 7465 4f6c tatisticDeleteOl │ │ │ -0003ac20: 6442 6163 6b75 7044 6972 733a 3a69 6e63 dBackupDirs::inc │ │ │ -0003ac30: 725f 6e6f 4465 6c65 7465 644f 6c64 4469 r_noDeletedOldDi │ │ │ -0003ac40: 7273 2829 3b0a 7d0a 0a0a 2323 2323 2323 rs();.}...###### │ │ │ -0003ac50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003ac60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003ac70: 2323 0a73 7562 2069 6e63 725f 6e6f 4469 ##.sub incr_noDi │ │ │ -0003ac80: 7273 0a7b 0a20 2020 206d 7920 2473 656c rs.{. my $sel │ │ │ -0003ac90: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m │ │ │ -0003aca0: 7920 2824 7569 642c 2024 6769 6429 203d y ($uid, $gid) = │ │ │ -0003acb0: 2040 5f3b 0a0a 2020 2020 2b2b 2473 656c @_;.. ++$sel │ │ │ -0003acc0: 662d 3e7b 276e 6f44 6972 7327 7d3b 0a0a f->{'noDirs'};.. │ │ │ -0003acd0: 2020 2020 6966 2028 2473 656c 662d 3e7b if ($self->{ │ │ │ -0003ace0: 2775 7365 7247 726f 7570 466c 6167 277d 'userGroupFlag'} │ │ │ -0003acf0: 290a 2020 2020 7b0a 092b 2b24 7365 6c66 ). {..++$self │ │ │ -0003ad00: 2d3e 7b27 7569 6453 7461 7449 6e6f 6465 ->{'uidStatInode │ │ │ -0003ad10: 7327 7d2d 3e7b 2475 6964 7d3b 0a09 2b2b s'}->{$uid};..++ │ │ │ -0003ad20: 2473 656c 662d 3e7b 2767 6964 5374 6174 $self->{'gidStat │ │ │ -0003ad30: 496e 6f64 6573 277d 2d3e 7b24 6769 647d Inodes'}->{$gid} │ │ │ -0003ad40: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...#### │ │ │ -0003ad50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003ad60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003ad70: 2323 2323 0a73 7562 2061 6464 5f6e 6f4d ####.sub add_noM │ │ │ -0003ad80: 4435 6564 4669 6c65 730a 7b0a 2020 2020 D5edFiles.{. │ │ │ -0003ad90: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -0003ada0: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7b27 ;.. $self->{' │ │ │ -0003adb0: 6e6f 4d44 3565 6446 696c 6573 277d 202b noMD5edFiles'} + │ │ │ -0003adc0: 3d20 7368 6966 743b 0a7d 0a0a 0a23 2323 = shift;.}...### │ │ │ -0003add0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003ade0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003adf0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n │ │ │ -0003ae00: 6f53 796d 4c69 6e6b 730a 7b0a 2020 2020 oSymLinks.{. │ │ │ -0003ae10: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -0003ae20: 3b0a 2020 2020 6d79 2028 2475 6964 2c20 ;. my ($uid, │ │ │ -0003ae30: 2467 6964 2920 3d20 405f 3b0a 0a20 2020 $gid) = @_;.. │ │ │ -0003ae40: 202b 2b24 7365 6c66 2d3e 7b27 6e6f 5379 ++$self->{'noSy │ │ │ -0003ae50: 6d4c 696e 6b73 277d 3b0a 2020 2020 2473 mLinks'};. $s │ │ │ -0003ae60: 656c 662d 3e61 6464 5375 6d4f 7269 6746 elf->addSumOrigF │ │ │ -0003ae70: 696c 6573 2830 2c20 2475 6964 2c20 2467 iles(0, $uid, $g │ │ │ -0003ae80: 6964 293b 0a7d 0a0a 2323 2323 2323 2323 id);.}..######## │ │ │ -0003ae90: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003aea0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003aeb0: 0a73 7562 2069 6e63 725f 6e6f 4c61 7465 .sub incr_noLate │ │ │ -0003aec0: 4c69 6e6b 730a 7b0a 2020 2020 6d79 2024 Links.{. my $ │ │ │ -0003aed0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ -0003aee0: 2020 6d79 2028 2475 6964 2c20 2467 6964 my ($uid, $gid │ │ │ -0003aef0: 2c20 246e 2920 3d20 405f 3b0a 2020 2020 , $n) = @_;. │ │ │ -0003af00: 246e 203d 2031 2075 6e6c 6573 7320 6465 $n = 1 unless de │ │ │ -0003af10: 6669 6e65 6420 246e 3b0a 0a20 2020 2024 fined $n;.. $ │ │ │ -0003af20: 7365 6c66 2d3e 7b27 6e6f 4c61 7465 4c69 self->{'noLateLi │ │ │ -0003af30: 6e6b 7327 7d20 2b3d 2024 6e3b 0a7d 0a0a nks'} += $n;.}.. │ │ │ -0003af40: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003af50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003af60: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in │ │ │ -0003af70: 6372 5f6e 6f4e 616d 6564 5069 7065 730a cr_noNamedPipes. │ │ │ -0003af80: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ -0003af90: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my ( │ │ │ -0003afa0: 2475 6964 2c20 2467 6964 2920 3d20 405f $uid, $gid) = @_ │ │ │ -0003afb0: 3b0a 0a20 2020 202b 2b24 7365 6c66 2d3e ;.. ++$self-> │ │ │ -0003afc0: 7b27 6e6f 4e61 6d65 6450 6970 6573 277d {'noNamedPipes'} │ │ │ -0003afd0: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add │ │ │ -0003afe0: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, │ │ │ -0003aff0: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}.. │ │ │ -0003b000: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003b010: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b020: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in │ │ │ -0003b030: 6372 5f6e 6f53 6f63 6b65 7473 0a7b 0a20 cr_noSockets.{. │ │ │ -0003b040: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ -0003b050: 6966 743b 0a20 2020 206d 7920 2824 7569 ift;. my ($ui │ │ │ -0003b060: 642c 2024 6769 6429 203d 2040 5f3b 0a0a d, $gid) = @_;.. │ │ │ -0003b070: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n │ │ │ -0003b080: 6f53 6f63 6b65 7473 277d 3b0a 2020 2020 oSockets'};. │ │ │ -0003b090: 2473 656c 662d 3e61 6464 5375 6d4f 7269 $self->addSumOri │ │ │ -0003b0a0: 6746 696c 6573 2830 2c20 2475 6964 2c20 gFiles(0, $uid, │ │ │ -0003b0b0: 2467 6964 293b 0a7d 0a0a 0a23 2323 2323 $gid);.}...##### │ │ │ -0003b0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b0d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b0e0: 2323 230a 7375 6220 696e 6372 5f6e 6f43 ###.sub incr_noC │ │ │ -0003b0f0: 6861 7244 6576 0a7b 0a20 2020 206d 7920 harDev.{. my │ │ │ -0003b100: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. │ │ │ -0003b110: 2020 206d 7920 2824 7569 642c 2024 6769 my ($uid, $gi │ │ │ -0003b120: 6429 203d 2040 5f3b 0a0a 2020 2020 2b2b d) = @_;.. ++ │ │ │ -0003b130: 2473 656c 662d 3e7b 276e 6f43 6861 7244 $self->{'noCharD │ │ │ -0003b140: 6576 277d 3b0a 2020 2020 2473 656c 662d ev'};. $self- │ │ │ -0003b150: 3e61 6464 5375 6d4f 7269 6746 696c 6573 >addSumOrigFiles │ │ │ -0003b160: 2830 2c20 2475 6964 2c20 2467 6964 293b (0, $uid, $gid); │ │ │ -0003b170: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ -0003b180: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b190: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -0003b1a0: 6220 696e 6372 5f6e 6f42 6c6f 636b 4465 b incr_noBlockDe │ │ │ -0003b1b0: 760a 7b0a 2020 2020 6d79 2024 7365 6c66 v.{. my $self │ │ │ -0003b1c0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -0003b1d0: 2028 2475 6964 2c20 2467 6964 2920 3d20 ($uid, $gid) = │ │ │ -0003b1e0: 405f 3b0a 0a20 2020 202b 2b24 7365 6c66 @_;.. ++$self │ │ │ -0003b1f0: 2d3e 7b27 6e6f 426c 6f63 6b44 6576 277d ->{'noBlockDev'} │ │ │ -0003b200: 3b0a 2020 2020 2473 656c 662d 3e61 6464 ;. $self->add │ │ │ -0003b210: 5375 6d4f 7269 6746 696c 6573 2830 2c20 SumOrigFiles(0, │ │ │ -0003b220: 2475 6964 2c20 2467 6964 293b 0a7d 0a0a $uid, $gid);.}.. │ │ │ -0003b230: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003b240: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b250: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in │ │ │ -0003b260: 6372 5f6e 6f46 6f72 6b73 4d44 350a 7b0a cr_noForksMD5.{. │ │ │ -0003b270: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ -0003b280: 6869 6674 3b0a 2020 2020 2b2b 2473 656c hift;. ++$sel │ │ │ -0003b290: 662d 3e7b 276e 6f46 6f72 6b73 4d44 3527 f->{'noForksMD5' │ │ │ -0003b2a0: 7d3b 0a7d 0a0a 0a23 2323 2323 2323 2323 };.}...######### │ │ │ -0003b2b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b2c0: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -0003b2d0: 7375 6220 696e 6372 5f6e 6f46 6f72 6b73 sub incr_noForks │ │ │ -0003b2e0: 4350 0a7b 0a20 2020 206d 7920 2473 656c CP.{. my $sel │ │ │ -0003b2f0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m │ │ │ -0003b300: 7920 246e 203d 2073 6869 6674 3b0a 2020 y $n = shift;. │ │ │ -0003b310: 2020 246e 203d 2031 2075 6e6c 6573 7320 $n = 1 unless │ │ │ -0003b320: 6465 6669 6e65 6420 246e 3b0a 0a20 2020 defined $n;.. │ │ │ -0003b330: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ -0003b340: 7343 5027 7d20 2b3d 2024 6e3b 0a7d 0a0a sCP'} += $n;.}.. │ │ │ -0003b350: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003b360: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b370: 2323 2323 2323 2323 230a 7375 6220 696e #########.sub in │ │ │ -0003b380: 6372 5f6e 6f46 6f72 6b73 436f 6d70 7265 cr_noForksCompre │ │ │ -0003b390: 7373 0a7b 0a20 2020 206d 7920 2473 656c ss.{. my $sel │ │ │ -0003b3a0: 6620 3d20 7368 6966 743b 0a20 2020 206d f = shift;. m │ │ │ -0003b3b0: 7920 246e 203d 2073 6869 6674 3b0a 2020 y $n = shift;. │ │ │ -0003b3c0: 2020 246e 203d 2031 2075 6e6c 6573 7320 $n = 1 unless │ │ │ -0003b3d0: 6465 6669 6e65 6420 246e 3b0a 0a20 2020 defined $n;.. │ │ │ -0003b3e0: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ -0003b3f0: 7343 6f6d 7072 6573 7327 7d20 2b3d 2024 sCompress'} += $ │ │ │ -0003b400: 6e3b 0a7d 0a0a 0a23 2323 2323 2323 2323 n;.}...######### │ │ │ -0003b410: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b420: 2323 2323 2323 2323 2323 2323 2323 230a ###############. │ │ │ -0003b430: 7375 6220 696e 6372 5f6e 6f45 7863 6c75 sub incr_noExclu │ │ │ -0003b440: 6465 5275 6c65 0a7b 0a20 2020 206d 7920 deRule.{. my │ │ │ -0003b450: 2473 656c 6620 3d20 7368 6966 743b 0a20 $self = shift;. │ │ │ -0003b460: 2020 206d 7920 2473 697a 6520 3d20 7368 my $size = sh │ │ │ -0003b470: 6966 743b 0a20 2020 202b 2b24 7365 6c66 ift;. ++$self │ │ │ -0003b480: 2d3e 7b27 6e6f 4578 636c 7564 6552 756c ->{'noExcludeRul │ │ │ -0003b490: 6527 7d3b 0a20 2020 2024 7365 6c66 2d3e e'};. $self-> │ │ │ -0003b4a0: 7b27 7369 7a65 4578 636c 7564 6552 756c {'sizeExcludeRul │ │ │ -0003b4b0: 6527 7d20 2b3d 2024 7369 7a65 3b0a 7d0a e'} += $size;.}. │ │ │ -0003b4c0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ -0003b4d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b4e0: 2323 2323 2323 2323 2323 0a73 7562 2069 ##########.sub i │ │ │ -0003b4f0: 6e63 725f 6e6f 496e 636c 7564 6552 756c ncr_noIncludeRul │ │ │ -0003b500: 650a 7b0a 2020 2020 6d79 2024 7365 6c66 e.{. my $self │ │ │ -0003b510: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -0003b520: 2024 7369 7a65 203d 2073 6869 6674 3b0a $size = shift;. │ │ │ -0003b530: 2020 2020 2b2b 2473 656c 662d 3e7b 276e ++$self->{'n │ │ │ -0003b540: 6f49 6e63 6c75 6465 5275 6c65 277d 3b0a oIncludeRule'};. │ │ │ -0003b550: 2020 2020 2473 656c 662d 3e7b 2773 697a $self->{'siz │ │ │ -0003b560: 6549 6e63 6c75 6465 5275 6c65 277d 202b eIncludeRule'} + │ │ │ -0003b570: 3d20 2473 697a 653b 0a7d 0a0a 0a23 2323 = $size;.}...### │ │ │ -0003b580: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b590: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b5a0: 2323 2323 230a 7375 6220 696e 6372 5f6e #####.sub incr_n │ │ │ -0003b5b0: 6f42 6c6f 636b 6564 4669 6c65 730a 7b0a oBlockedFiles.{. │ │ │ -0003b5c0: 2020 2020 6d79 2024 7365 6c66 203d 2073 my $self = s │ │ │ -0003b5d0: 6869 6674 3b0a 2020 2020 2b2b 2473 656c hift;. ++$sel │ │ │ -0003b5e0: 662d 3e7b 276e 6f42 6c6f 636b 6564 4669 f->{'noBlockedFi │ │ │ -0003b5f0: 6c65 7327 7d3b 0a7d 0a0a 0a23 2323 2323 les'};.}...##### │ │ │ -0003b600: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b610: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b620: 2323 230a 7375 6220 696e 6372 5f6e 6f43 ###.sub incr_noC │ │ │ -0003b630: 6f6d 7072 4368 6563 6b43 6f6d 7072 0a7b omprCheckCompr.{ │ │ │ -0003b640: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ -0003b650: 7368 6966 743b 0a20 2020 202b 2b24 7365 shift;. ++$se │ │ │ -0003b660: 6c66 2d3e 7b27 6e6f 436f 6d70 7243 6865 lf->{'noComprChe │ │ │ -0003b670: 636b 436f 6d70 7227 7d3b 0a7d 0a0a 0a23 ckCompr'};.}...# │ │ │ -0003b680: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b690: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b6a0: 2323 2323 2323 230a 7375 6220 696e 6372 #######.sub incr │ │ │ -0003b6b0: 5f6e 6f43 6f6d 7072 4368 6563 6b43 700a _noComprCheckCp. │ │ │ -0003b6c0: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ -0003b6d0: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s │ │ │ -0003b6e0: 656c 662d 3e7b 276e 6f43 6f6d 7072 4368 elf->{'noComprCh │ │ │ -0003b6f0: 6563 6b43 7027 7d3b 0a7d 0a0a 0a23 2323 eckCp'};.}...### │ │ │ -0003b700: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b710: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b720: 2323 2323 230a 7375 6220 6164 6453 756d #####.sub addSum │ │ │ -0003b730: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC │ │ │ -0003b740: 6f6d 7072 0a7b 0a20 2020 206d 7920 2473 ompr.{. my $s │ │ │ -0003b750: 656c 6620 3d20 7368 6966 743b 0a20 2020 elf = shift;. │ │ │ -0003b760: 206d 7920 246e 203d 2073 6869 6674 3b0a my $n = shift;. │ │ │ -0003b770: 2020 2020 2473 656c 662d 3e7b 276e 6f42 $self->{'noB │ │ │ -0003b780: 6c6f 636b 436f 6d70 7243 6865 636b 436f lockComprCheckCo │ │ │ -0003b790: 6d70 7227 7d20 2b3d 2024 6e3b 0a7d 0a0a mpr'} += $n;.}.. │ │ │ -0003b7a0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003b7b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b7c0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad │ │ │ -0003b7d0: 6453 756d 426c 6f63 6b43 6f6d 7072 4368 dSumBlockComprCh │ │ │ -0003b7e0: 6563 6b43 700a 7b0a 2020 2020 6d79 2024 eckCp.{. my $ │ │ │ -0003b7f0: 7365 6c66 203d 2073 6869 6674 3b0a 2020 self = shift;. │ │ │ -0003b800: 2020 6d79 2024 6e20 3d20 7368 6966 743b my $n = shift; │ │ │ -0003b810: 0a20 2020 2024 7365 6c66 2d3e 7b27 6e6f . $self->{'no │ │ │ -0003b820: 426c 6f63 6b43 6f6d 7072 4368 6563 6b43 BlockComprCheckC │ │ │ -0003b830: 7027 7d20 2b3d 2024 6e3b 0a7d 0a0a 0a23 p'} += $n;.}...# │ │ │ -0003b840: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b850: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b860: 2323 2323 2323 230a 7375 6220 6164 6446 #######.sub addF │ │ │ -0003b870: 7265 6564 5370 6163 650a 7b0a 2020 2020 reedSpace.{. │ │ │ -0003b880: 6d79 2024 7365 6c66 203d 2073 6869 6674 my $self = shift │ │ │ -0003b890: 3b0a 0a20 2020 2024 7365 6c66 2d3e 7374 ;.. $self->st │ │ │ -0003b8a0: 6174 6973 7469 6344 656c 6574 654f 6c64 atisticDeleteOld │ │ │ -0003b8b0: 4261 636b 7570 4469 7273 3a3a 6164 6446 BackupDirs::addF │ │ │ -0003b8c0: 7265 6564 5370 6163 6528 405f 293b 0a7d reedSpace(@_);.} │ │ │ -0003b8d0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -0003b8e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003b8f0: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ -0003b900: 6164 6453 756d 4f72 6967 4669 6c65 7320 addSumOrigFiles │ │ │ -0003b910: 2020 2020 2020 2320 696e 2062 7974 650a # in byte. │ │ │ -0003b920: 7b0a 2020 2020 6d79 2024 7365 6c66 203d {. my $self = │ │ │ -0003b930: 2073 6869 6674 3b0a 2020 2020 6d79 2028 shift;. my ( │ │ │ -0003b940: 2473 697a 652c 2024 7569 642c 2024 6769 $size, $uid, $gi │ │ │ -0003b950: 6429 203d 2040 5f3b 0a0a 2020 2020 2473 d) = @_;.. $s │ │ │ -0003b960: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi │ │ │ -0003b970: 6c65 7327 7d20 2b3d 2024 7369 7a65 3b0a les'} += $size;. │ │ │ -0003b980: 0a20 2020 202b 2b24 7365 6c66 2d3e 7b27 . ++$self->{' │ │ │ -0003b990: 6e6f 4669 6c65 7327 7d3b 0a20 2020 2024 noFiles'};. $ │ │ │ -0003b9a0: 7365 6c66 2d3e 7072 696e 7450 726f 6772 self->printProgr │ │ │ -0003b9b0: 6573 7352 6570 6f72 7428 290a 0969 6620 essReport()..if │ │ │ -0003b9c0: 2824 7365 6c66 2d3e 7b27 7072 6f67 7265 ($self->{'progre │ │ │ -0003b9d0: 7373 5265 706f 7274 277d 2061 6e64 0a09 ssReport'} and.. │ │ │ -0003b9e0: 2020 2020 2473 656c 662d 3e7b 276e 6f46 $self->{'noF │ │ │ -0003b9f0: 696c 6573 277d 2025 2024 7365 6c66 2d3e iles'} % $self-> │ │ │ -0003ba00: 7b27 7072 6f67 7265 7373 5265 706f 7274 {'progressReport │ │ │ -0003ba10: 277d 203d 3d20 3029 3b0a 0a20 2020 2069 '} == 0);.. i │ │ │ -0003ba20: 6620 2824 7365 6c66 2d3e 7b27 7573 6572 f ($self->{'user │ │ │ -0003ba30: 4772 6f75 7046 6c61 6727 7d29 0a20 2020 GroupFlag'}). │ │ │ -0003ba40: 207b 0a0a 092b 2b24 7365 6c66 2d3e 7b27 {...++$self->{' │ │ │ -0003ba50: 7569 6453 7461 7449 6e6f 6465 7327 7d2d uidStatInodes'}- │ │ │ -0003ba60: 3e7b 2475 6964 7d3b 0a09 2b2b 2473 656c >{$uid};..++$sel │ │ │ -0003ba70: 662d 3e7b 2767 6964 5374 6174 496e 6f64 f->{'gidStatInod │ │ │ -0003ba80: 6573 277d 2d3e 7b24 6769 647d 3b0a 0924 es'}->{$gid};..$ │ │ │ -0003ba90: 7365 6c66 2d3e 7b27 7569 6453 7461 7453 self->{'uidStatS │ │ │ -0003baa0: 697a 6527 7d2d 3e7b 2475 6964 7d20 2b3d ize'}->{$uid} += │ │ │ -0003bab0: 2024 7369 7a65 3b0a 0924 7365 6c66 2d3e $size;..$self-> │ │ │ -0003bac0: 7b27 6769 6453 7461 7453 697a 6527 7d2d {'gidStatSize'}- │ │ │ -0003bad0: 3e7b 2467 6964 7d20 2b3d 2024 7369 7a65 >{$gid} += $size │ │ │ -0003bae0: 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 ;. }.}...#### │ │ │ -0003baf0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bb00: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bb10: 2323 2323 0a73 7562 2070 7269 6e74 5072 ####.sub printPr │ │ │ -0003bb20: 6f67 7265 7373 5265 706f 7274 0a7b 0a20 ogressReport.{. │ │ │ -0003bb30: 2020 206d 7920 2473 656c 6620 3d20 7368 my $self = sh │ │ │ -0003bb40: 6966 743b 0a0a 2020 2020 6966 2028 2473 ift;.. if ($s │ │ │ -0003bb50: 656c 662d 3e7b 2770 726f 6772 6573 7352 elf->{'progressR │ │ │ -0003bb60: 6570 6f72 7427 7d20 3e20 3029 0a20 2020 eport'} > 0). │ │ │ -0003bb70: 207b 0a09 2473 656c 662d 3e5f 5f70 7269 {..$self->__pri │ │ │ -0003bb80: 6e74 5072 6f67 7265 7373 5265 706f 7274 ntProgressReport │ │ │ -0003bb90: 2829 3b0a 2020 2020 7d0a 7d0a 0a0a 2323 ();. }.}...## │ │ │ -0003bba0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bbb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bbc0: 2323 2323 2323 0a73 7562 2063 6865 636b ######.sub check │ │ │ -0003bbd0: 5072 696e 7454 696d 6550 726f 6772 6573 PrintTimeProgres │ │ │ -0003bbe0: 7352 6570 6f72 740a 7b0a 2020 2020 6d79 sReport.{. my │ │ │ -0003bbf0: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -0003bc00: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self-> │ │ │ -0003bc10: 7b27 7469 6d65 5072 6f67 7252 6570 6f72 {'timeProgrRepor │ │ │ -0003bc20: 7427 7d20 3e20 3020 616e 640a 0974 696d t'} > 0 and..tim │ │ │ -0003bc30: 6520 3e3d 2024 7365 6c66 2d3e 7b27 7469 e >= $self->{'ti │ │ │ -0003bc40: 6d65 5072 6f67 7252 6570 6f72 7427 7d20 meProgrReport'} │ │ │ -0003bc50: 2b20 2473 656c 662d 3e7b 2770 726f 6772 + $self->{'progr │ │ │ -0003bc60: 6573 7344 656c 7461 5469 6d65 277d 290a essDeltaTime'}). │ │ │ -0003bc70: 2020 2020 7b0a 0924 7365 6c66 2d3e 5f5f {..$self->__ │ │ │ -0003bc80: 7072 696e 7450 726f 6772 6573 7352 6570 printProgressRep │ │ │ -0003bc90: 6f72 7428 293b 0a20 2020 207d 0a7d 0a0a ort();. }.}.. │ │ │ -0003bca0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003bcb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bcc0: 2323 2323 2323 2323 230a 7375 6220 5f5f #########.sub __ │ │ │ -0003bcd0: 7072 696e 7450 726f 6772 6573 7352 6570 printProgressRep │ │ │ -0003bce0: 6f72 740a 7b0a 2020 2020 6d79 2024 7365 ort.{. my $se │ │ │ -0003bcf0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. │ │ │ -0003bd00: 206d 7920 2473 203d 2024 7365 6c66 2d3e my $s = $self-> │ │ │ -0003bd10: 7b27 7375 6d4e 6577 436f 6d70 7227 7d20 {'sumNewCompr'} │ │ │ -0003bd20: 2b20 2473 656c 662d 3e7b 2773 756d 4e65 + $self->{'sumNe │ │ │ -0003bd30: 7743 6f70 7927 7d3b 0a20 2020 2024 7365 wCopy'};. $se │ │ │ -0003bd40: 6c66 2d3e 7b27 7072 4c6f 6727 7d2d 3e70 lf->{'prLog'}->p │ │ │ -0003bd50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0003bd60: 2750 272c 0a09 0909 2020 2020 272d 7374 'P',.... '-st │ │ │ -0003bd70: 7227 203d 3e0a 0909 0920 2020 205b 2473 r' =>.... [$s │ │ │ -0003bd80: 656c 662d 3e7b 276e 6f46 696c 6573 277d elf->{'noFiles'} │ │ │ -0003bd90: 202e 2027 2066 696c 6573 2070 726f 6365 . ' files proce │ │ │ -0003bda0: 7373 6564 2028 2720 2e0a 0909 0920 2020 ssed (' ..... │ │ │ -0003bdb0: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada │ │ │ -0003bdc0: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum │ │ │ -0003bdd0: 4f72 6967 4669 6c65 7327 7d29 295b 305d OrigFiles'}))[0] │ │ │ -0003bde0: 202e 0a09 0909 2020 2020 2027 2c20 2720 ..... ', ' │ │ │ -0003bdf0: 2e0a 0909 0920 2020 2020 2826 3a3a 6875 ..... (&::hu │ │ │ -0003be00: 6d61 6e52 6561 6461 626c 6528 2473 2929 manReadable($s)) │ │ │ -0003be10: 5b30 5d20 2e20 2729 2028 2720 2e0a 0909 [0] . ') (' .... │ │ │ -0003be20: 0920 2020 2020 2473 656c 662d 3e7b 2773 . $self->{'s │ │ │ -0003be30: 756d 4f72 6967 4669 6c65 7327 7d20 2e20 umOrigFiles'} . │ │ │ -0003be40: 272c 2027 202e 2024 7320 2e20 2729 275d ', ' . $s . ')'] │ │ │ -0003be50: 293b 0a0a 2020 2020 2473 656c 662d 3e7b );.. $self->{ │ │ │ -0003be60: 2774 696d 6550 726f 6772 5265 706f 7274 'timeProgrReport │ │ │ -0003be70: 277d 203d 2074 696d 650a 0969 6620 2473 '} = time..if $s │ │ │ -0003be80: 656c 662d 3e7b 2774 696d 6550 726f 6772 elf->{'timeProgr │ │ │ -0003be90: 5265 706f 7274 277d 203e 2030 3b0a 7d0a Report'} > 0;.}. │ │ │ -0003bea0: 0a0a 2323 2323 2323 2323 2323 2323 2323 ..############## │ │ │ -0003beb0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bec0: 2323 2323 2323 2323 2323 0a73 7562 2061 ##########.sub a │ │ │ -0003bed0: 6464 5375 6d4d 4435 5375 6d20 2020 2020 ddSumMD5Sum │ │ │ -0003bee0: 2020 2320 696e 2062 7974 650a 7b0a 2020 # in byte.{. │ │ │ -0003bef0: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi │ │ │ -0003bf00: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self-> │ │ │ -0003bf10: 7b27 7375 6d4d 4435 5375 6d27 7d20 2b3d {'sumMD5Sum'} += │ │ │ -0003bf20: 2073 6869 6674 3b0a 7d0a 0a0a 2323 2323 shift;.}...#### │ │ │ -0003bf30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bf40: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003bf50: 2323 2323 0a73 7562 2061 6464 5375 6d4c ####.sub addSumL │ │ │ -0003bf60: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop │ │ │ -0003bf70: 7920 2020 2320 6279 7465 0a7b 0a20 2020 y # byte.{. │ │ │ -0003bf80: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -0003bf90: 743b 0a0a 2020 2020 2473 656c 662d 3e7b t;.. $self->{ │ │ │ -0003bfa0: 2773 756d 4c69 6e6b 6564 496e 7465 726e 'sumLinkedIntern │ │ │ -0003bfb0: 616c 436f 7079 277d 202b 3d20 7368 6966 alCopy'} += shif │ │ │ -0003bfc0: 743b 0a20 2020 202b 2b24 7365 6c66 2d3e t;. ++$self-> │ │ │ -0003bfd0: 7b27 6e6f 496e 7465 726e 616c 4c69 6e6b {'noInternalLink │ │ │ -0003bfe0: 6564 4669 6c65 7327 7d3b 0a7d 0a0a 0a23 edFiles'};.}...# │ │ │ -0003bff0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c000: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c010: 2323 2323 2323 230a 7375 6220 6164 6453 #######.sub addS │ │ │ -0003c020: 756d 4c69 6e6b 6564 496e 7465 726e 616c umLinkedInternal │ │ │ -0003c030: 436f 6d70 7220 2020 2320 6279 7465 0a7b Compr # byte.{ │ │ │ -0003c040: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ -0003c050: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel │ │ │ -0003c060: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn │ │ │ -0003c070: 7465 726e 616c 436f 6d70 7227 7d20 2b3d ternalCompr'} += │ │ │ -0003c080: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s │ │ │ -0003c090: 656c 662d 3e7b 276e 6f49 6e74 6572 6e61 elf->{'noInterna │ │ │ -0003c0a0: 6c4c 696e 6b65 6446 696c 6573 277d 3b0a lLinkedFiles'};. │ │ │ -0003c0b0: 7d0a 0a0a 0a23 2323 2323 2323 2323 2323 }....########### │ │ │ -0003c0c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c0d0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -0003c0e0: 6220 6164 6453 756d 4c69 6e6b 6564 4f6c b addSumLinkedOl │ │ │ -0003c0f0: 6443 6f70 7920 2020 2320 6279 7465 0a7b dCopy # byte.{ │ │ │ -0003c100: 0a20 2020 206d 7920 2473 656c 6620 3d20 . my $self = │ │ │ -0003c110: 7368 6966 743b 0a0a 2020 2020 2473 656c shift;.. $sel │ │ │ -0003c120: 662d 3e7b 2773 756d 4c69 6e6b 6564 4f6c f->{'sumLinkedOl │ │ │ -0003c130: 6443 6f70 7927 7d20 2b3d 2073 6869 6674 dCopy'} += shift │ │ │ -0003c140: 3b0a 2020 2020 2b2b 2473 656c 662d 3e7b ;. ++$self->{ │ │ │ -0003c150: 276e 6f4f 6c64 4c69 6e6b 6564 4669 6c65 'noOldLinkedFile │ │ │ -0003c160: 7327 7d3b 0a7d 0a0a 0a23 2323 2323 2323 s'};.}...####### │ │ │ -0003c170: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c180: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c190: 230a 7375 6220 6164 6453 756d 4c69 6e6b #.sub addSumLink │ │ │ -0003c1a0: 6564 4f6c 6443 6f6d 7072 2020 2023 2062 edOldCompr # b │ │ │ -0003c1b0: 7974 650a 7b0a 2020 2020 6d79 2024 7365 yte.{. my $se │ │ │ -0003c1c0: 6c66 203d 2073 6869 6674 3b0a 0a20 2020 lf = shift;.. │ │ │ -0003c1d0: 2024 7365 6c66 2d3e 7b27 7375 6d4c 696e $self->{'sumLin │ │ │ -0003c1e0: 6b65 644f 6c64 436f 6d70 7227 7d20 2b3d kedOldCompr'} += │ │ │ -0003c1f0: 2073 6869 6674 3b0a 2020 2020 2b2b 2473 shift;. ++$s │ │ │ -0003c200: 656c 662d 3e7b 276e 6f4f 6c64 4c69 6e6b elf->{'noOldLink │ │ │ -0003c210: 6564 4669 6c65 7327 7d3b 0a7d 0a0a 0a23 edFiles'};.}...# │ │ │ -0003c220: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c230: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c240: 2323 2323 2323 230a 7375 6220 6164 6453 #######.sub addS │ │ │ -0003c250: 756d 556e 6368 616e 6765 6443 6f70 7920 umUnchangedCopy │ │ │ -0003c260: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m │ │ │ -0003c270: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -0003c280: 0a0a 2020 2020 2473 656c 662d 3e7b 2773 .. $self->{'s │ │ │ -0003c290: 756d 556e 6368 616e 6765 6443 6f70 7927 umUnchangedCopy' │ │ │ -0003c2a0: 7d20 2b3d 2073 6869 6674 3b0a 2020 2020 } += shift;. │ │ │ -0003c2b0: 2b2b 2473 656c 662d 3e7b 2775 6e63 6861 ++$self->{'uncha │ │ │ -0003c2c0: 6e67 6564 4669 6c65 7327 7d3b 0a7d 0a0a ngedFiles'};.}.. │ │ │ -0003c2d0: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -0003c2e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c2f0: 2323 2323 2323 2323 230a 7375 6220 6164 #########.sub ad │ │ │ -0003c300: 6453 756d 556e 6368 616e 6765 6443 6f6d dSumUnchangedCom │ │ │ -0003c310: 7072 2020 2023 2062 7974 650a 7b0a 2020 pr # byte.{. │ │ │ -0003c320: 2020 6d79 2024 7365 6c66 203d 2073 6869 my $self = shi │ │ │ -0003c330: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self-> │ │ │ -0003c340: 7b27 7375 6d55 6e63 6861 6e67 6564 436f {'sumUnchangedCo │ │ │ -0003c350: 6d70 7227 7d20 2b3d 2073 6869 6674 3b0a mpr'} += shift;. │ │ │ -0003c360: 2020 2020 2b2b 2473 656c 662d 3e7b 2775 ++$self->{'u │ │ │ -0003c370: 6e63 6861 6e67 6564 4669 6c65 7327 7d3b nchangedFiles'}; │ │ │ -0003c380: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ -0003c390: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c3a0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -0003c3b0: 6220 6164 6453 756d 4e65 7743 6f70 7920 b addSumNewCopy │ │ │ -0003c3c0: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m │ │ │ -0003c3d0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -0003c3e0: 0a20 2020 206d 7920 2461 203d 2073 6869 . my $a = shi │ │ │ -0003c3f0: 6674 3b0a 0a20 2020 2024 7365 6c66 2d3e ft;.. $self-> │ │ │ -0003c400: 7b27 7375 6d4e 6577 436f 7079 277d 202b {'sumNewCopy'} + │ │ │ -0003c410: 3d20 2461 203f 2024 6120 3a20 303b 0a20 = $a ? $a : 0;. │ │ │ -0003c420: 2020 202b 2b24 7365 6c66 2d3e 7b27 6e6f ++$self->{'no │ │ │ -0003c430: 436f 7069 6564 4669 6c65 7327 7d3b 0a7d CopiedFiles'};.} │ │ │ -0003c440: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -0003c450: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c460: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ -0003c470: 6164 6453 756d 4e65 7743 6f6d 7072 2020 addSumNewCompr │ │ │ -0003c480: 2023 2062 7974 650a 7b0a 2020 2020 6d79 # byte.{. my │ │ │ -0003c490: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -0003c4a0: 2020 2020 6d79 2024 6131 203d 2073 6869 my $a1 = shi │ │ │ -0003c4b0: 6674 3b0a 2020 2020 6d79 2024 6132 203d ft;. my $a2 = │ │ │ -0003c4c0: 2073 6869 6674 3b0a 0a20 2020 2024 7365 shift;.. $se │ │ │ -0003c4d0: 6c66 2d3e 7b27 7375 6d4e 6577 436f 6d70 lf->{'sumNewComp │ │ │ -0003c4e0: 7227 7d20 2b3d 2024 6131 203f 2024 6131 r'} += $a1 ? $a1 │ │ │ -0003c4f0: 203a 2030 3b0a 2020 2020 2473 656c 662d : 0;. $self- │ │ │ -0003c500: 3e7b 2773 756d 4e65 7743 6f6d 7072 4f72 >{'sumNewComprOr │ │ │ -0003c510: 6967 5369 7a65 277d 202b 3d20 2461 3220 igSize'} += $a2 │ │ │ -0003c520: 3f20 2461 3220 3a20 303b 0a20 2020 202b ? $a2 : 0;. + │ │ │ -0003c530: 2b24 7365 6c66 2d3e 7b27 6e6f 436f 6d70 +$self->{'noComp │ │ │ -0003c540: 7265 7373 6564 4669 6c65 7327 7d3b 0a7d ressedFiles'};.} │ │ │ -0003c550: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -0003c560: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c570: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ -0003c580: 6164 6453 756d 4442 4d46 696c 6573 2020 addSumDBMFiles │ │ │ -0003c590: 2020 2320 6279 7465 0a7b 0a20 2020 206d # byte.{. m │ │ │ -0003c5a0: 7920 2473 656c 6620 3d20 7368 6966 743b y $self = shift; │ │ │ -0003c5b0: 0a0a 2020 2020 2473 656c 662d 3e7b 2773 .. $self->{'s │ │ │ -0003c5c0: 756d 4442 4d46 696c 6573 277d 202b 3d20 umDBMFiles'} += │ │ │ -0003c5d0: 7368 6966 743b 0a7d 0a0a 0a23 2323 2323 shift;.}...##### │ │ │ -0003c5e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c5f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c600: 2323 230a 7375 6220 7365 7453 697a 654d ###.sub setSizeM │ │ │ -0003c610: 4435 4368 6563 6b53 756d 0a7b 0a20 2020 D5CheckSum.{. │ │ │ -0003c620: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -0003c630: 743b 0a20 2020 206d 7920 246d 6435 4368 t;. my $md5Ch │ │ │ -0003c640: 6563 6b53 756d 203d 2073 6869 6674 3b0a eckSum = shift;. │ │ │ -0003c650: 2020 2020 6d79 2024 636f 6d70 7265 7373 my $compress │ │ │ -0003c660: 4d44 3546 696c 6520 3d20 7368 6966 743b MD5File = shift; │ │ │ -0003c670: 0a0a 2020 2020 6966 2028 2463 6f6d 7072 .. if ($compr │ │ │ -0003c680: 6573 734d 4435 4669 6c65 2065 7120 2779 essMD5File eq 'y │ │ │ -0003c690: 6573 2729 0a20 2020 207b 0a09 2473 656c es'). {..$sel │ │ │ -0003c6a0: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum │ │ │ -0003c6b0: 277d 203d 2028 7374 6174 2822 246d 6435 '} = (stat("$md5 │ │ │ -0003c6c0: 4368 6563 6b53 756d 2e62 7a32 2229 295b CheckSum.bz2"))[ │ │ │ -0003c6d0: 375d 3b0a 2020 2020 7d0a 2020 2020 656c 7];. }. el │ │ │ -0003c6e0: 7365 0a20 2020 207b 0a09 2473 656c 662d se. {..$self- │ │ │ -0003c6f0: 3e7b 276d 6435 4368 6563 6b53 756d 277d >{'md5CheckSum'} │ │ │ -0003c700: 203d 2028 7374 6174 2824 6d64 3543 6865 = (stat($md5Che │ │ │ -0003c710: 636b 5375 6d29 295b 375d 3b0a 2020 2020 ckSum))[7];. │ │ │ -0003c720: 7d0a 7d0a 0a0a 2323 2323 2323 2323 2323 }.}...########## │ │ │ -0003c730: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c740: 2323 2323 2323 2323 2323 2323 2323 0a73 ##############.s │ │ │ -0003c750: 7562 2073 6574 5573 6564 5369 7a65 5175 ub setUsedSizeQu │ │ │ -0003c760: 6575 6573 0a7b 0a20 2020 206d 7920 2473 eues.{. my $s │ │ │ -0003c770: 656c 6620 3d20 7368 6966 743b 0a0a 2020 elf = shift;.. │ │ │ -0003c780: 2020 2473 656c 662d 3e7b 276d 6178 5573 $self->{'maxUs │ │ │ -0003c790: 6564 436f 7079 5175 6575 6527 7d20 3d20 edCopyQueue'} = │ │ │ -0003c7a0: 7368 6966 743b 0a20 2020 2024 7365 6c66 shift;. $self │ │ │ -0003c7b0: 2d3e 7b27 6d61 7855 7365 6443 6f6d 7072 ->{'maxUsedCompr │ │ │ -0003c7c0: 5175 6575 6527 7d20 3d20 7368 6966 743b Queue'} = shift; │ │ │ -0003c7d0: 0a7d 0a0a 0a23 2323 2323 2323 2323 2323 .}...########### │ │ │ -0003c7e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003c7f0: 2323 2323 2323 2323 2323 2323 230a 7375 #############.su │ │ │ -0003c800: 6220 7072 696e 740a 7b0a 2020 2020 6d79 b print.{. my │ │ │ -0003c810: 2024 7365 6c66 203d 2073 6869 6674 3b0a $self = shift;. │ │ │ -0003c820: 0a20 2020 206d 7920 2825 7061 7261 6d73 . my (%params │ │ │ -0003c830: 2920 3d20 2827 2d65 7854 7970 6573 2720 ) = ('-exTypes' │ │ │ -0003c840: 3d3e 205b 5d0a 0909 2020 2020 293b 0a0a => []... );.. │ │ │ -0003c850: 2020 2020 263a 3a63 6865 636b 4f62 6a65 &::checkObje │ │ │ -0003c860: 6374 5061 7261 6d73 285c 2570 6172 616d ctParams(\%param │ │ │ -0003c870: 732c 205c 405f 2c20 2753 7461 7469 7374 s, \@_, 'Statist │ │ │ -0003c880: 6963 3a3a 7072 696e 7427 2c20 5b27 2d65 ic::print', ['-e │ │ │ -0003c890: 7854 7970 6573 275d 293b 0a0a 2020 2020 xTypes']);.. │ │ │ -0003c8a0: 6d79 2024 6578 5479 7065 7320 3d20 2470 my $exTypes = $p │ │ │ -0003c8b0: 6172 616d 737b 272d 6578 5479 7065 7327 arams{'-exTypes' │ │ │ -0003c8c0: 7d3b 0a20 2020 206d 7920 2840 6578 5479 };. my (@exTy │ │ │ -0003c8d0: 7065 732c 2024 6574 293b 0a20 2020 206d pes, $et);. m │ │ │ -0003c8e0: 7920 2565 7854 7970 6573 4c69 6e65 7320 y %exTypesLines │ │ │ -0003c8f0: 3d20 2827 5327 203d 3e20 2773 6f63 6b65 = ('S' => 'socke │ │ │ -0003c900: 7427 2c0a 0909 0927 6227 203d 3e20 2762 t',....'b' => 'b │ │ │ -0003c910: 6c6f 636b 2073 7065 6369 616c 272c 0a09 lock special',.. │ │ │ -0003c920: 0909 2763 2720 3d3e 2027 6368 6172 2073 ..'c' => 'char s │ │ │ -0003c930: 7065 6369 616c 272c 0a09 0909 2766 2720 pecial',....'f' │ │ │ -0003c940: 3d3e 2027 706c 6169 6e20 6669 6c65 272c => 'plain file', │ │ │ -0003c950: 0a09 0909 2770 2720 3d3e 2027 6e61 6d65 ....'p' => 'name │ │ │ -0003c960: 6420 7069 7065 272c 0a09 0909 276c 2720 d pipe',....'l' │ │ │ -0003c970: 3d3e 2027 7379 6d62 6f6c 6963 206c 696e => 'symbolic lin │ │ │ -0003c980: 6b27 293b 0a20 2020 2066 6f72 6561 6368 k');. foreach │ │ │ -0003c990: 2024 6574 2028 6b65 7973 2025 2465 7854 $et (keys %$exT │ │ │ -0003c9a0: 7970 6573 290a 2020 2020 7b0a 0970 7573 ypes). {..pus │ │ │ -0003c9b0: 6820 4065 7854 7970 6573 2c20 7370 7269 h @exTypes, spri │ │ │ -0003c9c0: 6e74 6628 2225 3333 7322 2c20 2265 7863 ntf("%33s", "exc │ │ │ -0003c9d0: 6c75 6465 6420 2220 2e0a 0909 0920 2020 luded " ..... │ │ │ -0003c9e0: 2020 2020 2465 7854 7970 6573 4c69 6e65 $exTypesLine │ │ │ -0003c9f0: 737b 2465 747d 202e 0a09 0909 2020 2020 s{$et} ..... │ │ │ -0003ca00: 2020 2022 7320 2824 6574 2920 3d20 2229 "s ($et) = ") │ │ │ -0003ca10: 202e 2024 2465 7854 7970 6573 7b24 6574 . $$exTypes{$et │ │ │ -0003ca20: 7d3b 0a20 2020 207d 0a0a 2020 2020 6d79 };. }.. my │ │ │ -0003ca30: 2028 406c 293b 0a20 2020 206d 7920 2824 (@l);. my ($ │ │ │ -0003ca40: 7573 6572 2c24 7379 7374 656d 2c24 6375 user,$system,$cu │ │ │ -0003ca50: 7365 722c 2463 7379 7374 656d 2920 3d20 ser,$csystem) = │ │ │ -0003ca60: 7469 6d65 733b 0a20 2020 206d 7920 2824 times;. my ($ │ │ │ -0003ca70: 7472 656e 6e29 203d 2022 2d2d 2d2d 2d2d trenn) = "------ │ │ │ -0003ca80: 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d 2d2d -+----------+--- │ │ │ -0003ca90: 2d2d 2d2d 2d2d 2d22 3b0a 2020 2020 7075 -------";. pu │ │ │ -0003caa0: 7368 2040 6c2c 2073 7072 696e 7466 2822 sh @l, sprintf(" │ │ │ -0003cab0: 252d 3773 7c25 3130 737c 2531 3073 222c %-7s|%10s|%10s", │ │ │ -0003cac0: 2022 205b 7365 635d 222c 2022 7573 6572 " [sec]", "user │ │ │ -0003cad0: 222c 2022 7379 7374 656d 2229 3b0a 2020 ", "system");. │ │ │ -0003cae0: 2020 7075 7368 2040 6c2c 2022 2474 7265 push @l, "$tre │ │ │ -0003caf0: 6e6e 223b 0a20 2020 2070 7573 6820 406c nn";. push @l │ │ │ -0003cb00: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf("%-7s| │ │ │ -0003cb10: 2531 302e 3266 7c25 3130 2e32 6622 2c20 %10.2f|%10.2f", │ │ │ -0003cb20: 2270 726f 6365 7373 222c 2024 7573 6572 "process", $user │ │ │ -0003cb30: 2c20 2473 7973 7465 6d29 3b0a 2020 2020 , $system);. │ │ │ -0003cb40: 7075 7368 2040 6c2c 2073 7072 696e 7466 push @l, sprintf │ │ │ -0003cb50: 2822 252d 3773 7c25 3130 2e32 667c 2531 ("%-7s|%10.2f|%1 │ │ │ -0003cb60: 302e 3266 222c 2022 6368 696c 6473 222c 0.2f", "childs", │ │ │ -0003cb70: 2024 6375 7365 722c 2024 6373 7973 7465 $cuser, $csyste │ │ │ -0003cb80: 6d29 3b0a 2020 2020 7075 7368 2040 6c2c m);. push @l, │ │ │ -0003cb90: 2022 2474 7265 6e6e 223b 0a20 2020 206d "$trenn";. m │ │ │ -0003cba0: 7920 2824 752c 2024 7329 203d 2028 2463 y ($u, $s) = ($c │ │ │ -0003cbb0: 7573 6572 202b 2024 7573 6572 2c20 2463 user + $user, $c │ │ │ -0003cbc0: 7379 7374 656d 202b 2024 7379 7374 656d system + $system │ │ │ -0003cbd0: 293b 0a20 2020 2024 7520 3d20 2e31 2069 );. $u = .1 i │ │ │ -0003cbe0: 6620 2475 202b 2024 7320 3d3d 2030 3b20 f $u + $s == 0; │ │ │ -0003cbf0: 2020 2020 2020 2320 6176 6f69 6420 6469 # avoid di │ │ │ -0003cc00: 7669 7369 6f6e 2062 7920 7a65 726f 0a20 vision by zero. │ │ │ -0003cc10: 2020 206d 7920 2475 735f 7374 7220 3d20 my $us_str = │ │ │ -0003cc20: 2664 6174 6554 6f6f 6c73 3a3a 7661 6c54 &dateTools::valT │ │ │ -0003cc30: 6f53 7472 2827 2d73 6563 2720 3d3e 2069 oStr('-sec' => i │ │ │ -0003cc40: 6e74 2824 7520 2b20 2473 202b 202e 3529 nt($u + $s + .5) │ │ │ -0003cc50: 293b 0a20 2020 2070 7573 6820 406c 2c20 );. push @l, │ │ │ -0003cc60: 7370 7269 6e74 6628 2225 2d37 737c 2531 sprintf("%-7s|%1 │ │ │ -0003cc70: 302e 3266 7c25 3130 2e32 6620 3d3e 2025 0.2f|%10.2f => % │ │ │ -0003cc80: 2e32 6620 2824 7573 5f73 7472 2922 2c20 .2f ($us_str)", │ │ │ -0003cc90: 2273 756d 222c 0a09 0920 2020 2020 2475 "sum",... $u │ │ │ -0003cca0: 2c20 2473 2c20 2475 202b 2024 7329 3b0a , $s, $u + $s);. │ │ │ -0003ccb0: 0a20 2020 206d 7920 2473 7461 7274 4461 . my $startDa │ │ │ -0003ccc0: 7465 203d 2024 7365 6c66 2d3e 7b27 7374 te = $self->{'st │ │ │ -0003ccd0: 6172 7444 6174 6527 7d3b 0a20 2020 206d artDate'};. m │ │ │ -0003cce0: 7920 2840 7374 6172 7444 6174 6529 203d y (@startDate) = │ │ │ -0003ccf0: 2028 293b 0a20 2020 2069 6620 2824 7374 ();. if ($st │ │ │ -0003cd00: 6172 7444 6174 6529 0a20 2020 207b 0a09 artDate). {.. │ │ │ -0003cd10: 7075 7368 2040 7374 6172 7444 6174 652c push @startDate, │ │ │ -0003cd20: 2027 2020 2020 2020 2020 2020 2070 7265 ' pre │ │ │ -0003cd30: 636f 6d6d 616e 6420 6475 7261 7469 6f6e command duration │ │ │ -0003cd40: 203d 2027 202e 0a09 2020 2020 2473 7461 = ' ... $sta │ │ │ -0003cd50: 7274 4461 7465 2d3e 6465 6c74 6149 6e53 rtDate->deltaInS │ │ │ -0003cd60: 7472 2827 2d73 6563 6f6e 6444 6174 6527 tr('-secondDate' │ │ │ -0003cd70: 203d 3e20 2473 656c 662d 3e7b 2761 6b74 => $self->{'akt │ │ │ -0003cd80: 4461 7465 277d 293b 0a20 2020 207d 0a0a Date'});. }.. │ │ │ -0003cd90: 2020 2020 6d79 2024 6445 6e64 203d 2064 my $dEnd = d │ │ │ -0003cda0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 293b ateTools->new(); │ │ │ -0003cdb0: 0a20 2020 206d 7920 2462 6163 6b75 7044 . my $backupD │ │ │ -0003cdc0: 7572 6174 696f 6e20 3d0a 0924 7365 6c66 uration =..$self │ │ │ -0003cdd0: 2d3e 7b27 616b 7444 6174 6527 7d2d 3e64 ->{'aktDate'}->d │ │ │ -0003cde0: 656c 7461 496e 5365 6373 2827 2d73 6563 eltaInSecs('-sec │ │ │ -0003cdf0: 6f6e 6444 6174 6527 203d 3e20 2464 456e ondDate' => $dEn │ │ │ -0003ce00: 6429 3b0a 2020 2020 2462 6163 6b75 7044 d);. $backupD │ │ │ -0003ce10: 7572 6174 696f 6e20 3d20 3120 6966 2028 uration = 1 if ( │ │ │ -0003ce20: 2462 6163 6b75 7044 7572 6174 696f 6e20 $backupDuration │ │ │ -0003ce30: 3d3d 2030 293b 2020 2023 204d 696e 696d == 0); # Minim │ │ │ -0003ce40: 616c 6572 2057 6572 740a 0a20 2020 206d aler Wert.. m │ │ │ -0003ce50: 7920 2473 756d 5461 7267 6574 416c 6c20 y $sumTargetAll │ │ │ -0003ce60: 3d0a 0924 7365 6c66 2d3e 7b27 7375 6d4c =..$self->{'sumL │ │ │ -0003ce70: 696e 6b65 6449 6e74 6572 6e61 6c43 6f70 inkedInternalCop │ │ │ -0003ce80: 7927 7d20 2b0a 0924 7365 6c66 2d3e 7b27 y'} +..$self->{' │ │ │ -0003ce90: 7375 6d4c 696e 6b65 6449 6e74 6572 6e61 sumLinkedInterna │ │ │ -0003cea0: 6c43 6f6d 7072 277d 202b 0a09 2473 656c lCompr'} +..$sel │ │ │ -0003ceb0: 662d 3e7b 2773 756d 4c69 6e6b 6564 4f6c f->{'sumLinkedOl │ │ │ -0003cec0: 6443 6f70 7927 7d20 2b0a 0924 7365 6c66 dCopy'} +..$self │ │ │ -0003ced0: 2d3e 7b27 7375 6d4c 696e 6b65 644f 6c64 ->{'sumLinkedOld │ │ │ -0003cee0: 436f 6d70 7227 7d20 2b0a 0924 7365 6c66 Compr'} +..$self │ │ │ -0003cef0: 2d3e 7b27 7375 6d4e 6577 436f 7079 277d ->{'sumNewCopy'} │ │ │ -0003cf00: 202b 0a09 2473 656c 662d 3e7b 2773 756d +..$self->{'sum │ │ │ -0003cf10: 4e65 7743 6f6d 7072 277d 3b0a 0a20 2020 NewCompr'};.. │ │ │ -0003cf20: 206d 7920 2473 756d 5461 7267 6574 4e65 my $sumTargetNe │ │ │ -0003cf30: 7720 3d20 2473 656c 662d 3e7b 2773 756d w = $self->{'sum │ │ │ -0003cf40: 4e65 7743 6f70 7927 7d20 2b20 2473 656c NewCopy'} + $sel │ │ │ -0003cf50: 662d 3e7b 2773 756d 4e65 7743 6f6d 7072 f->{'sumNewCompr │ │ │ -0003cf60: 277d 3b0a 0a20 2020 206d 7920 246e 6577 '};.. my $new │ │ │ -0003cf70: 5573 6564 5370 6163 6520 3d20 2473 756d UsedSpace = $sum │ │ │ -0003cf80: 5461 7267 6574 4e65 7720 2b20 2473 656c TargetNew + $sel │ │ │ -0003cf90: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum │ │ │ -0003cfa0: 277d 202d 0a09 2473 656c 662d 3e7b 2762 '} -..$self->{'b │ │ │ -0003cfb0: 7974 6573 277d 3b0a 2020 2020 6d79 2024 ytes'};. my $ │ │ │ -0003cfc0: 6e65 7755 7365 6453 7061 6365 4875 6d61 newUsedSpaceHuma │ │ │ -0003cfd0: 6e3b 0a20 2020 2069 6620 2824 6e65 7755 n;. if ($newU │ │ │ -0003cfe0: 7365 6453 7061 6365 203e 3d20 3029 0a20 sedSpace >= 0). │ │ │ -0003cff0: 2020 207b 0a09 2824 6e65 7755 7365 6453 {..($newUsedS │ │ │ -0003d000: 7061 6365 4875 6d61 6e29 203d 2026 3a3a paceHuman) = &:: │ │ │ -0003d010: 6875 6d61 6e52 6561 6461 626c 6528 246e humanReadable($n │ │ │ -0003d020: 6577 5573 6564 5370 6163 6529 3b0a 2020 ewUsedSpace);. │ │ │ -0003d030: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ -0003d040: 207b 0a09 2824 6e65 7755 7365 6453 7061 {..($newUsedSpa │ │ │ -0003d050: 6365 4875 6d61 6e29 203d 2026 3a3a 6875 ceHuman) = &::hu │ │ │ -0003d060: 6d61 6e52 6561 6461 626c 6528 2d20 246e manReadable(- $n │ │ │ -0003d070: 6577 5573 6564 5370 6163 6529 3b0a 0924 ewUsedSpace);..$ │ │ │ -0003d080: 6e65 7755 7365 6453 7061 6365 4875 6d61 newUsedSpaceHuma │ │ │ -0003d090: 6e20 3d20 222d 246e 6577 5573 6564 5370 n = "-$newUsedSp │ │ │ -0003d0a0: 6163 6548 756d 616e 223b 0a20 2020 207d aceHuman";. } │ │ │ -0003d0b0: 0a0a 2020 2020 6d79 2028 4075 675f 6c6f .. my (@ug_lo │ │ │ -0003d0c0: 6729 203d 2028 293b 0a20 2020 206d 7920 g) = ();. my │ │ │ -0003d0d0: 2840 7567 5f66 696c 6529 203d 2028 293b (@ug_file) = (); │ │ │ -0003d0e0: 0a20 2020 2069 6620 2824 7365 6c66 2d3e . if ($self-> │ │ │ -0003d0f0: 7b27 7573 6572 4772 6f75 7046 6c61 6727 {'userGroupFlag' │ │ │ -0003d100: 7d29 0a20 2020 207b 0a09 6d79 2024 6b3b }). {..my $k; │ │ │ -0003d110: 0a09 6d79 2024 7569 6453 7461 7449 6e6f ..my $uidStatIno │ │ │ -0003d120: 6465 7320 3d20 2473 656c 662d 3e7b 2775 des = $self->{'u │ │ │ -0003d130: 6964 5374 6174 496e 6f64 6573 277d 3b0a idStatInodes'};. │ │ │ -0003d140: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor │ │ │ -0003d150: 7420 7b24 6120 3c3d 3e20 2462 7d20 6b65 t {$a <=> $b} ke │ │ │ -0003d160: 7973 2025 2475 6964 5374 6174 496e 6f64 ys %$uidStatInod │ │ │ -0003d170: 6573 290a 097b 0a09 2020 2020 6d79 2024 es)..{.. my $ │ │ │ -0003d180: 6e61 6d65 203d 2067 6574 7077 7569 6428 name = getpwuid( │ │ │ -0003d190: 246b 293b 0a09 2020 2020 246e 616d 6520 $k);.. $name │ │ │ -0003d1a0: 3d20 272d 2720 756e 6c65 7373 2024 6e61 = '-' unless $na │ │ │ -0003d1b0: 6d65 3b0a 0920 2020 2070 7573 6820 4075 me;.. push @u │ │ │ -0003d1c0: 675f 6c6f 672c 2073 7072 696e 7466 2822 g_log, sprintf(" │ │ │ -0003d1d0: 5553 4552 2049 4e4f 4445 2020 2536 6420 USER INODE %6d │ │ │ -0003d1e0: 2d20 2539 7320 3d20 256c 7522 2c0a 0909 - %9s = %lu",... │ │ │ -0003d1f0: 0909 2020 2024 6b2c 2024 6e61 6d65 2c20 .. $k, $name, │ │ │ -0003d200: 2424 7569 6453 7461 7449 6e6f 6465 737b $$uidStatInodes{ │ │ │ -0003d210: 246b 7d29 3b0a 0920 2020 2070 7573 6820 $k});.. push │ │ │ -0003d220: 4075 675f 6669 6c65 2c20 2255 5345 525f @ug_file, "USER_ │ │ │ -0003d230: 494e 4f44 4520 246b 2024 6e61 6d65 2022 INODE $k $name " │ │ │ -0003d240: 202e 2024 2475 6964 5374 6174 496e 6f64 . $$uidStatInod │ │ │ -0003d250: 6573 7b24 6b7d 3b0a 097d 0a09 6d79 2024 es{$k};..}..my $ │ │ │ -0003d260: 7569 6453 7461 7453 697a 6520 3d20 2473 uidStatSize = $s │ │ │ -0003d270: 656c 662d 3e7b 2775 6964 5374 6174 5369 elf->{'uidStatSi │ │ │ -0003d280: 7a65 277d 3b0a 0966 6f72 6561 6368 2024 ze'};..foreach $ │ │ │ -0003d290: 6b20 2873 6f72 7420 7b24 6120 3c3d 3e20 k (sort {$a <=> │ │ │ -0003d2a0: 2462 7d20 6b65 7973 2025 2475 6964 5374 $b} keys %$uidSt │ │ │ -0003d2b0: 6174 5369 7a65 290a 097b 0a09 2020 2020 atSize)..{.. │ │ │ -0003d2c0: 6d79 2024 6e61 6d65 203d 2067 6574 7077 my $name = getpw │ │ │ -0003d2d0: 7569 6428 246b 293b 0a09 2020 2020 246e uid($k);.. $n │ │ │ -0003d2e0: 616d 6520 3d20 272d 2720 756e 6c65 7373 ame = '-' unless │ │ │ -0003d2f0: 2024 6e61 6d65 3b0a 0920 2020 2070 7573 $name;.. pus │ │ │ -0003d300: 6820 4075 675f 6c6f 672c 2073 7072 696e h @ug_log, sprin │ │ │ -0003d310: 7466 2822 5553 4552 2053 495a 4520 2020 tf("USER SIZE │ │ │ -0003d320: 2536 6420 2d20 2539 7320 3d20 2573 2028 %6d - %9s = %s ( │ │ │ -0003d330: 256c 7529 222c 0a09 0909 0920 2024 6b2c %lu)",..... $k, │ │ │ -0003d340: 2024 6e61 6d65 2c0a 0909 0909 2020 2826 $name,..... (& │ │ │ -0003d350: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable( │ │ │ -0003d360: 2424 7569 6453 7461 7453 697a 657b 246b $$uidStatSize{$k │ │ │ -0003d370: 7d29 295b 305d 2c0a 0909 0909 2020 2424 }))[0],..... $$ │ │ │ -0003d380: 7569 6453 7461 7453 697a 657b 246b 7d29 uidStatSize{$k}) │ │ │ -0003d390: 3b0a 0920 2020 2070 7573 6820 4075 675f ;.. push @ug_ │ │ │ -0003d3a0: 6669 6c65 2c20 2255 5345 525f 5349 5a45 file, "USER_SIZE │ │ │ -0003d3b0: 2024 6b20 246e 616d 6520 2220 2e20 2424 $k $name " . $$ │ │ │ -0003d3c0: 7569 6453 7461 7453 697a 657b 246b 7d3b uidStatSize{$k}; │ │ │ -0003d3d0: 0a09 7d0a 0a09 6d79 2024 6769 6453 7461 ..}...my $gidSta │ │ │ -0003d3e0: 7449 6e6f 6465 7320 3d20 2473 656c 662d tInodes = $self- │ │ │ -0003d3f0: 3e7b 2767 6964 5374 6174 496e 6f64 6573 >{'gidStatInodes │ │ │ -0003d400: 277d 3b0a 0966 6f72 6561 6368 2024 6b20 '};..foreach $k │ │ │ -0003d410: 2873 6f72 7420 7b24 6120 3c3d 3e20 2462 (sort {$a <=> $b │ │ │ -0003d420: 7d20 6b65 7973 2025 2467 6964 5374 6174 } keys %$gidStat │ │ │ -0003d430: 496e 6f64 6573 290a 097b 0a09 2020 2020 Inodes)..{.. │ │ │ -0003d440: 6d79 2024 6772 6f75 7020 3d20 6765 7467 my $group = getg │ │ │ -0003d450: 7267 6964 2824 6b29 3b0a 0920 2020 2024 rgid($k);.. $ │ │ │ -0003d460: 6772 6f75 7020 3d20 272d 2720 756e 6c65 group = '-' unle │ │ │ -0003d470: 7373 2024 6772 6f75 703b 0a09 2020 2020 ss $group;.. │ │ │ -0003d480: 7075 7368 2040 7567 5f6c 6f67 2c20 7370 push @ug_log, sp │ │ │ -0003d490: 7269 6e74 6628 2247 524f 5550 2049 4e4f rintf("GROUP INO │ │ │ -0003d4a0: 4445 2025 3664 202d 2025 3973 203d 2025 DE %6d - %9s = % │ │ │ -0003d4b0: 6c75 222c 0a09 0909 0920 2020 246b 2c20 lu",..... $k, │ │ │ -0003d4c0: 2467 726f 7570 2c20 2424 6769 6453 7461 $group, $$gidSta │ │ │ -0003d4d0: 7449 6e6f 6465 737b 246b 7d29 3b0a 0920 tInodes{$k});.. │ │ │ -0003d4e0: 2020 2070 7573 6820 4075 675f 6669 6c65 push @ug_file │ │ │ -0003d4f0: 2c20 2247 524f 5550 5f49 4e4f 4445 2024 , "GROUP_INODE $ │ │ │ -0003d500: 6b20 2467 726f 7570 2022 202e 2024 2467 k $group " . $$g │ │ │ -0003d510: 6964 5374 6174 496e 6f64 6573 7b24 6b7d idStatInodes{$k} │ │ │ -0003d520: 3b0a 097d 0a09 6d79 2024 6769 6453 7461 ;..}..my $gidSta │ │ │ -0003d530: 7453 697a 6520 3d20 2473 656c 662d 3e7b tSize = $self->{ │ │ │ -0003d540: 2767 6964 5374 6174 5369 7a65 277d 3b0a 'gidStatSize'};. │ │ │ -0003d550: 0966 6f72 6561 6368 2024 6b20 2873 6f72 .foreach $k (sor │ │ │ -0003d560: 7420 7b24 6120 3c3d 3e20 2462 7d20 6b65 t {$a <=> $b} ke │ │ │ -0003d570: 7973 2025 2467 6964 5374 6174 5369 7a65 ys %$gidStatSize │ │ │ -0003d580: 290a 097b 0a09 2020 2020 6d79 2024 6772 )..{.. my $gr │ │ │ -0003d590: 6f75 7020 3d20 6765 7467 7267 6964 2824 oup = getgrgid($ │ │ │ -0003d5a0: 6b29 3b0a 0920 2020 2024 6772 6f75 7020 k);.. $group │ │ │ -0003d5b0: 3d20 272d 2720 756e 6c65 7373 2024 6772 = '-' unless $gr │ │ │ -0003d5c0: 6f75 703b 0a09 2020 2020 7075 7368 2040 oup;.. push @ │ │ │ -0003d5d0: 7567 5f6c 6f67 2c20 7370 7269 6e74 6628 ug_log, sprintf( │ │ │ -0003d5e0: 2247 524f 5550 2053 495a 4520 2025 3664 "GROUP SIZE %6d │ │ │ -0003d5f0: 202d 2025 3973 203d 2025 7320 2825 6c75 - %9s = %s (%lu │ │ │ -0003d600: 2922 2c0a 0909 0909 2020 246b 2c20 2467 )",..... $k, $g │ │ │ -0003d610: 726f 7570 2c0a 0909 0909 2020 2826 3a3a roup,..... (&:: │ │ │ -0003d620: 6875 6d61 6e52 6561 6461 626c 6528 2424 humanReadable($$ │ │ │ -0003d630: 6769 6453 7461 7453 697a 657b 246b 7d29 gidStatSize{$k}) │ │ │ -0003d640: 295b 305d 2c0a 0909 0909 2020 2424 6769 )[0],..... $$gi │ │ │ -0003d650: 6453 7461 7453 697a 657b 246b 7d29 3b0a dStatSize{$k});. │ │ │ -0003d660: 0920 2020 2070 7573 6820 4075 675f 6669 . push @ug_fi │ │ │ -0003d670: 6c65 2c20 2247 524f 5550 5f53 495a 4520 le, "GROUP_SIZE │ │ │ -0003d680: 246b 2024 6772 6f75 7020 2220 2e20 2424 $k $group " . $$ │ │ │ -0003d690: 6769 6453 7461 7453 697a 657b 246b 7d3b gidStatSize{$k}; │ │ │ -0003d6a0: 0a09 7d0a 0a23 0970 7269 6e74 2022 2323 ..}..#.print "## │ │ │ -0003d6b0: 2323 2323 2323 2323 2323 2323 2323 235c ###############\ │ │ │ -0003d6c0: 6e22 3b0a 2309 7072 696e 7420 6a6f 696e n";.#.print join │ │ │ -0003d6d0: 2822 5c6e 222c 2040 7567 5f6c 6f67 292c ("\n", @ug_log), │ │ │ -0003d6e0: 2022 5c6e 223b 0a23 0970 7269 6e74 2022 "\n";.#.print " │ │ │ -0003d6f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003d700: 235c 6e22 3b0a 2309 7072 696e 7420 6a6f #\n";.#.print jo │ │ │ -0003d710: 696e 2822 5c6e 222c 2040 7567 5f66 696c in("\n", @ug_fil │ │ │ -0003d720: 6529 2c20 225c 6e22 3b0a 0a09 6d79 2024 e), "\n";...my $ │ │ │ -0003d730: 6669 6c65 203d 2024 7365 6c66 2d3e 7b27 file = $self->{' │ │ │ -0003d740: 7573 6572 4772 6f75 7053 7461 7446 696c userGroupStatFil │ │ │ -0003d750: 6527 7d3b 0a09 6966 2028 2466 696c 6529 e'};..if ($file) │ │ │ -0003d760: 0a09 7b0a 0920 2020 206c 6f63 616c 202a ..{.. local * │ │ │ -0003d770: 4649 4c45 3b0a 0920 2020 2026 3a3a 6368 FILE;.. &::ch │ │ │ -0003d780: 6563 6b44 656c 5379 6d4c 696e 6b28 2466 eckDelSymLink($f │ │ │ -0003d790: 696c 652c 2024 7072 4c6f 672c 2030 7830 ile, $prLog, 0x0 │ │ │ -0003d7a0: 3129 3b0a 0920 2020 2075 6e6c 6573 7320 1);.. unless │ │ │ -0003d7b0: 286f 7065 6e28 4649 4c45 2c20 223e 2024 (open(FILE, "> $ │ │ │ -0003d7c0: 6669 6c65 2229 290a 0920 2020 207b 0a09 file")).. {.. │ │ │ -0003d7d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0003d7e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -0003d7f0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0003d800: 3e20 5b22 6361 6e6e 6f74 2077 7269 7465 > ["cannot write │ │ │ -0003d810: 2073 7461 7469 7374 6963 2074 6f20 3c24 statistic to <$ │ │ │ -0003d820: 6669 6c65 3e22 5d29 3b0a 0909 676f 746f file>"]);...goto │ │ │ -0003d830: 2065 6e64 5569 6447 6964 3b0a 0920 2020 endUidGid;.. │ │ │ -0003d840: 207d 0a09 2020 2020 7072 696e 7420 4649 }.. print FI │ │ │ -0003d850: 4c45 206a 6f69 6e28 225c 6e22 2c20 4075 LE join("\n", @u │ │ │ -0003d860: 675f 6669 6c65 292c 2022 5c6e 223b 0a09 g_file), "\n";.. │ │ │ -0003d870: 2020 2020 636c 6f73 6528 4649 4c45 293b close(FILE); │ │ │ -0003d880: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -0003d890: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -0003d8a0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' │ │ │ -0003d8b0: 3d3e 205b 2270 7269 6e74 6564 2075 7365 => ["printed use │ │ │ -0003d8c0: 7247 726f 7570 5374 6174 4669 6c65 203c rGroupStatFile < │ │ │ -0003d8d0: 2466 696c 653e 225d 293b 0a09 7d0a 2020 $file>"]);..}. │ │ │ -0003d8e0: 2020 2020 656e 6455 6964 4769 643a 3b0a endUidGid:;. │ │ │ -0003d8f0: 2020 2020 7d0a 0a20 2020 206d 7920 2840 }.. my (@ │ │ │ -0003d900: 636f 6d70 7243 6865 636b 2920 3d20 2829 comprCheck) = () │ │ │ -0003d910: 3b0a 2020 2020 6966 2028 2473 656c 662d ;. if ($self- │ │ │ -0003d920: 3e7b 276e 6f43 6f6d 7072 4368 6563 6b43 >{'noComprCheckC │ │ │ -0003d930: 6f6d 7072 277d 202b 2024 7365 6c66 2d3e ompr'} + $self-> │ │ │ -0003d940: 7b27 6e6f 436f 6d70 7243 6865 636b 4370 {'noComprCheckCp │ │ │ -0003d950: 277d 203e 2030 290a 2020 2020 7b0a 0970 '} > 0). {..p │ │ │ -0003d960: 7573 6820 4063 6f6d 7072 4368 6563 6b2c ush @comprCheck, │ │ │ -0003d970: 0a09 2763 6f6d 7072 2064 7565 2074 6f20 ..'compr due to │ │ │ -0003d980: 434f 4d50 5245 5353 494f 4e5f 4348 4543 COMPRESSION_CHEC │ │ │ -0003d990: 4b20 3d20 2720 2e20 2473 656c 662d 3e7b K = ' . $self->{ │ │ │ -0003d9a0: 276e 6f43 6f6d 7072 4368 6563 6b43 6f6d 'noComprCheckCom │ │ │ -0003d9b0: 7072 277d 2c0a 0927 2020 2063 7020 6475 pr'},..' cp du │ │ │ -0003d9c0: 6520 746f 2043 4f4d 5052 4553 5349 4f4e e to COMPRESSION │ │ │ -0003d9d0: 5f43 4845 434b 203d 2027 202e 2024 7365 _CHECK = ' . $se │ │ │ -0003d9e0: 6c66 2d3e 7b27 6e6f 436f 6d70 7243 6865 lf->{'noComprChe │ │ │ -0003d9f0: 636b 4370 277d 3b0a 2020 2020 7d0a 2020 ckCp'};. }. │ │ │ -0003da00: 2020 6d79 2028 4062 6c6f 636b 436f 6d70 my (@blockComp │ │ │ -0003da10: 7243 6865 636b 2920 3d20 2829 3b0a 2020 rCheck) = ();. │ │ │ -0003da20: 2020 6966 2028 2473 656c 662d 3e7b 276e if ($self->{'n │ │ │ -0003da30: 6f42 6c6f 636b 436f 6d70 7243 6865 636b oBlockComprCheck │ │ │ -0003da40: 436f 6d70 7227 7d20 2b20 2473 656c 662d Compr'} + $self- │ │ │ -0003da50: 3e7b 276e 6f42 6c6f 636b 436f 6d70 7243 >{'noBlockComprC │ │ │ -0003da60: 6865 636b 4370 277d 203e 2030 290a 2020 heckCp'} > 0). │ │ │ -0003da70: 2020 7b0a 0970 7573 6820 4062 6c6f 636b {..push @block │ │ │ -0003da80: 436f 6d70 7243 6865 636b 2c0a 0927 626c ComprCheck,..'bl │ │ │ -0003da90: 6f63 6b65 6446 696c 6573 3a20 636f 6d70 ockedFiles: comp │ │ │ -0003daa0: 2043 4f4d 5052 5f43 4845 434b 203d 2027 COMPR_CHECK = ' │ │ │ -0003dab0: 202e 2024 7365 6c66 2d3e 7b27 6e6f 426c . $self->{'noBl │ │ │ -0003dac0: 6f63 6b43 6f6d 7072 4368 6563 6b43 6f6d ockComprCheckCom │ │ │ -0003dad0: 7072 277d 2c0a 0927 2020 626c 6f63 6b65 pr'},..' blocke │ │ │ -0003dae0: 6446 696c 6573 3a20 6370 2043 4f4d 5052 dFiles: cp COMPR │ │ │ -0003daf0: 5f43 4845 434b 203d 2027 202e 2024 7365 _CHECK = ' . $se │ │ │ -0003db00: 6c66 2d3e 7b27 6e6f 426c 6f63 6b43 6f6d lf->{'noBlockCom │ │ │ -0003db10: 7072 4368 6563 6b43 7027 7d3b 0a20 2020 prCheckCp'};. │ │ │ -0003db20: 207d 0a0a 2020 2020 2473 656c 662d 3e7b }.. $self->{ │ │ │ -0003db30: 2770 724c 6f67 277d 2d3e 0a09 7072 696e 'prLog'}->..prin │ │ │ -0003db40: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S' │ │ │ -0003db50: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -0003db60: 3d3e 0a09 2020 2020 2020 5b40 6c2c 0a09 =>.. [@l,.. │ │ │ -0003db70: 2020 2020 2020 2040 7567 5f6c 6f67 2c0a @ug_log,. │ │ │ -0003db80: 0920 2020 2020 2020 2720 2020 2020 2020 . ' │ │ │ -0003db90: 2020 2020 2020 2020 2020 2020 6469 7265 dire │ │ │ -0003dba0: 6374 6f72 6965 7320 3d20 2720 2e20 2473 ctories = ' . $s │ │ │ -0003dbb0: 656c 662d 3e7b 276e 6f44 6972 7327 7d2c elf->{'noDirs'}, │ │ │ -0003dbc0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' │ │ │ -0003dbd0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003dbe0: 2020 2066 696c 6573 203d 2027 202e 2024 files = ' . $ │ │ │ -0003dbf0: 7365 6c66 2d3e 7b27 6e6f 4669 6c65 7327 self->{'noFiles' │ │ │ -0003dc00: 7d2c 0a09 2020 2020 2020 2027 2020 2020 },.. ' │ │ │ -0003dc10: 2020 2020 2020 2020 2020 2020 7379 6d62 symb │ │ │ -0003dc20: 6f6c 6963 206c 696e 6b73 203d 2027 202e olic links = ' . │ │ │ -0003dc30: 2024 7365 6c66 2d3e 7b27 6e6f 5379 6d4c $self->{'noSymL │ │ │ -0003dc40: 696e 6b73 277d 2c0a 0920 2020 2020 2020 inks'},.. │ │ │ -0003dc50: 2720 2020 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003dc60: 2020 2020 206c 6174 6520 6c69 6e6b 7320 late links │ │ │ -0003dc70: 3d20 2720 2e20 2473 656c 662d 3e7b 276e = ' . $self->{'n │ │ │ -0003dc80: 6f4c 6174 654c 696e 6b73 277d 2c0a 0920 oLateLinks'},.. │ │ │ -0003dc90: 2020 2020 2020 2720 2020 2020 2020 2020 ' │ │ │ -0003dca0: 2020 2020 2020 2020 2020 6e61 6d65 6420 named │ │ │ -0003dcb0: 7069 7065 7320 3d20 2720 2e20 2473 656c pipes = ' . $sel │ │ │ -0003dcc0: 662d 3e7b 276e 6f4e 616d 6564 5069 7065 f->{'noNamedPipe │ │ │ -0003dcd0: 7327 7d2c 0a09 2020 2020 2020 2027 2020 s'},.. ' │ │ │ -0003dce0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003dcf0: 2020 2020 2073 6f63 6b65 7473 203d 2027 sockets = ' │ │ │ -0003dd00: 202e 2024 7365 6c66 2d3e 7b27 6e6f 536f . $self->{'noSo │ │ │ -0003dd10: 636b 6574 7327 7d2c 0a09 2020 2020 2020 ckets'},.. │ │ │ -0003dd20: 2027 2020 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003dd30: 2020 2062 6c6f 636b 2064 6576 6963 6573 block devices │ │ │ -0003dd40: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{' │ │ │ -0003dd50: 6e6f 426c 6f63 6b44 6576 277d 2c0a 0920 noBlockDev'},.. │ │ │ -0003dd60: 2020 2020 2020 2720 2020 2020 2020 2020 ' │ │ │ -0003dd70: 2020 2020 6368 6172 6163 7465 7220 6465 character de │ │ │ -0003dd80: 7669 6365 7320 3d20 2720 2e20 2473 656c vices = ' . $sel │ │ │ -0003dd90: 662d 3e7b 276e 6f43 6861 7244 6576 277d f->{'noCharDev'} │ │ │ -0003dda0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ -0003ddb0: 6e65 7720 696e 7465 726e 616c 206c 696e new internal lin │ │ │ -0003ddc0: 6b65 6420 6669 6c65 7320 3d20 2720 2e0a ked files = ' .. │ │ │ -0003ddd0: 0920 2020 2020 2020 2020 2020 2473 656c . $sel │ │ │ -0003dde0: 662d 3e7b 276e 6f49 6e74 6572 6e61 6c4c f->{'noInternalL │ │ │ -0003ddf0: 696e 6b65 6446 696c 6573 277d 2c0a 0920 inkedFiles'},.. │ │ │ -0003de00: 2020 2020 2020 2720 2020 2020 2020 2020 ' │ │ │ -0003de10: 2020 2020 206f 6c64 206c 696e 6b65 6420 old linked │ │ │ -0003de20: 6669 6c65 7320 3d20 2720 2e20 2473 656c files = ' . $sel │ │ │ -0003de30: 662d 3e7b 276e 6f4f 6c64 4c69 6e6b 6564 f->{'noOldLinked │ │ │ -0003de40: 4669 6c65 7327 7d2c 0a09 2020 2020 2020 Files'},.. │ │ │ -0003de50: 2027 2020 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003de60: 2075 6e63 6861 6e67 6564 2066 696c 6573 unchanged files │ │ │ -0003de70: 203d 2027 202e 2024 7365 6c66 2d3e 7b27 = ' . $self->{' │ │ │ -0003de80: 756e 6368 616e 6765 6446 696c 6573 277d unchangedFiles'} │ │ │ -0003de90: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ -0003dea0: 2020 2020 2020 2020 2020 2020 2063 6f70 cop │ │ │ -0003deb0: 6965 6420 6669 6c65 7320 3d20 2720 2e20 ied files = ' . │ │ │ -0003dec0: 2473 656c 662d 3e7b 276e 6f43 6f70 6965 $self->{'noCopie │ │ │ -0003ded0: 6446 696c 6573 277d 2c0a 0920 2020 2020 dFiles'},.. │ │ │ -0003dee0: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003def0: 2063 6f6d 7072 6573 7365 6420 6669 6c65 compressed file │ │ │ -0003df00: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{ │ │ │ -0003df10: 276e 6f43 6f6d 7072 6573 7365 6446 696c 'noCompressedFil │ │ │ -0003df20: 6573 277d 2c0a 0920 2020 2020 2020 2720 es'},.. ' │ │ │ -0003df30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003df40: 626c 6f63 6b65 6420 6669 6c65 7320 3d20 blocked files = │ │ │ -0003df50: 2720 2e20 2473 656c 662d 3e7b 276e 6f42 ' . $self->{'noB │ │ │ -0003df60: 6c6f 636b 6564 4669 6c65 7327 7d2c 0a09 lockedFiles'},.. │ │ │ -0003df70: 2020 2020 2020 2027 2020 2065 7863 6c75 ' exclu │ │ │ -0003df80: 6465 6420 6669 6c65 7320 6265 6361 7573 ded files becaus │ │ │ -0003df90: 6520 7275 6c65 203d 2027 202e 2024 7365 e rule = ' . $se │ │ │ -0003dfa0: 6c66 2d3e 7b27 6e6f 4578 636c 7564 6552 lf->{'noExcludeR │ │ │ -0003dfb0: 756c 6527 7d20 2e0a 0920 2020 2020 2020 ule'} ... │ │ │ -0003dfc0: 2720 2827 202e 2028 263a 3a68 756d 616e ' (' . (&::human │ │ │ -0003dfd0: 5265 6164 6162 6c65 2824 7365 6c66 2d3e Readable($self-> │ │ │ -0003dfe0: 7b27 7369 7a65 4578 636c 7564 6552 756c {'sizeExcludeRul │ │ │ -0003dff0: 6527 7d29 295b 305d 202e 2027 2927 2c0a e'}))[0] . ')',. │ │ │ -0003e000: 0920 2020 2020 2020 2720 2020 696e 636c . ' incl │ │ │ -0003e010: 7564 6564 2066 696c 6573 2062 6563 6175 uded files becau │ │ │ -0003e020: 7365 2072 756c 6520 3d20 2720 2e20 2473 se rule = ' . $s │ │ │ -0003e030: 656c 662d 3e7b 276e 6f49 6e63 6c75 6465 elf->{'noInclude │ │ │ -0003e040: 5275 6c65 277d 202e 0a09 2020 2020 2020 Rule'} ... │ │ │ -0003e050: 2027 2028 2720 2e20 2826 3a3a 6875 6d61 ' (' . (&::huma │ │ │ -0003e060: 6e52 6561 6461 626c 6528 2473 656c 662d nReadable($self- │ │ │ -0003e070: 3e7b 2773 697a 6549 6e63 6c75 6465 5275 >{'sizeIncludeRu │ │ │ -0003e080: 6c65 277d 2929 5b30 5d20 2e20 2729 272c le'}))[0] . ')', │ │ │ -0003e090: 0a09 2020 2020 2020 2040 636f 6d70 7243 .. @comprC │ │ │ -0003e0a0: 6865 636b 2c0a 0920 2020 2020 2020 4062 heck,.. @b │ │ │ -0003e0b0: 6c6f 636b 436f 6d70 7243 6865 636b 2c0a lockComprCheck,. │ │ │ -0003e0c0: 0920 2020 2020 2020 4065 7854 7970 6573 . @exTypes │ │ │ -0003e0d0: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ -0003e0e0: 2020 206d 6178 2073 697a 6520 6f66 2063 max size of c │ │ │ -0003e0f0: 6f70 7920 7175 6575 6520 3d20 2720 2e20 opy queue = ' . │ │ │ -0003e100: 2473 656c 662d 3e7b 276d 6178 5573 6564 $self->{'maxUsed │ │ │ -0003e110: 436f 7079 5175 6575 6527 7d2c 0a09 2020 CopyQueue'},.. │ │ │ -0003e120: 2020 2020 2027 206d 6178 2073 697a 6520 ' max size │ │ │ -0003e130: 6f66 2063 6f6d 7072 6573 7369 6f6e 2071 of compression q │ │ │ -0003e140: 7565 7565 203d 2027 202e 2024 7365 6c66 ueue = ' . $self │ │ │ -0003e150: 2d3e 7b27 6d61 7855 7365 6443 6f6d 7072 ->{'maxUsedCompr │ │ │ -0003e160: 5175 6575 6527 7d2c 0a0a 0920 2020 2020 Queue'},... │ │ │ -0003e170: 2020 2720 2020 2020 2020 2020 2020 6361 ' ca │ │ │ -0003e180: 6c63 756c 6174 6564 206d 6435 2073 756d lculated md5 sum │ │ │ -0003e190: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{ │ │ │ -0003e1a0: 276e 6f4d 4435 6564 4669 6c65 7327 7d2c 'noMD5edFiles'}, │ │ │ -0003e1b0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' │ │ │ -0003e1c0: 2020 2020 2020 2020 2020 2020 2066 6f72 for │ │ │ -0003e1d0: 6b73 2074 6f74 616c 203d 2027 202e 2028 ks total = ' . ( │ │ │ -0003e1e0: 2473 656c 662d 3e7b 276e 6f46 6f72 6b73 $self->{'noForks │ │ │ -0003e1f0: 4d44 3527 7d20 2b0a 0909 0909 0909 2020 MD5'} +....... │ │ │ -0003e200: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ -0003e210: 7343 5027 7d20 2b0a 0909 0909 0909 2020 sCP'} +....... │ │ │ -0003e220: 2024 7365 6c66 2d3e 7b27 6e6f 466f 726b $self->{'noFork │ │ │ -0003e230: 7343 6f6d 7072 6573 7327 7d20 2b0a 0909 sCompress'} +... │ │ │ -0003e240: 0909 0909 2020 2024 7365 6c66 2d3e 7b27 .... $self->{' │ │ │ -0003e250: 6e6f 4e61 6d65 6450 6970 6573 277d 292c noNamedPipes'}), │ │ │ -0003e260: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' │ │ │ -0003e270: 2020 2020 2020 2020 2020 2020 2020 2066 f │ │ │ -0003e280: 6f72 6b73 206d 6435 203d 2027 202e 2024 orks md5 = ' . $ │ │ │ -0003e290: 7365 6c66 2d3e 7b27 6e6f 466f 726b 734d self->{'noForksM │ │ │ -0003e2a0: 4435 277d 2c0a 0920 2020 2020 2020 2720 D5'},.. ' │ │ │ -0003e2b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0003e2c0: 2020 2066 6f72 6b73 2063 6f70 7920 3d20 forks copy = │ │ │ -0003e2d0: 2720 2e20 2473 656c 662d 3e7b 276e 6f46 ' . $self->{'noF │ │ │ -0003e2e0: 6f72 6b73 4350 277d 2c0a 0920 2020 2020 orksCP'},.. │ │ │ -0003e2f0: 2020 7370 7269 6e74 6628 2225 3333 7322 sprintf("%33s" │ │ │ -0003e300: 2c20 2266 6f72 6b73 2022 202e 206a 6f69 , "forks " . joi │ │ │ -0003e310: 6e28 2720 272c 2040 7b24 7365 6c66 2d3e n(' ', @{$self-> │ │ │ -0003e320: 7b27 636f 6d70 7265 7373 277d 7d29 0a09 {'compress'}}).. │ │ │ -0003e330: 0920 2020 2020 2020 2e20 2220 3d20 2229 . . " = ") │ │ │ -0003e340: 202e 2024 7365 6c66 2d3e 7b27 6e6f 466f . $self->{'noFo │ │ │ -0003e350: 726b 7343 6f6d 7072 6573 7327 7d2c 0a0a rksCompress'},.. │ │ │ -0003e360: 0920 2020 2020 2020 2720 2020 2020 2020 . ' │ │ │ -0003e370: 2020 2020 2020 2020 2020 7375 6d20 6f66 sum of │ │ │ -0003e380: 2073 6f75 7263 6520 3d20 2720 2e0a 0920 source = ' ... │ │ │ -0003e390: 2020 2020 2020 2020 2020 2826 3a3a 6875 (&::hu │ │ │ -0003e3a0: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel │ │ │ -0003e3b0: 662d 3e7b 2773 756d 4f72 6967 4669 6c65 f->{'sumOrigFile │ │ │ -0003e3c0: 7327 7d29 295b 305d 202e 0a09 2020 2020 s'}))[0] ... │ │ │ -0003e3d0: 2020 2020 2020 2027 2028 2720 2e20 2473 ' (' . $s │ │ │ -0003e3e0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi │ │ │ -0003e3f0: 6c65 7327 7d20 2e20 2729 272c 0a09 2020 les'} . ')',.. │ │ │ -0003e400: 2020 2020 2027 2020 2020 2020 2020 2020 ' │ │ │ -0003e410: 2020 2073 756d 206f 6620 7461 7267 6574 sum of target │ │ │ -0003e420: 2061 6c6c 203d 2027 202e 0a09 2020 2020 all = ' ... │ │ │ -0003e430: 2020 2020 2020 2028 263a 3a68 756d 616e (&::human │ │ │ -0003e440: 5265 6164 6162 6c65 2824 7375 6d54 6172 Readable($sumTar │ │ │ -0003e450: 6765 7441 6c6c 2929 5b30 5d20 2e20 2220 getAll))[0] . " │ │ │ -0003e460: 2824 7375 6d54 6172 6765 7441 6c6c 2922 ($sumTargetAll)" │ │ │ -0003e470: 2c0a 0920 2020 2020 2020 2720 2020 2020 ,.. ' │ │ │ -0003e480: 2020 2020 2020 2020 7375 6d20 6f66 2074 sum of t │ │ │ -0003e490: 6172 6765 7420 616c 6c20 3d20 2720 2e20 arget all = ' . │ │ │ -0003e4a0: 7370 7269 6e74 6628 2225 2e32 6625 2522 sprintf("%.2f%%" │ │ │ -0003e4b0: 2c0a 0909 2020 2026 7065 7263 656e 7428 ,... &percent( │ │ │ -0003e4c0: 2473 656c 662d 3e7b 2773 756d 4f72 6967 $self->{'sumOrig │ │ │ -0003e4d0: 4669 6c65 7327 7d2c 2024 7375 6d54 6172 Files'}, $sumTar │ │ │ -0003e4e0: 6765 7441 6c6c 2929 2c0a 0920 2020 2020 getAll)),.. │ │ │ -0003e4f0: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003e500: 7375 6d20 6f66 2074 6172 6765 7420 6e65 sum of target ne │ │ │ -0003e510: 7720 3d20 2720 2e0a 0920 2020 2020 2020 w = ' ... │ │ │ -0003e520: 2020 2020 2826 3a3a 6875 6d61 6e52 6561 (&::humanRea │ │ │ -0003e530: 6461 626c 6528 2473 756d 5461 7267 6574 dable($sumTarget │ │ │ -0003e540: 4e65 7729 295b 305d 202e 2022 2028 2473 New))[0] . " ($s │ │ │ -0003e550: 756d 5461 7267 6574 4e65 7729 222c 0a09 umTargetNew)",.. │ │ │ -0003e560: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ -0003e570: 2020 2020 2073 756d 206f 6620 7461 7267 sum of targ │ │ │ -0003e580: 6574 206e 6577 203d 2027 202e 2020 7370 et new = ' . sp │ │ │ -0003e590: 7269 6e74 6628 2225 2e32 6625 2522 2c0a rintf("%.2f%%",. │ │ │ -0003e5a0: 0909 2020 2026 7065 7263 656e 7428 2473 .. &percent($s │ │ │ -0003e5b0: 656c 662d 3e7b 2773 756d 4f72 6967 4669 elf->{'sumOrigFi │ │ │ -0003e5c0: 6c65 7327 7d2c 2024 7375 6d54 6172 6765 les'}, $sumTarge │ │ │ -0003e5d0: 744e 6577 2929 2c0a 0920 2020 2020 2020 tNew)),.. │ │ │ -0003e5e0: 2720 2020 2020 2020 2020 2020 2073 756d ' sum │ │ │ -0003e5f0: 206f 6620 6d64 3565 6420 6669 6c65 7320 of md5ed files │ │ │ -0003e600: 3d20 2720 2e0a 0920 2020 2020 2020 2020 = ' ... │ │ │ -0003e610: 2020 2826 3a3a 6875 6d61 6e52 6561 6461 (&::humanReada │ │ │ -0003e620: 626c 6528 2473 656c 662d 3e7b 2773 756d ble($self->{'sum │ │ │ -0003e630: 4d44 3553 756d 277d 2929 5b30 5d20 2e0a MD5Sum'}))[0] .. │ │ │ -0003e640: 0920 2020 2020 2020 2020 2020 2720 2827 . ' (' │ │ │ -0003e650: 202e 2024 7365 6c66 2d3e 7b27 7375 6d4d . $self->{'sumM │ │ │ -0003e660: 4435 5375 6d27 7d20 2e20 2729 272c 0a09 D5Sum'} . ')',.. │ │ │ -0003e670: 2020 2020 2020 2027 2020 2020 2020 2020 ' │ │ │ -0003e680: 2020 2020 7375 6d20 6f66 206d 6435 6564 sum of md5ed │ │ │ -0003e690: 2066 696c 6573 203d 2027 202e 2073 7072 files = ' . spr │ │ │ -0003e6a0: 696e 7466 2822 252e 3266 2525 222c 0a09 intf("%.2f%%",.. │ │ │ -0003e6b0: 0920 2020 2670 6572 6365 6e74 2824 7365 . &percent($se │ │ │ -0003e6c0: 6c66 2d3e 7b27 7375 6d4f 7269 6746 696c lf->{'sumOrigFil │ │ │ -0003e6d0: 6573 277d 2c0a 0909 0920 2020 2024 7365 es'},.... $se │ │ │ -0003e6e0: 6c66 2d3e 7b27 7375 6d4d 4435 5375 6d27 lf->{'sumMD5Sum' │ │ │ -0003e6f0: 7d29 292c 0a09 2020 2020 2020 2027 2020 })),.. ' │ │ │ -0003e700: 2020 7375 6d20 696e 7465 726e 616c 206c sum internal l │ │ │ -0003e710: 696e 6b65 6420 2863 6f70 7929 203d 2027 inked (copy) = ' │ │ │ -0003e720: 202e 0a09 2020 2020 2020 2020 2020 2028 ... ( │ │ │ -0003e730: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable │ │ │ -0003e740: 2824 7365 6c66 2d3e 7b27 7375 6d4c 696e ($self->{'sumLin │ │ │ -0003e750: 6b65 6449 6e74 6572 6e61 6c43 6f70 7927 kedInternalCopy' │ │ │ -0003e760: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... │ │ │ -0003e770: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel │ │ │ -0003e780: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn │ │ │ -0003e790: 7465 726e 616c 436f 7079 277d 202e 2027 ternalCopy'} . ' │ │ │ -0003e7a0: 2927 2c0a 0920 2020 2020 2020 2720 2020 )',.. ' │ │ │ -0003e7b0: 7375 6d20 696e 7465 726e 616c 206c 696e sum internal lin │ │ │ -0003e7c0: 6b65 6420 2863 6f6d 7072 2920 3d20 2720 ked (compr) = ' │ │ │ -0003e7d0: 2e0a 0920 2020 2020 2020 2020 2020 2826 ... (& │ │ │ -0003e7e0: 3a3a 6875 6d61 6e52 6561 6461 626c 6528 ::humanReadable( │ │ │ -0003e7f0: 2473 656c 662d 3e7b 2773 756d 4c69 6e6b $self->{'sumLink │ │ │ -0003e800: 6564 496e 7465 726e 616c 436f 6d70 7227 edInternalCompr' │ │ │ -0003e810: 7d29 295b 305d 202e 0a09 2020 2020 2020 }))[0] ... │ │ │ -0003e820: 2020 2020 2027 2028 2720 2e20 2473 656c ' (' . $sel │ │ │ -0003e830: 662d 3e7b 2773 756d 4c69 6e6b 6564 496e f->{'sumLinkedIn │ │ │ -0003e840: 7465 726e 616c 436f 6d70 7227 7d20 2e20 ternalCompr'} . │ │ │ -0003e850: 2729 272c 0a09 2020 2020 2020 2027 2020 ')',.. ' │ │ │ -0003e860: 2020 2020 2020 2073 756d 206f 6c64 206c sum old l │ │ │ -0003e870: 696e 6b65 6420 2863 6f70 7929 203d 2027 inked (copy) = ' │ │ │ -0003e880: 202e 0a09 2020 2020 2020 2020 2020 2028 ... ( │ │ │ -0003e890: 263a 3a68 756d 616e 5265 6164 6162 6c65 &::humanReadable │ │ │ -0003e8a0: 2824 7365 6c66 2d3e 7b27 7375 6d4c 696e ($self->{'sumLin │ │ │ -0003e8b0: 6b65 644f 6c64 436f 7079 277d 2929 5b30 kedOldCopy'}))[0 │ │ │ -0003e8c0: 5d20 2e0a 0920 2020 2020 2020 2020 2020 ] ... │ │ │ -0003e8d0: 2720 2827 202e 2024 7365 6c66 2d3e 7b27 ' (' . $self->{' │ │ │ -0003e8e0: 7375 6d4c 696e 6b65 644f 6c64 436f 7079 sumLinkedOldCopy │ │ │ -0003e8f0: 277d 202e 2027 2927 2c0a 0920 2020 2020 '} . ')',.. │ │ │ -0003e900: 2020 2720 2020 2020 2020 2073 756d 206f ' sum o │ │ │ -0003e910: 6c64 206c 696e 6b65 6420 2863 6f6d 7072 ld linked (compr │ │ │ -0003e920: 2920 3d20 2720 2e0a 0920 2020 2020 2020 ) = ' ... │ │ │ -0003e930: 2020 2020 2826 3a3a 6875 6d61 6e52 6561 (&::humanRea │ │ │ -0003e940: 6461 626c 6528 2473 656c 662d 3e7b 2773 dable($self->{'s │ │ │ -0003e950: 756d 4c69 6e6b 6564 4f6c 6443 6f6d 7072 umLinkedOldCompr │ │ │ -0003e960: 277d 2929 5b30 5d20 2e0a 0920 2020 2020 '}))[0] ... │ │ │ -0003e970: 2020 2020 2020 2720 2827 202e 2024 7365 ' (' . $se │ │ │ -0003e980: 6c66 2d3e 7b27 7375 6d4c 696e 6b65 644f lf->{'sumLinkedO │ │ │ -0003e990: 6c64 436f 6d70 7227 7d20 2e20 2729 272c ldCompr'} . ')', │ │ │ -0003e9a0: 0a09 2020 2020 2020 2027 2020 2020 2020 .. ' │ │ │ -0003e9b0: 2020 2020 7375 6d20 756e 6368 616e 6765 sum unchange │ │ │ -0003e9c0: 6420 2863 6f70 7929 203d 2027 202e 0a09 d (copy) = ' ... │ │ │ -0003e9d0: 2020 2020 2020 2020 2020 2028 263a 3a68 (&::h │ │ │ -0003e9e0: 756d 616e 5265 6164 6162 6c65 2824 7365 umanReadable($se │ │ │ -0003e9f0: 6c66 2d3e 7b27 7375 6d55 6e63 6861 6e67 lf->{'sumUnchang │ │ │ -0003ea00: 6564 436f 7079 277d 2929 5b30 5d20 2e0a edCopy'}))[0] .. │ │ │ -0003ea10: 0920 2020 2020 2020 2020 2020 2720 2827 . ' (' │ │ │ -0003ea20: 202e 2024 7365 6c66 2d3e 7b27 7375 6d55 . $self->{'sumU │ │ │ -0003ea30: 6e63 6861 6e67 6564 436f 7079 277d 202e nchangedCopy'} . │ │ │ -0003ea40: 2027 2927 2c0a 0920 2020 2020 2020 2720 ')',.. ' │ │ │ -0003ea50: 2020 2020 2020 2020 7375 6d20 756e 6368 sum unch │ │ │ -0003ea60: 616e 6765 6420 2863 6f6d 7072 2920 3d20 anged (compr) = │ │ │ -0003ea70: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... │ │ │ -0003ea80: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl │ │ │ -0003ea90: 6528 2473 656c 662d 3e7b 2773 756d 556e e($self->{'sumUn │ │ │ -0003eaa0: 6368 616e 6765 6443 6f6d 7072 277d 2929 changedCompr'})) │ │ │ -0003eab0: 5b30 5d20 2e0a 0920 2020 2020 2020 2020 [0] ... │ │ │ -0003eac0: 2020 2720 2827 202e 2024 7365 6c66 2d3e ' (' . $self-> │ │ │ -0003ead0: 7b27 7375 6d55 6e63 6861 6e67 6564 436f {'sumUnchangedCo │ │ │ -0003eae0: 6d70 7227 7d20 2e20 2729 272c 0a09 2020 mpr'} . ')',.. │ │ │ -0003eaf0: 2020 2020 2027 2020 2020 2020 2020 2020 ' │ │ │ -0003eb00: 2020 2020 2020 7375 6d20 6e65 7720 2863 sum new (c │ │ │ -0003eb10: 6f70 7929 203d 2027 202e 0a09 2020 2020 opy) = ' ... │ │ │ -0003eb20: 2020 2020 2020 2028 263a 3a68 756d 616e (&::human │ │ │ -0003eb30: 5265 6164 6162 6c65 2824 7365 6c66 2d3e Readable($self-> │ │ │ -0003eb40: 7b27 7375 6d4e 6577 436f 7079 277d 2929 {'sumNewCopy'})) │ │ │ -0003eb50: 5b30 5d20 2e0a 0920 2020 2020 2020 2020 [0] ... │ │ │ -0003eb60: 2020 2720 2827 202e 2024 7365 6c66 2d3e ' (' . $self-> │ │ │ -0003eb70: 7b27 7375 6d4e 6577 436f 7079 277d 202e {'sumNewCopy'} . │ │ │ -0003eb80: 2027 2927 2c0a 0920 2020 2020 2020 2720 ')',.. ' │ │ │ -0003eb90: 2020 2020 2020 2020 2020 2020 2020 7375 su │ │ │ -0003eba0: 6d20 6e65 7720 2863 6f6d 7072 2920 3d20 m new (compr) = │ │ │ -0003ebb0: 2720 2e0a 0920 2020 2020 2020 2020 2020 ' ... │ │ │ -0003ebc0: 2826 3a3a 6875 6d61 6e52 6561 6461 626c (&::humanReadabl │ │ │ -0003ebd0: 6528 2473 656c 662d 3e7b 2773 756d 4e65 e($self->{'sumNe │ │ │ -0003ebe0: 7743 6f6d 7072 277d 2929 5b30 5d20 2e0a wCompr'}))[0] .. │ │ │ -0003ebf0: 0920 2020 2020 2020 2020 2020 2720 2827 . ' (' │ │ │ -0003ec00: 202e 2024 7365 6c66 2d3e 7b27 7375 6d4e . $self->{'sumN │ │ │ -0003ec10: 6577 436f 6d70 7227 7d20 2e20 2729 272c ewCompr'} . ')', │ │ │ -0003ec20: 0a09 2020 2020 2020 2027 2020 2020 7375 .. ' su │ │ │ -0003ec30: 6d20 6e65 7720 2863 6f6d 7072 292c 206f m new (compr), o │ │ │ -0003ec40: 7269 6720 7369 7a65 203d 2027 202e 0a09 rig size = ' ... │ │ │ -0003ec50: 2020 2020 2020 2020 2020 2028 263a 3a68 (&::h │ │ │ -0003ec60: 756d 616e 5265 6164 6162 6c65 2824 7365 umanReadable($se │ │ │ -0003ec70: 6c66 2d3e 7b27 7375 6d4e 6577 436f 6d70 lf->{'sumNewComp │ │ │ -0003ec80: 724f 7269 6753 697a 6527 7d29 295b 305d rOrigSize'}))[0] │ │ │ -0003ec90: 202e 0a09 2020 2020 2020 2020 2020 2027 ... ' │ │ │ -0003eca0: 2028 2720 2e20 2473 656c 662d 3e7b 2773 (' . $self->{'s │ │ │ -0003ecb0: 756d 4e65 7743 6f6d 7072 4f72 6967 5369 umNewComprOrigSi │ │ │ -0003ecc0: 7a65 277d 202e 2027 2927 2c0a 0920 2020 ze'} . ')',.. │ │ │ -0003ecd0: 2020 2020 2720 2020 2020 2020 2020 2020 ' │ │ │ -0003ece0: 2020 2020 2073 756d 206e 6577 202f 206f sum new / o │ │ │ -0003ecf0: 7269 6720 3d20 2720 2e20 7370 7269 6e74 rig = ' . sprint │ │ │ -0003ed00: 6628 2225 2e32 6625 2522 2c0a 0920 2020 f("%.2f%%",.. │ │ │ -0003ed10: 2020 2020 2020 2020 2670 6572 6365 6e74 &percent │ │ │ -0003ed20: 2824 7365 6c66 2d3e 7b27 7375 6d4e 6577 ($self->{'sumNew │ │ │ -0003ed30: 436f 6d70 724f 7269 6753 697a 6527 7d0a ComprOrigSize'}. │ │ │ -0003ed40: 0909 0920 2020 202b 2024 7365 6c66 2d3e ... + $self-> │ │ │ -0003ed50: 7b27 7375 6d4e 6577 436f 7079 277d 2c0a {'sumNewCopy'},. │ │ │ -0003ed60: 0909 0920 2020 2024 7365 6c66 2d3e 7b27 ... $self->{' │ │ │ -0003ed70: 7375 6d4e 6577 436f 6d70 7227 7d0a 0909 sumNewCompr'}... │ │ │ -0003ed80: 0920 2020 202b 2024 7365 6c66 2d3e 7b27 . + $self->{' │ │ │ -0003ed90: 7375 6d4e 6577 436f 7079 277d 2929 2c0a sumNewCopy'})),. │ │ │ -0003eda0: 0920 2020 2020 2020 2720 2020 2020 2073 . ' s │ │ │ -0003edb0: 697a 6520 6f66 206d 6435 4368 6563 6b53 ize of md5CheckS │ │ │ -0003edc0: 756d 2066 696c 6520 3d20 2720 2e0a 0920 um file = ' ... │ │ │ -0003edd0: 2020 2020 2020 2020 2020 2826 3a3a 6875 (&::hu │ │ │ -0003ede0: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel │ │ │ -0003edf0: 662d 3e7b 276d 6435 4368 6563 6b53 756d f->{'md5CheckSum │ │ │ -0003ee00: 277d 2929 5b30 5d20 2e0a 0920 2020 2020 '}))[0] ... │ │ │ -0003ee10: 2020 2020 2020 2720 2827 202e 2024 7365 ' (' . $se │ │ │ -0003ee20: 6c66 2d3e 7b27 6d64 3543 6865 636b 5375 lf->{'md5CheckSu │ │ │ -0003ee30: 6d27 7d20 2e20 2729 272c 0a09 2020 2020 m'} . ')',.. │ │ │ -0003ee40: 2020 2027 2020 2020 7369 7a65 206f 6620 ' size of │ │ │ -0003ee50: 7465 6d70 6f72 6172 7920 6462 2066 696c temporary db fil │ │ │ -0003ee60: 6573 203d 2027 202e 0a09 2020 2020 2020 es = ' ... │ │ │ -0003ee70: 2020 2020 2028 263a 3a68 756d 616e 5265 (&::humanRe │ │ │ -0003ee80: 6164 6162 6c65 2824 7365 6c66 2d3e 7b27 adable($self->{' │ │ │ -0003ee90: 7375 6d44 424d 4669 6c65 7327 7d29 295b sumDBMFiles'}))[ │ │ │ -0003eea0: 305d 202e 0a09 2020 2020 2020 2020 2020 0] ... │ │ │ -0003eeb0: 2027 2028 2720 2e20 2473 656c 662d 3e7b ' (' . $self->{ │ │ │ -0003eec0: 2773 756d 4442 4d46 696c 6573 277d 202e 'sumDBMFiles'} . │ │ │ -0003eed0: 2027 2927 2c0a 0920 2020 2020 2020 4073 ')',.. @s │ │ │ -0003eee0: 7461 7274 4461 7465 2c0a 0920 2020 2020 tartDate,.. │ │ │ -0003eef0: 2020 2720 2020 2020 2020 2020 2020 6465 ' de │ │ │ -0003ef00: 6c65 7465 6420 6f6c 6420 6261 636b 7570 leted old backup │ │ │ -0003ef10: 7320 3d20 2720 2e20 2473 656c 662d 3e7b s = ' . $self->{ │ │ │ -0003ef20: 276e 6f44 656c 6574 6564 4f6c 6444 6972 'noDeletedOldDir │ │ │ -0003ef30: 7327 7d2c 0a09 2020 2020 2020 2027 2020 s'},.. ' │ │ │ -0003ef40: 2020 2020 2020 2020 2064 656c 6574 6564 deleted │ │ │ -0003ef50: 2064 6972 6563 746f 7269 6573 203d 2027 directories = ' │ │ │ -0003ef60: 202e 2024 7365 6c66 2d3e 7b27 6469 7273 . $self->{'dirs │ │ │ -0003ef70: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' │ │ │ -0003ef80: 2020 2020 2020 2020 2020 2020 2020 6465 de │ │ │ -0003ef90: 6c65 7465 6420 6669 6c65 7320 3d20 2720 leted files = ' │ │ │ -0003efa0: 2e20 2473 656c 662d 3e7b 2766 696c 6573 . $self->{'files │ │ │ -0003efb0: 277d 2c0a 0920 2020 2020 2020 2720 2020 '},.. ' │ │ │ -0003efc0: 2020 2020 2020 2028 6f6e 6c79 2920 7265 (only) re │ │ │ -0003efd0: 6d6f 7665 6420 6c69 6e6b 7320 3d20 2720 moved links = ' │ │ │ -0003efe0: 2e20 2473 656c 662d 3e7b 276c 696e 6b73 . $self->{'links │ │ │ -0003eff0: 277d 2c0a 0920 2020 2020 2020 2766 7265 '},.. 'fre │ │ │ -0003f000: 6564 2073 7061 6365 2069 6e20 6f6c 6420 ed space in old │ │ │ -0003f010: 6469 7265 6374 6f72 6965 7320 3d20 2720 directories = ' │ │ │ -0003f020: 2e0a 0920 2020 2020 2020 2826 3a3a 6875 ... (&::hu │ │ │ -0003f030: 6d61 6e52 6561 6461 626c 6528 2473 656c manReadable($sel │ │ │ -0003f040: 662d 3e7b 2762 7974 6573 277d 2929 5b30 f->{'bytes'}))[0 │ │ │ -0003f050: 5d20 2e20 2720 2827 202e 0a09 2020 2020 ] . ' (' ... │ │ │ -0003f060: 2020 2024 7365 6c66 2d3e 7b27 6279 7465 $self->{'byte │ │ │ -0003f070: 7327 7d20 2e20 2729 272c 0a09 2020 2020 s'} . ')',.. │ │ │ -0003f080: 2020 2022 2020 2020 2020 6164 642e 2075 " add. u │ │ │ -0003f090: 7365 6420 7370 6163 6520 696e 2066 696c sed space in fil │ │ │ -0003f0a0: 6573 203d 2024 6e65 7755 7365 6453 7061 es = $newUsedSpa │ │ │ -0003f0b0: 6365 4875 6d61 6e20 2824 6e65 7755 7365 ceHuman ($newUse │ │ │ -0003f0c0: 6453 7061 6365 2922 2c0a 0920 2020 2020 dSpace)",.. │ │ │ -0003f0d0: 2020 2720 2020 2020 2020 2020 2020 2020 ' │ │ │ -0003f0e0: 2020 6261 636b 7570 2064 7572 6174 696f backup duratio │ │ │ -0003f0f0: 6e20 3d20 2720 2e0a 0920 2020 2020 2020 n = ' ... │ │ │ -0003f100: 6461 7465 546f 6f6c 733a 3a76 616c 546f dateTools::valTo │ │ │ -0003f110: 5374 7228 272d 7365 6327 203d 3e20 2462 Str('-sec' => $b │ │ │ -0003f120: 6163 6b75 7044 7572 6174 696f 6e29 2c0a ackupDuration),. │ │ │ -0003f130: 0920 2020 2020 2020 276f 7665 7220 616c . 'over al │ │ │ -0003f140: 6c20 6669 6c65 732f 7365 6320 2872 6561 l files/sec (rea │ │ │ -0003f150: 6c20 7469 6d65 2920 3d20 2720 2e0a 0920 l time) = ' ... │ │ │ -0003f160: 2020 2020 2020 2020 2020 7370 7269 6e74 sprint │ │ │ -0003f170: 6628 2225 2e32 6622 2c20 2473 656c 662d f("%.2f", $self- │ │ │ -0003f180: 3e7b 276e 6f46 696c 6573 277d 202f 2024 >{'noFiles'} / $ │ │ │ -0003f190: 6261 636b 7570 4475 7261 7469 6f6e 292c backupDuration), │ │ │ -0003f1a0: 0a09 2020 2020 2020 2027 206f 7665 7220 .. ' over │ │ │ -0003f1b0: 616c 6c20 6669 6c65 732f 7365 6320 2843 all files/sec (C │ │ │ -0003f1c0: 5055 2074 696d 6529 203d 2027 202e 0a09 PU time) = ' ... │ │ │ -0003f1d0: 2020 2020 2020 2020 2020 2073 7072 696e sprin │ │ │ -0003f1e0: 7466 2822 252e 3266 222c 2024 7365 6c66 tf("%.2f", $self │ │ │ -0003f1f0: 2d3e 7b27 6e6f 4669 6c65 7327 7d20 2f20 ->{'noFiles'} / │ │ │ -0003f200: 2824 7520 2b20 2473 2929 2c0a 0920 2020 ($u + $s)),.. │ │ │ -0003f210: 2020 2020 2720 2020 2020 2020 2020 2020 ' │ │ │ -0003f220: 2020 2020 2020 2020 2020 4350 5520 7573 CPU us │ │ │ -0003f230: 6167 6520 3d20 2720 2e0a 0920 2020 2020 age = ' ... │ │ │ -0003f240: 2020 2020 2020 7370 7269 6e74 6628 2225 sprintf("% │ │ │ -0003f250: 2e32 6625 2522 2c20 2824 7520 2b20 2473 .2f%%", ($u + $s │ │ │ -0003f260: 2920 2f20 2462 6163 6b75 7044 7572 6174 ) / $backupDurat │ │ │ -0003f270: 696f 6e20 2a20 3130 3029 0a09 2020 2020 ion * 100).. │ │ │ -0003f280: 2020 205d 293b 0a0a 7d0a 0a0a 2323 2323 ]);..}...#### │ │ │ -0003f290: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f2a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f2b0: 2323 2323 0a73 7562 2070 6572 6365 6e74 ####.sub percent │ │ │ -0003f2c0: 0a7b 0a20 2020 206d 7920 2824 6261 7365 .{. my ($base │ │ │ -0003f2d0: 2c20 2472 656c 2920 3d20 405f 3b0a 0a20 , $rel) = @_;.. │ │ │ -0003f2e0: 2020 2069 6620 2824 6261 7365 203d 3d20 if ($base == │ │ │ -0003f2f0: 3029 0a20 2020 207b 0a09 7265 7475 726e 0). {..return │ │ │ -0003f300: 2030 3b0a 2020 2020 7d0a 2020 2020 656c 0;. }. el │ │ │ -0003f310: 7365 0a20 2020 207b 0a09 7265 7475 726e se. {..return │ │ │ -0003f320: 2031 3030 202d 2028 2462 6173 6520 2d20 100 - ($base - │ │ │ -0003f330: 2472 656c 2920 2a20 3130 3020 2f20 2462 $rel) * 100 / $b │ │ │ -0003f340: 6173 653b 0a20 2020 207d 0a7d 0a0a 0a0a ase;. }.}.... │ │ │ -0003f350: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f360: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f370: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f380: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f390: 2323 2323 2323 0a23 2073 746f 7265 7320 ######.# stores │ │ │ -0003f3a0: 4461 7465 7320 616e 6420 5469 6d65 7320 Dates and Times │ │ │ -0003f3b0: 6f66 2061 6c6c 2064 6972 6563 746f 7269 of all directori │ │ │ -0003f3c0: 6573 2069 6e20 6120 6669 6c65 0a23 2061 es in a file.# a │ │ │ -0003f3d0: 6674 6572 2062 6163 6b75 7020 7468 6973 fter backup this │ │ │ -0003f3e0: 2066 696c 6520 6973 2072 6561 6420 616e file is read an │ │ │ -0003f3f0: 6420 6469 7265 6374 6f72 7920 6174 696d d directory atim │ │ │ -0003f400: 6520 616e 6420 6d74 696d 6520 6172 6520 e and mtime are │ │ │ -0003f410: 7365 740a 7061 636b 6167 6520 7365 7452 set.package setR │ │ │ -0003f420: 6573 6574 4469 7254 696d 6573 3b0a 0a23 esetDirTimes;..# │ │ │ -0003f430: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f440: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f450: 2323 2323 2323 230a 7375 6220 6e65 770a #######.sub new. │ │ │ -0003f460: 7b0a 2020 2020 6d79 2024 636c 6173 7320 {. my $class │ │ │ -0003f470: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -0003f480: 2473 656c 6620 3d20 7b7d 3b0a 0a20 2020 $self = {};.. │ │ │ -0003f490: 206d 7920 2825 7061 7261 6d73 2920 3d20 my (%params) = │ │ │ -0003f4a0: 2827 2d74 6d70 4469 7227 2020 2020 3d3e ('-tmpDir' => │ │ │ -0003f4b0: 2075 6e64 6566 2c0a 0909 2020 2020 272d undef,... '- │ │ │ -0003f4c0: 736f 7572 6365 4469 7227 203d 3e20 756e sourceDir' => un │ │ │ -0003f4d0: 6465 662c 0a09 0920 2020 2027 2d74 6172 def,... '-tar │ │ │ -0003f4e0: 6765 7444 6972 2720 3d3e 2075 6e64 6566 getDir' => undef │ │ │ -0003f4f0: 2c0a 0909 2020 2020 272d 7072 4c6f 6727 ,... '-prLog' │ │ │ -0003f500: 2020 2020 203d 3e20 756e 6465 662c 0a09 => undef,.. │ │ │ -0003f510: 0920 2020 2027 2d73 7264 7466 2720 2020 . '-srdtf' │ │ │ -0003f520: 2020 3d3e 2075 6e64 6566 2c0a 0909 2020 => undef,... │ │ │ -0003f530: 2020 272d 646f 4e6f 7468 696e 6727 203d '-doNothing' = │ │ │ -0003f540: 3e20 302c 0a09 0920 2020 2027 2d72 6573 > 0,... '-res │ │ │ -0003f550: 6574 4174 696d 6527 203d 3e20 302c 0a09 etAtime' => 0,.. │ │ │ -0003f560: 0920 2020 2027 2d70 7265 7365 7276 6550 . '-preserveP │ │ │ -0003f570: 6572 6d73 2720 3d3e 2075 6e64 6566 0a09 erms' => undef.. │ │ │ -0003f580: 0920 2020 2029 3b0a 0a20 2020 2026 3a3a . );.. &:: │ │ │ -0003f590: 6368 6563 6b4f 626a 6563 7450 6172 616d checkObjectParam │ │ │ -0003f5a0: 7328 5c25 7061 7261 6d73 2c20 5c40 5f2c s(\%params, \@_, │ │ │ -0003f5b0: 2027 7365 7452 6573 6574 4469 7254 696d 'setResetDirTim │ │ │ -0003f5c0: 6573 3a3a 6e65 7727 2c0a 0909 0920 5b27 es::new',.... [' │ │ │ -0003f5d0: 2d74 6d70 4469 7227 2c20 272d 736f 7572 -tmpDir', '-sour │ │ │ -0003f5e0: 6365 4469 7227 2c20 272d 7461 7267 6574 ceDir', '-target │ │ │ -0003f5f0: 4469 7227 2c20 272d 7072 4c6f 6727 2c0a Dir', '-prLog',. │ │ │ -0003f600: 0909 0920 2027 2d73 7264 7466 275d 293b ... '-srdtf']); │ │ │ -0003f610: 0a0a 2020 2020 263a 3a73 6574 5061 7261 .. &::setPara │ │ │ -0003f620: 6d73 4469 7265 6374 2824 7365 6c66 2c20 msDirect($self, │ │ │ -0003f630: 5c25 7061 7261 6d73 293b 0a0a 2020 2020 \%params);.. │ │ │ -0003f640: 756e 6c65 7373 2028 2473 656c 662d 3e7b unless ($self->{ │ │ │ -0003f650: 2764 6f4e 6f74 6869 6e67 277d 290a 2020 'doNothing'}). │ │ │ -0003f660: 2020 7b0a 096d 7920 2474 6d70 6669 6c65 {..my $tmpfile │ │ │ -0003f670: 203d 2026 3a3a 756e 6971 4669 6c65 4e61 = &::uniqFileNa │ │ │ -0003f680: 6d65 2822 2474 6d70 6469 722f 7374 6f72 me("$tmpdir/stor │ │ │ -0003f690: 6542 6163 6b75 702d 6469 7273 2e22 293b eBackup-dirs."); │ │ │ -0003f6a0: 0a09 2473 656c 662d 3e7b 2774 6d70 6669 ..$self->{'tmpfi │ │ │ -0003f6b0: 6c65 277d 203d 2024 746d 7066 696c 653b le'} = $tmpfile; │ │ │ -0003f6c0: 0a09 6c6f 6361 6c20 2a46 494c 453b 0a09 ..local *FILE;.. │ │ │ -0003f6d0: 263a 3a63 6865 636b 4465 6c53 796d 4c69 &::checkDelSymLi │ │ │ -0003f6e0: 6e6b 2824 746d 7066 696c 652c 2024 7072 nk($tmpfile, $pr │ │ │ -0003f6f0: 4c6f 672c 2030 7830 3129 3b0a 096f 7065 Log, 0x01);..ope │ │ │ -0003f700: 6e28 4649 4c45 2c20 223e 2024 746d 7066 n(FILE, "> $tmpf │ │ │ -0003f710: 696c 6522 2920 6f72 0a09 2020 2020 2470 ile") or.. $p │ │ │ -0003f720: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0003f730: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -0003f740: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -0003f750: 6e6f 7420 6f70 656e 203c 2474 6d70 6669 not open <$tmpfi │ │ │ -0003f760: 6c65 3e2c 2065 7869 7469 6e67 225d 2c0a le>, exiting"],. │ │ │ -0003f770: 0909 0920 2027 2d61 6464 2720 3d3e 205b ... '-add' => [ │ │ │ -0003f780: 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 __FILE__, __LINE │ │ │ -0003f790: 5f5f 5d2c 0a09 0909 2020 272d 6578 6974 __],.... '-exit │ │ │ -0003f7a0: 2720 3d3e 2031 293b 0a09 6368 6d6f 6420 ' => 1);..chmod │ │ │ -0003f7b0: 3036 3030 2c20 2474 6d70 6669 6c65 3b0a 0600, $tmpfile;. │ │ │ -0003f7c0: 0924 7365 6c66 2d3e 7b27 4649 4c45 277d .$self->{'FILE'} │ │ │ -0003f7d0: 203d 202a 4649 4c45 3b0a 2020 2020 7d0a = *FILE;. }. │ │ │ -0003f7e0: 0a20 2020 2062 6c65 7373 2024 7365 6c66 . bless $self │ │ │ -0003f7f0: 2c20 2463 6c61 7373 3b0a 7d0a 0a0a 2323 , $class;.}...## │ │ │ -0003f800: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f810: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f820: 2323 2323 2323 0a73 7562 2061 6464 4469 ######.sub addDi │ │ │ -0003f830: 720a 7b0a 2020 2020 6d79 2024 7365 6c66 r.{. my $self │ │ │ -0003f840: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -0003f850: 2028 2472 656c 4669 6c65 2c20 2461 7469 ($relFile, $ati │ │ │ -0003f860: 6d65 2c20 246d 7469 6d65 2c20 246d 6f64 me, $mtime, $mod │ │ │ -0003f870: 6529 203d 2040 5f3b 0a0a 2020 2020 7265 e) = @_;.. re │ │ │ -0003f880: 7475 726e 2069 6620 2473 656c 662d 3e7b turn if $self->{ │ │ │ -0003f890: 2764 6f4e 6f74 6869 6e67 277d 3b0a 0a20 'doNothing'};.. │ │ │ -0003f8a0: 2020 206c 6f63 616c 202a 4649 4c45 203d local *FILE = │ │ │ -0003f8b0: 2024 7365 6c66 2d3e 7b27 4649 4c45 277d $self->{'FILE'} │ │ │ -0003f8c0: 3b0a 2020 2020 2472 656c 4669 6c65 203d ;. $relFile = │ │ │ -0003f8d0: 7e20 732f 5c6e 2f5c 302f 6f67 3b0a 2020 ~ s/\n/\0/og;. │ │ │ -0003f8e0: 2020 7072 696e 7420 4649 4c45 2022 2461 print FILE "$a │ │ │ -0003f8f0: 7469 6d65 2024 6d74 696d 6520 246d 6f64 time $mtime $mod │ │ │ -0003f900: 6520 2472 656c 4669 6c65 5c6e 223b 0a7d e $relFile\n";.} │ │ │ -0003f910: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -0003f920: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0003f930: 2323 2323 2323 2323 2323 230a 7375 6220 ###########.sub │ │ │ -0003f940: 7772 6974 6554 696d 6573 0a7b 0a20 2020 writeTimes.{. │ │ │ -0003f950: 206d 7920 2473 656c 6620 3d20 7368 6966 my $self = shif │ │ │ -0003f960: 743b 0a0a 2020 2020 7265 7475 726e 2069 t;.. return i │ │ │ -0003f970: 6620 2473 656c 662d 3e7b 2764 6f4e 6f74 f $self->{'doNot │ │ │ -0003f980: 6869 6e67 277d 3b0a 0a20 2020 206d 7920 hing'};.. my │ │ │ -0003f990: 2473 6f75 7263 6544 6972 203d 2024 7365 $sourceDir = $se │ │ │ -0003f9a0: 6c66 2d3e 7b27 736f 7572 6365 4469 7227 lf->{'sourceDir' │ │ │ -0003f9b0: 7d3b 0a20 2020 206d 7920 2474 6172 6765 };. my $targe │ │ │ -0003f9c0: 7444 6972 203d 2024 7365 6c66 2d3e 7b27 tDir = $self->{' │ │ │ -0003f9d0: 7461 7267 6574 4469 7227 7d3b 0a20 2020 targetDir'};. │ │ │ -0003f9e0: 206c 6f63 616c 202a 4649 4c45 203d 2024 local *FILE = $ │ │ │ -0003f9f0: 7365 6c66 2d3e 7b27 4649 4c45 277d 3b0a self->{'FILE'};. │ │ │ -0003fa00: 2020 2020 6d79 2024 7072 4c6f 6720 3d20 my $prLog = │ │ │ -0003fa10: 2473 656c 662d 3e7b 2770 724c 6f67 277d $self->{'prLog'} │ │ │ -0003fa20: 3b0a 2020 2020 6d79 2024 746d 7066 696c ;. my $tmpfil │ │ │ -0003fa30: 6520 3d20 2473 656c 662d 3e7b 2774 6d70 e = $self->{'tmp │ │ │ -0003fa40: 6669 6c65 277d 3b0a 0a20 2020 2063 6c6f file'};.. clo │ │ │ -0003fa50: 7365 2846 494c 4529 206f 720a 0924 7072 se(FILE) or..$pr │ │ │ -0003fa60: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0003fa70: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... │ │ │ -0003fa80: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -0003fa90: 616e 6e6f 7420 636c 6f73 6520 3c24 746d annot close <$tm │ │ │ -0003faa0: 7066 696c 653e 225d 293b 0a0a 2020 2020 pfile>"]);.. │ │ │ -0003fab0: 6966 2028 2473 656c 662d 3e7b 2770 7265 if ($self->{'pre │ │ │ -0003fac0: 7365 7276 6550 6572 6d73 277d 290a 2020 servePerms'}). │ │ │ -0003fad0: 2020 7b0a 0975 6e6c 6573 7320 286f 7065 {..unless (ope │ │ │ -0003fae0: 6e28 4649 4c45 2c20 223c 2024 746d 7066 n(FILE, "< $tmpf │ │ │ -0003faf0: 696c 6522 2929 0a09 7b0a 0920 2020 2024 ile"))..{.. $ │ │ │ -0003fb00: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -0003fb10: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -0003fb20: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ -0003fb30: 6e6e 6f74 2072 6561 6420 3c24 746d 7066 nnot read <$tmpf │ │ │ -0003fb40: 696c 653e 2c20 6361 6e6e 6f74 2073 6574 ile>, cannot set │ │ │ -0003fb50: 2061 7469 6d65 2022 202e 0a09 0909 0920 atime " ...... │ │ │ -0003fb60: 2020 2020 2261 6e64 206d 7469 6d65 2066 "and mtime f │ │ │ -0003fb70: 6f72 2064 6972 6563 746f 7269 6573 225d or directories"] │ │ │ -0003fb80: 293b 0a09 2020 2020 7265 7475 726e 3b0a );.. return;. │ │ │ -0003fb90: 097d 0a0a 0975 6e6c 6573 7320 2865 6f66 .}...unless (eof │ │ │ -0003fba0: 2046 494c 4529 0a09 7b0a 0920 2020 2024 FILE)..{.. $ │ │ │ -0003fbb0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -0003fbc0: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',.... │ │ │ -0003fbd0: 2020 272d 7374 7227 203d 3e20 5b22 7365 '-str' => ["se │ │ │ -0003fbe0: 7474 696e 6720 6174 696d 652c 206d 7469 tting atime, mti │ │ │ -0003fbf0: 6d65 206f 6620 6469 7265 6374 6f72 6965 me of directorie │ │ │ -0003fc00: 7320 2e2e 2e22 5d29 3b0a 097d 0a0a 096d s ..."]);..}...m │ │ │ -0003fc10: 7920 246c 696e 653b 0a09 7768 696c 6520 y $line;..while │ │ │ -0003fc20: 2824 6c69 6e65 203d 203c 4649 4c45 3e29 ($line = ) │ │ │ -0003fc30: 0a09 7b0a 0920 2020 2063 686f 7020 246c ..{.. chop $l │ │ │ -0003fc40: 696e 653b 0a09 2020 2020 6d79 2028 2461 ine;.. my ($a │ │ │ -0003fc50: 7469 6d65 2c20 246d 7469 6d65 2c20 246d time, $mtime, $m │ │ │ -0003fc60: 6f64 652c 2024 7265 6c46 696c 6529 203d ode, $relFile) = │ │ │ -0003fc70: 2073 706c 6974 282f 5c73 2f2c 2024 6c69 split(/\s/, $li │ │ │ -0003fc80: 6e65 2c20 3429 3b0a 0920 2020 2024 7265 ne, 4);.. $re │ │ │ -0003fc90: 6c46 696c 6520 3d7e 2073 2f5c 302f 5c6e lFile =~ s/\0/\n │ │ │ -0003fca0: 2f6f 673b 0a09 2020 2020 6368 6d6f 6420 /og;.. chmod │ │ │ -0003fcb0: 246d 6f64 652c 2022 2474 6172 6765 7444 $mode, "$targetD │ │ │ -0003fcc0: 6972 2f24 7265 6c46 696c 6522 3b0a 0920 ir/$relFile";.. │ │ │ -0003fcd0: 2020 2075 7469 6d65 2024 6174 696d 652c utime $atime, │ │ │ -0003fce0: 2024 6d74 696d 652c 2022 2473 6f75 7263 $mtime, "$sourc │ │ │ -0003fcf0: 6544 6972 2f24 7265 6c46 696c 6522 2069 eDir/$relFile" i │ │ │ -0003fd00: 6620 2473 656c 662d 3e7b 2772 6573 6574 f $self->{'reset │ │ │ -0003fd10: 4174 696d 6527 7d3b 0a09 2020 2020 7574 Atime'};.. ut │ │ │ -0003fd20: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti │ │ │ -0003fd30: 6d65 2c20 2224 7461 7267 6574 4469 722f me, "$targetDir/ │ │ │ -0003fd40: 2472 656c 4669 6c65 223b 0a09 7d0a 0a09 $relFile";..}... │ │ │ -0003fd50: 636c 6f73 6528 4649 4c45 293b 0a20 2020 close(FILE);. │ │ │ -0003fd60: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ -0003fd70: 7b0a 0924 7072 4c6f 672d 3e70 7269 6e74 {..$prLog->print │ │ │ -0003fd80: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -0003fd90: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -0003fda0: 3d3e 205b 2264 6972 6563 746f 7279 2070 => ["directory p │ │ │ -0003fdb0: 6572 6d69 7373 696f 6e73 206e 6f74 2073 ermissions not s │ │ │ -0003fdc0: 6574 2062 6563 6175 7365 2022 202e 0a09 et because " ... │ │ │ -0003fdd0: 0909 0920 2270 7265 7365 7276 6550 6572 ... "preservePer │ │ │ -0003fde0: 6d73 206e 6f74 2073 6574 225d 293b 0a20 ms not set"]);. │ │ │ -0003fdf0: 2020 207d 0a20 2020 2075 6e6c 696e 6b20 }. unlink │ │ │ -0003fe00: 2474 6d70 6669 6c65 3b0a 7d0a $tmpfile;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 700a p. │ │ ├── ./usr/bin/storeBackupCheckBackup │ │ │ @@ -1,2119 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 382d 3230 3232 290a 2320 2020 2020 2020 8-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;. │ │ │ -00000330: 7573 6520 7761 726e 696e 6773 3b0a 0a0a use warnings;... │ │ │ -00000340: 7573 6520 4469 6765 7374 3a3a 4d44 3520 use Digest::MD5 │ │ │ -00000350: 7177 286d 6435 5f68 6578 293b 0a75 7365 qw(md5_hex);.use │ │ │ -00000360: 2046 636e 746c 2071 7728 4f5f 5244 5752 Fcntl qw(O_RDWR │ │ │ -00000370: 204f 5f43 5245 4154 293b 0a75 7365 2046 O_CREAT);.use F │ │ │ -00000380: 696c 653a 3a43 6f70 793b 0a75 7365 2050 ile::Copy;.use P │ │ │ -00000390: 4f53 4958 3b0a 0a0a 7375 6220 6c69 6250 OSIX;...sub libP │ │ │ -000003a0: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi │ │ │ -000003b0: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. │ │ │ -000003c0: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. # │ │ │ -000003d0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel │ │ │ -000003e0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink │ │ │ -000003f0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol │ │ │ -00000400: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel. │ │ │ -00000410: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f │ │ │ -00000420: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil │ │ │ -00000430: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{. │ │ │ -00000440: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = │ │ │ -00000450: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file); │ │ │ -00000460: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst │ │ │ -00000470: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n │ │ │ -00000480: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e "/").. {... │ │ │ -00000490: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\/] │ │ │ -000004a0: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. │ │ │ -000004b0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. │ │ │ -000004c0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li │ │ │ -000004d0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}... │ │ │ -000004e0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = │ │ │ -000004f0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ -00000500: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = " │ │ │ -00000510: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file";. }. │ │ │ -00000520: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p │ │ │ -00000530: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR "<$f │ │ │ -00000540: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex │ │ │ -00000550: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\n";..exit 1 │ │ │ -00000560: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di │ │ │ -00000570: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= "/../lib"; │ │ │ -00000580: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad │ │ │ -00000590: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth │ │ │ -000005a0: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old │ │ │ -000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005c0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old │ │ │ -000005d0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd │ │ │ -000005e0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {.. │ │ │ -000005f0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b │ │ │ -00000600: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $ │ │ │ -00000610: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $ │ │ │ -00000620: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return │ │ │ -00000630: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir( │ │ │ -00000640: 2224 6162 7344 6972 2466 696c 6522 2929 "$absDir$file")) │ │ │ -00000650: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -00000660: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -00000670: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR "<$dir> doe │ │ │ -00000680: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000690: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\n";. }.} │ │ │ -000006a0: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi │ │ │ -000006b0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name │ │ │ -000006c0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r │ │ │ -000006d0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam │ │ │ -000006e0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name │ │ │ -000006f0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\//); # n │ │ │ -00000700: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat │ │ │ -00000710: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my ( │ │ │ -00000720: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $ │ │ │ -00000730: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\/ │ │ │ -00000740: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di │ │ │ -00000750: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir │ │ │ -00000760: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); │ │ │ -00000770: 2020 2020 2020 2020 2020 2023 2067 696c # gil │ │ │ -00000780: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f │ │ │ -00000790: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu │ │ │ -000007a0: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file) │ │ │ -000007b0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p │ │ │ -000007c0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath( │ │ │ -000007d0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN │ │ │ -000007e0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, "$req";...req │ │ │ -000007f0: 7569 7265 2027 6368 6563 6b50 6172 616d uire 'checkParam │ │ │ -00000800: 322e 706c 273b 0a72 6571 7569 7265 2027 2.pl';.require ' │ │ │ -00000810: 6368 6563 6b4f 626a 5061 722e 706c 273b checkObjPar.pl'; │ │ │ -00000820: 0a72 6571 7569 7265 2027 7072 4c6f 672e .require 'prLog. │ │ │ -00000830: 706c 273b 0a72 6571 7569 7265 2027 7665 pl';.require 've │ │ │ -00000840: 7273 696f 6e2e 706c 273b 0a72 6571 7569 rsion.pl';.requi │ │ │ -00000850: 7265 2027 6669 6c65 4469 722e 706c 273b re 'fileDir.pl'; │ │ │ -00000860: 0a72 6571 7569 7265 2027 666f 726b 5072 .require 'forkPr │ │ │ -00000870: 6f63 2e70 6c27 3b0a 7265 7175 6972 6520 oc.pl';.require │ │ │ -00000880: 2768 756d 616e 5265 6164 2e70 6c27 3b0a 'humanRead.pl';. │ │ │ -00000890: 7265 7175 6972 6520 2764 6174 6554 6f6f require 'dateToo │ │ │ -000008a0: 6c73 2e70 6c27 3b0a 7265 7175 6972 6520 ls.pl';.require │ │ │ -000008b0: 2765 7661 6c54 6f6f 6c73 2e70 6c27 3b0a 'evalTools.pl';. │ │ │ -000008c0: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa │ │ │ -000008d0: 636b 7570 4c69 622e 706c 273b 0a0a 6d79 ckupLib.pl';..my │ │ │ -000008e0: 2024 6368 6563 6b53 756d 4669 6c65 203d $checkSumFile = │ │ │ -000008f0: 2027 2e6d 6435 4368 6563 6b53 756d 7327 '.md5CheckSums' │ │ │ -00000900: 3b0a 0a6d 7920 2474 6d70 6469 7220 3d20 ;..my $tmpdir = │ │ │ -00000910: 272f 746d 7027 3b20 2020 2020 2020 2020 '/tmp'; │ │ │ -00000920: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v │ │ │ -00000930: 616c 7565 0a24 746d 7064 6972 203d 2024 alue.$tmpdir = $ │ │ │ -00000940: 454e 567b 2754 4d50 4449 5227 7d20 6966 ENV{'TMPDIR'} if │ │ │ -00000950: 2064 6566 696e 6564 2024 454e 567b 2754 defined $ENV{'T │ │ │ -00000960: 4d50 4449 5227 7d3b 0a0a 0a3d 6865 6164 MPDIR'};...=head │ │ │ -00000970: 3120 4e41 4d45 0a0a 7374 6f72 6542 6163 1 NAME..storeBac │ │ │ -00000980: 6b75 7043 6865 636b 4261 636b 7570 2e70 kupCheckBackup.p │ │ │ -00000990: 6c20 2d20 6368 6563 6b73 2069 6620 6120 l - checks if a │ │ │ -000009a0: 6669 6c65 2069 6e20 7468 6520 6261 636b file in the back │ │ │ -000009b0: 7570 2069 7320 6d69 7373 696e 670a 6f72 up is missing.or │ │ │ -000009c0: 2063 6f72 7275 7074 6564 0a0a 3d68 6561 corrupted..=hea │ │ │ -000009d0: 6431 2053 594e 4f50 5349 530a 0a09 7374 d1 SYNOPSIS...st │ │ │ -000009e0: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa │ │ │ -000009f0: 636b 7570 2e70 6c20 2d63 2062 6163 6b75 ckup.pl -c backu │ │ │ -00000a00: 7044 6972 205b 2d70 206e 756d 6265 725d pDir [-p number] │ │ │ -00000a10: 205b 2d69 5d0a 0920 2020 2020 205b 2d77 [-i].. [-w │ │ │ -00000a20: 2066 696c 6550 7265 6669 785d 205b 2d2d filePrefix] [-- │ │ │ -00000a30: 6c61 7374 4f66 4561 6368 5365 7269 6573 lastOfEachSeries │ │ │ -00000a40: 5d20 0a09 2020 2020 2020 5b2d 2d69 6e63 ] .. [--inc │ │ │ -00000a50: 6c75 6465 5265 6e61 6d65 6442 6163 6b75 ludeRenamedBacku │ │ │ -00000a60: 7073 5d20 5b2d 5420 746d 7064 6972 5d0a ps] [-T tmpdir]. │ │ │ -00000a70: 0920 2020 2020 205b 2d2d 6c6f 6746 696c . [--logFil │ │ │ -00000a80: 650a 0920 2020 2020 2020 5b2d 2d70 6c75 e.. [--plu │ │ │ -00000a90: 734c 6f67 5374 646f 7574 5d20 5b2d 2d73 sLogStdout] [--s │ │ │ -00000aa0: 7570 7072 6573 7354 696d 655d 205b 2d6d uppressTime] [-m │ │ │ -00000ab0: 206d 6178 4669 6c65 6c65 6e5d 0a09 2020 maxFilelen].. │ │ │ -00000ac0: 2020 2020 205b 5b2d 6e20 6e6f 4f66 4f6c [[-n noOfOl │ │ │ -00000ad0: 6446 696c 6573 5d20 7c20 5b2d 2d73 6176 dFiles] | [--sav │ │ │ -00000ae0: 654c 6f67 735d 5d0a 0a3d 6865 6164 3120 eLogs]]..=head1 │ │ │ -00000af0: 4445 5343 5249 5054 494f 4e0a 0a54 6865 DESCRIPTION..The │ │ │ -00000b00: 2074 6f6f 6c20 6973 2069 6e74 656e 6465 tool is intende │ │ │ -00000b10: 6420 746f 2066 696e 6420 6669 6c65 7320 d to find files │ │ │ -00000b20: 696e 2074 6865 2073 6f75 7263 6520 7468 in the source th │ │ │ -00000b30: 6174 206d 6967 6874 2068 6176 6520 6368 at might have ch │ │ │ -00000b40: 616e 6765 6420 6f76 6572 0a74 696d 6520 anged over.time │ │ │ -00000b50: 7769 7468 6f75 7420 7468 6520 7573 6572 without the user │ │ │ -00000b60: 7320 696e 7465 7261 6374 696f 6e20 6f72 s interaction or │ │ │ -00000b70: 206b 6e6f 776c 6564 6765 2c20 666f 7220 knowledge, for │ │ │ -00000b80: 6578 616d 706c 6520 6279 2062 6974 2072 example by bit r │ │ │ -00000b90: 6f74 2e0a 0a49 5420 6361 6c63 756c 6174 ot...IT calculat │ │ │ -00000ba0: 6573 206d 6435 2073 756d 7320 6672 6f6d es md5 sums from │ │ │ -00000bb0: 2074 6865 2066 696c 6573 2069 6e20 7468 the files in th │ │ │ -00000bc0: 6520 6261 636b 7570 2061 6e64 2063 6f6d e backup and com │ │ │ -00000bd0: 7061 7265 730a 7468 656d 2077 6974 6820 pares.them with │ │ │ -00000be0: 6d64 3520 7375 6d73 2073 746f 7265 6420 md5 sums stored │ │ │ -00000bf0: 6279 2073 746f 7265 4261 636b 7570 2e70 by storeBackup.p │ │ │ -00000c00: 6c2e 0a49 7420 736f 2077 696c 6c20 7265 l..It so will re │ │ │ -00000c10: 636f 676e 697a 652c 2069 6620 6120 6669 cognize, if a fi │ │ │ -00000c20: 6c65 2069 6e20 7468 6520 6261 636b 7570 le in the backup │ │ │ -00000c30: 2069 7320 6d69 7373 696e 6720 6f72 2063 is missing or c │ │ │ -00000c40: 7572 7275 7074 6564 2e0a 4974 206f 6e6c urrupted..It onl │ │ │ -00000c50: 7920 6368 6563 6b73 2070 6c61 696e 2066 y checks plain f │ │ │ -00000c60: 696c 6573 2c20 6e6f 7420 7370 6563 6961 iles, not specia │ │ │ -00000c70: 6c20 6669 6c65 7320 6f72 2073 796d 626f l files or symbo │ │ │ -00000c80: 6c69 6320 6c69 6e6b 732e 0a0a 3d68 6561 lic links...=hea │ │ │ -00000c90: 6431 204f 5054 494f 4e53 0a0a 3d6f 7665 d1 OPTIONS..=ove │ │ │ -00000ca0: 7220 380a 0a3d 6974 656d 2042 3c2d 2d70 r 8..=item B<--p │ │ │ -00000cb0: 7269 6e74 3e0a 0a20 2020 2070 7269 6e74 rint>.. print │ │ │ -00000cc0: 2063 6f6e 6669 6775 7261 7469 6f6e 2070 configuration p │ │ │ -00000cd0: 6172 616d 6574 6572 7320 616e 6420 7374 arameters and st │ │ │ -00000ce0: 6f70 0a0a 3d69 7465 6d20 423c 2d2d 6368 op..=item B<--ch │ │ │ -00000cf0: 6563 6b44 6972 3e2c 2042 3c2d 633e 0a0a eckDir>, B<-c>.. │ │ │ -00000d00: 2020 2020 6261 636b 7570 206f 7220 746f backup or to │ │ │ -00000d10: 7020 6f66 2062 6163 6b75 7073 2074 6f20 p of backups to │ │ │ -00000d20: 6368 6563 6b0a 0a3d 6974 656d 2042 3c2d check..=item B<- │ │ │ -00000d30: 2d62 6163 6b75 7052 6f6f 743e 2c20 423c -backupRoot>, B< │ │ │ -00000d40: 2d62 3e0a 0a20 2020 2072 6f6f 7420 6f66 -b>.. root of │ │ │ -00000d50: 2073 746f 7265 4261 636b 7570 2074 7265 storeBackup tre │ │ │ -00000d60: 652c 206e 6f72 6d61 6c6c 7920 6e6f 7420 e, normally not │ │ │ -00000d70: 6e65 6564 6564 0a0a 3d69 7465 6d20 423c needed..=item B< │ │ │ -00000d80: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v │ │ │ -00000d90: 3e0a 0a20 2020 2067 656e 6572 6174 6520 >.. generate │ │ │ -00000da0: 7374 6174 6973 7469 6373 0a0a 3d69 7465 statistics..=ite │ │ │ -00000db0: 6d20 423c 2d2d 7061 724a 6f62 733e 2c20 m B<--parJobs>, │ │ │ -00000dc0: 423c 2d70 3e0a 0a20 2020 206e 756d 6265 B<-p>.. numbe │ │ │ -00000dd0: 7220 6f66 2070 6172 616c 6c65 6c20 6a6f r of parallel jo │ │ │ -00000de0: 6273 2c20 6465 6661 756c 7420 3d20 6368 bs, default = ch │ │ │ -00000df0: 6f73 656e 2061 7574 6f6d 6174 6963 616c osen automatical │ │ │ -00000e00: 6c79 0a0a 3d69 7465 6d20 423c 2d2d 6c61 ly..=item B<--la │ │ │ -00000e10: 7374 4f66 4561 6368 5365 7269 6573 3e0a stOfEachSeries>. │ │ │ -00000e20: 0a20 2020 206f 6e6c 7920 6368 6563 6b20 . only check │ │ │ -00000e30: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup │ │ │ -00000e40: 6f66 2065 6163 6820 7365 7269 6573 2066 of each series f │ │ │ -00000e50: 6f75 6e64 0a0a 3d69 7465 6d20 423c 2d2d ound..=item B<-- │ │ │ -00000e60: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa │ │ │ -00000e70: 636b 7570 733e 2c20 423c 2d69 3e0a 0a20 ckups>, B<-i>.. │ │ │ -00000e80: 2020 2069 6e63 6c75 6465 2072 656e 616d include renam │ │ │ -00000e90: 6564 2062 6163 6b75 7073 2069 6e74 6f20 ed backups into │ │ │ -00000ea0: 7468 6520 6368 6563 6b20 7265 6e61 6d65 the check rename │ │ │ -00000eb0: 6420 6261 636b 7570 7320 6d75 7374 0a20 d backups must. │ │ │ -00000ec0: 2020 2066 6f6c 6c6f 7720 7468 6520 636f follow the co │ │ │ -00000ed0: 6e76 656e 7469 6f6e 203c 6261 636b 7570 nvention - │ │ │ -00000ef0: 0a0a 3d69 7465 6d20 423c 2d2d 746d 7064 ..=item B<--tmpd │ │ │ -00000f00: 6972 3e2c 2042 3c2d 543e 0a0a 2020 2020 ir>, B<-T>.. │ │ │ -00000f10: 6469 7265 6374 6f72 7920 666f 7220 7465 directory for te │ │ │ -00000f20: 6d70 6f72 6172 7920 6669 6c65 732c 2064 mporary files, d │ │ │ -00000f30: 6566 6175 6c74 2069 7320 3c2f 746d 703e efault is │ │ │ -00000f40: 0a0a 3d69 7465 6d20 423c 2d2d 7772 6f6e ..=item B<--wron │ │ │ -00000f50: 6746 696c 6554 6162 6c65 733e 2c20 423c gFileTables>, B< │ │ │ -00000f60: 2d77 3e0a 0a20 2020 2077 7269 7465 2066 -w>.. write f │ │ │ -00000f70: 696c 656e 616d 6573 2077 6974 6820 6465 ilenames with de │ │ │ -00000f80: 7465 6374 6564 2066 6175 6c74 7320 696e tected faults in │ │ │ -00000f90: 2072 6567 756c 6172 2066 696c 6573 2066 regular files f │ │ │ -00000fa0: 6f72 0a20 2020 206c 6174 6572 2062 7567 or. later bug │ │ │ -00000fb0: 2066 6978 696e 6720 286e 6f74 2061 7574 fixing (not aut │ │ │ -00000fc0: 6f6d 6174 6564 290a 2020 2020 7061 7261 omated). para │ │ │ -00000fd0: 6d65 7465 7220 746f 2074 6869 7320 6f70 meter to this op │ │ │ -00000fe0: 7469 6f6e 2069 7320 6120 6669 6c65 2070 tion is a file p │ │ │ -00000ff0: 7265 6669 780a 2020 2020 6567 2e20 6966 refix. eg. if │ │ │ -00001000: 2074 6865 2066 696c 6520 7072 6566 6978 the file prefix │ │ │ -00001010: 2069 7320 272f 746d 702f 6275 6773 422d is '/tmp/bugsB- │ │ │ -00001020: 272c 2074 6865 2066 6f6c 6c6f 7769 6e67 ', the following │ │ │ -00001030: 2066 696c 6573 2061 7265 0a20 2020 2067 files are. g │ │ │ -00001040: 656e 6572 6174 6564 3a0a 2020 2020 2f74 enerated:. /t │ │ │ -00001050: 6d70 2f62 7567 7342 2d66 696c 6573 2e6d mp/bugsB-files.m │ │ │ -00001060: 6973 7369 6e67 2e74 7874 0a20 2020 202f issing.txt. / │ │ │ -00001070: 746d 702f 6275 6773 422d 6d64 3573 756d tmp/bugsB-md5sum │ │ │ -00001080: 732e 6d69 7373 696e 672e 7478 740a 2020 s.missing.txt. │ │ │ -00001090: 2020 2f74 6d70 2f62 7567 7342 2d6d 6435 /tmp/bugsB-md5 │ │ │ -000010a0: 7375 6d73 2e77 726f 6e67 2e74 7874 0a20 sums.wrong.txt. │ │ │ -000010b0: 2020 2069 6620 796f 7520 6368 616e 6765 if you change │ │ │ -000010c0: 206f 7074 696f 6e20 746d 7064 6972 2074 option tmpdir t │ │ │ -000010d0: 6f20 736f 6d65 7468 696e 6720 656c 7365 o something else │ │ │ -000010e0: 2c20 7468 6973 2076 616c 7565 2077 696c , this value wil │ │ │ -000010f0: 6c20 6265 0a20 2020 2075 7365 6420 6865 l be. used he │ │ │ -00001100: 7265 2069 6e73 7465 6164 206f 6620 2f74 re instead of /t │ │ │ -00001110: 6d70 0a0a 3d69 7465 6d20 423c 2d2d 6c6f mp..=item B<--lo │ │ │ -00001120: 6746 696c 653e 2c20 423c 2d6c 3e0a 0a20 gFile>, B<-l>.. │ │ │ -00001130: 2020 206c 6f67 4669 6c65 2c20 4465 6661 logFile, Defa │ │ │ -00001140: 756c 743a 2073 7464 6f75 740a 0a3d 6974 ult: stdout..=it │ │ │ -00001150: 656d 2042 3c2d 2d70 6c75 734c 6f67 5374 em B<--plusLogSt │ │ │ -00001160: 646f 7574 3e0a 0a20 2020 2069 6620 796f dout>.. if yo │ │ │ -00001170: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log │ │ │ -00001180: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF │ │ │ -00001190: 696c 6520 796f 7520 6361 6e0a 2020 2020 ile you can. │ │ │ -000011a0: 6164 6469 7469 6f6e 616c 6c79 2070 7269 additionally pri │ │ │ -000011b0: 6e74 2074 6865 206f 7574 7075 7420 746f nt the output to │ │ │ -000011c0: 2053 5444 4f55 5420 7769 7468 2074 6869 STDOUT with thi │ │ │ -000011d0: 7320 666c 6167 0a0a 3d69 7465 6d20 423c s flag..=item B< │ │ │ -000011e0: 2d2d 7375 7070 7265 7373 5469 6d65 3e0a --suppressTime>. │ │ │ -000011f0: 0a20 2020 2073 7570 7072 6573 7320 6f75 . suppress ou │ │ │ -00001200: 7470 7574 206f 6620 7469 6d65 2069 6e20 tput of time in │ │ │ -00001210: 6c6f 6766 696c 650a 0a3d 6974 656d 2042 logfile..=item B │ │ │ -00001220: 3c2d 2d6d 6178 4669 6c65 6c65 6e3e 2c20 <--maxFilelen>, │ │ │ -00001230: 423c 2d6d 3e0a 0a20 2020 206d 6178 696d B<-m>.. maxim │ │ │ -00001240: 616c 206c 656e 6774 6820 6f66 206c 6f67 al length of log │ │ │ -00001250: 2066 696c 652c 2064 6566 6175 6c74 203d file, default = │ │ │ -00001260: 2031 6536 0a0a 3d69 7465 6d20 423c 2d2d 1e6..=item B<-- │ │ │ -00001270: 6e6f 4f66 4f6c 6446 696c 6573 3e2c 2042 noOfOldFiles>, B │ │ │ -00001280: 3c2d 6e3e 0a0a 2020 2020 6e75 6d62 6572 <-n>.. number │ │ │ -00001290: 206f 6620 6f6c 6420 6c6f 6720 6669 6c65 of old log file │ │ │ -000012a0: 732c 2064 6566 6175 6c74 203d 2035 0a0a s, default = 5.. │ │ │ -000012b0: 3d69 7465 6d20 423c 2d2d 7361 7665 4c6f =item B<--saveLo │ │ │ -000012c0: 6773 3e0a 0a20 2020 2073 6176 6520 6c6f gs>.. save lo │ │ │ -000012d0: 6720 6669 6c65 7320 7769 7468 2064 6174 g files with dat │ │ │ -000012e0: 6520 616e 6420 7469 6d65 2069 6e73 7465 e and time inste │ │ │ -000012f0: 6164 206f 6620 6465 6c65 7469 6e67 2074 ad of deleting t │ │ │ -00001300: 6865 0a20 2020 206f 6c64 2028 7769 7468 he. old (with │ │ │ -00001310: 205b 2d6e 6f4f 664f 6c64 4669 6c65 735d [-noOfOldFiles] │ │ │ -00001320: 290a 0a3d 6974 656d 2042 3c2d 2d63 6f6d )..=item B<--com │ │ │ -00001330: 7072 6573 7357 6974 683e 0a0a 2020 2020 pressWith>.. │ │ │ -00001340: 636f 6d70 7265 7373 2073 6176 6564 206c compress saved l │ │ │ -00001350: 6f67 2066 696c 6573 2028 652e 672e 2077 og files (e.g. w │ │ │ -00001360: 6974 6820 2767 7a69 7020 2d39 2729 2e0a ith 'gzip -9').. │ │ │ -00001370: 2020 2020 6465 6661 756c 7420 6973 2027 default is ' │ │ │ -00001380: 627a 6970 3227 0a0a 3d62 6163 6b0a 0a3d bzip2'..=back..= │ │ │ -00001390: 6865 6164 3120 434f 5059 5249 4748 540a head1 COPYRIGHT. │ │ │ -000013a0: 0a43 6f70 7972 6967 6874 2028 6329 2032 .Copyright (c) 2 │ │ │ -000013b0: 3030 382d 3230 3232 2062 7920 4865 696e 008-2022 by Hein │ │ │ -000013c0: 7a2d 4a6f 7365 6620 436c 6165 7320 2873 z-Josef Claes (s │ │ │ -000013d0: 6565 2052 4541 444d 4529 0a50 7562 6c69 ee README).Publi │ │ │ -000013e0: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G │ │ │ -000013f0: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi │ │ │ -00001400: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or │ │ │ -00001410: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio │ │ │ -00001420: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel │ │ │ -00001430: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te │ │ │ -00001440: 7874 2824 3029 3b0a 0a26 7072 696e 7456 xt($0);..&printV │ │ │ -00001450: 6572 7369 6f6e 285c 4041 5247 562c 2027 ersion(\@ARGV, ' │ │ │ -00001460: 2d56 272c 2027 2d2d 7665 7273 696f 6e27 -V', '--version' │ │ │ -00001470: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar │ │ │ -00001480: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara │ │ │ -00001490: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi │ │ │ -000014a0: 7374 7327 203d 3e20 276e 6f27 2c0a 0909 sts' => 'no',... │ │ │ -000014b0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [ │ │ │ -000014c0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000014d0: 6d65 2720 3d3e 2027 6368 6563 6b42 6163 me' => 'checkBac │ │ │ -000014e0: 6b75 7027 2c0a 0909 0909 0920 2020 2027 kup',...... ' │ │ │ -000014f0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001500: 2d63 272c 0a09 0909 0909 2020 2020 272d -c',...... '- │ │ │ -00001510: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001520: 6368 6563 6b44 6972 272c 0a09 0909 0909 checkDir',...... │ │ │ -00001530: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00001540: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -00001550: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001560: 3d3e 2027 7665 7262 6f73 6527 2c0a 0909 => 'verbose',... │ │ │ -00001570: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001580: 6f6e 2720 3d3e 2027 2d76 272c 0a09 0909 on' => '-v',.... │ │ │ -00001590: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -000015a0: 2720 3d3e 2027 2d2d 7665 7262 6f73 6527 ' => '--verbose' │ │ │ -000015b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -000015c0: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p │ │ │ -000015d0: 6172 4a6f 6273 272c 0a09 0909 0909 2020 arJobs',...... │ │ │ -000015e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -000015f0: 3e20 272d 7027 2c0a 0909 0909 0920 2020 > '-p',...... │ │ │ -00001600: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -00001610: 272d 2d70 6172 4a6f 6273 272c 0a09 0909 '--parJobs',.... │ │ │ -00001620: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ -00001630: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... │ │ │ -00001640: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ -00001650: 275c 415b 312d 395d 5c64 2a5c 5a27 292c '\A[1-9]\d*\Z'), │ │ │ -00001660: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001670: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri │ │ │ -00001680: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '- │ │ │ -00001690: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -000016a0: 2d70 7269 6e74 2729 2c0a 0909 0909 4f70 -print'),.....Op │ │ │ -000016b0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000016c0: 2720 3d3e 2027 6c61 7374 4f66 4561 6368 ' => 'lastOfEach │ │ │ -000016d0: 5365 7269 6573 272c 0a09 0909 0909 2020 Series',...... │ │ │ -000016e0: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -000016f0: 3e20 272d 2d6c 6173 744f 6645 6163 6853 > '--lastOfEachS │ │ │ -00001700: 6572 6965 7327 292c 0a09 0909 094f 7074 eries'),.....Opt │ │ │ -00001710: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00001720: 203d 3e20 2769 6e63 6c75 6465 5265 6e61 => 'includeRena │ │ │ -00001730: 6d65 6442 6163 6b75 7073 272c 0a09 0909 medBackups',.... │ │ │ -00001740: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00001750: 6e27 203d 3e20 272d 6927 2c0a 0909 0909 n' => '-i',..... │ │ │ -00001760: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00001770: 203d 3e0a 0909 0909 0920 2020 2027 2d2d =>...... '-- │ │ │ -00001780: 696e 636c 7564 6552 656e 616d 6564 4261 includeRenamedBa │ │ │ -00001790: 636b 7570 7327 292c 0a09 0909 094f 7074 ckups'),.....Opt │ │ │ -000017a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000017b0: 203d 3e20 2777 726f 6e67 4669 6c65 5461 => 'wrongFileTa │ │ │ -000017c0: 626c 6573 272c 0a09 0909 0909 2020 2020 bles',...... │ │ │ -000017d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000017e0: 272d 7727 2c0a 0909 0909 0920 2020 2027 '-w',...... ' │ │ │ -000017f0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -00001800: 2d77 726f 6e67 4669 6c65 5461 626c 6573 -wrongFileTables │ │ │ -00001810: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00001820: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ -00001830: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00001840: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF │ │ │ -00001850: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ -00001860: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001870: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '- │ │ │ -00001880: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001890: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... │ │ │ -000018a0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -000018b0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -000018c0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no │ │ │ -000018d0: 7420 5b69 6e74 6572 6163 7469 7665 5d27 t [interactive]' │ │ │ -000018e0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -000018f0: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p │ │ │ -00001900: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',.. │ │ │ -00001910: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00001920: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL │ │ │ -00001930: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',...... │ │ │ -00001940: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00001950: 3e20 275b 6c6f 6746 696c 655d 2729 2c0a > '[logFile]'),. │ │ │ -00001960: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00001970: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp │ │ │ -00001980: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',...... │ │ │ -00001990: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -000019a0: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT │ │ │ -000019b0: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio │ │ │ -000019c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000019d0: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',. │ │ │ -000019e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000019f0: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',.. │ │ │ -00001a00: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00001a10: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil │ │ │ -00001a20: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... │ │ │ -00001a30: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e │ │ │ -00001a40: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa │ │ │ -00001a50: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\A[e\ │ │ │ -00001a60: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\Z',. │ │ │ -00001a70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001a80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001a90: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00001aa0: 3e27 5b6c 6f67 4669 6c65 5d27 292c 0a09 >'[logFile]'),.. │ │ │ -00001ab0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001ac0: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO │ │ │ -00001ad0: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... │ │ │ -00001ae0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00001af0: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... │ │ │ -00001b00: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00001b10: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles │ │ │ -00001b20: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -00001b30: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',.. │ │ │ -00001b40: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ -00001b50: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\A\d+\Z', │ │ │ -00001b60: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00001b70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001b80: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o │ │ │ -00001b90: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>"[logF │ │ │ -00001ba0: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]"),. │ │ │ -00001bb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001bc0: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00001bd0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001be0: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',...... │ │ │ -00001bf0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00001c00: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs' │ │ │ -00001c10: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00001c20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001c30: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00001c40: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no' │ │ │ -00001c50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00001c60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001c70: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00001c80: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo │ │ │ -00001c90: 6746 696c 655d 2729 2c0a 2020 2020 2020 gFile]'),. │ │ │ -00001ca0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001cb0: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ -00001cc0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001cd0: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith', │ │ │ -00001ce0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00001cf0: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com │ │ │ -00001d00: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',..... │ │ │ -00001d10: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ -00001d20: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. │ │ │ -00001d30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001d40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001d50: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul │ │ │ -00001d60: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. │ │ │ -00001d70: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001d80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001d90: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl │ │ │ -00001da0: 795f 6966 2720 3d3e 275b 6c6f 6746 696c y_if' =>'[logFil │ │ │ -00001db0: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option │ │ │ -00001dc0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001dd0: 2027 746d 7064 6972 272c 0a09 0909 0909 'tmpdir',...... │ │ │ -00001de0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00001df0: 203d 3e20 272d 5427 2c0a 0909 0909 0920 => '-T',...... │ │ │ -00001e00: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00001e10: 3e20 272d 2d74 6d70 6469 7227 2c0a 0909 > '--tmpdir',... │ │ │ -00001e20: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -00001e30: 2720 3d3e 2024 746d 7064 6972 292c 0a0a ' => $tmpdir),.. │ │ │ -00001e40: 2320 6869 6464 656e 206f 7074 696f 6e73 # hidden options │ │ │ -00001e50: 0a23 2075 7365 6420 6279 2073 746f 7265 .# used by store │ │ │ -00001e60: 4261 636b 7570 4d6f 756e 742e 706c 0a09 BackupMount.pl.. │ │ │ -00001e70: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001e80: 2d6e 616d 6527 203d 3e20 2777 7269 7465 -name' => 'write │ │ │ -00001e90: 546f 4e61 6d65 6450 6970 6527 2c0a 0909 ToNamedPipe',... │ │ │ -00001ea0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001eb0: 6f6e 2720 3d3e 2027 2d2d 7772 6974 6554 on' => '--writeT │ │ │ -00001ec0: 6f4e 616d 6564 5069 7065 272c 0a09 0909 oNamedPipe',.... │ │ │ -00001ed0: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ -00001ee0: 3e20 2779 6573 272c 0a09 0909 0909 2020 > 'yes',...... │ │ │ -00001ef0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => ' │ │ │ -00001f00: 7965 7327 290a 0909 2020 2020 5d0a 2020 yes')... ]. │ │ │ -00001f10: 2020 293b 0a0a 0a24 4368 6563 6b50 6172 );...$CheckPar │ │ │ -00001f20: 2d3e 6368 6563 6b28 272d 6172 6776 2720 ->check('-argv' │ │ │ -00001f30: 3d3e 205c 4041 5247 562c 0a20 2020 2020 => \@ARGV,. │ │ │ -00001f40: 2020 2020 2020 2020 2020 2020 272d 6865 '-he │ │ │ -00001f50: 6c70 2720 3d3e 2024 4865 6c70 0a20 2020 lp' => $Help. │ │ │ -00001f60: 2020 2020 2020 2020 2020 2020 2020 293b ); │ │ │ -00001f70: 0a0a 2320 4175 7377 6572 7475 6e67 2064 ..# Auswertung d │ │ │ -00001f80: 6572 2050 6172 616d 6574 6572 0a6d 7920 er Parameter.my │ │ │ -00001f90: 2470 7269 6e74 203d 2024 4368 6563 6b50 $print = $CheckP │ │ │ -00001fa0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00001fb0: 7450 6172 2827 7072 696e 7427 293b 0a6d tPar('print');.m │ │ │ -00001fc0: 7920 2462 6163 6b75 7044 6972 203d 2024 y $backupDir = $ │ │ │ -00001fd0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001fe0: 5769 7468 5061 7228 2763 6865 636b 4261 WithPar('checkBa │ │ │ -00001ff0: 636b 7570 2729 3b0a 6d79 2024 7061 724a ckup');.my $parJ │ │ │ -00002000: 6f62 7320 3d20 2443 6865 636b 5061 722d obs = $CheckPar- │ │ │ -00002010: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00002020: 7061 724a 6f62 7327 293b 0a6d 7920 2476 parJobs');.my $v │ │ │ -00002030: 6572 626f 7365 203d 2024 4368 6563 6b50 erbose = $CheckP │ │ │ -00002040: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00002050: 7450 6172 2827 7665 7262 6f73 6527 293b tPar('verbose'); │ │ │ -00002060: 0a6d 7920 246c 6173 744f 6645 6163 6853 .my $lastOfEachS │ │ │ -00002070: 6572 6965 7320 3d20 2443 6865 636b 5061 eries = $CheckPa │ │ │ -00002080: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -00002090: 5061 7228 276c 6173 744f 6645 6163 6853 Par('lastOfEachS │ │ │ -000020a0: 6572 6965 7327 293b 0a6d 7920 2469 6e63 eries');.my $inc │ │ │ -000020b0: 6c75 6465 5265 6e61 6d65 6442 6163 6b75 ludeRenamedBacku │ │ │ -000020c0: 7073 203d 0a20 2020 2024 4368 6563 6b50 ps =. $CheckP │ │ │ -000020d0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -000020e0: 7450 6172 2827 696e 636c 7564 6552 656e tPar('includeRen │ │ │ -000020f0: 616d 6564 4261 636b 7570 7327 293b 0a6d amedBackups');.m │ │ │ -00002100: 7920 2477 726f 6e67 4669 6c65 5461 626c y $wrongFileTabl │ │ │ -00002110: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -00002120: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w │ │ │ -00002130: 726f 6e67 4669 6c65 5461 626c 6573 2729 rongFileTables') │ │ │ -00002140: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = │ │ │ -00002150: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00002160: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil │ │ │ -00002170: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog │ │ │ -00002180: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP │ │ │ -00002190: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -000021a0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd │ │ │ -000021b0: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT │ │ │ -000021c0: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check │ │ │ -000021d0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -000021e0: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT │ │ │ -000021f0: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime │ │ │ -00002200: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? ' │ │ │ -00002210: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my │ │ │ -00002220: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C │ │ │ -00002230: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00002240: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel │ │ │ -00002250: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl │ │ │ -00002260: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP │ │ │ -00002270: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00002280: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles' │ │ │ -00002290: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs │ │ │ -000022a0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000022b0: 4f70 7457 6974 6850 6172 2827 7361 7665 OptWithPar('save │ │ │ -000022c0: 4c6f 6773 2729 3b0a 2473 6176 654c 6f67 Logs');.$saveLog │ │ │ -000022d0: 7320 3d20 2473 6176 654c 6f67 7320 3f20 s = $saveLogs ? │ │ │ -000022e0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my │ │ │ -000022f0: 2024 636f 6d70 7265 7373 5769 7468 203d $compressWith = │ │ │ -00002300: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00002310: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr │ │ │ -00002320: 6573 7357 6974 6827 293b 0a24 746d 7064 essWith');.$tmpd │ │ │ -00002330: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar-> │ │ │ -00002340: 6765 744f 7074 5769 7468 5061 7228 2774 getOptWithPar('t │ │ │ -00002350: 6d70 6469 7227 293b 0a23 2068 6964 6465 mpdir');.# hidde │ │ │ -00002360: 6e20 6f70 7469 6f6e 730a 6d79 2024 7772 n options.my $wr │ │ │ -00002370: 6974 6554 6f4e 616d 6564 5069 7065 203d iteToNamedPipe = │ │ │ -00002380: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00002390: 7074 5769 7468 5061 7228 2777 7269 7465 ptWithPar('write │ │ │ -000023a0: 546f 4e61 6d65 6450 6970 6527 293b 0a0a ToNamedPipe');.. │ │ │ -000023b0: 0a75 6e6c 6573 7320 2824 7061 724a 6f62 .unless ($parJob │ │ │ -000023c0: 7329 0a7b 0a20 2020 206c 6f63 616c 202a s).{. local * │ │ │ -000023d0: 4649 4c45 3b0a 2020 2020 6966 2028 6f70 FILE;. if (op │ │ │ -000023e0: 656e 2846 494c 452c 2022 2f70 726f 632f en(FILE, "/proc/ │ │ │ -000023f0: 6370 7569 6e66 6f22 2929 0a20 2020 207b cpuinfo")). { │ │ │ -00002400: 0a09 6d79 2024 6c3b 0a09 2470 6172 4a6f ..my $l;..$parJo │ │ │ -00002410: 6273 203d 2031 3b0a 0977 6869 6c65 2028 bs = 1;..while ( │ │ │ -00002420: 246c 203d 203c 4649 4c45 3e29 0a09 7b0a $l = )..{. │ │ │ -00002430: 0920 2020 2024 7061 724a 6f62 732b 2b20 . $parJobs++ │ │ │ -00002440: 6966 2024 6c20 3d7e 202f 7072 6f63 6573 if $l =~ /proces │ │ │ -00002450: 736f 722f 3b0a 097d 0a09 636c 6f73 6528 sor/;..}..close( │ │ │ -00002460: 4649 4c45 293b 0a09 2470 6172 4a6f 6273 FILE);..$parJobs │ │ │ -00002470: 202a 3d20 333b 0a20 2020 207d 0a20 2020 *= 3;. }. │ │ │ -00002480: 2024 7061 724a 6f62 7320 3d20 3320 6966 $parJobs = 3 if │ │ │ -00002490: 2024 7061 724a 6f62 7320 3c20 333b 0a7d $parJobs < 3;.} │ │ │ -000024a0: 0a0a 6966 2028 2470 7269 6e74 290a 7b0a ..if ($print).{. │ │ │ -000024b0: 2020 2020 2443 6865 636b 5061 722d 3e70 $CheckPar->p │ │ │ -000024c0: 7269 6e74 2829 3b0a 2020 2020 6578 6974 rint();. exit │ │ │ -000024d0: 2030 3b0a 7d0a 0a0a 6d79 2028 4070 6172 0;.}...my (@par │ │ │ -000024e0: 2920 3d20 2829 3b0a 6966 2028 6465 6669 ) = ();.if (defi │ │ │ -000024f0: 6e65 6420 246c 6f67 4669 6c65 290a 7b0a ned $logFile).{. │ │ │ -00002500: 2020 2020 7075 7368 2040 7061 722c 2028 push @par, ( │ │ │ -00002510: 272d 6669 6c65 2720 3d3e 2024 6c6f 6746 '-file' => $logF │ │ │ -00002520: 696c 652c 0a09 0927 2d6d 756c 7469 7072 ile,...'-multipr │ │ │ -00002530: 696e 7427 203d 3e20 2779 6573 2729 3b0a int' => 'yes');. │ │ │ -00002540: 7d0a 656c 7365 0a7b 0a20 2020 2070 7573 }.else.{. pus │ │ │ -00002550: 6820 4070 6172 2c20 2827 2d66 696c 6564 h @par, ('-filed │ │ │ -00002560: 6573 6372 6970 746f 7227 2c20 2a53 5444 escriptor', *STD │ │ │ -00002570: 4f55 5429 3b0a 7d0a 0a6d 7920 2824 7072 OUT);.}..my ($pr │ │ │ -00002580: 4c6f 674b 696e 6429 203d 205b 2741 3a42 LogKind) = ['A:B │ │ │ -00002590: 4547 494e 272c 0a09 0920 2020 275a 3a45 EGIN',... 'Z:E │ │ │ -000025a0: 4e44 272c 0a09 0920 2020 2756 3a56 4552 ND',... 'V:VER │ │ │ -000025b0: 5349 4f4e 272c 0a09 0920 2020 2749 3a49 SION',... 'I:I │ │ │ -000025c0: 4e46 4f27 2c0a 0909 2020 2027 573a 5741 NFO',... 'W:WA │ │ │ -000025d0: 524e 494e 4727 2c0a 0909 2020 2027 453a RNING',... 'E: │ │ │ -000025e0: 4552 524f 5227 2c0a 0909 2020 2027 533a ERROR',... 'S: │ │ │ -000025f0: 5354 4154 4953 5449 4327 2c0a 0909 2020 STATISTIC',... │ │ │ -00002600: 2027 443a 4445 4255 4727 5d3b 0a6d 7920 'D:DEBUG'];.my │ │ │ -00002610: 2470 724c 6f67 3120 3d20 7072 696e 744c $prLog1 = printL │ │ │ -00002620: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' │ │ │ -00002630: 3d3e 2024 7072 4c6f 674b 696e 642c 0a09 => $prLogKind,.. │ │ │ -00002640: 0909 2020 2040 7061 722c 0a09 0909 2020 .. @par,.... │ │ │ -00002650: 2027 2d77 6974 6854 696d 6527 203d 3e20 '-withTime' => │ │ │ -00002660: 2477 6974 6854 696d 652c 0a09 0909 2020 $withTime,.... │ │ │ -00002670: 2027 2d6d 6178 4669 6c65 6c65 6e27 203d '-maxFilelen' = │ │ │ -00002680: 3e20 246d 6178 4669 6c65 6c65 6e2c 0a09 > $maxFilelen,.. │ │ │ -00002690: 0909 2020 2027 2d6e 6f4f 664f 6c64 4669 .. '-noOfOldFi │ │ │ -000026a0: 6c65 7327 203d 3e20 246e 6f4f 664f 6c64 les' => $noOfOld │ │ │ -000026b0: 4669 6c65 732c 0a09 0909 2020 2027 2d73 Files,.... '-s │ │ │ -000026c0: 6176 654c 6f67 7327 203d 3e20 2473 6176 aveLogs' => $sav │ │ │ -000026d0: 654c 6f67 732c 0a09 0909 2020 2027 2d63 eLogs,.... '-c │ │ │ -000026e0: 6f6d 7072 6573 7357 6974 6827 203d 3e20 ompressWith' => │ │ │ -000026f0: 2463 6f6d 7072 6573 7357 6974 682c 0a09 $compressWith,.. │ │ │ -00002700: 0909 2020 2027 2d74 6d70 6469 7227 203d .. '-tmpdir' = │ │ │ -00002710: 3e20 2474 6d70 6469 7229 3b0a 0a6d 7920 > $tmpdir);..my │ │ │ -00002720: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo │ │ │ -00002730: 674d 756c 7469 706c 652d 3e6e 6577 2827 gMultiple->new(' │ │ │ -00002740: 2d70 724c 6f67 7327 203d 3e20 5b24 7072 -prLogs' => [$pr │ │ │ -00002750: 4c6f 6731 5d29 3b0a 0a69 6620 2824 706c Log1]);..if ($pl │ │ │ -00002760: 7573 4c6f 6753 7464 6f75 7429 0a7b 0a20 usLogStdout).{. │ │ │ -00002770: 2020 206d 7920 2470 203d 2070 7269 6e74 my $p = print │ │ │ -00002780: 4c6f 672d 3e6e 6577 2827 2d6b 696e 6427 Log->new('-kind' │ │ │ -00002790: 203d 3e20 2470 724c 6f67 4b69 6e64 2c0a => $prLogKind,. │ │ │ -000027a0: 0909 0920 2027 2d66 696c 6564 6573 6372 ... '-filedescr │ │ │ -000027b0: 6970 746f 7227 2c20 2a53 5444 4f55 542c iptor', *STDOUT, │ │ │ -000027c0: 0a09 0909 2020 272d 746d 7064 6972 2720 .... '-tmpdir' │ │ │ -000027d0: 3d3e 2024 746d 7064 6972 293b 0a20 2020 => $tmpdir);. │ │ │ -000027e0: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p │ │ │ -000027f0: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]); │ │ │ -00002800: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN │ │ │ -00002810: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. │ │ │ -00002820: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo │ │ │ -00002830: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' = │ │ │ -00002840: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,... │ │ │ -00002850: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $ │ │ │ -00002860: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -00002870: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil │ │ │ -00002880: 656c 656e 2720 3d3e 2030 2c0a 0909 0920 elen' => 0,.... │ │ │ -00002890: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $ │ │ │ -000028a0: 746d 7064 6972 293b 0a20 2020 2024 7072 tmpdir);. $pr │ │ │ -000028b0: 4c6f 672d 3e61 6464 2827 2d70 724c 6f67 Log->add('-prLog │ │ │ -000028c0: 7327 203d 3e20 5b24 6e70 5d29 3b0a 7d0a s' => [$np]);.}. │ │ │ -000028d0: 0a24 7072 4c6f 672d 3e66 6f72 6b28 2472 .$prLog->fork($r │ │ │ -000028e0: 6571 293b 0a0a 0a24 7072 4c6f 672d 3e70 eq);...$prLog->p │ │ │ -000028f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002900: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ -00002910: 7227 203d 3e20 5b22 6d69 7373 696e 6720 r' => ["missing │ │ │ -00002920: 7061 7261 6d65 7465 7220 6261 636b 7570 parameter backup │ │ │ -00002930: 4469 725c 6e24 4865 6c70 225d 2c0a 0920 Dir\n$Help"],.. │ │ │ -00002940: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00002950: 3129 0a20 2020 2075 6e6c 6573 7320 6465 1). unless de │ │ │ -00002960: 6669 6e65 6420 2462 6163 6b75 7044 6972 fined $backupDir │ │ │ -00002970: 3b0a 2462 6163 6b75 7044 6972 203d 7e20 ;.$backupDir =~ │ │ │ -00002980: 732f 5c2f 2b5c 5a2f 2f3b 2020 2020 2020 s/\/+\Z//; │ │ │ -00002990: 2320 7265 6d6f 7665 202f 2061 7420 7468 # remove / at th │ │ │ -000029a0: 6520 656e 640a 2470 724c 6f67 2d3e 7072 e end.$prLog->pr │ │ │ -000029b0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000029c0: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str │ │ │ -000029d0: 2720 3d3e 205b 2262 6163 6b75 7044 6972 ' => ["backupDir │ │ │ -000029e0: 2064 6972 6563 746f 7279 203c 2462 6163 directory <$bac │ │ │ -000029f0: 6b75 7044 6972 3e20 646f 6573 206e 6f74 kupDir> does not │ │ │ -00002a00: 2065 7869 7374 2022 202e 0a09 2020 2020 exist " ... │ │ │ -00002a10: 2020 226f 7220 6973 206e 6f74 2061 6363 "or is not acc │ │ │ -00002a20: 6573 6962 6c65 225d 2c0a 0920 2020 2020 esible"],.. │ │ │ -00002a30: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). │ │ │ -00002a40: 2020 2075 6e6c 6573 7320 2d72 2024 6261 unless -r $ba │ │ │ -00002a50: 636b 7570 4469 723b 0a0a 2470 724c 6f67 ckupDir;..$prLog │ │ │ -00002a60: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00002a70: 3d3e 2027 4127 2c0a 0920 2020 2020 2027 => 'A',.. ' │ │ │ -00002a80: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => ["check │ │ │ -00002a90: 696e 6720 6261 636b 7570 7320 696e 203c ing backups in < │ │ │ -00002aa0: 2220 2e0a 0909 0920 3a3a 6162 736f 6c75 " ..... ::absolu │ │ │ -00002ab0: 7465 5061 7468 2824 6261 636b 7570 4469 tePath($backupDi │ │ │ -00002ac0: 7229 202e 2022 3e22 5d29 3b0a 2470 724c r) . ">"]);.$prL │ │ │ -00002ad0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002ae0: 2720 3d3e 2027 5627 2c0a 0920 2020 2020 ' => 'V',.. │ │ │ -00002af0: 2027 2d73 7472 2720 3d3e 205b 2273 746f '-str' => ["sto │ │ │ -00002b00: 7265 4261 636b 7570 4368 6563 6b42 6163 reBackupCheckBac │ │ │ -00002b10: 6b75 702e 706c 2c20 246d 6169 6e3a 3a53 kup.pl, $main::S │ │ │ -00002b20: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO │ │ │ -00002b30: 4e22 5d29 3b0a 0a6d 7920 2840 6469 7273 N"]);..my (@dirs │ │ │ -00002b40: 546f 4368 6563 6b29 203d 2026 3a3a 7365 ToCheck) = &::se │ │ │ -00002b50: 6c65 6374 4261 636b 7570 4469 7273 2824 lectBackupDirs($ │ │ │ -00002b60: 6261 636b 7570 4469 722c 2024 696e 636c backupDir, $incl │ │ │ -00002b70: 7564 6552 656e 616d 6564 4261 636b 7570 udeRenamedBackup │ │ │ -00002b80: 732c 0a09 0909 0909 2463 6865 636b 5375 s,......$checkSu │ │ │ -00002b90: 6d46 696c 652c 2024 7072 4c6f 672c 0a09 mFile, $prLog,.. │ │ │ -00002ba0: 0909 0909 246c 6173 744f 6645 6163 6853 ....$lastOfEachS │ │ │ -00002bb0: 6572 6965 7329 3b0a 0a28 406d 6169 6e3a eries);..(@main: │ │ │ -00002bc0: 3a63 6c65 616e 7570 2920 3d20 2824 7072 :cleanup) = ($pr │ │ │ -00002bd0: 4c6f 672c 2075 6e64 6566 293b 0a24 5349 Log, undef);.$SI │ │ │ -00002be0: 477b 494e 547d 203d 205c 2663 6c65 616e G{INT} = \&clean │ │ │ -00002bf0: 7570 3b0a 2453 4947 7b54 4552 4d7d 203d up;.$SIG{TERM} = │ │ │ -00002c00: 205c 2663 6c65 616e 7570 3b0a 0a0a 6d79 \&cleanup;...my │ │ │ -00002c10: 2024 7061 7246 6f72 6b20 3d20 7061 7261 $parFork = para │ │ │ -00002c20: 6c6c 656c 466f 726b 2d3e 6e65 7728 272d llelFork->new('- │ │ │ -00002c30: 6d61 7850 6172 616c 6c65 6c27 203d 3e20 maxParallel' => │ │ │ -00002c40: 2470 6172 4a6f 6273 2c0a 0909 0909 272d $parJobs,.....'- │ │ │ -00002c50: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -00002c60: 293b 0a6d 7920 2474 696e 7953 6368 6564 );.my $tinySched │ │ │ -00002c70: 203d 2074 696e 7957 6169 7453 6368 6564 = tinyWaitSched │ │ │ -00002c80: 756c 6572 2d3e 6e65 7728 272d 7072 4c6f uler->new('-prLo │ │ │ -00002c90: 6727 203d 3e20 2470 724c 6f67 293b 0a0a g' => $prLog);.. │ │ │ -00002ca0: 6d79 2024 7263 7366 203d 2075 6e64 6566 my $rcsf = undef │ │ │ -00002cb0: 3b20 2020 2020 2020 2320 706f 696e 7465 ; # pointe │ │ │ -00002cc0: 7220 746f 2072 6561 6443 6865 636b 5375 r to readCheckSu │ │ │ -00002cd0: 6d46 696c 6520 6f62 6a65 6374 0a6d 7920 mFile object.my │ │ │ -00002ce0: 2824 6d65 7461 2c20 2470 6f73 7466 6978 ($meta, $postfix │ │ │ -00002cf0: 2c20 2475 6e63 6f6d 7072 2c20 4075 6e63 , $uncompr, @unc │ │ │ -00002d00: 6f6d 7072 5061 722c 0a20 2020 2024 7370 omprPar,. $sp │ │ │ -00002d10: 6563 6961 6c54 7970 6541 7263 6869 7665 ecialTypeArchive │ │ │ -00002d20: 722c 2024 6172 6368 6976 6554 7970 6573 r, $archiveTypes │ │ │ -00002d30: 293b 0a6d 7920 2464 6972 546f 4368 6563 );.my $dirToChec │ │ │ -00002d40: 6b20 3d20 756e 6465 663b 0a6d 7920 246a k = undef;.my $j │ │ │ -00002d50: 6f62 546f 446f 203d 2031 3b0a 6d79 2024 obToDo = 1;.my $ │ │ │ -00002d60: 7061 7246 6f72 6b54 6f44 6f20 3d20 303b parForkToDo = 0; │ │ │ -00002d70: 0a23 2073 7461 7469 7374 6963 616c 2064 .# statistical d │ │ │ -00002d80: 6174 6120 7065 7220 6261 636b 7570 3a0a ata per backup:. │ │ │ -00002d90: 6d79 2024 6368 6563 6b65 6446 696c 6573 my $checkedFiles │ │ │ -00002da0: 203d 2030 3b0a 6d79 2024 6368 6563 6b65 = 0;.my $checke │ │ │ -00002db0: 6446 696c 6573 5369 7a65 203d 2030 3b20 dFilesSize = 0; │ │ │ -00002dc0: 2320 7573 6573 2073 697a 6520 6f66 2064 # uses size of d │ │ │ -00002dd0: 6174 6120 696e 2062 6163 6b75 7020 2865 ata in backup (e │ │ │ -00002de0: 672e 2063 6f6d 7072 6573 7365 6429 0a6d g. compressed).m │ │ │ -00002df0: 7920 246c 696e 6b65 6446 696c 6573 203d y $linkedFiles = │ │ │ -00002e00: 2030 3b0a 6d79 2024 6c69 6e6b 6564 4669 0;.my $linkedFi │ │ │ -00002e10: 6c65 7353 697a 6520 3d20 303b 2020 2320 lesSize = 0; # │ │ │ -00002e20: 7573 6573 2073 697a 6520 6f66 2064 6174 uses size of dat │ │ │ -00002e30: 6120 696e 2062 6163 6b75 7020 2865 672e a in backup (eg. │ │ │ -00002e40: 2063 6f6d 7072 6573 7365 6429 0a23 2073 compressed).# s │ │ │ -00002e50: 756d 7320 6f66 2073 7461 7469 7374 6963 ums of statistic │ │ │ -00002e60: 616c 2064 6174 613a 0a6d 7920 2463 6865 al data:.my $che │ │ │ -00002e70: 636b 6564 4669 6c65 7341 6c6c 203d 2030 ckedFilesAll = 0 │ │ │ -00002e80: 3b0a 6d79 2024 6368 6563 6b65 6446 696c ;.my $checkedFil │ │ │ -00002e90: 6573 5369 7a65 416c 6c20 3d20 303b 0a6d esSizeAll = 0;.m │ │ │ -00002ea0: 7920 246c 696e 6b65 6446 696c 6573 416c y $linkedFilesAl │ │ │ -00002eb0: 6c20 3d20 303b 0a6d 7920 246c 696e 6b65 l = 0;.my $linke │ │ │ -00002ec0: 6446 696c 6573 5369 7a65 416c 6c20 3d20 dFilesSizeAll = │ │ │ -00002ed0: 303b 0a0a 0a24 6d61 696e 3a3a 7766 7420 0;...$main::wft │ │ │ -00002ee0: 3d0a 2020 2020 7772 6974 6542 7567 7354 =. writeBugsT │ │ │ -00002ef0: 6f46 696c 6573 2d3e 6e65 7728 272d 6669 oFiles->new('-fi │ │ │ -00002f00: 6c65 5072 6566 6978 2720 3d3e 2024 7772 lePrefix' => $wr │ │ │ -00002f10: 6f6e 6746 696c 6554 6162 6c65 732c 0a09 ongFileTables,.. │ │ │ -00002f20: 0909 2020 272d 6261 636b 7570 4469 7227 .. '-backupDir' │ │ │ -00002f30: 203d 3e20 263a 3a61 6273 6f6c 7574 6550 => &::absoluteP │ │ │ -00002f40: 6174 6828 2462 6163 6b75 7044 6972 292c ath($backupDir), │ │ │ -00002f50: 0a09 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' = │ │ │ -00002f60: 3e20 2470 724c 6f67 293b 0a0a 2320 2575 > $prLog);..# %u │ │ │ -00002f70: 7365 6449 6e6f 6465 730a 2323 2069 6620 sedInodes.## if │ │ │ -00002f80: 696e 6f64 6520 7761 7320 6368 6563 6b65 inode was checke │ │ │ -00002f90: 642c 2074 6865 2069 6e6f 6465 2069 7320 d, the inode is │ │ │ -00002fa0: 7573 6564 2061 7320 6b65 792c 2076 616c used as key, val │ │ │ -00002fb0: 7565 2073 6574 2074 6f20 6d64 3573 756d ue set to md5sum │ │ │ -00002fc0: 0a23 2320 6966 206d 6435 7375 6d20 6368 .## if md5sum ch │ │ │ -00002fd0: 6563 6b20 6f66 2066 696c 6520 6861 7320 eck of file has │ │ │ -00002fe0: 6469 6666 6572 656e 7420 7661 6c75 6520 different value │ │ │ -00002ff0: 7468 6174 2073 746f 7265 6420 696e 202e that stored in . │ │ │ -00003000: 6d64 3543 6865 636b 5375 6d73 2c0a 2323 md5CheckSums,.## │ │ │ -00003010: 2069 6e6f 6465 2069 7320 6d61 726b 6564 inode is marked │ │ │ -00003020: 2061 7320 2763 6f72 7275 7074 2720 616e as 'corrupt' an │ │ │ -00003030: 6420 6465 6c65 7465 6420 6672 6f6d 2074 d deleted from t │ │ │ -00003040: 6861 7420 7461 626c 6520 2873 6f20 616c hat table (so al │ │ │ -00003050: 6c20 6166 6665 6374 6564 0a23 2320 6669 l affected.## fi │ │ │ -00003060: 6c65 7320 6172 6520 7265 706f 7274 6564 les are reported │ │ │ -00003070: 290a 2320 2566 696c 6573 4672 6f6d 4d44 ).# %filesFromMD │ │ │ -00003080: 3543 6865 636b 5375 6d46 696c 650a 2323 5CheckSumFile.## │ │ │ -00003090: 206b 6579 203d 2072 656c 6174 6976 6520 key = relative │ │ │ -000030a0: 6669 6c65 6e61 6d65 0a23 2320 7661 6c75 filename.## valu │ │ │ -000030b0: 6520 7072 652d 7365 7420 746f 2031 2c20 e pre-set to 1, │ │ │ -000030c0: 7468 656e 2063 6861 6e67 6564 2074 6f20 then changed to │ │ │ -000030d0: 3220 6966 2066 696c 6520 6973 206e 6f74 2 if file is not │ │ │ -000030e0: 2061 2062 6c6f 636b 6564 2066 696c 650a a blocked file. │ │ │ -000030f0: 2323 2073 7562 2063 6865 636b 416c 6c46 ## sub checkAllF │ │ │ -00003100: 696c 6573 2063 6865 636b 732c 2069 6620 iles checks, if │ │ │ -00003110: 616c 6c20 6669 6c65 7320 696e 2074 6865 all files in the │ │ │ -00003120: 2062 6163 6b75 7020 6172 6520 696e 2074 backup are in t │ │ │ -00003130: 6869 7320 6861 7368 0a23 2025 7573 6564 his hash.# %used │ │ │ -00003140: 426c 6f63 6b49 6e6f 6465 730a 2323 2073 BlockInodes.## s │ │ │ -00003150: 746f 7265 7320 696e 6f64 6573 2061 6c72 tores inodes alr │ │ │ -00003160: 6561 6479 2075 7365 6420 696e 2062 6c6f eady used in blo │ │ │ -00003170: 636b 730a 6d79 2028 2575 7365 6449 6e6f cks.my (%usedIno │ │ │ -00003180: 6465 732c 2025 6669 6c65 7346 726f 6d4d des, %filesFromM │ │ │ -00003190: 4435 4368 6563 6b53 756d 4669 6c65 2c20 D5CheckSumFile, │ │ │ -000031a0: 2470 7265 7644 6972 546f 4368 6563 6b2c $prevDirToCheck, │ │ │ -000031b0: 0a20 2020 2025 7573 6564 426c 6f63 6b49 . %usedBlockI │ │ │ -000031c0: 6e6f 6465 7329 3b0a 0a77 6869 6c65 2028 nodes);..while ( │ │ │ -000031d0: 6465 6669 6e65 6428 2472 6373 6629 206f defined($rcsf) o │ │ │ -000031e0: 7220 246a 6f62 546f 446f 203e 2030 206f r $jobToDo > 0 o │ │ │ -000031f0: 7220 2470 6172 466f 726b 546f 446f 203e r $parForkToDo > │ │ │ -00003200: 2030 290a 7b0a 2370 7269 6e74 2022 2d2d 0).{.#print "-- │ │ │ -00003210: 6f2d 2d30 2d2d 6a6f 6254 6f44 6f3d 246a o--0--jobToDo=$j │ │ │ -00003220: 6f62 546f 446f 2d70 6172 466f 726b 546f obToDo-parForkTo │ │ │ -00003230: 446f 3d24 7061 7246 6f72 6b54 6f44 6f2d Do=$parForkToDo- │ │ │ -00003240: 5c6e 223b 0a20 2020 2023 2323 2323 2323 \n";. ####### │ │ │ -00003250: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003260: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003270: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003280: 2323 2323 230a 2020 2020 6d79 2024 6f6c #####. my $ol │ │ │ -00003290: 6420 3d20 2470 6172 466f 726b 2d3e 6368 d = $parFork->ch │ │ │ -000032a0: 6563 6b4f 6e65 2829 3b0a 2020 2020 6966 eckOne();. if │ │ │ -000032b0: 2028 246f 6c64 290a 2020 2020 7b0a 096d ($old). {..m │ │ │ -000032c0: 7920 2824 746d 704e 2c20 2466 6e29 203d y ($tmpN, $fn) = │ │ │ -000032d0: 2040 7b24 6f6c 642d 3e67 6574 2827 2d77 @{$old->get('-w │ │ │ -000032e0: 6861 7427 203d 3e20 2769 6e66 6f27 297d hat' => 'info')} │ │ │ -000032f0: 3b0a 2370 7269 6e74 2022 2d2d 6f2d 2d31 ;.#print "--o--1 │ │ │ -00003300: 2d24 666e 2d5c 6e22 3b0a 096c 6f63 616c -$fn-\n";..local │ │ │ -00003310: 202a 494e 3b0a 0975 6e6c 6573 7320 2826 *IN;..unless (& │ │ │ -00003320: 3a3a 7761 6974 466f 7246 696c 6528 2474 ::waitForFile($t │ │ │ -00003330: 6d70 4e29 206f 720a 0909 6f70 656e 2849 mpN) or...open(I │ │ │ -00003340: 4e2c 2022 3c20 2474 6d70 4e22 2929 0a09 N, "< $tmpN")).. │ │ │ -00003350: 7b0a 0920 2020 2024 7072 4c6f 672d 3e70 {.. $prLog->p │ │ │ -00003360: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00003370: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str' │ │ │ -00003380: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => ["cannot ope │ │ │ -00003390: 6e20 7465 6d70 6f72 6172 7920 696e 666f n temporary info │ │ │ -000033a0: 726d 6174 696f 6e20 6669 6c65 2022 202e rmation file " . │ │ │ -000033b0: 0a09 0909 0920 2020 2020 223c 2474 6d70 ..... "<$tmp │ │ │ -000033c0: 4e3e 206f 6620 3c24 666e 3e22 5d29 3b0a N> of <$fn>"]);. │ │ │ -000033d0: 0920 2020 206e 6578 743b 0a09 7d0a 2370 . next;..}.#p │ │ │ -000033e0: 7269 6e74 2022 2d2d 6f2d 2d32 2d5c 6e22 rint "--o--2-\n" │ │ │ -000033f0: 3b0a 096d 7920 246c 3b0a 0977 6869 6c65 ;..my $l;..while │ │ │ -00003400: 2028 246c 203d 203c 494e 3e29 0a09 7b0a ($l = )..{. │ │ │ -00003410: 0920 2020 2063 686f 7020 246c 3b0a 2370 . chop $l;.#p │ │ │ -00003420: 7269 6e74 2022 2d2d 6f2d 2d33 2d2d 246c rint "--o--3--$l │ │ │ -00003430: 5c6e 223b 0a09 2020 2020 6d79 2028 2477 \n";.. my ($w │ │ │ -00003440: 6861 742c 2040 6c29 203d 2073 706c 6974 hat, @l) = split │ │ │ -00003450: 282f 5c73 2f2c 2024 6c2c 2032 293b 0a09 (/\s/, $l, 2);.. │ │ │ -00003460: 2020 2020 6966 2028 2477 6861 7420 6571 if ($what eq │ │ │ -00003470: 2027 636f 7272 7570 7427 290a 0920 2020 'corrupt').. │ │ │ -00003480: 207b 0a09 0964 656c 6574 6520 2475 7365 {...delete $use │ │ │ -00003490: 6449 6e6f 6465 737b 246c 5b30 5d7d 3b0a dInodes{$l[0]};. │ │ │ -000034a0: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -000034b0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -000034c0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -000034d0: 3d3e 0a09 0909 2020 2020 2020 5b22 6d64 =>.... ["md │ │ │ -000034e0: 3520 7375 6d20 6d69 736d 6174 6368 2066 5 sum mismatch f │ │ │ -000034f0: 6f72 203c 2466 6e3e 225d 293b 0a09 0924 or <$fn>"]);...$ │ │ │ -00003500: 6d61 696e 3a3a 7766 742d 3e70 7269 6e74 main::wft->print │ │ │ -00003510: 2822 2466 6e22 2c20 276d 6435 5772 6f6e ("$fn", 'md5Wron │ │ │ -00003520: 6727 293b 0a09 2020 2020 7d0a 0920 2020 g');.. }.. │ │ │ -00003530: 2065 6c73 6966 2028 2477 6861 7420 6571 elsif ($what eq │ │ │ -00003540: 2027 6572 726f 7273 2729 0a09 2020 2020 'errors').. │ │ │ -00003550: 7b0a 0909 2470 724c 6f67 2d3e 6164 6445 {...$prLog->addE │ │ │ -00003560: 6e63 6f75 6e74 6572 2827 2d6b 696e 6427 ncounter('-kind' │ │ │ -00003570: 203d 3e20 2745 272c 0a09 0909 0920 2020 => 'E',..... │ │ │ -00003580: 2020 272d 6164 6427 203d 3e20 246c 5b30 '-add' => $l[0 │ │ │ -00003590: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. │ │ │ -000035a0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq │ │ │ -000035b0: 2763 6865 636b 6564 4669 6c65 7327 290a 'checkedFiles'). │ │ │ -000035c0: 0920 2020 207b 0a09 0924 6368 6563 6b65 . {...$checke │ │ │ -000035d0: 6446 696c 6573 202b 3d20 246c 5b30 5d3b dFiles += $l[0]; │ │ │ -000035e0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -000035f0: 6966 2028 2477 6861 7420 6571 2027 6368 if ($what eq 'ch │ │ │ -00003600: 6563 6b65 6446 696c 6573 5369 7a65 2729 eckedFilesSize') │ │ │ -00003610: 0a09 2020 2020 7b0a 0909 2463 6865 636b .. {...$check │ │ │ -00003620: 6564 4669 6c65 7353 697a 6520 2b3d 2024 edFilesSize += $ │ │ │ -00003630: 6c5b 305d 3b0a 0920 2020 207d 0a09 2020 l[0];.. }.. │ │ │ -00003640: 2020 656c 7369 6620 2824 7768 6174 2065 elsif ($what e │ │ │ -00003650: 7120 276c 696e 6b65 6446 696c 6573 2729 q 'linkedFiles') │ │ │ -00003660: 0a09 2020 2020 7b0a 0909 246c 696e 6b65 .. {...$linke │ │ │ -00003670: 6446 696c 6573 202b 3d20 246c 5b30 5d3b dFiles += $l[0]; │ │ │ -00003680: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -00003690: 6966 2028 2477 6861 7420 6571 2027 6c69 if ($what eq 'li │ │ │ -000036a0: 6e6b 6564 4669 6c65 7353 697a 6527 290a nkedFilesSize'). │ │ │ -000036b0: 0920 2020 207b 0a09 0924 6c69 6e6b 6564 . {...$linked │ │ │ -000036c0: 4669 6c65 7353 697a 6520 2b3d 2024 6c5b FilesSize += $l[ │ │ │ -000036d0: 305d 3b0a 0920 2020 207d 0a09 2020 2020 0];.. }.. │ │ │ -000036e0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq │ │ │ -000036f0: 2763 616c 6365 6449 6e6f 6465 7327 290a 'calcedInodes'). │ │ │ -00003700: 0920 2020 207b 0a09 0977 6869 6c65 2028 . {...while ( │ │ │ -00003710: 246c 203d 203c 494e 3e29 0a09 097b 0a09 $l = )...{.. │ │ │ -00003720: 0920 2020 2063 686f 7020 246c 3b0a 0909 . chop $l;... │ │ │ -00003730: 2020 2020 6d79 2028 2469 6e6f 6465 2c20 my ($inode, │ │ │ -00003740: 246d 6435 2920 3d20 7370 6c69 7428 2f5c $md5) = split(/\ │ │ │ -00003750: 732f 2c20 246c 2c20 3229 3b0a 0909 2020 s/, $l, 2);... │ │ │ -00003760: 2020 2475 7365 6442 6c6f 636b 496e 6f64 $usedBlockInod │ │ │ -00003770: 6573 7b24 696e 6f64 657d 203d 2024 6d64 es{$inode} = $md │ │ │ -00003780: 353b 0a09 097d 0a09 096c 6173 743b 0a09 5;...}...last;.. │ │ │ -00003790: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else. │ │ │ -000037a0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog- │ │ │ -000037b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000037c0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... │ │ │ -000037d0: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... │ │ │ -000037e0: 2020 205b 2275 6e6b 6e6f 776e 2063 6f6d ["unknown com │ │ │ -000037f0: 6d61 6e64 203c 2477 6861 743e 2069 6e20 mand <$what> in │ │ │ -00003800: 696e 666f 726d 6174 696f 6e20 6669 6c65 information file │ │ │ -00003810: 2022 202e 0a09 0909 2020 2020 2020 2022 " ..... " │ │ │ -00003820: 3c24 746d 704e 3e20 6f66 2024 666e 225d <$tmpN> of $fn"] │ │ │ -00003830: 293b 0a09 2020 2020 7d0a 097d 0a0a 0963 );.. }..}...c │ │ │ -00003840: 6c6f 7365 2849 4e29 3b0a 0975 6e6c 696e lose(IN);..unlin │ │ │ -00003850: 6b20 2474 6d70 4e3b 0a20 2020 207d 0a23 k $tmpN;. }.# │ │ │ -00003860: 7072 696e 7420 222d 2d6f 2d2d 342d 5c6e print "--o--4-\n │ │ │ -00003870: 223b 0a0a 2020 2020 2323 2323 2323 2323 ";.. ######## │ │ │ -00003880: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003890: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000038a0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000038b0: 2323 2323 0a20 2020 2024 6a6f 6254 6f44 ####. $jobToD │ │ │ -000038c0: 6f20 3d20 4064 6972 7354 6f43 6865 636b o = @dirsToCheck │ │ │ -000038d0: 3b0a 2020 2020 6966 2028 2824 7263 7366 ;. if (($rcsf │ │ │ -000038e0: 206f 7220 246a 6f62 546f 446f 203e 2030 or $jobToDo > 0 │ │ │ -000038f0: 2920 616e 6420 2470 6172 466f 726b 2d3e ) and $parFork-> │ │ │ -00003900: 6765 744e 6f46 7265 6545 6e74 7269 6573 getNoFreeEntries │ │ │ -00003910: 2829 203e 2030 290a 2020 2020 7b0a 2370 () > 0). {.#p │ │ │ -00003920: 7269 6e74 2022 2d2d 2d2d 302d 2d2d 2d6f rint "----0----o │ │ │ -00003930: 7065 6e20 2464 6972 546f 4368 6563 6b2f pen $dirToCheck/ │ │ │ -00003940: 2463 6865 636b 5375 6d46 696c 655c 6e22 $checkSumFile\n" │ │ │ -00003950: 3b0a 2370 7269 6e74 2022 2d2d 2d6a 6f62 ;.#print "---job │ │ │ -00003960: 546f 446f 203d 2024 6a6f 6254 6f44 6f2c ToDo = $jobToDo, │ │ │ -00003970: 2066 7265 6545 6e74 7269 6573 3d22 2c20 freeEntries=", │ │ │ -00003980: 2470 6172 466f 726b 2d3e 6765 744e 6f46 $parFork->getNoF │ │ │ -00003990: 7265 6545 6e74 7269 6573 2829 2c20 222c reeEntries(), ", │ │ │ -000039a0: 2075 7365 6445 6e74 7269 6573 3d22 2c20 usedEntries=", │ │ │ -000039b0: 2470 6172 466f 726b 2d3e 6765 744e 6f55 $parFork->getNoU │ │ │ -000039c0: 7365 6445 6e74 7269 6573 2829 2c20 225c sedEntries(), "\ │ │ │ -000039d0: 6e22 3b0a 0a09 756e 6c65 7373 2028 2472 n";...unless ($r │ │ │ -000039e0: 6373 6629 0a09 7b0a 2370 7269 6e74 2022 csf)..{.#print " │ │ │ -000039f0: 2d2d 2d30 2e30 352d 2d2d 5c6e 223b 0a09 ---0.05---\n";.. │ │ │ -00003a00: 2020 2020 2320 5761 6974 2075 6e74 696c # Wait until │ │ │ -00003a10: 2061 6c6c 2066 696c 6573 206f 6620 7468 all files of th │ │ │ -00003a20: 6520 7072 6576 696f 7573 2061 6374 7561 e previous actua │ │ │ -00003a30: 6c20 6261 636b 7570 0a09 2020 2020 2320 l backup.. # │ │ │ -00003a40: 6172 6520 6361 6c63 756c 6174 6564 2e20 are calculated. │ │ │ -00003a50: 446f 2074 6869 7320 736f 200a 0920 2020 Do this so .. │ │ │ -00003a60: 2069 6620 2824 7061 7246 6f72 6b2d 3e67 if ($parFork->g │ │ │ -00003a70: 6574 4e6f 5573 6564 456e 7472 6965 7328 etNoUsedEntries( │ │ │ -00003a80: 2920 213d 2030 290a 0920 2020 207b 0a09 ) != 0).. {.. │ │ │ -00003a90: 0924 7469 6e79 5363 6865 642d 3e77 6169 .$tinySched->wai │ │ │ -00003aa0: 7428 293b 0a09 096e 6578 743b 0a09 2020 t();...next;.. │ │ │ -00003ab0: 2020 7d0a 0920 2020 2023 206f 6b2c 2061 }.. # ok, a │ │ │ -00003ac0: 6c6c 2066 696c 6573 206f 6620 6f6c 6420 ll files of old │ │ │ -00003ad0: 6261 636b 7570 2061 7265 2066 696e 6973 backup are finis │ │ │ -00003ae0: 6865 642c 0a09 2020 2020 2320 6e6f 7720 hed,.. # now │ │ │ -00003af0: 6265 6769 6e20 7769 7468 2074 6865 206e begin with the n │ │ │ -00003b00: 6578 7420 6f6e 650a 0920 2020 2069 6620 ext one.. if │ │ │ -00003b10: 2824 7665 7262 6f73 6529 0a09 2020 2020 ($verbose).. │ │ │ -00003b20: 7b0a 0909 2670 7269 6e74 5374 6174 2824 {...&printStat($ │ │ │ -00003b30: 7072 4c6f 672c 2027 272c 2024 6368 6563 prLog, '', $chec │ │ │ -00003b40: 6b65 6446 696c 6573 2c20 2463 6865 636b kedFiles, $check │ │ │ -00003b50: 6564 4669 6c65 7353 697a 652c 0a09 0909 edFilesSize,.... │ │ │ -00003b60: 2020 2024 6c69 6e6b 6564 4669 6c65 732c $linkedFiles, │ │ │ -00003b70: 2024 6c69 6e6b 6564 4669 6c65 7353 697a $linkedFilesSiz │ │ │ -00003b80: 6529 0a09 0920 2020 2069 6620 2463 6865 e)... if $che │ │ │ -00003b90: 636b 6564 4669 6c65 7353 697a 6520 2b20 ckedFilesSize + │ │ │ -00003ba0: 246c 696e 6b65 6446 696c 6573 5369 7a65 $linkedFilesSize │ │ │ -00003bb0: 203e 2030 3b0a 0909 2020 2020 2020 2020 > 0;... │ │ │ -00003bc0: 2320 6176 6f69 6420 6669 7273 7420 7072 # avoid first pr │ │ │ -00003bd0: 696e 746f 7574 2062 6566 6f72 6520 616e intout before an │ │ │ -00003be0: 7920 6368 6563 6b73 0a09 2020 2020 7d0a y checks.. }. │ │ │ -00003bf0: 0920 2020 2024 6368 6563 6b65 6446 696c . $checkedFil │ │ │ -00003c00: 6573 416c 6c20 2b3d 2024 6368 6563 6b65 esAll += $checke │ │ │ -00003c10: 6446 696c 6573 3b0a 0920 2020 2024 6368 dFiles;.. $ch │ │ │ -00003c20: 6563 6b65 6446 696c 6573 5369 7a65 416c eckedFilesSizeAl │ │ │ -00003c30: 6c20 2b3d 2024 6368 6563 6b65 6446 696c l += $checkedFil │ │ │ -00003c40: 6573 5369 7a65 3b0a 0920 2020 2024 6c69 esSize;.. $li │ │ │ -00003c50: 6e6b 6564 4669 6c65 7341 6c6c 202b 3d20 nkedFilesAll += │ │ │ -00003c60: 246c 696e 6b65 6446 696c 6573 3b0a 0920 $linkedFiles;.. │ │ │ -00003c70: 2020 2024 6c69 6e6b 6564 4669 6c65 7353 $linkedFilesS │ │ │ -00003c80: 697a 6541 6c6c 202b 3d20 246c 696e 6b65 izeAll += $linke │ │ │ -00003c90: 6446 696c 6573 5369 7a65 3b0a 0a09 2020 dFilesSize;... │ │ │ -00003ca0: 2020 2463 6865 636b 6564 4669 6c65 7320 $checkedFiles │ │ │ -00003cb0: 3d20 303b 0a09 2020 2020 2463 6865 636b = 0;.. $check │ │ │ -00003cc0: 6564 4669 6c65 7353 697a 6520 3d20 303b edFilesSize = 0; │ │ │ -00003cd0: 0a09 2020 2020 246c 696e 6b65 6446 696c .. $linkedFil │ │ │ -00003ce0: 6573 203d 2030 3b0a 0920 2020 2024 6c69 es = 0;.. $li │ │ │ -00003cf0: 6e6b 6564 4669 6c65 7353 697a 6520 3d20 nkedFilesSize = │ │ │ -00003d00: 303b 0a0a 2370 7269 6e74 2022 2d2d 2d30 0;..#print "---0 │ │ │ -00003d10: 2e31 2d2d 2d5c 6e22 3b0a 0920 2020 2024 .1---\n";.. $ │ │ │ -00003d20: 7072 6576 4469 7254 6f43 6865 636b 203d prevDirToCheck = │ │ │ -00003d30: 2024 6469 7254 6f43 6865 636b 3b0a 0920 $dirToCheck;.. │ │ │ -00003d40: 2020 2024 6469 7254 6f43 6865 636b 203d $dirToCheck = │ │ │ -00003d50: 2073 6869 6674 2040 6469 7273 546f 4368 shift @dirsToCh │ │ │ -00003d60: 6563 6b3b 0a09 2020 2020 6c61 7374 2075 eck;.. last u │ │ │ -00003d70: 6e6c 6573 7320 2464 6972 546f 4368 6563 nless $dirToChec │ │ │ -00003d80: 6b3b 0a0a 2370 7269 6e74 2022 2d2d 2d30 k;..#print "---0 │ │ │ -00003d90: 2e32 2d2d 2d5c 6e22 3b0a 0a09 2020 2020 .2---\n";... │ │ │ -00003da0: 2663 6865 636b 416c 6c46 696c 6573 2824 &checkAllFiles($ │ │ │ -00003db0: 7072 6576 4469 7254 6f43 6865 636b 2c20 prevDirToCheck, │ │ │ -00003dc0: 5c25 6669 6c65 7346 726f 6d4d 4435 4368 \%filesFromMD5Ch │ │ │ -00003dd0: 6563 6b53 756d 4669 6c65 2c0a 0909 0920 eckSumFile,.... │ │ │ -00003de0: 2020 2470 724c 6f67 290a 0909 6966 2025 $prLog)...if % │ │ │ -00003df0: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec │ │ │ -00003e00: 6b53 756d 4669 6c65 3b0a 0920 2020 2025 kSumFile;.. % │ │ │ -00003e10: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec │ │ │ -00003e20: 6b53 756d 4669 6c65 203d 2028 293b 0a0a kSumFile = ();.. │ │ │ -00003e30: 0920 2020 2024 7263 7366 203d 2072 6561 . $rcsf = rea │ │ │ -00003e40: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n │ │ │ -00003e50: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil │ │ │ -00003e60: 6527 203d 3e0a 0909 0909 0920 2022 2464 e' =>...... "$d │ │ │ -00003e70: 6972 546f 4368 6563 6b2f 2463 6865 636b irToCheck/$check │ │ │ -00003e80: 5375 6d46 696c 6522 2c0a 0909 0909 0920 SumFile",...... │ │ │ -00003e90: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr │ │ │ -00003ea0: 4c6f 672c 0a09 0909 0909 2020 272d 746d Log,...... '-tm │ │ │ -00003eb0: 7064 6972 2720 3d3e 2024 746d 7064 6972 pdir' => $tmpdir │ │ │ -00003ec0: 293b 0a09 2020 2020 2470 6f73 7466 6978 );.. $postfix │ │ │ -00003ed0: 203d 2024 7263 7366 2d3e 6765 7449 6e66 = $rcsf->getInf │ │ │ -00003ee0: 6f57 6974 6850 6172 2827 706f 7374 6669 oWithPar('postfi │ │ │ -00003ef0: 7827 293b 0a09 2020 2020 6d79 2024 7772 x');.. my $wr │ │ │ -00003f00: 6974 6545 7863 6c75 6465 4c6f 6720 3d20 iteExcludeLog = │ │ │ -00003f10: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi │ │ │ -00003f20: 7468 5061 7228 2777 7269 7465 4578 636c thPar('writeExcl │ │ │ -00003f30: 7564 654c 6f67 2729 3b0a 0920 2020 206d udeLog');.. m │ │ │ -00003f40: 7920 246c 6f67 496e 4261 636b 7570 4469 y $logInBackupDi │ │ │ -00003f50: 7220 3d20 2472 6373 662d 3e67 6574 496e r = $rcsf->getIn │ │ │ -00003f60: 666f 5769 7468 5061 7228 276c 6f67 496e foWithPar('logIn │ │ │ -00003f70: 4261 636b 7570 4469 7227 293b 0a09 2020 BackupDir');.. │ │ │ -00003f80: 2020 6d79 2024 636f 6d70 7265 7373 4c6f my $compressLo │ │ │ -00003f90: 6749 6e42 6163 6b75 7044 6972 203d 0a09 gInBackupDir =.. │ │ │ -00003fa0: 0924 7263 7366 2d3e 6765 7449 6e66 6f57 .$rcsf->getInfoW │ │ │ -00003fb0: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress │ │ │ -00003fc0: 4c6f 6749 6e42 6163 6b75 7044 6972 2729 LogInBackupDir') │ │ │ -00003fd0: 3b0a 0920 2020 206d 7920 246c 6f67 496e ;.. my $logIn │ │ │ -00003fe0: 4261 636b 7570 4469 7246 696c 654e 616d BackupDirFileNam │ │ │ -00003ff0: 6520 3d0a 0909 2472 6373 662d 3e67 6574 e =...$rcsf->get │ │ │ -00004000: 496e 666f 5769 7468 5061 7228 276c 6f67 InfoWithPar('log │ │ │ -00004010: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -00004020: 616d 6527 293b 0a09 2020 2020 246c 6f67 ame');.. $log │ │ │ -00004030: 496e 4261 636b 7570 4469 7246 696c 654e InBackupDirFileN │ │ │ -00004040: 616d 6520 2e3d 2027 2e62 7a32 270a 0909 ame .= '.bz2'... │ │ │ -00004050: 6966 2024 636f 6d70 7265 7373 4c6f 6749 if $compressLogI │ │ │ -00004060: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y │ │ │ -00004070: 6573 273b 0a09 2020 2020 2028 2475 6e63 es';.. ($unc │ │ │ -00004080: 6f6d 7072 2c20 4075 6e63 6f6d 7072 5061 ompr, @uncomprPa │ │ │ -00004090: 7229 203d 2040 7b24 7263 7366 2d3e 6765 r) = @{$rcsf->ge │ │ │ -000040a0: 7449 6e66 6f57 6974 6850 6172 2827 756e tInfoWithPar('un │ │ │ -000040b0: 636f 6d70 7265 7373 2729 7d3b 0a09 2020 compress')};.. │ │ │ -000040c0: 2020 2461 7263 6869 7665 5479 7065 7320 $archiveTypes │ │ │ -000040d0: 3d20 2472 6373 662d 3e67 6574 496e 666f = $rcsf->getInfo │ │ │ -000040e0: 5769 7468 5061 7228 2761 7263 6869 7665 WithPar('archive │ │ │ -000040f0: 5479 7065 7327 293b 0a09 2020 2020 2461 Types');.. $a │ │ │ -00004100: 7263 6869 7665 5479 7065 7320 3d20 2727 rchiveTypes = '' │ │ │ -00004110: 2075 6e6c 6573 7320 2461 7263 6869 7665 unless $archive │ │ │ -00004120: 5479 7065 733b 0a09 2020 2020 2473 7065 Types;.. $spe │ │ │ -00004130: 6369 616c 5479 7065 4172 6368 6976 6572 cialTypeArchiver │ │ │ -00004140: 203d 0a09 0924 7263 7366 2d3e 6765 7449 =...$rcsf->getI │ │ │ -00004150: 6e66 6f57 6974 6850 6172 2827 7370 6563 nfoWithPar('spec │ │ │ -00004160: 6961 6c54 7970 6541 7263 6869 7665 7227 ialTypeArchiver' │ │ │ -00004170: 293b 0a0a 0920 2020 2024 6669 6c65 7346 );... $filesF │ │ │ -00004180: 726f 6d4d 4435 4368 6563 6b53 756d 4669 romMD5CheckSumFi │ │ │ -00004190: 6c65 7b27 2e6d 6435 426c 6f63 6b43 6865 le{'.md5BlockChe │ │ │ -000041a0: 636b 5375 6d73 2e62 7a32 277d 203d 2031 ckSums.bz2'} = 1 │ │ │ -000041b0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro │ │ │ -000041c0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile │ │ │ -000041d0: 7b27 2e6d 6435 4368 6563 6b53 756d 732e {'.md5CheckSums. │ │ │ -000041e0: 627a 3227 7d20 3d20 313b 0a09 2020 2020 bz2'} = 1;.. │ │ │ -000041f0: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che │ │ │ -00004200: 636b 5375 6d46 696c 657b 272e 6d64 3543 ckSumFile{'.md5C │ │ │ -00004210: 6865 636b 5375 6d73 277d 203d 2031 3b0a heckSums'} = 1;. │ │ │ -00004220: 0920 2020 2024 6669 6c65 7346 726f 6d4d . $filesFromM │ │ │ -00004230: 4435 4368 6563 6b53 756d 4669 6c65 7b27 D5CheckSumFile{' │ │ │ -00004240: 2e6d 6435 4368 6563 6b53 756d 732e 4669 .md5CheckSums.Fi │ │ │ -00004250: 6e69 7368 6564 277d 203d 2031 3b0a 0920 nished'} = 1;.. │ │ │ -00004260: 2020 2024 6669 6c65 7346 726f 6d4d 4435 $filesFromMD5 │ │ │ -00004270: 4368 6563 6b53 756d 4669 6c65 7b27 2e6d CheckSumFile{'.m │ │ │ -00004280: 6435 4368 6563 6b53 756d 732e 696e 666f d5CheckSums.info │ │ │ -00004290: 277d 203d 2031 3b0a 0920 2020 2024 6669 '} = 1;.. $fi │ │ │ -000042a0: 6c65 7346 726f 6d4d 4435 4368 6563 6b53 lesFromMD5CheckS │ │ │ -000042b0: 756d 4669 6c65 7b27 2e6d 6435 4368 6563 umFile{'.md5Chec │ │ │ -000042c0: 6b53 756d 732e 6661 696c 277d 203d 2031 kSums.fail'} = 1 │ │ │ -000042d0: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro │ │ │ -000042e0: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile │ │ │ -000042f0: 7b27 2e73 746f 7265 4261 636b 7570 4c69 {'.storeBackupLi │ │ │ -00004300: 6e6b 7327 7d20 3d20 313b 0a09 2020 2020 nks'} = 1;.. │ │ │ -00004310: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che │ │ │ -00004320: 636b 5375 6d46 696c 657b 272e 7374 6f72 ckSumFile{'.stor │ │ │ -00004330: 6542 6163 6b75 702e 6e6f 7453 6176 6564 eBackup.notSaved │ │ │ -00004340: 2e62 7a32 277d 203d 2031 0a09 0969 6620 .bz2'} = 1...if │ │ │ -00004350: 2477 7269 7465 4578 636c 7564 654c 6f67 $writeExcludeLog │ │ │ -00004360: 2065 7120 2779 6573 273b 0a09 2020 2020 eq 'yes';.. │ │ │ -00004370: 6966 2028 246c 6f67 496e 4261 636b 7570 if ($logInBackup │ │ │ -00004380: 4469 7220 6571 2027 7965 7327 290a 0920 Dir eq 'yes').. │ │ │ -00004390: 2020 207b 0a09 0969 6620 2824 6c6f 6749 {...if ($logI │ │ │ -000043a0: 6e42 6163 6b75 7044 6972 4669 6c65 4e61 nBackupDirFileNa │ │ │ -000043b0: 6d65 290a 0909 7b0a 0909 2020 2020 2466 me)...{... $f │ │ │ -000043c0: 696c 6573 4672 6f6d 4d44 3543 6865 636b ilesFromMD5Check │ │ │ -000043d0: 5375 6d46 696c 657b 246c 6f67 496e 4261 SumFile{$logInBa │ │ │ -000043e0: 636b 7570 4469 7246 696c 654e 616d 657d ckupDirFileName} │ │ │ -000043f0: 203d 2031 3b0a 0909 7d0a 0909 656c 7365 = 1;...}...else │ │ │ -00004400: 0a09 097b 0a09 0920 2020 2024 6669 6c65 ...{... $file │ │ │ -00004410: 7346 726f 6d4d 4435 4368 6563 6b53 756d sFromMD5CheckSum │ │ │ -00004420: 4669 6c65 7b27 2e73 746f 7265 4261 636b File{'.storeBack │ │ │ -00004430: 7570 2e6c 6f67 277d 203d 2031 3b0a 0909 up.log'} = 1;... │ │ │ -00004440: 2020 2020 2466 696c 6573 4672 6f6d 4d44 $filesFromMD │ │ │ -00004450: 3543 6865 636b 5375 6d46 696c 657b 272e 5CheckSumFile{'. │ │ │ -00004460: 7374 6f72 6542 6163 6b75 702e 6e6f 7453 storeBackup.notS │ │ │ -00004470: 6176 6564 2e62 7a32 277d 203d 2031 3b0a aved.bz2'} = 1;. │ │ │ -00004480: 0a09 0920 2020 2024 6669 6c65 7346 726f ... $filesFro │ │ │ -00004490: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile │ │ │ -000044a0: 7b27 2e73 746f 7265 4261 636b 7570 2e6c {'.storeBackup.l │ │ │ -000044b0: 6f67 2e62 7a32 277d 203d 2031 0a09 0909 og.bz2'} = 1.... │ │ │ -000044c0: 6966 2024 636f 6d70 7265 7373 4c6f 6749 if $compressLogI │ │ │ -000044d0: 6e42 6163 6b75 7044 6972 2065 7120 2779 nBackupDir eq 'y │ │ │ -000044e0: 6573 273b 0a09 097d 0a09 2020 2020 7d0a es';...}.. }. │ │ │ -000044f0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00004500: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00004510: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' │ │ │ -00004520: 3d3e 205b 222d 2d20 6368 6563 6b69 6e67 => ["-- checking │ │ │ -00004530: 203c 2464 6972 546f 4368 6563 6b3e 202e <$dirToCheck> . │ │ │ -00004540: 2e2e 225d 293b 0a23 0909 6966 2024 7665 .."]);.#..if $ve │ │ │ -00004550: 7262 6f73 653b 0a09 7d0a 096d 7920 2824 rbose;..}..my ($ │ │ │ -00004560: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ -00004570: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ -00004580: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ -00004590: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime, │ │ │ -000045a0: 0a09 2020 2020 2473 697a 652c 2024 7569 .. $size, $ui │ │ │ -000045b0: 642c 2024 6769 642c 2024 6d6f 6465 2c20 d, $gid, $mode, │ │ │ -000045c0: 2466 293b 0a09 6966 2028 2828 246d 6435 $f);..if ((($md5 │ │ │ -000045d0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de │ │ │ -000045e0: 7649 6e6f 6465 2c20 2469 6e6f 6465 4261 vInode, $inodeBa │ │ │ -000045f0: 636b 7570 2c20 2463 7469 6d65 2c20 246d ckup, $ctime, $m │ │ │ -00004600: 7469 6d65 2c20 2461 7469 6d65 2c0a 0909 time, $atime,... │ │ │ -00004610: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g │ │ │ -00004620: 6964 2c20 246d 6f64 652c 2024 6629 203d id, $mode, $f) = │ │ │ -00004630: 2024 7263 7366 2d3e 6e65 7874 4c69 6e65 $rcsf->nextLine │ │ │ -00004640: 2829 2920 3e20 3029 0a09 7b0a 0920 2020 ()) > 0)..{.. │ │ │ -00004650: 2024 6620 2e3d 2024 706f 7374 6669 7820 $f .= $postfix │ │ │ -00004660: 6966 2024 636f 6d70 7220 6571 2027 6327 if $compr eq 'c' │ │ │ -00004670: 3b0a 0920 2020 2024 6669 6c65 7346 726f ;.. $filesFro │ │ │ -00004680: 6d4d 4435 4368 6563 6b53 756d 4669 6c65 mMD5CheckSumFile │ │ │ -00004690: 7b24 667d 203d 2031 3b0a 0920 2020 2069 {$f} = 1;.. i │ │ │ -000046a0: 6620 2824 6465 7649 6e6f 6465 203d 7e20 f ($devInode =~ │ │ │ -000046b0: 2f5c 4144 4556 4943 452f 2920 2020 2320 /\ADEVICE/) # │ │ │ -000046c0: 7374 6f72 6520 7061 7468 2074 6f20 7361 store path to sa │ │ │ -000046d0: 7665 6420 6465 7669 6365 0a09 2020 2020 ved device.. │ │ │ -000046e0: 7b0a 0909 666f 7265 6163 6820 6d79 2024 {...foreach my $ │ │ │ -000046f0: 7020 2826 6765 7452 656c 5061 7468 7328 p (&getRelPaths( │ │ │ -00004700: 2466 2929 0a09 097b 0a09 0920 2020 2024 $f))...{... $ │ │ │ -00004710: 6669 6c65 7346 726f 6d4d 4435 4368 6563 filesFromMD5Chec │ │ │ -00004720: 6b53 756d 4669 6c65 7b24 707d 203d 2031 kSumFile{$p} = 1 │ │ │ -00004730: 3b0a 0909 7d0a 0920 2020 207d 0a23 7072 ;...}.. }.#pr │ │ │ -00004740: 696e 7420 226e 6577 2066 696c 6520 3c24 int "new file <$ │ │ │ -00004750: 663e 5c6e 223b 0a23 7072 696e 7420 2220 f>\n";.#print " │ │ │ -00004760: 2020 2024 6469 7254 6f43 6865 636b 2f24 $dirToCheck/$ │ │ │ -00004770: 6368 6563 6b53 756d 4669 6c65 5c6e 223b checkSumFile\n"; │ │ │ -00004780: 0a09 2020 2020 6d79 2024 6669 6c65 6e61 .. my $filena │ │ │ -00004790: 6d65 203d 2022 2464 6972 546f 4368 6563 me = "$dirToChec │ │ │ -000047a0: 6b2f 2466 223b 0a09 2020 2020 6966 2028 k/$f";.. if ( │ │ │ -000047b0: 6c65 6e67 7468 2824 6d64 3573 756d 2920 length($md5sum) │ │ │ -000047c0: 3d3d 2033 3229 0a09 2020 2020 7b0a 2370 == 32).. {.#p │ │ │ -000047d0: 7269 6e74 2022 2d31 2d24 636f 6d70 722d rint "-1-$compr- │ │ │ -000047e0: 246d 6435 7375 6d2d 5c6e 223b 0a09 0969 $md5sum-\n";...i │ │ │ -000047f0: 6620 2824 636f 6d70 7220 6e65 2027 6227 f ($compr ne 'b' │ │ │ -00004800: 290a 0909 7b0a 0909 2020 2020 2466 696c )...{... $fil │ │ │ -00004810: 6573 4672 6f6d 4d44 3543 6865 636b 5375 esFromMD5CheckSu │ │ │ -00004820: 6d46 696c 657b 2466 7d20 3d20 323b 2023 mFile{$f} = 2; # │ │ │ -00004830: 206e 6f74 2061 2062 6c6f 636b 6564 2066 not a blocked f │ │ │ -00004840: 696c 650a 0909 2020 2020 6d79 2028 2469 ile... my ($i │ │ │ -00004850: 6e6f 6465 2c20 2473 697a 6542 6163 6b75 node, $sizeBacku │ │ │ -00004860: 7029 203d 2028 7374 6174 2824 6669 6c65 p) = (stat($file │ │ │ -00004870: 6e61 6d65 2929 5b31 2c37 5d3b 0a23 7072 name))[1,7];.#pr │ │ │ -00004880: 696e 7420 222d 322d 2069 6e6f 6465 203d int "-2- inode = │ │ │ -00004890: 2024 696e 6f64 652c 2024 665c 6e22 3b0a $inode, $f\n";. │ │ │ -000048a0: 0909 2020 2020 6966 2028 2469 6e6f 6465 .. if ($inode │ │ │ -000048b0: 290a 0909 2020 2020 7b0a 2370 7269 6e74 )... {.#print │ │ │ -000048c0: 2022 2d32 2e35 2d20 696e 6f64 6573 203d "-2.5- inodes = │ │ │ -000048d0: 2022 2c20 6a6f 696e 2827 2027 2c20 6b65 ", join(' ', ke │ │ │ -000048e0: 7973 2025 7573 6564 496e 6f64 6573 292c ys %usedInodes), │ │ │ -000048f0: 2022 5c6e 223b 0a09 0909 6966 2028 6578 "\n";....if (ex │ │ │ -00004900: 6973 7473 2024 7573 6564 496e 6f64 6573 ists $usedInodes │ │ │ -00004910: 7b24 696e 6f64 657d 290a 0909 097b 0a23 {$inode})....{.# │ │ │ -00004920: 7072 696e 7420 222d 332d 5c6e 223b 0a09 print "-3-\n";.. │ │ │ -00004930: 0909 2020 2020 2b2b 246c 696e 6b65 6446 .. ++$linkedF │ │ │ -00004940: 696c 6573 3b0a 0909 0920 2020 2024 6c69 iles;.... $li │ │ │ -00004950: 6e6b 6564 4669 6c65 7353 697a 6520 2b3d nkedFilesSize += │ │ │ -00004960: 2024 7369 7a65 4261 636b 7570 3b0a 2370 $sizeBackup;.#p │ │ │ -00004970: 7269 6e74 2022 2d33 2e31 2d22 2c20 2824 rint "-3.1-", ($ │ │ │ -00004980: 7573 6564 496e 6f64 6573 7b24 696e 6f64 usedInodes{$inod │ │ │ -00004990: 657d 203f 2024 7573 6564 496e 6f64 6573 e} ? $usedInodes │ │ │ -000049a0: 7b24 696e 6f64 657d 203a 2027 756e 6465 {$inode} : 'unde │ │ │ -000049b0: 6627 2920 2c20 225c 6e22 3b0a 0909 0920 f') , "\n";.... │ │ │ -000049c0: 2020 2069 6620 2824 7573 6564 496e 6f64 if ($usedInod │ │ │ -000049d0: 6573 7b24 696e 6f64 657d 206e 6520 246d es{$inode} ne $m │ │ │ -000049e0: 6435 7375 6d29 0a09 0909 2020 2020 7b0a d5sum).... {. │ │ │ -000049f0: 0909 0909 2470 724c 6f67 2d3e 7072 696e ....$prLog->prin │ │ │ -00004a00: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00004a10: 2c0a 0909 0909 0920 2020 2020 2027 2d73 ,...... '-s │ │ │ -00004a20: 7472 2720 3d3e 0a09 2020 2020 2020 2020 tr' =>.. │ │ │ -00004a30: 2020 2020 2020 5b22 6361 6c63 756c 6174 ["calculat │ │ │ -00004a40: 6564 206d 6435 2073 756d 206f 6620 3c24 ed md5 sum of <$ │ │ │ -00004a50: 6469 7254 6f43 6865 636b 2f24 663e 2069 dirToCheck/$f> i │ │ │ -00004a60: 7320 2220 2e0a 0909 2020 2020 2020 2022 s " .... " │ │ │ -00004a70: 6469 6666 6572 656e 7420 6672 6f6d 2074 different from t │ │ │ -00004a80: 6865 206f 6e65 2069 6e20 2220 2e0a 0909 he one in " .... │ │ │ -00004a90: 2020 2020 2020 2022 3c24 6469 7254 6f43 "<$dirToC │ │ │ -00004aa0: 6865 636b 2f2e 6d64 3542 6c6f 636b 4368 heck/.md5BlockCh │ │ │ -00004ab0: 6563 6b53 756d 733e 2028 3129 225d 293b eckSums> (1)"]); │ │ │ -00004ac0: 0a09 0909 0924 6d61 696e 3a3a 7766 742d .....$main::wft- │ │ │ -00004ad0: 3e70 7269 6e74 2822 2464 6972 546f 4368 >print("$dirToCh │ │ │ -00004ae0: 6563 6b2f 2466 222c 0a09 0909 0909 0920 eck/$f",....... │ │ │ -00004af0: 2027 6d64 3557 726f 6e67 2729 3b0a 0909 'md5Wrong');... │ │ │ -00004b00: 0920 2020 207d 0a09 0909 2020 2020 656c . }.... el │ │ │ -00004b10: 7365 0a09 0909 2020 2020 7b0a 0909 0909 se.... {..... │ │ │ -00004b20: 2475 7365 6449 6e6f 6465 737b 2469 6e6f $usedInodes{$ino │ │ │ -00004b30: 6465 7d20 3d20 246d 6435 7375 6d3b 0a09 de} = $md5sum;.. │ │ │ -00004b40: 0909 2020 2020 7d0a 2370 7269 6e74 2022 .. }.#print " │ │ │ -00004b50: 2d33 2e32 2d22 2c20 2475 7365 6449 6e6f -3.2-", $usedIno │ │ │ -00004b60: 6465 737b 2469 6e6f 6465 7d2c 2022 5c6e des{$inode}, "\n │ │ │ -00004b70: 223b 0a09 0909 2020 2020 6e65 7874 3b0a ";.... next;. │ │ │ -00004b80: 0909 097d 0a09 0909 656c 7365 0a09 0909 ...}....else.... │ │ │ -00004b90: 7b0a 2370 7269 6e74 2022 2d33 2e33 2d22 {.#print "-3.3-" │ │ │ -00004ba0: 2c20 2824 7573 6564 496e 6f64 6573 7b24 , ($usedInodes{$ │ │ │ -00004bb0: 696e 6f64 657d 203f 2024 7573 6564 496e inode} ? $usedIn │ │ │ -00004bc0: 6f64 6573 7b24 696e 6f64 657d 203a 2027 odes{$inode} : ' │ │ │ -00004bd0: 756e 6465 6627 2920 2c20 225c 6e22 3b0a undef') , "\n";. │ │ │ -00004be0: 0909 0920 2020 2024 7573 6564 496e 6f64 ... $usedInod │ │ │ -00004bf0: 6573 7b24 696e 6f64 657d 203d 2024 6d64 es{$inode} = $md │ │ │ -00004c00: 3573 756d 3b0a 2370 7269 6e74 2022 2d33 5sum;.#print "-3 │ │ │ -00004c10: 2e34 2d22 2c20 2475 7365 6449 6e6f 6465 .4-", $usedInode │ │ │ -00004c20: 737b 2469 6e6f 6465 7d2c 2022 5c6e 223b s{$inode}, "\n"; │ │ │ -00004c30: 0a09 0909 7d09 0920 2020 207d 0a09 097d ....}.. }...} │ │ │ -00004c40: 0a23 7072 696e 7420 222d 332e 352d 6669 .#print "-3.5-fi │ │ │ -00004c50: 6c65 7346 726f 6d4d 4435 4368 6563 6b53 lesFromMD5CheckS │ │ │ -00004c60: 756d 4669 6c65 5c7b 2466 5c7d 3d22 2c20 umFile\{$f\}=", │ │ │ -00004c70: 2466 696c 6573 4672 6f6d 4d44 3543 6865 $filesFromMD5Che │ │ │ -00004c80: 636b 5375 6d46 696c 657b 2466 7d2c 2022 ckSumFile{$f}, " │ │ │ -00004c90: 2d5c 6e22 3b0a 2370 7269 6e74 2022 5c74 -\n";.#print "\t │ │ │ -00004ca0: 6465 7649 6e6f 6465 3d3c 2464 6576 496e devInode=<$devIn │ │ │ -00004cb0: 6f64 653e 5c6e 223b 0a09 0975 6e6c 6573 ode>\n";...unles │ │ │ -00004cc0: 7320 282d 6520 2466 696c 656e 616d 6529 s (-e $filename) │ │ │ -00004cd0: 0a09 097b 0a09 0920 2020 2024 7072 4c6f ...{... $prLo │ │ │ -00004ce0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00004cf0: 203d 3e20 2745 272c 0a09 0909 0920 2027 => 'E',..... ' │ │ │ -00004d00: 2d73 7472 2720 3d3e 205b 2266 696c 6520 -str' => ["file │ │ │ -00004d10: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m │ │ │ -00004d20: 6973 7369 6e67 225d 293b 0a09 0920 2020 issing"]);... │ │ │ -00004d30: 2024 6d61 696e 3a3a 7766 742d 3e70 7269 $main::wft->pri │ │ │ -00004d40: 6e74 2824 6669 6c65 6e61 6d65 2c20 2766 nt($filename, 'f │ │ │ -00004d50: 696c 654d 6973 7369 6e67 2729 3b0a 2370 ileMissing');.#p │ │ │ -00004d60: 7269 6e74 2022 2d34 2d5c 6e22 3b0a 0909 rint "-4-\n";... │ │ │ -00004d70: 2020 2020 6e65 7874 3b0a 0909 7d0a 0909 next;...}... │ │ │ -00004d80: 6966 2028 696e 6465 7828 2775 6362 272c if (index('ucb', │ │ │ -00004d90: 2024 636f 6d70 7229 203c 2030 290a 0909 $compr) < 0)... │ │ │ -00004da0: 7b0a 0909 2020 2020 2470 724c 6f67 2d3e {... $prLog-> │ │ │ -00004db0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00004dc0: 2027 4527 2c0a 0909 0909 2020 272d 7072 'E',..... '-pr │ │ │ -00004dd0: 696e 7427 203d 3e0a 0909 0909 2020 5b22 int' =>..... [" │ │ │ -00004de0: 756e 6b6e 6f77 6e20 7661 6c75 6520 636f unknown value co │ │ │ -00004df0: 6d70 7220 3d3c 2463 6f6d 7072 3e20 6174 mpr =<$compr> at │ │ │ -00004e00: 203c 2220 2e0a 0909 0909 2020 2022 2464 <" ...... "$d │ │ │ -00004e10: 6972 546f 4368 6563 6b2f 2463 6865 636b irToCheck/$check │ │ │ -00004e20: 5375 6d46 696c 653e 2c20 6669 6c65 6e61 SumFile>, filena │ │ │ -00004e30: 6d65 203d 203c 2466 3e22 5d29 3b0a 2370 me = <$f>"]);.#p │ │ │ -00004e40: 7269 6e74 2022 2d35 2d5c 6e22 3b0a 0909 rint "-5-\n";... │ │ │ -00004e50: 2020 2020 6e65 7874 3b0a 0909 7d0a 0a23 next;...}..# │ │ │ -00004e60: 7072 696e 7420 222d 362d 5c6e 223b 0a09 print "-6-\n";.. │ │ │ -00004e70: 096d 7920 2474 6d70 4e61 6d65 203d 2026 .my $tmpName = & │ │ │ -00004e80: 3a3a 756e 6971 4669 6c65 4e61 6d65 2822 ::uniqFileName(" │ │ │ -00004e90: 2474 6d70 6469 722f 7374 6f72 6542 6163 $tmpdir/storeBac │ │ │ -00004ea0: 6b75 702d 626c 6f63 6b2e 2229 3b0a 0909 kup-block.");... │ │ │ -00004eb0: 2470 6172 466f 726b 2d3e 6164 645f 6e6f $parFork->add_no │ │ │ -00004ec0: 626c 6f63 6b28 272d 6675 6e63 7469 6f6e block('-function │ │ │ -00004ed0: 2720 3d3e 205c 2663 6865 636b 4d44 352c ' => \&checkMD5, │ │ │ -00004ee0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun │ │ │ -00004ef0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... │ │ │ -00004f00: 2020 205b 2464 6972 546f 4368 6563 6b2c [$dirToCheck, │ │ │ -00004f10: 2024 6669 6c65 6e61 6d65 2c20 246d 6435 $filename, $md5 │ │ │ -00004f20: 7375 6d2c 2024 636f 6d70 722c 0a09 0909 sum, $compr,.... │ │ │ -00004f30: 0920 2020 2020 2020 2470 6f73 7466 6978 . $postfix │ │ │ -00004f40: 2c20 2475 6e63 6f6d 7072 2c20 5c40 756e , $uncompr, \@un │ │ │ -00004f50: 636f 6d70 7250 6172 2c0a 0909 0909 2020 comprPar,..... │ │ │ -00004f60: 2020 2020 205c 2575 7365 6442 6c6f 636b \%usedBlock │ │ │ -00004f70: 496e 6f64 6573 2c0a 0909 0909 2020 2020 Inodes,..... │ │ │ -00004f80: 2020 2031 302a 3130 3234 2a2a 322c 2024 10*1024**2, $ │ │ │ -00004f90: 746d 704e 616d 652c 2024 7072 4c6f 675d tmpName, $prLog] │ │ │ -00004fa0: 2c0a 0909 0909 2020 2020 2020 272d 696e ,..... '-in │ │ │ -00004fb0: 666f 2720 3d3e 205b 2474 6d70 4e61 6d65 fo' => [$tmpName │ │ │ -00004fc0: 2c20 2466 696c 656e 616d 655d 293b 0a09 , $filename]);.. │ │ │ -00004fd0: 2020 2020 7d0a 0920 2020 2065 6c73 6966 }.. elsif │ │ │ -00004fe0: 2028 246d 6435 7375 6d20 6571 2027 6469 ($md5sum eq 'di │ │ │ -00004ff0: 7227 290a 0920 2020 207b 0a09 0924 7072 r').. {...$pr │ │ │ -00005000: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00005010: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ -00005020: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00005030: 6469 7265 6374 6f72 7920 3c24 6669 6c65 directory <$file │ │ │ -00005040: 6e61 6d65 3e20 6973 206d 6973 7369 6e67 name> is missing │ │ │ -00005050: 225d 290a 0909 2020 2020 756e 6c65 7373 "])... unless │ │ │ -00005060: 202d 6520 2466 696c 656e 616d 653b 0a09 -e $filename;.. │ │ │ -00005070: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00005080: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00005090: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -000050a0: 3e20 5b22 3c24 6669 6c65 6e61 6d65 3e20 > ["<$filename> │ │ │ -000050b0: 6973 206e 6f74 2061 2064 6972 6563 746f is not a directo │ │ │ -000050c0: 7279 2122 5d29 0a09 0920 2020 2075 6e6c ry!"])... unl │ │ │ -000050d0: 6573 7320 2d64 2024 6669 6c65 6e61 6d65 ess -d $filename │ │ │ -000050e0: 3b0a 0920 2020 207d 0a09 2020 2020 656c ;.. }.. el │ │ │ -000050f0: 7369 6620 2824 6d64 3573 756d 2065 7120 sif ($md5sum eq │ │ │ -00005100: 2773 796d 6c69 6e6b 2729 0a09 2020 2020 'symlink').. │ │ │ -00005110: 7b0a 0909 2470 724c 6f67 2d3e 7072 696e {...$prLog->prin │ │ │ -00005120: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00005130: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -00005140: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [" │ │ │ -00005150: 3c24 6669 6c65 6e61 6d65 3e20 6973 206d <$filename> is m │ │ │ -00005160: 6973 7369 6e67 206f 7220 6e6f 7420 6120 issing or not a │ │ │ -00005170: 7379 6d6c 6e6b 2122 5d29 0a09 0920 2020 symlnk!"])... │ │ │ -00005180: 2075 6e6c 6573 7320 2d6c 2024 6669 6c65 unless -l $file │ │ │ -00005190: 6e61 6d65 3b0a 0920 2020 207d 0a09 2020 name;.. }.. │ │ │ -000051a0: 2020 656c 7369 6620 2824 6d64 3573 756d elsif ($md5sum │ │ │ -000051b0: 2065 7120 2770 6970 6527 290a 0920 2020 eq 'pipe').. │ │ │ -000051c0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ -000051d0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000051e0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -000051f0: 7227 203d 3e20 5b22 6e61 6d65 6420 7069 r' => ["named pi │ │ │ -00005200: 7065 203c 2466 696c 656e 616d 6520 6973 pe <$filename is │ │ │ -00005210: 206d 6973 7369 6e67 3e22 5d29 0a09 0920 missing>"])... │ │ │ -00005220: 2020 2075 6e6c 6573 7320 2d65 2024 6669 unless -e $fi │ │ │ -00005230: 6c65 6e61 6d65 3b0a 0909 756e 6c65 7373 lename;...unless │ │ │ -00005240: 2028 2473 7065 6369 616c 5479 7065 4172 ($specialTypeAr │ │ │ -00005250: 6368 6976 6572 2061 6e64 0a09 0920 2020 chiver and... │ │ │ -00005260: 2024 6172 6368 6976 6554 7970 6573 203d $archiveTypes = │ │ │ -00005270: 7e20 2f70 2f29 0a09 097b 0a09 0920 2020 ~ /p/)...{... │ │ │ -00005280: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -00005290: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000052a0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -000052b0: 223c 2466 696c 656e 616d 653e 2069 7320 "<$filename> is │ │ │ -000052c0: 6e6f 7420 6120 6e61 6d65 6420 7069 7065 not a named pipe │ │ │ -000052d0: 2122 5d29 0a09 0909 756e 6c65 7373 202d !"])....unless - │ │ │ -000052e0: 7020 2466 696c 656e 616d 653b 0a09 097d p $filename;...} │ │ │ -000052f0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -00005300: 6966 2028 246d 6435 7375 6d20 6571 2027 if ($md5sum eq ' │ │ │ -00005310: 736f 636b 6574 2729 0a09 2020 2020 7b0a socket').. {. │ │ │ -00005320: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00005330: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00005340: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00005350: 3d3e 205b 2273 6f63 6b65 7420 3c24 6669 => ["socket <$fi │ │ │ -00005360: 6c65 6e61 6d65 3e20 6973 206d 6973 7369 lename> is missi │ │ │ -00005370: 6e67 225d 290a 0909 2020 2020 756e 6c65 ng"])... unle │ │ │ -00005380: 7373 202d 6520 2466 696c 656e 616d 653b ss -e $filename; │ │ │ -00005390: 0a09 0975 6e6c 6573 7320 2824 7370 6563 ...unless ($spec │ │ │ -000053a0: 6961 6c54 7970 6541 7263 6869 7665 7220 ialTypeArchiver │ │ │ -000053b0: 616e 640a 0909 2020 2020 2461 7263 6869 and... $archi │ │ │ -000053c0: 7665 5479 7065 7320 3d7e 202f 532f 290a veTypes =~ /S/). │ │ │ -000053d0: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog │ │ │ -000053e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000053f0: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ -00005400: 2027 2d73 7472 2720 3d3e 205b 223c 2466 '-str' => ["<$f │ │ │ -00005410: 696c 656e 616d 653e 2069 7320 6e6f 7420 ilename> is not │ │ │ -00005420: 6120 736f 636b 6574 2122 5d29 0a09 0920 a socket!"])... │ │ │ -00005430: 2020 2075 6e6c 6573 7320 2d53 2024 6669 unless -S $fi │ │ │ -00005440: 6c65 6e61 6d65 3b0a 0909 7d0a 0920 2020 lename;...}.. │ │ │ -00005450: 207d 0a09 2020 2020 656c 7369 6620 2824 }.. elsif ($ │ │ │ -00005460: 6d64 3573 756d 2065 7120 2762 6c6f 636b md5sum eq 'block │ │ │ -00005470: 6465 7627 290a 0920 2020 207b 0a09 0924 dev').. {...$ │ │ │ -00005480: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00005490: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -000054a0: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -000054b0: 5b22 626c 6f63 6b20 6465 7669 6365 203c ["block device < │ │ │ -000054c0: 2466 696c 656e 616d 653e 2069 7320 6d69 $filename> is mi │ │ │ -000054d0: 7373 696e 6722 5d29 0a09 0920 2020 2075 ssing"])... u │ │ │ -000054e0: 6e6c 6573 7320 2d65 2024 6669 6c65 6e61 nless -e $filena │ │ │ -000054f0: 6d65 3b0a 0909 756e 6c65 7373 2028 2473 me;...unless ($s │ │ │ -00005500: 7065 6369 616c 5479 7065 4172 6368 6976 pecialTypeArchiv │ │ │ -00005510: 6572 2061 6e64 0a09 0920 2020 2024 6172 er and... $ar │ │ │ -00005520: 6368 6976 6554 7970 6573 203d 7e20 2f70 chiveTypes =~ /p │ │ │ -00005530: 2f29 0a09 097b 0a09 0920 2020 2024 7072 /)...{... $pr │ │ │ -00005540: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00005550: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -00005560: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ -00005570: 205b 223c 2466 696c 656e 616d 653e 2069 ["<$filename> i │ │ │ -00005580: 7320 6e6f 7420 6120 626c 6f63 6b20 6465 s not a block de │ │ │ -00005590: 7669 6365 2122 5d29 0a09 0909 756e 6c65 vice!"])....unle │ │ │ -000055a0: 7373 202d 6220 2466 696c 656e 616d 653b ss -b $filename; │ │ │ -000055b0: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. │ │ │ -000055c0: 2065 6c73 6966 2028 246d 6435 7375 6d20 elsif ($md5sum │ │ │ -000055d0: 6571 2027 6368 6172 6465 7627 290a 0920 eq 'chardev').. │ │ │ -000055e0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ -000055f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00005600: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -00005610: 7374 7227 203d 3e20 5b22 6368 6172 2064 str' => ["char d │ │ │ -00005620: 6576 6963 6520 3c24 6669 6c65 6e61 6d65 evice <$filename │ │ │ -00005630: 3e20 6973 206d 6973 7369 6e67 225d 290a > is missing"]). │ │ │ -00005640: 0909 2020 2020 756e 6c65 7373 202d 6520 .. unless -e │ │ │ -00005650: 2466 696c 656e 616d 653b 0a09 0975 6e6c $filename;...unl │ │ │ -00005660: 6573 7320 2824 7370 6563 6961 6c54 7970 ess ($specialTyp │ │ │ -00005670: 6541 7263 6869 7665 7220 616e 640a 0909 eArchiver and... │ │ │ -00005680: 2020 2020 2461 7263 6869 7665 5479 7065 $archiveType │ │ │ -00005690: 7320 3d7e 202f 702f 290a 0909 7b0a 0909 s =~ /p/)...{... │ │ │ -000056a0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -000056b0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -000056c0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' = │ │ │ -000056d0: 3e0a 0909 0909 2020 5b22 3c24 6669 6c65 >..... ["<$file │ │ │ -000056e0: 6e61 6d65 3e20 6973 206e 6f74 2061 2063 name> is not a c │ │ │ -000056f0: 6861 7220 6465 7669 6365 2122 5d29 0a09 har device!"]).. │ │ │ -00005700: 0909 756e 6c65 7373 202d 6320 2466 696c ..unless -c $fil │ │ │ -00005710: 656e 616d 653b 0a09 097d 0a09 2020 2020 ename;...}.. │ │ │ -00005720: 7d0a 0a23 7072 696e 7420 222d 3130 2d24 }..#print "-10-$ │ │ │ -00005730: 665c 6e22 3b0a 0920 2020 2024 7469 6e79 f\n";.. $tiny │ │ │ -00005740: 5363 6865 642d 3e72 6573 6574 2829 3b0a Sched->reset();. │ │ │ -00005750: 097d 0a09 656c 7365 0a09 7b0a 2370 7269 .}..else..{.#pri │ │ │ -00005760: 6e74 2022 2d31 312d 2072 6373 6620 3d20 nt "-11- rcsf = │ │ │ -00005770: 756e 6465 665c 6e22 3b0a 0920 2020 2024 undef\n";.. $ │ │ │ -00005780: 7263 7366 203d 2075 6e64 6566 3b0a 097d rcsf = undef;..} │ │ │ -00005790: 0a23 7072 696e 7420 222d 3130 2d5c 6e22 .#print "-10-\n" │ │ │ -000057a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 2323 ;. }.. ### │ │ │ -000057b0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000057c0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000057d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000057e0: 2323 2323 2323 2323 230a 2020 2020 2474 #########. $t │ │ │ -000057f0: 696e 7953 6368 6564 2d3e 7761 6974 2829 inySched->wait() │ │ │ -00005800: 3b0a 0a20 2020 2024 7061 7246 6f72 6b54 ;.. $parForkT │ │ │ -00005810: 6f44 6f20 3d20 2470 6172 466f 726b 2d3e oDo = $parFork-> │ │ │ -00005820: 6765 744e 6f55 7365 6445 6e74 7269 6573 getNoUsedEntries │ │ │ -00005830: 2829 3b0a 2370 7269 6e74 2022 3220 7061 ();.#print "2 pa │ │ │ -00005840: 7246 6f72 6b54 6f44 6f20 3d20 2470 6172 rForkToDo = $par │ │ │ -00005850: 466f 726b 546f 446f 5c6e 223b 0a7d 2020 ForkToDo\n";.} │ │ │ -00005860: 2020 2023 2065 6e64 206f 6620 676c 6f62 # end of glob │ │ │ -00005870: 616c 2077 6869 6c65 206c 6f6f 7020 6f76 al while loop ov │ │ │ -00005880: 6572 2061 6c6c 206a 6f62 730a 0a26 6368 er all jobs..&ch │ │ │ -00005890: 6563 6b41 6c6c 4669 6c65 7328 2464 6972 eckAllFiles($dir │ │ │ -000058a0: 546f 4368 6563 6b2c 205c 2566 696c 6573 ToCheck, \%files │ │ │ -000058b0: 4672 6f6d 4d44 3543 6865 636b 5375 6d46 FromMD5CheckSumF │ │ │ -000058c0: 696c 652c 0a09 2020 2020 2020 2024 7072 ile,.. $pr │ │ │ -000058d0: 4c6f 6729 0a20 2020 2069 6620 2566 696c Log). if %fil │ │ │ -000058e0: 6573 4672 6f6d 4d44 3543 6865 636b 5375 esFromMD5CheckSu │ │ │ -000058f0: 6d46 696c 653b 0a0a 0a69 6620 2824 7665 mFile;...if ($ve │ │ │ -00005900: 7262 6f73 6529 0a7b 0a20 2020 2026 7072 rbose).{. &pr │ │ │ -00005910: 696e 7453 7461 7428 2470 724c 6f67 2c20 intStat($prLog, │ │ │ -00005920: 2727 2c20 2463 6865 636b 6564 4669 6c65 '', $checkedFile │ │ │ -00005930: 732c 2024 6368 6563 6b65 6446 696c 6573 s, $checkedFiles │ │ │ -00005940: 5369 7a65 2c0a 0920 2020 2020 2020 246c Size,.. $l │ │ │ -00005950: 696e 6b65 6446 696c 6573 2c20 246c 696e inkedFiles, $lin │ │ │ -00005960: 6b65 6446 696c 6573 5369 7a65 293b 0a0a kedFilesSize);.. │ │ │ -00005970: 2020 2020 2463 6865 636b 6564 4669 6c65 $checkedFile │ │ │ -00005980: 7341 6c6c 202b 3d20 2463 6865 636b 6564 sAll += $checked │ │ │ -00005990: 4669 6c65 733b 0a20 2020 2024 6368 6563 Files;. $chec │ │ │ -000059a0: 6b65 6446 696c 6573 5369 7a65 416c 6c20 kedFilesSizeAll │ │ │ -000059b0: 2b3d 2024 6368 6563 6b65 6446 696c 6573 += $checkedFiles │ │ │ -000059c0: 5369 7a65 3b0a 2020 2020 246c 696e 6b65 Size;. $linke │ │ │ -000059d0: 6446 696c 6573 416c 6c20 2b3d 2024 6c69 dFilesAll += $li │ │ │ -000059e0: 6e6b 6564 4669 6c65 733b 0a20 2020 2024 nkedFiles;. $ │ │ │ -000059f0: 6c69 6e6b 6564 4669 6c65 7353 697a 6541 linkedFilesSizeA │ │ │ -00005a00: 6c6c 202b 3d20 246c 696e 6b65 6446 696c ll += $linkedFil │ │ │ -00005a10: 6573 5369 7a65 3b0a 2020 2020 2670 7269 esSize;. &pri │ │ │ -00005a20: 6e74 5374 6174 2824 7072 4c6f 672c 2027 ntStat($prLog, ' │ │ │ -00005a30: 6f76 6572 616c 6c27 2c20 2463 6865 636b overall', $check │ │ │ -00005a40: 6564 4669 6c65 7341 6c6c 2c20 2463 6865 edFilesAll, $che │ │ │ -00005a50: 636b 6564 4669 6c65 7353 697a 6541 6c6c ckedFilesSizeAll │ │ │ -00005a60: 2c0a 0920 2020 2020 2020 246c 696e 6b65 ,.. $linke │ │ │ -00005a70: 6446 696c 6573 416c 6c2c 2024 6c69 6e6b dFilesAll, $link │ │ │ -00005a80: 6564 4669 6c65 7353 697a 6541 6c6c 293b edFilesSizeAll); │ │ │ -00005a90: 0a7d 0a0a 6d79 2024 656e 6320 3d20 2470 .}..my $enc = $p │ │ │ -00005aa0: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere │ │ │ -00005ab0: 6428 272d 6b69 6e64 2720 3d3e 2027 5727 d('-kind' => 'W' │ │ │ -00005ac0: 293b 0a6d 7920 2453 203d 2024 656e 6320 );.my $S = $enc │ │ │ -00005ad0: 3e20 3120 3f20 2753 2720 3a20 2727 3b0a > 1 ? 'S' : '';. │ │ │ -00005ae0: 6966 2028 2465 6e63 290a 7b0a 2020 2020 if ($enc).{. │ │ │ -00005af0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00005b00: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ -00005b10: 2020 272d 7374 7227 203d 3e20 5b22 2d2d '-str' => ["-- │ │ │ -00005b20: 2024 656e 6320 5741 524e 494e 4724 5320 $enc WARNING$S │ │ │ -00005b30: 4f43 4355 5252 4544 2044 5552 494e 4720 OCCURRED DURING │ │ │ -00005b40: 5448 4520 4348 4543 4b21 202d 2d22 5d29 THE CHECK! --"]) │ │ │ -00005b50: 0a7d 0a65 6c73 650a 7b0a 2020 2020 2470 .}.else.{. $p │ │ │ -00005b60: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00005b70: 6e64 2720 3d3e 2027 4927 2c0a 0909 2020 nd' => 'I',... │ │ │ -00005b80: 272d 7374 7227 203d 3e20 5b22 2d2d 206e '-str' => ["-- n │ │ │ -00005b90: 6f20 5741 524e 494e 4753 204f 4343 5552 o WARNINGS OCCUR │ │ │ -00005ba0: 5245 4420 4455 5249 4e47 2054 4845 2043 RED DURING THE C │ │ │ -00005bb0: 4845 434b 2120 2d2d 225d 293b 0a7d 0a0a HECK! --"]);.}.. │ │ │ -00005bc0: 2465 6e63 203d 2024 7072 4c6f 672d 3e65 $enc = $prLog->e │ │ │ -00005bd0: 6e63 6f75 6e74 6572 6564 2827 2d6b 696e ncountered('-kin │ │ │ -00005be0: 6427 203d 3e20 2745 2729 3b0a 2453 203d d' => 'E');.$S = │ │ │ -00005bf0: 2024 656e 6320 3e20 3120 3f20 2753 2720 $enc > 1 ? 'S' │ │ │ -00005c00: 3a20 2727 3b0a 6966 2028 2465 6e63 290a : '';.if ($enc). │ │ │ -00005c10: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr │ │ │ -00005c20: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005c30: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' = │ │ │ -00005c40: 3e20 5b22 2d2d 2024 656e 6320 4552 524f > ["-- $enc ERRO │ │ │ -00005c50: 5224 5320 4f43 4355 5252 4544 2044 5552 R$S OCCURRED DUR │ │ │ -00005c60: 494e 4720 5448 4520 4348 4543 4b21 202d ING THE CHECK! - │ │ │ -00005c70: 2d22 5d29 3b0a 7d0a 656c 7365 0a7b 0a20 -"]);.}.else.{. │ │ │ -00005c80: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00005c90: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00005ca0: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00005cb0: 222d 2d20 6e6f 2045 5252 4f52 5320 4f43 "-- no ERRORS OC │ │ │ -00005cc0: 4355 5252 4544 2044 5552 494e 4720 5448 CURRED DURING TH │ │ │ -00005cd0: 4520 4348 4543 4b21 202d 2d22 5d29 3b0a E CHECK! --"]);. │ │ │ -00005ce0: 7d0a 0a0a 0a69 6620 2824 7072 4c6f 672d }....if ($prLog- │ │ │ -00005cf0: 3e65 6e63 6f75 6e74 6572 6564 2827 2d6b >encountered('-k │ │ │ -00005d00: 696e 6427 203d 3e20 2245 2229 290a 7b0a ind' => "E")).{. │ │ │ -00005d10: 2020 2020 6578 6974 2031 3b0a 7d0a 656c exit 1;.}.el │ │ │ -00005d20: 7365 0a7b 0a20 2020 2024 7072 4c6f 672d se.{. $prLog- │ │ │ -00005d30: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00005d40: 3e20 275a 272c 0a09 0920 2027 2d73 7472 > 'Z',... '-str │ │ │ -00005d50: 2720 3d3e 205b 2263 6865 636b 696e 6720 ' => ["checking │ │ │ -00005d60: 6261 636b 7570 7320 696e 203c 2220 2e0a backups in <" .. │ │ │ -00005d70: 0909 0920 2020 2020 3a3a 6162 736f 6c75 ... ::absolu │ │ │ -00005d80: 7465 5061 7468 2824 6261 636b 7570 4469 tePath($backupDi │ │ │ -00005d90: 7229 202e 2022 3e22 5d29 3b0a 2020 2020 r) . ">"]);. │ │ │ -00005da0: 6578 6974 2030 3b0a 7d0a 0a0a 2323 2323 exit 0;.}...#### │ │ │ -00005db0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005dc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005dd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005de0: 2323 2323 2323 2323 0a23 2063 6865 636b ########.# check │ │ │ -00005df0: 7320 6361 6c63 756c 6174 6564 206d 6435 s calculated md5 │ │ │ -00005e00: 2073 756d 2061 6761 696e 7374 2073 746f sum against sto │ │ │ -00005e10: 7265 6420 6f6e 6528 7329 0a23 2074 6869 red one(s).# thi │ │ │ -00005e20: 7320 6675 6e63 7469 6f6e 2069 7320 6361 s function is ca │ │ │ -00005e30: 6c6c 6564 2066 6f72 2061 6c6c 2066 696c lled for all fil │ │ │ -00005e40: 6573 2028 626c 6f63 6b65 6420 616e 6420 es (blocked and │ │ │ -00005e50: 6e6f 6e2d 626c 6f63 6b65 640a 7375 6220 non-blocked.sub │ │ │ -00005e60: 6368 6563 6b4d 4435 0a7b 0a20 2020 206d checkMD5.{. m │ │ │ -00005e70: 7920 2824 6469 7254 6f43 6865 636b 2c20 y ($dirToCheck, │ │ │ -00005e80: 2466 2c20 246d 6435 7375 6d2c 2024 636f $f, $md5sum, $co │ │ │ -00005e90: 6d70 722c 2024 706f 7374 6669 782c 2024 mpr, $postfix, $ │ │ │ -00005ea0: 756e 636f 6d70 722c 2024 756e 636f 6d70 uncompr, $uncomp │ │ │ -00005eb0: 7250 6172 2c0a 0924 7573 6564 426c 6f63 rPar,..$usedBloc │ │ │ -00005ec0: 6b49 6e6f 6465 732c 2024 626c 6f63 6b53 kInodes, $blockS │ │ │ -00005ed0: 697a 652c 2024 746d 704e 616d 652c 2024 ize, $tmpName, $ │ │ │ -00005ee0: 7072 4c6f 6729 203d 2040 5f3b 0a0a 2020 prLog) = @_;.. │ │ │ -00005ef0: 2020 6d79 2028 2569 6e6f 6465 326d 6435 my (%inode2md5 │ │ │ -00005f00: 293b 2020 2023 2073 746f 7265 2063 616c ); # store cal │ │ │ -00005f10: 6375 6c61 7465 6420 6d64 3520 7375 6d20 culated md5 sum │ │ │ -00005f20: 6f66 206e 6577 2069 6e6f 6465 730a 0a20 of new inodes.. │ │ │ -00005f30: 2020 2023 2073 7461 7469 7374 6963 616c # statistical │ │ │ -00005f40: 2064 6174 6120 7065 7220 6368 6563 6b4d data per checkM │ │ │ -00005f50: 4435 0a20 2020 206d 7920 2463 6865 636b D5. my $check │ │ │ -00005f60: 6564 4669 6c65 7320 3d20 303b 0a20 2020 edFiles = 0;. │ │ │ -00005f70: 206d 7920 2463 6865 636b 6564 4669 6c65 my $checkedFile │ │ │ -00005f80: 7353 697a 6520 3d20 303b 0a20 2020 206d sSize = 0;. m │ │ │ -00005f90: 7920 246c 696e 6b65 6446 696c 6573 203d y $linkedFiles = │ │ │ -00005fa0: 2030 3b0a 2020 2020 6d79 2024 6c69 6e6b 0;. my $link │ │ │ -00005fb0: 6564 4669 6c65 7353 697a 6520 3d20 303b edFilesSize = 0; │ │ │ -00005fc0: 0a0a 2020 2020 6c6f 6361 6c20 2a4f 5554 .. local *OUT │ │ │ -00005fd0: 3b0a 2020 2020 6f70 656e 284f 5554 2c20 ;. open(OUT, │ │ │ -00005fe0: 223e 2024 746d 704e 616d 6522 2920 6f72 "> $tmpName") or │ │ │ -00005ff0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00006000: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00006010: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00006020: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > ["cannot open │ │ │ -00006030: 3c24 746d 704e 616d 653e 225d 2c0a 0909 <$tmpName>"],... │ │ │ -00006040: 2020 2020 2020 272d 6164 6427 203d 3e20 '-add' => │ │ │ -00006050: 5b5f 5f46 494c 455f 5f2c 205f 5f4c 494e [__FILE__, __LIN │ │ │ -00006060: 455f 5f5d 2c0a 0909 2020 2020 2020 272d E__],... '- │ │ │ -00006070: 6578 6974 2720 3d3e 2031 293b 0a0a 2370 exit' => 1);..#p │ │ │ -00006080: 7269 6e74 2022 6368 6563 6b4d 4435 202d rint "checkMD5 - │ │ │ -00006090: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2466 2d2d ------------$f-- │ │ │ -000060a0: 2d2d 2d2d 2d2d 2d2d 2c20 246d 6435 7375 --------, $md5su │ │ │ -000060b0: 6d2c 2022 2c20 6c65 6e67 7468 2824 6d64 m, ", length($md │ │ │ -000060c0: 3573 756d 292c 2022 2c20 636f 6d70 723d 5sum), ", compr= │ │ │ -000060d0: 2463 6f6d 7072 5c6e 223b 0a20 2020 206d $compr\n";. m │ │ │ -000060e0: 7920 246e 7245 7272 6f72 7320 3d20 303b y $nrErrors = 0; │ │ │ -000060f0: 0a20 2020 2069 6620 286c 656e 6774 6828 . if (length( │ │ │ -00006100: 246d 6435 7375 6d29 203d 3d20 3332 290a $md5sum) == 32). │ │ │ -00006110: 2020 2020 7b0a 0969 6620 2824 636f 6d70 {..if ($comp │ │ │ -00006120: 7220 6571 2027 7527 206f 7220 2463 6f6d r eq 'u' or $com │ │ │ -00006130: 7072 2065 7120 2763 2729 0a09 7b0a 0920 pr eq 'c')..{.. │ │ │ -00006140: 2020 206d 7920 246d 6435 416c 6c20 3d20 my $md5All = │ │ │ -00006150: 4469 6765 7374 3a3a 4d44 352d 3e6e 6577 Digest::MD5->new │ │ │ -00006160: 2829 3b0a 0920 2020 206c 6f63 616c 202a ();.. local * │ │ │ -00006170: 4649 4c45 3b0a 0920 2020 206d 7920 2466 FILE;.. my $f │ │ │ -00006180: 696c 6549 6e20 3d20 756e 6465 663b 0a09 ileIn = undef;.. │ │ │ -00006190: 2020 2020 756e 6c65 7373 2028 2d65 2024 unless (-e $ │ │ │ -000061a0: 6629 0a09 2020 2020 7b0a 0909 2470 724c f).. {...$prL │ │ │ -000061b0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000061c0: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ -000061d0: 2020 2027 2d73 7472 2720 3d3e 205b 2266 '-str' => ["f │ │ │ -000061e0: 696c 6520 3c24 663e 2069 7320 6d69 7373 ile <$f> is miss │ │ │ -000061f0: 696e 6722 5d29 3b0a 0909 246d 6169 6e3a ing"]);...$main: │ │ │ -00006200: 3a77 6674 2d3e 7072 696e 7428 2466 2c20 :wft->print($f, │ │ │ -00006210: 2766 696c 654d 6973 7369 6e67 2729 3b0a 'fileMissing');. │ │ │ -00006220: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;.. │ │ │ -00006230: 0970 7269 6e74 204f 5554 2022 6572 726f .print OUT "erro │ │ │ -00006240: 7273 2024 6e72 4572 726f 7273 5c6e 223b rs $nrErrors\n"; │ │ │ -00006250: 0a09 0972 6574 7572 6e20 313b 0a09 2020 ...return 1;.. │ │ │ -00006260: 2020 7d0a 0920 2020 2069 6620 2824 636f }.. if ($co │ │ │ -00006270: 6d70 7220 6571 2027 7527 290a 0920 2020 mpr eq 'u').. │ │ │ -00006280: 207b 0a09 0975 6e6c 6573 7320 2873 7973 {...unless (sys │ │ │ -00006290: 6f70 656e 2846 494c 452c 2024 662c 204f open(FILE, $f, O │ │ │ -000062a0: 5f52 444f 4e4c 5929 290a 0909 7b0a 0909 _RDONLY))...{... │ │ │ -000062b0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -000062c0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -000062d0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' = │ │ │ -000062e0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > ["cannot open │ │ │ -000062f0: 3c24 663e 225d 2c0a 0909 0909 2020 272d <$f>"],..... '- │ │ │ -00006300: 6164 6427 203d 3e20 5b5f 5f46 494c 455f add' => [__FILE_ │ │ │ -00006310: 5f2c 205f 5f4c 494e 455f 5f5d 293b 0a09 _, __LINE__]);.. │ │ │ -00006320: 0920 2020 202b 2b24 6e72 4572 726f 7273 . ++$nrErrors │ │ │ -00006330: 3b0a 0909 2020 2020 7072 696e 7420 4f55 ;... print OU │ │ │ -00006340: 5420 2265 7272 6f72 7320 246e 7245 7272 T "errors $nrErr │ │ │ -00006350: 6f72 735c 6e22 3b0a 0909 2020 2020 7265 ors\n";... re │ │ │ -00006360: 7475 726e 2031 3b0a 0909 7d0a 0920 2020 turn 1;...}.. │ │ │ -00006370: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00006380: 2020 7b0a 0909 2466 696c 6549 6e20 3d0a {...$fileIn =. │ │ │ -00006390: 0909 2020 2020 7069 7065 4672 6f6d 466f .. pipeFromFo │ │ │ -000063a0: 726b 2d3e 6e65 7728 272d 6578 6563 2720 rk->new('-exec' │ │ │ -000063b0: 3d3e 2024 756e 636f 6d70 722c 0a09 0909 => $uncompr,.... │ │ │ -000063c0: 0920 2020 2020 2027 2d70 6172 616d 2720 . '-param' │ │ │ -000063d0: 3d3e 205c 4075 6e63 6f6d 7072 5061 722c => \@uncomprPar, │ │ │ -000063e0: 0a09 0909 0920 2020 2020 2027 2d73 7464 ..... '-std │ │ │ -000063f0: 696e 2720 3d3e 2024 662c 0a09 0909 0920 in' => $f,..... │ │ │ -00006400: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom │ │ │ -00006410: 2720 3d3e 2022 2474 6d70 6469 722f 7374 ' => "$tmpdir/st │ │ │ -00006420: 6275 5069 7065 4672 6f6d 3130 2d22 2c0a buPipeFrom10-",. │ │ │ -00006430: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ -00006440: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ -00006450: 2020 2020 7d0a 0a09 2020 2020 6d79 2028 }... my ( │ │ │ -00006460: 2469 6e6f 6465 2c20 2473 697a 6529 203d $inode, $size) = │ │ │ -00006470: 2028 7374 6174 2824 6629 295b 312c 375d (stat($f))[1,7] │ │ │ -00006480: 3b0a 0920 2020 202b 2b24 6368 6563 6b65 ;.. ++$checke │ │ │ -00006490: 6446 696c 6573 3b0a 0920 2020 2024 6368 dFiles;.. $ch │ │ │ -000064a0: 6563 6b65 6446 696c 6573 5369 7a65 202b eckedFilesSize + │ │ │ -000064b0: 3d20 2473 697a 653b 0a09 2020 2020 6d79 = $size;.. my │ │ │ -000064c0: 2024 6275 6666 6572 3b0a 0920 2020 2077 $buffer;.. w │ │ │ -000064d0: 6869 6c65 2028 2466 696c 6549 6e20 3f20 hile ($fileIn ? │ │ │ -000064e0: 2466 696c 6549 6e2d 3e73 7973 7265 6164 $fileIn->sysread │ │ │ -000064f0: 285c 2462 7566 6665 722c 2024 626c 6f63 (\$buffer, $bloc │ │ │ -00006500: 6b53 697a 6529 203a 0a09 0920 2020 7379 kSize) :... sy │ │ │ -00006510: 7372 6561 6428 4649 4c45 2c20 2462 7566 sread(FILE, $buf │ │ │ -00006520: 6665 722c 2024 626c 6f63 6b53 697a 6529 fer, $blockSize) │ │ │ -00006530: 290a 0920 2020 207b 0a09 0924 6d64 3541 ).. {...$md5A │ │ │ -00006540: 6c6c 2d3e 6164 6428 2462 7566 6665 7229 ll->add($buffer) │ │ │ -00006550: 3b0a 0920 2020 207d 0a0a 0920 2020 2069 ;.. }... i │ │ │ -00006560: 6620 2824 6d64 3573 756d 206e 6520 246d f ($md5sum ne $m │ │ │ -00006570: 6435 416c 6c2d 3e68 6578 6469 6765 7374 d5All->hexdigest │ │ │ -00006580: 2829 290a 0920 2020 207b 0a09 0970 7269 ()).. {...pri │ │ │ -00006590: 6e74 204f 5554 2022 636f 7272 7570 7420 nt OUT "corrupt │ │ │ -000065a0: 2469 6e6f 6465 2024 665c 6e22 3b0a 0920 $inode $f\n";.. │ │ │ -000065b0: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ -000065c0: 2020 2020 7b0a 0909 2320 7265 6164 790a {...# ready. │ │ │ -000065d0: 0920 2020 207d 0a09 2020 2020 6966 2028 . }.. if ( │ │ │ -000065e0: 2466 696c 6549 6e29 0a09 2020 2020 7b0a $fileIn).. {. │ │ │ -000065f0: 0909 2466 696c 6549 6e2d 3e63 6c6f 7365 ..$fileIn->close │ │ │ -00006600: 2829 3b0a 0909 2466 696c 6549 6e20 3d20 ();...$fileIn = │ │ │ -00006610: 756e 6465 663b 0a09 2020 2020 7d0a 0920 undef;.. }.. │ │ │ -00006620: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ -00006630: 0963 6c6f 7365 2846 494c 4529 3b0a 0920 .close(FILE);.. │ │ │ -00006640: 2020 207d 0a09 7d20 2020 2020 2020 2020 }..} │ │ │ -00006650: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -00006660: 6966 2028 2463 6f6d 7072 2065 7120 2775 if ($compr eq 'u │ │ │ -00006670: 2720 6f72 2024 636f 6d70 7220 6571 2027 ' or $compr eq ' │ │ │ -00006680: 6327 290a 0965 6c73 6966 2028 2463 6f6d c')..elsif ($com │ │ │ -00006690: 7072 2065 7120 2762 2729 0a09 7b0a 2370 pr eq 'b')..{.#p │ │ │ -000066a0: 7269 6e74 2022 7374 6172 7420 6368 6563 rint "start chec │ │ │ -000066b0: 6b69 6e67 2062 6c6f 636b 6564 2066 696c king blocked fil │ │ │ -000066c0: 6520 2466 5c6e 223b 0a09 2020 2020 2320 e $f\n";.. # │ │ │ -000066d0: 7265 6164 2061 6c6c 2066 696c 6573 2069 read all files i │ │ │ -000066e0: 6e20 6469 7265 6374 6f72 790a 0920 2020 n directory.. │ │ │ -000066f0: 206c 6f63 616c 202a 4449 523b 0a09 2020 local *DIR;.. │ │ │ -00006700: 2020 756e 6c65 7373 2028 6f70 656e 6469 unless (opendi │ │ │ -00006710: 7228 4449 522c 2024 6629 290a 0920 2020 r(DIR, $f)).. │ │ │ -00006720: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ -00006730: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00006740: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00006750: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => ["cannot o │ │ │ -00006760: 7065 6e20 3c24 663e 225d 2c0a 0909 0920 pen <$f>"],.... │ │ │ -00006770: 2020 2020 2027 2d61 6464 2720 3d3e 205b '-add' => [ │ │ │ -00006780: 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 4e45 __FILE__, __LINE │ │ │ -00006790: 5f5f 5d29 3b0a 0909 2b2b 246e 7245 7272 __]);...++$nrErr │ │ │ -000067a0: 6f72 733b 0a09 0970 7269 6e74 204f 5554 ors;...print OUT │ │ │ -000067b0: 2022 6572 726f 7273 2024 6e72 4572 726f "errors $nrErro │ │ │ -000067c0: 7273 5c6e 223b 0a09 0972 6574 7572 6e20 rs\n";...return │ │ │ -000067d0: 313b 0a09 2020 2020 7d0a 0920 2020 206d 1;.. }.. m │ │ │ -000067e0: 7920 2824 656e 7472 792c 2040 656e 7472 y ($entry, @entr │ │ │ -000067f0: 6965 7329 3b0a 0920 2020 2077 6869 6c65 ies);.. while │ │ │ -00006800: 2028 2465 6e74 7279 203d 2072 6561 6464 ($entry = readd │ │ │ -00006810: 6972 2044 4952 2920 2023 206f 6e65 2065 ir DIR) # one e │ │ │ -00006820: 6e74 7279 2070 6572 2069 6e6f 6465 0a09 ntry per inode.. │ │ │ -00006830: 2020 2020 7b0a 0909 6e65 7874 2075 6e6c {...next unl │ │ │ -00006840: 6573 7320 2465 6e74 7279 203d 7e20 2f5c ess $entry =~ /\ │ │ │ -00006850: 415c 642f 3b0a 0909 0a09 0970 7573 6820 A\d/;......push │ │ │ -00006860: 4065 6e74 7269 6573 2c20 2465 6e74 7279 @entries, $entry │ │ │ -00006870: 3b0a 0920 2020 207d 0a09 2020 2020 636c ;.. }.. cl │ │ │ -00006880: 6f73 6528 4449 5229 3b0a 0920 2020 206d ose(DIR);.. m │ │ │ -00006890: 7920 2466 696c 6549 6e20 3d0a 0909 7069 y $fileIn =...pi │ │ │ -000068a0: 7065 4672 6f6d 466f 726b 2d3e 6e65 7728 peFromFork->new( │ │ │ -000068b0: 272d 6578 6563 2720 3d3e 2027 627a 6970 '-exec' => 'bzip │ │ │ -000068c0: 3227 2c0a 0909 0909 2020 272d 7061 7261 2',..... '-para │ │ │ -000068d0: 6d27 203d 3e20 5b27 2d64 275d 2c0a 0909 m' => ['-d'],... │ │ │ -000068e0: 0909 2020 272d 7374 6469 6e27 203d 3e20 .. '-stdin' => │ │ │ -000068f0: 2224 662f 2e6d 6435 426c 6f63 6b43 6865 "$f/.md5BlockChe │ │ │ -00006900: 636b 5375 6d73 2e62 7a32 222c 0a09 0909 ckSums.bz2",.... │ │ │ -00006910: 0920 2027 2d6f 7574 5261 6e64 6f6d 2720 . '-outRandom' │ │ │ -00006920: 3d3e 2022 2474 6d70 6469 722f 7374 6275 => "$tmpdir/stbu │ │ │ -00006930: 5069 7065 4672 6f6d 3131 2d22 2c0a 0909 PipeFrom11-",... │ │ │ -00006940: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => │ │ │ -00006950: 2470 724c 6f67 293b 0a0a 0920 2020 206d $prLog);... m │ │ │ -00006960: 7920 246c 3b0a 0920 2020 2077 6869 6c65 y $l;.. while │ │ │ -00006970: 2028 246c 203d 2024 6669 6c65 496e 2d3e ($l = $fileIn-> │ │ │ -00006980: 7265 6164 2829 290a 0920 2020 207b 0a09 read()).. {.. │ │ │ -00006990: 0963 686f 6d70 2024 6c3b 0a09 096d 7920 .chomp $l;...my │ │ │ -000069a0: 2824 6c5f 6d64 352c 2024 6c5f 636f 6d70 ($l_md5, $l_comp │ │ │ -000069b0: 722c 2024 6c5f 662c 2024 6e29 3b0a 0909 r, $l_f, $n);... │ │ │ -000069c0: 246e 203d 2028 246c 5f6d 6435 2c20 246c $n = ($l_md5, $l │ │ │ -000069d0: 5f63 6f6d 7072 2c20 246c 5f66 2920 3d20 _compr, $l_f) = │ │ │ -000069e0: 7370 6c69 7428 2f5c 732f 2c20 246c 2c20 split(/\s/, $l, │ │ │ -000069f0: 3329 3b0a 0909 6966 2028 246e 2021 3d20 3);...if ($n != │ │ │ -00006a00: 3329 0a09 097b 0a09 0920 2020 202b 2b24 3)...{... ++$ │ │ │ -00006a10: 6e72 4572 726f 7273 3b0a 0909 2020 2020 nrErrors;... │ │ │ -00006a20: 7072 696e 7420 4f55 5420 2265 7272 6f72 print OUT "error │ │ │ -00006a30: 7320 246e 7245 7272 6f72 735c 6e22 3b0a s $nrErrors\n";. │ │ │ -00006a40: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00006a50: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00006a60: 4527 2c0a 0909 0909 2020 272d 7374 7227 E',..... '-str' │ │ │ -00006a70: 203d 3e0a 0909 0909 2020 5b22 7374 7261 =>..... ["stra │ │ │ -00006a80: 6e67 6520 6c69 6e65 2069 6e20 3c24 662f nge line in <$f/ │ │ │ -00006a90: 2e6d 6435 426c 6f63 6b43 6865 636b 5375 .md5BlockCheckSu │ │ │ -00006aa0: 6d73 2e62 7a32 3e20 2220 2e0a 0909 0909 ms.bz2> " ...... │ │ │ -00006ab0: 2020 2022 696e 206c 696e 6520 2220 2e20 "in line " . │ │ │ -00006ac0: 2466 696c 6549 6e2d 3e67 6574 2827 2d77 $fileIn->get('-w │ │ │ -00006ad0: 6861 7427 203d 3e20 276c 696e 654e 7227 hat' => 'lineNr' │ │ │ -00006ae0: 2920 2e0a 0909 0909 2020 2022 3a22 2c20 ) ...... ":", │ │ │ -00006af0: 225c 743c 246c 3e22 5d29 3b0a 0909 7d0a "\t<$l>"]);...}. │ │ │ -00006b00: 0a09 0969 6620 282d 6520 2224 6469 7254 ...if (-e "$dirT │ │ │ -00006b10: 6f43 6865 636b 2f24 6c5f 6622 290a 0909 oCheck/$l_f")... │ │ │ -00006b20: 7b0a 0909 2020 2020 6d79 2024 696e 6f64 {... my $inod │ │ │ -00006b30: 6520 3d20 2873 7461 7428 2224 6469 7254 e = (stat("$dirT │ │ │ -00006b40: 6f43 6865 636b 2f24 6c5f 6622 2929 5b31 oCheck/$l_f"))[1 │ │ │ -00006b50: 5d3b 0a09 0920 2020 2069 6620 2865 7869 ];... if (exi │ │ │ -00006b60: 7374 7320 2475 7365 6442 6c6f 636b 496e sts $usedBlockIn │ │ │ -00006b70: 6f64 6573 7b24 696e 6f64 657d 2061 6e64 odes{$inode} and │ │ │ -00006b80: 0a09 0909 2475 7365 6442 6c6f 636b 496e ....$usedBlockIn │ │ │ -00006b90: 6f64 6573 7b24 696e 6f64 657d 206e 6520 odes{$inode} ne │ │ │ -00006ba0: 246c 5f6d 6435 290a 0909 2020 2020 7b0a $l_md5)... {. │ │ │ -00006bb0: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00006bc0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00006bd0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str │ │ │ -00006be0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [ │ │ │ -00006bf0: 2263 616c 6375 6c61 7465 6420 6d64 3520 "calculated md5 │ │ │ -00006c00: 7375 6d20 6f66 203c 2464 6972 546f 4368 sum of <$dirToCh │ │ │ -00006c10: 6563 6b2f 246c 5f66 3e20 2220 2e0a 0909 eck/$l_f> " .... │ │ │ -00006c20: 0909 2020 2020 2020 2269 7320 6469 6666 .. "is diff │ │ │ -00006c30: 6572 656e 7420 6672 6f6d 2074 6865 206f erent from the o │ │ │ -00006c40: 6e65 2069 6e20 7468 6520 6368 6563 6b73 ne in the checks │ │ │ -00006c50: 756d 2022 202e 0a09 0909 0920 2020 2020 um " ...... │ │ │ -00006c60: 2020 2266 696c 6520 3c24 662f 2e6d 6435 "file <$f/.md5 │ │ │ -00006c70: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b │ │ │ -00006c80: 7a32 3e20 2833 2922 5d29 3b0a 0909 0924 z2> (3)"]);....$ │ │ │ -00006c90: 696e 6f64 6532 6d64 357b 2469 6e6f 6465 inode2md5{$inode │ │ │ -00006ca0: 7d20 3d20 2424 7573 6564 426c 6f63 6b49 } = $$usedBlockI │ │ │ -00006cb0: 6e6f 6465 737b 2469 6e6f 6465 7d3b 0a09 nodes{$inode};.. │ │ │ -00006cc0: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;.. │ │ │ -00006cd0: 0920 2020 207d 0a09 0920 2020 2065 6c73 . }... els │ │ │ -00006ce0: 650a 0909 2020 2020 7b0a 0909 0924 696e e... {....$in │ │ │ -00006cf0: 6f64 6532 6d64 357b 2469 6e6f 6465 7d20 ode2md5{$inode} │ │ │ -00006d00: 3d20 246c 5f6d 6435 3b0a 0909 2020 2020 = $l_md5;... │ │ │ -00006d10: 7d0a 0909 7d0a 0909 656c 7365 0a09 097b }...}...else...{ │ │ │ -00006d20: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -00006d30: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00006d40: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str │ │ │ -00006d50: 2720 3d3e 205b 2266 696c 6520 3c24 6469 ' => ["file <$di │ │ │ -00006d60: 7254 6f43 6865 636b 2f24 6c5f 663e 2069 rToCheck/$l_f> i │ │ │ -00006d70: 7320 6d69 7373 696e 6722 5d29 3b0a 0909 s missing"]);... │ │ │ -00006d80: 2020 2020 246d 6169 6e3a 3a77 6674 2d3e $main::wft-> │ │ │ -00006d90: 7072 696e 7428 2224 6469 7254 6f43 6865 print("$dirToChe │ │ │ -00006da0: 636b 2f24 6c5f 6622 2c20 2766 696c 654d ck/$l_f", 'fileM │ │ │ -00006db0: 6973 7369 6e67 2729 3b0a 0909 2020 2020 issing');... │ │ │ -00006dc0: 2b2b 246e 7245 7272 6f72 733b 0a09 097d ++$nrErrors;...} │ │ │ -00006dd0: 0a09 2020 2020 7d0a 0920 2020 2024 6669 .. }.. $fi │ │ │ -00006de0: 6c65 496e 2d3e 636c 6f73 6528 293b 0a09 leIn->close();.. │ │ │ -00006df0: 2020 2020 2466 696c 6549 6e20 3d20 756e $fileIn = un │ │ │ -00006e00: 6465 663b 0a0a 0920 2020 206d 7920 246d def;... my $m │ │ │ -00006e10: 6435 416c 6c20 3d20 4469 6765 7374 3a3a d5All = Digest:: │ │ │ -00006e20: 4d44 352d 3e6e 6577 2829 3b0a 0920 2020 MD5->new();.. │ │ │ -00006e30: 2066 6f72 6561 6368 2024 656e 7472 7920 foreach $entry │ │ │ -00006e40: 2873 6f72 7420 4065 6e74 7269 6573 2920 (sort @entries) │ │ │ -00006e50: 2023 206c 6f6f 7020 6f76 6572 2061 6c6c # loop over all │ │ │ -00006e60: 2066 696c 6573 2069 6e20 6261 636b 7570 files in backup │ │ │ -00006e70: 0a09 2020 2020 7b0a 0909 6d79 2028 2469 .. {...my ($i │ │ │ -00006e80: 6e6f 6465 2c20 2473 697a 6529 203d 2028 node, $size) = ( │ │ │ -00006e90: 7374 6174 2822 2466 2f24 656e 7472 7922 stat("$f/$entry" │ │ │ -00006ea0: 2929 5b31 2c37 5d3b 0a0a 0909 6d79 2024 ))[1,7];....my $ │ │ │ -00006eb0: 6361 6c63 4d44 3520 3d20 303b 0a09 0969 calcMD5 = 0;...i │ │ │ -00006ec0: 6620 2865 7869 7374 7320 2424 7573 6564 f (exists $$used │ │ │ -00006ed0: 426c 6f63 6b49 6e6f 6465 737b 2469 6e6f BlockInodes{$ino │ │ │ -00006ee0: 6465 7d29 0a09 097b 0a23 7072 696e 7420 de})...{.#print │ │ │ -00006ef0: 222b 2b2b 2b2b 2b2b 2b2b 696e 6f64 6520 "+++++++++inode │ │ │ -00006f00: 616c 7265 6164 7920 6361 6c63 756c 6174 already calculat │ │ │ -00006f10: 6564 3a20 2469 6e6f 6465 203d 2022 2c0a ed: $inode = ",. │ │ │ -00006f20: 2320 2475 7365 6442 6c6f 636b 496e 6f64 # $usedBlockInod │ │ │ -00006f30: 6573 7b24 696e 6f64 657d 2c20 225c 6e22 es{$inode}, "\n" │ │ │ -00006f40: 3b0a 0909 2020 2020 2b2b 246c 696e 6b65 ;... ++$linke │ │ │ -00006f50: 6446 696c 6573 3b0a 0909 2020 2020 246c dFiles;... $l │ │ │ -00006f60: 696e 6b65 6446 696c 6573 5369 7a65 202b inkedFilesSize + │ │ │ -00006f70: 3d20 2473 697a 653b 0a09 097d 0a09 0965 = $size;...}...e │ │ │ -00006f80: 6c73 650a 0909 7b0a 0909 2020 2020 2b2b lse...{... ++ │ │ │ -00006f90: 2463 6865 636b 6564 4669 6c65 733b 0a09 $checkedFiles;.. │ │ │ -00006fa0: 0920 2020 2024 6368 6563 6b65 6446 696c . $checkedFil │ │ │ -00006fb0: 6573 5369 7a65 202b 3d20 2473 697a 653b esSize += $size; │ │ │ -00006fc0: 0a09 0920 2020 2024 6361 6c63 4d44 3520 ... $calcMD5 │ │ │ -00006fd0: 3d20 313b 0a09 097d 0a0a 0909 6c6f 6361 = 1;...}....loca │ │ │ -00006fe0: 6c20 2a46 524f 4d3b 0a09 096d 7920 2466 l *FROM;...my $f │ │ │ -00006ff0: 696c 6549 6e20 3d20 756e 6465 663b 0a09 ileIn = undef;.. │ │ │ -00007000: 0969 6620 2824 656e 7472 7920 3d7e 202f .if ($entry =~ / │ │ │ -00007010: 2470 6f73 7466 6978 5c5a 2f29 2020 2020 $postfix\Z/) │ │ │ -00007020: 2320 636f 6d70 7265 7373 6564 2062 6c6f # compressed blo │ │ │ -00007030: 636b 0a09 097b 0a09 0920 2020 2024 6669 ck...{... $fi │ │ │ -00007040: 6c65 496e 203d 0a09 0909 7069 7065 4672 leIn =....pipeFr │ │ │ -00007050: 6f6d 466f 726b 2d3e 6e65 7728 272d 6578 omFork->new('-ex │ │ │ -00007060: 6563 2720 3d3e 2024 756e 636f 6d70 722c ec' => $uncompr, │ │ │ -00007070: 0a09 0909 0909 2020 272d 7061 7261 6d27 ...... '-param' │ │ │ -00007080: 203d 3e20 5c40 756e 636f 6d70 7250 6172 => \@uncomprPar │ │ │ -00007090: 2c0a 0909 0909 0920 2027 2d73 7464 696e ,...... '-stdin │ │ │ -000070a0: 2720 3d3e 2022 2466 2f24 656e 7472 7922 ' => "$f/$entry" │ │ │ -000070b0: 2c0a 0909 0909 0920 2027 2d6f 7574 5261 ,...... '-outRa │ │ │ -000070c0: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => "$tmpdi │ │ │ -000070d0: 722f 7374 6275 5069 7065 4672 6f6d 3132 r/stbuPipeFrom12 │ │ │ -000070e0: 2d22 2c0a 0909 0909 0920 2027 2d70 724c -",...... '-prL │ │ │ -000070f0: 6f67 2720 3d3e 2024 7072 4c6f 6729 3b0a og' => $prLog);. │ │ │ -00007100: 0909 7d0a 0909 656c 7365 2020 2020 2020 ..}...else │ │ │ -00007110: 2020 2020 2023 2062 6c6f 636b 206e 6f74 # block not │ │ │ -00007120: 2063 6f6d 7072 6573 7365 640a 0909 7b0a compressed...{. │ │ │ -00007130: 0909 2020 2020 756e 6c65 7373 2028 7379 .. unless (sy │ │ │ -00007140: 736f 7065 6e28 4652 4f4d 2c20 2224 662f sopen(FROM, "$f/ │ │ │ -00007150: 2465 6e74 7279 222c 204f 5f52 444f 4e4c $entry", O_RDONL │ │ │ -00007160: 5929 290a 0909 2020 2020 7b0a 0909 0924 Y))... {....$ │ │ │ -00007170: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00007180: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00007190: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000071a0: 205b 2263 616e 6e6f 7420 7265 6164 203c ["cannot read < │ │ │ -000071b0: 2466 2f24 656e 7472 793e 225d 293b 0a09 $f/$entry>"]);.. │ │ │ -000071c0: 0909 2b2b 246e 7245 7272 6f72 733b 0a09 ..++$nrErrors;.. │ │ │ -000071d0: 0909 7072 696e 7420 4f55 5420 2265 7272 ..print OUT "err │ │ │ -000071e0: 6f72 7320 246e 7245 7272 6f72 735c 6e22 ors $nrErrors\n" │ │ │ -000071f0: 3b0a 0909 0972 6574 7572 6e20 313b 0a09 ;....return 1;.. │ │ │ -00007200: 0920 2020 207d 0a09 097d 0a09 096d 7920 . }...}...my │ │ │ -00007210: 2462 7566 6665 723b 0a09 096d 7920 246d $buffer;...my $m │ │ │ -00007220: 6435 426c 6f63 6b20 3d20 4469 6765 7374 d5Block = Digest │ │ │ -00007230: 3a3a 4d44 352d 3e6e 6577 2829 2069 6620 ::MD5->new() if │ │ │ -00007240: 2463 616c 634d 4435 3b0a 0909 7768 696c $calcMD5;...whil │ │ │ -00007250: 6520 2824 6669 6c65 496e 203f 2024 7369 e ($fileIn ? $si │ │ │ -00007260: 7a65 203d 2024 6669 6c65 496e 2d3e 7379 ze = $fileIn->sy │ │ │ -00007270: 7372 6561 6428 5c24 6275 6666 6572 2c20 sread(\$buffer, │ │ │ -00007280: 2462 6c6f 636b 5369 7a65 2920 3a0a 0909 $blockSize) :... │ │ │ -00007290: 2020 2020 2020 2073 7973 7265 6164 2846 sysread(F │ │ │ -000072a0: 524f 4d2c 2024 6275 6666 6572 2c20 2462 ROM, $buffer, $b │ │ │ -000072b0: 6c6f 636b 5369 7a65 2929 0a09 097b 0a09 lockSize))...{.. │ │ │ -000072c0: 0920 2020 2024 6d64 3541 6c6c 2d3e 6164 . $md5All->ad │ │ │ -000072d0: 6428 2462 7566 6665 7229 3b0a 0909 2020 d($buffer);... │ │ │ -000072e0: 2020 246d 6435 426c 6f63 6b2d 3e61 6464 $md5Block->add │ │ │ -000072f0: 2824 6275 6666 6572 2920 6966 2024 6361 ($buffer) if $ca │ │ │ -00007300: 6c63 4d44 353b 0a09 097d 0a09 0969 6620 lcMD5;...}...if │ │ │ -00007310: 2824 6669 6c65 496e 290a 0909 7b0a 0909 ($fileIn)...{... │ │ │ -00007320: 2020 2020 2466 696c 6549 6e2d 3e63 6c6f $fileIn->clo │ │ │ -00007330: 7365 2829 3b0a 0909 2020 2020 2466 696c se();... $fil │ │ │ -00007340: 6549 6e20 3d20 756e 6465 663b 0a09 097d eIn = undef;...} │ │ │ -00007350: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... │ │ │ -00007360: 2020 636c 6f73 6528 4649 4c45 293b 0a09 close(FILE);.. │ │ │ -00007370: 097d 0a0a 0909 6d79 2024 6469 6765 7374 .}....my $digest │ │ │ -00007380: 203d 2024 6d64 3542 6c6f 636b 2d3e 6865 = $md5Block->he │ │ │ -00007390: 7864 6967 6573 7428 2920 6966 2024 6361 xdigest() if $ca │ │ │ -000073a0: 6c63 4d44 353b 0a09 0969 6620 2824 6361 lcMD5;...if ($ca │ │ │ -000073b0: 6c63 4d44 3529 0a09 097b 0a09 0920 2020 lcMD5)...{... │ │ │ -000073c0: 2024 2475 7365 6442 6c6f 636b 496e 6f64 $$usedBlockInod │ │ │ -000073d0: 6573 7b24 696e 6f64 657d 203d 2024 6469 es{$inode} = $di │ │ │ -000073e0: 6765 7374 3b0a 0909 7d0a 2370 7269 6e74 gest;...}.#print │ │ │ -000073f0: 2022 2466 2f24 656e 7472 793a 5c6e 223b "$f/$entry:\n"; │ │ │ -00007400: 0a23 7072 696e 7420 225c 7424 6469 6765 .#print "\t$dige │ │ │ -00007410: 7374 203d 2064 6967 6573 745c 6e22 3b0a st = digest\n";. │ │ │ -00007420: 2370 7269 6e74 2022 5c74 222c 2024 696e #print "\t", $in │ │ │ -00007430: 6f64 6532 6d64 357b 2469 6e6f 6465 7d2c ode2md5{$inode}, │ │ │ -00007440: 2022 203d 2069 6e6f 6465 2028 2469 6e6f " = inode ($ino │ │ │ -00007450: 6465 295c 2069 6620 2463 616c 634d 4435 de)\ if $calcMD5 │ │ │ -00007460: 5c6e 223b 0a09 0969 6620 286e 6f74 2065 \n";...if (not e │ │ │ -00007470: 7869 7374 7320 2469 6e6f 6465 326d 6435 xists $inode2md5 │ │ │ -00007480: 7b24 696e 6f64 657d 290a 0909 7b0a 0909 {$inode})...{... │ │ │ -00007490: 2020 2020 2b2b 246e 7245 7272 6f72 733b ++$nrErrors; │ │ │ -000074a0: 0a23 0909 2020 2020 7072 696e 7420 4f55 .#.. print OU │ │ │ -000074b0: 5420 2265 7272 6f72 7320 246e 7245 7272 T "errors $nrErr │ │ │ -000074c0: 6f72 735c 6e22 3b0a 0909 2020 2020 2470 ors\n";... $p │ │ │ -000074d0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -000074e0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ -000074f0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ -00007500: 2020 5b22 3c24 662f 2465 6e74 7279 3e20 ["<$f/$entry> │ │ │ -00007510: 6973 206d 6973 7369 6e67 2069 6e20 2220 is missing in " │ │ │ -00007520: 2e0a 0909 0909 2020 2022 3c24 662f 2e6d ...... "<$f/.m │ │ │ -00007530: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ -00007540: 2e62 7a32 3e22 5d29 3b0a 0909 2020 2020 .bz2>"]);... │ │ │ -00007550: 246d 6169 6e3a 3a77 6674 2d3e 7072 696e $main::wft->prin │ │ │ -00007560: 7428 2224 662f 2465 6e74 7279 222c 2027 t("$f/$entry", ' │ │ │ -00007570: 6d64 354d 6973 7369 6e67 2729 3b0a 0909 md5Missing');... │ │ │ -00007580: 7d0a 0909 656c 7369 6620 2824 6361 6c63 }...elsif ($calc │ │ │ -00007590: 4d44 3520 616e 6420 2464 6967 6573 7420 MD5 and $digest │ │ │ -000075a0: 6e65 2024 696e 6f64 6532 6d64 357b 2469 ne $inode2md5{$i │ │ │ -000075b0: 6e6f 6465 7d29 0a09 097b 0a09 0920 2020 node})...{... │ │ │ -000075c0: 202b 2b24 6e72 4572 726f 7273 3b0a 0909 ++$nrErrors;... │ │ │ -000075d0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -000075e0: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -000075f0: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' = │ │ │ -00007600: 3e0a 0909 0909 2020 5b22 6361 6c63 756c >..... ["calcul │ │ │ -00007610: 6174 6564 206d 6435 2073 756d 206f 6620 ated md5 sum of │ │ │ -00007620: 3c24 662f 2465 6e74 7279 3e20 6973 2022 <$f/$entry> is " │ │ │ -00007630: 202e 0a09 0909 0920 2020 2264 6966 6665 ...... "diffe │ │ │ -00007640: 7265 6e74 2066 726f 6d20 7468 6520 6f6e rent from the on │ │ │ -00007650: 6520 696e 2022 202e 0a09 0909 0920 2020 e in " ...... │ │ │ -00007660: 223c 2466 2f2e 6d64 3542 6c6f 636b 4368 "<$f/.md5BlockCh │ │ │ -00007670: 6563 6b53 756d 732e 627a 323e 2028 3229 eckSums.bz2> (2) │ │ │ -00007680: 225d 293b 0a09 0920 2020 2024 6d61 696e "]);... $main │ │ │ -00007690: 3a3a 7766 742d 3e70 7269 6e74 2822 2466 ::wft->print("$f │ │ │ -000076a0: 2f24 656e 7472 7922 2c20 276d 6435 5772 /$entry", 'md5Wr │ │ │ -000076b0: 6f6e 6727 293b 0a0a 0909 7d0a 0920 2020 ong');....}.. │ │ │ -000076c0: 207d 0a0a 0920 2020 2069 6620 2824 6d64 }... if ($md │ │ │ -000076d0: 3573 756d 206e 6520 246d 6435 416c 6c2d 5sum ne $md5All- │ │ │ -000076e0: 3e68 6578 6469 6765 7374 2829 290a 0920 >hexdigest()).. │ │ │ -000076f0: 2020 207b 0a09 096d 7920 2469 6e6f 6465 {...my $inode │ │ │ -00007700: 203d 2028 7374 6174 2824 6629 295b 315d = (stat($f))[1] │ │ │ -00007710: 3b0a 0909 7072 696e 7420 4f55 5420 2263 ;...print OUT "c │ │ │ -00007720: 6f72 7275 7074 2024 696e 6f64 6522 3b0a orrupt $inode";. │ │ │ -00007730: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ -00007740: 0a09 2020 2020 7b0a 2370 7269 6e74 2022 .. {.#print " │ │ │ -00007750: 656e 6420 6368 6563 6b69 6e67 2062 6c6f end checking blo │ │ │ -00007760: 636b 6564 2066 696c 6520 2466 5c6e 223b cked file $f\n"; │ │ │ -00007770: 0a09 0923 2072 6561 6479 0a09 2020 2020 ...# ready.. │ │ │ -00007780: 7d0a 2370 7269 6e74 2022 6368 6563 6b65 }.#print "checke │ │ │ -00007790: 6420 3c24 663e 5c6e 223b 0a09 7d0a 2020 d <$f>\n";..}. │ │ │ -000077a0: 2020 7d0a 0a20 2020 2070 7269 6e74 204f }.. print O │ │ │ -000077b0: 5554 2022 6572 726f 7273 2024 6e72 4572 UT "errors $nrEr │ │ │ -000077c0: 726f 7273 5c6e 223b 0a20 2020 2070 7269 rors\n";. pri │ │ │ -000077d0: 6e74 204f 5554 2022 6368 6563 6b65 6446 nt OUT "checkedF │ │ │ -000077e0: 696c 6573 2024 6368 6563 6b65 6446 696c iles $checkedFil │ │ │ -000077f0: 6573 5c6e 223b 0a20 2020 2070 7269 6e74 es\n";. print │ │ │ -00007800: 204f 5554 2022 6368 6563 6b65 6446 696c OUT "checkedFil │ │ │ -00007810: 6573 5369 7a65 2024 6368 6563 6b65 6446 esSize $checkedF │ │ │ -00007820: 696c 6573 5369 7a65 5c6e 223b 0a20 2020 ilesSize\n";. │ │ │ -00007830: 2070 7269 6e74 204f 5554 2022 6c69 6e6b print OUT "link │ │ │ -00007840: 6564 4669 6c65 7320 246c 696e 6b65 6446 edFiles $linkedF │ │ │ -00007850: 696c 6573 5c6e 223b 0a20 2020 2070 7269 iles\n";. pri │ │ │ -00007860: 6e74 204f 5554 2022 6c69 6e6b 6564 4669 nt OUT "linkedFi │ │ │ -00007870: 6c65 7353 697a 6520 246c 696e 6b65 6446 lesSize $linkedF │ │ │ -00007880: 696c 6573 5369 7a65 5c6e 223b 0a0a 2020 ilesSize\n";.. │ │ │ -00007890: 2020 7072 696e 7420 4f55 5420 2263 616c print OUT "cal │ │ │ -000078a0: 6365 6449 6e6f 6465 735c 6e22 3b0a 2020 cedInodes\n";. │ │ │ -000078b0: 2020 6d79 2024 693b 0a20 2020 2066 6f72 my $i;. for │ │ │ -000078c0: 6561 6368 2024 6920 286b 6579 7320 2569 each $i (keys %i │ │ │ -000078d0: 6e6f 6465 326d 6435 290a 2020 2020 7b0a node2md5). {. │ │ │ -000078e0: 0970 7269 6e74 204f 5554 2022 2469 2022 .print OUT "$i " │ │ │ -000078f0: 2c20 2469 6e6f 6465 326d 6435 7b24 697d , $inode2md5{$i} │ │ │ -00007900: 2c20 225c 6e22 3b0a 2020 2020 7d0a 0a20 , "\n";. }.. │ │ │ -00007910: 2020 2063 6c6f 7365 284f 5554 293b 0a23 close(OUT);.# │ │ │ -00007920: 2020 2020 7379 7374 656d 2822 6361 7420 system("cat │ │ │ -00007930: 2474 6d70 4e61 6d65 2229 3b0a 2020 2020 $tmpName");. │ │ │ -00007940: 7265 7475 726e 2030 3b0a 7d0a 0a0a 2323 return 0;.}...## │ │ │ -00007950: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007960: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007970: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007980: 2323 2323 2323 2323 2323 0a23 2063 6865 ##########.# che │ │ │ -00007990: 636b 2069 6620 616c 6c20 6669 6c65 7320 ck if all files │ │ │ -000079a0: 696e 2024 6469 7220 6172 6520 696e 2074 in $dir are in t │ │ │ -000079b0: 6865 2068 6173 680a 2320 616e 6420 6966 he hash.# and if │ │ │ -000079c0: 2066 696c 6573 2069 6e20 2464 6972 2061 files in $dir a │ │ │ -000079d0: 7265 206d 6973 7369 6e67 2069 6e20 7468 re missing in th │ │ │ -000079e0: 6520 6861 7368 0a73 7562 2063 6865 636b e hash.sub check │ │ │ -000079f0: 416c 6c46 696c 6573 0a7b 0a20 2020 206d AllFiles.{. m │ │ │ -00007a00: 7920 2824 6469 722c 2024 7265 6c46 696c y ($dir, $relFil │ │ │ -00007a10: 6573 2c20 2470 724c 6f67 2920 3d20 405f es, $prLog) = @_ │ │ │ -00007a20: 3b0a 0a23 7072 696e 7420 222d 312d 206b ;..#print "-1- k │ │ │ -00007a30: 6579 7320 7265 6c46 696c 6573 3d5c 6e5c eys relFiles=\n\ │ │ │ -00007a40: 7422 2c20 6a6f 696e 2822 5c6e 5c74 222c t", join("\n\t", │ │ │ -00007a50: 2073 6f72 7420 6b65 7973 2025 2472 656c sort keys %$rel │ │ │ -00007a60: 4669 6c65 7329 2c20 225c 6e22 3b0a 2020 Files), "\n";. │ │ │ -00007a70: 2020 265f 6368 6563 6b41 6c6c 4669 6c65 &_checkAllFile │ │ │ -00007a80: 7328 6c65 6e67 7468 2824 6469 7229 2b31 s(length($dir)+1 │ │ │ -00007a90: 2c20 2464 6972 2c20 2472 656c 4669 6c65 , $dir, $relFile │ │ │ -00007aa0: 732c 2024 7072 4c6f 6729 3b0a 7d0a 0a0a s, $prLog);.}... │ │ │ -00007ab0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007ac0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007ad0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007ae0: 2323 2323 2323 2323 2323 2323 0a73 7562 ############.sub │ │ │ -00007af0: 205f 6368 6563 6b41 6c6c 4669 6c65 730a _checkAllFiles. │ │ │ -00007b00: 7b0a 2020 2020 6d79 2028 246c 656e 6774 {. my ($lengt │ │ │ -00007b10: 682c 2024 6469 722c 2024 7265 6c46 696c h, $dir, $relFil │ │ │ -00007b20: 6573 2c20 2470 724c 6f67 2920 3d20 405f es, $prLog) = @_ │ │ │ -00007b30: 3b0a 0a23 7072 696e 7420 222d 322d 205f ;..#print "-2- _ │ │ │ -00007b40: 6368 6563 6b41 6c6c 4669 6c65 733a 2024 checkAllFiles: $ │ │ │ -00007b50: 6c65 6e67 7468 2c20 2464 6972 5c6e 223b length, $dir\n"; │ │ │ -00007b60: 0a0a 2020 2020 6d79 2024 7265 6c20 3d20 .. my $rel = │ │ │ -00007b70: 756e 6465 663b 0a20 2020 2069 6620 286c undef;. if (l │ │ │ -00007b80: 656e 6774 6828 2464 6972 2920 3e20 246c ength($dir) > $l │ │ │ -00007b90: 656e 6774 6829 0a20 2020 207b 0a09 2472 ength). {..$r │ │ │ -00007ba0: 656c 203d 2073 7562 7374 7228 2464 6972 el = substr($dir │ │ │ -00007bb0: 2c20 246c 656e 6774 6829 3b0a 2370 7269 , $length);.#pri │ │ │ -00007bc0: 6e74 2022 5c74 2d33 2d20 7365 7431 2072 nt "\t-3- set1 r │ │ │ -00007bd0: 656c 203c 2472 656c 3e5c 6e22 3b0a 2020 el <$rel>\n";. │ │ │ -00007be0: 2020 7d0a 2020 2020 6966 2028 2472 656c }. if ($rel │ │ │ -00007bf0: 290a 2020 2020 7b0a 2370 7269 6e74 2022 ). {.#print " │ │ │ -00007c00: 5c74 2d34 2d20 6368 6563 6b31 2d3e 203c \t-4- check1-> < │ │ │ -00007c10: 2472 656c 3e5c 6e22 3b0a 0975 6e6c 6573 $rel>\n";..unles │ │ │ -00007c20: 7320 2865 7869 7374 7320 2424 7265 6c46 s (exists $$relF │ │ │ -00007c30: 696c 6573 7b24 7265 6c7d 290a 097b 0a09 iles{$rel})..{.. │ │ │ -00007c40: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00007c50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00007c60: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -00007c70: 0a09 0909 2020 5b22 3c24 6469 722f 2472 .... ["<$dir/$r │ │ │ -00007c80: 656c 3e20 6973 206e 6f74 206c 6973 7465 el> is not liste │ │ │ -00007c90: 6420 696e 202e 6d64 3543 6865 636b 5375 d in .md5CheckSu │ │ │ -00007ca0: 6d20 2831 2922 5d29 3b0a 0920 2020 2024 m (1)"]);.. $ │ │ │ -00007cb0: 6d61 696e 3a3a 7766 742d 3e70 7269 6e74 main::wft->print │ │ │ -00007cc0: 2822 2464 6972 2f24 7265 6c22 2c20 276d ("$dir/$rel", 'm │ │ │ -00007cd0: 6435 4d69 7373 696e 6727 293b 0a09 7d0a d5Missing');..}. │ │ │ -00007ce0: 2020 2020 7d0a 0a20 2020 206c 6f63 616c }.. local │ │ │ -00007cf0: 202a 4449 523b 0a20 2020 2075 6e6c 6573 *DIR;. unles │ │ │ -00007d00: 7320 286f 7065 6e64 6972 2844 4952 2c20 s (opendir(DIR, │ │ │ -00007d10: 2464 6972 2929 0a20 2020 207b 0a09 2470 $dir)). {..$p │ │ │ -00007d20: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00007d30: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ -00007d40: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00007d50: 6361 6e6e 6f74 206f 7065 6e64 6972 203c cannot opendir < │ │ │ -00007d60: 2464 6972 3e22 5d29 3b0a 0972 6574 7572 $dir>"]);..retur │ │ │ -00007d70: 6e3b 0a20 2020 207d 0a20 2020 206d 7920 n;. }. my │ │ │ -00007d80: 2465 3b0a 2020 2020 7768 696c 6520 2824 $e;. while ($ │ │ │ -00007d90: 6520 3d20 7265 6164 6469 7220 4449 5229 e = readdir DIR) │ │ │ -00007da0: 0a20 2020 207b 0a09 6e65 7874 2069 6620 . {..next if │ │ │ -00007db0: 2824 6520 6571 2027 2e27 206f 7220 2465 ($e eq '.' or $e │ │ │ -00007dc0: 2065 7120 272e 2e27 293b 0a09 6d79 2024 eq '..');..my $ │ │ │ -00007dd0: 6465 203d 2022 2464 6972 2f24 6522 3b0a de = "$dir/$e";. │ │ │ -00007de0: 2370 7269 6e74 2022 5c74 2d35 2d20 6465 #print "\t-5- de │ │ │ -00007df0: 203c 2464 653e 5c6e 223b 0a0a 2320 646f <$de>\n";..# do │ │ │ -00007e00: 6e27 7420 6361 7265 2061 626f 7574 2062 n't care about b │ │ │ -00007e10: 6c6f 636b 6564 2066 696c 6573 2c20 7468 locked files, th │ │ │ -00007e20: 6579 2061 7265 2061 6c72 6561 6479 2063 ey are already c │ │ │ -00007e30: 6865 636b 0a23 2069 6e20 7375 6220 6368 heck.# in sub ch │ │ │ -00007e40: 6563 6b4d 4435 0a0a 0924 7265 6c20 3d20 eckMD5...$rel = │ │ │ -00007e50: 7375 6273 7472 2824 6465 2c20 246c 656e substr($de, $len │ │ │ -00007e60: 6774 6829 3b0a 2370 7269 6e74 2022 5c74 gth);.#print "\t │ │ │ -00007e70: 2d31 302d 2073 6574 3220 7265 6c20 3c24 -10- set2 rel <$ │ │ │ -00007e80: 7265 6c3e 5c6e 223b 0a09 756e 6c65 7373 rel>\n";..unless │ │ │ -00007e90: 2028 6578 6973 7473 2024 2472 656c 4669 (exists $$relFi │ │ │ -00007ea0: 6c65 737b 2472 656c 7d29 0a09 7b0a 0920 les{$rel})..{.. │ │ │ -00007eb0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00007ec0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00007ed0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -00007ee0: 0909 0920 205b 223c 2464 6972 2f24 7265 ... ["<$dir/$re │ │ │ -00007ef0: 6c3e 2069 7320 6e6f 7420 6c69 7374 6564 l> is not listed │ │ │ -00007f00: 2069 6e20 2e6d 6435 4368 6563 6b53 756d in .md5CheckSum │ │ │ -00007f10: 2028 3229 225d 293b 0a09 2020 2020 246d (2)"]);.. $m │ │ │ -00007f20: 6169 6e3a 3a77 6674 2d3e 7072 696e 7428 ain::wft->print( │ │ │ -00007f30: 2224 6469 722f 2472 656c 222c 2027 6d64 "$dir/$rel", 'md │ │ │ -00007f40: 354d 6973 7369 6e67 2729 3b0a 097d 0a20 5Missing');..}. │ │ │ -00007f50: 2020 207d 0a20 2020 2063 6c6f 7365 6469 }. closedi │ │ │ -00007f60: 7228 4449 5229 206f 720a 0924 7072 4c6f r(DIR) or..$prLo │ │ │ -00007f70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00007f80: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ -00007f90: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -00007fa0: 6e6f 7420 636c 6f73 6564 6972 203c 2464 not closedir <$d │ │ │ -00007fb0: 6972 3e22 5d29 3b0a 7d0a 0a0a 2323 2323 ir>"]);.}...#### │ │ │ -00007fc0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007fd0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00007fe0: 2323 2323 2323 2323 2323 2323 2323 0a23 ##############.# │ │ │ -00007ff0: 2070 6163 6b61 6765 2070 7269 6e74 4c6f package printLo │ │ │ -00008000: 674d 756c 7469 706c 6520 6e65 6564 7320 gMultiple needs │ │ │ -00008010: 7468 6973 2066 756e 6374 696f 6e0a 7375 this function.su │ │ │ -00008020: 6220 636c 6561 6e75 700a 7b0a 2020 2020 b cleanup.{. │ │ │ -00008030: 6d79 2024 7369 676e 616d 6520 3d20 7368 my $signame = sh │ │ │ -00008040: 6966 743b 0a20 2020 206d 7920 2465 7869 ift;. my $exi │ │ │ -00008050: 7420 3d20 2873 6869 6674 2829 207c 7c20 t = (shift() || │ │ │ -00008060: 3129 3b0a 0a20 2020 2065 7869 7420 2465 1);.. exit $e │ │ │ -00008070: 7869 743b 0a7d 0a0a 0a23 2323 2323 2323 xit;.}...####### │ │ │ -00008080: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00008090: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000080a0: 2323 2323 2323 2323 2323 230a 2320 7072 ###########.# pr │ │ │ -000080b0: 696e 7420 7374 6174 6973 7469 6361 6c20 int statistical │ │ │ -000080c0: 6461 7461 0a73 7562 2070 7269 6e74 5374 data.sub printSt │ │ │ -000080d0: 6174 0a7b 0a20 2020 206d 7920 2824 7072 at.{. my ($pr │ │ │ -000080e0: 4c6f 672c 2024 7465 7874 2c20 2463 6865 Log, $text, $che │ │ │ -000080f0: 636b 6564 4669 6c65 732c 2024 6368 6563 ckedFiles, $chec │ │ │ -00008100: 6b65 6446 696c 6573 5369 7a65 2c0a 0924 kedFilesSize,..$ │ │ │ -00008110: 6c69 6e6b 6564 4669 6c65 732c 2024 6c69 linkedFiles, $li │ │ │ -00008120: 6e6b 6564 4669 6c65 7353 697a 6529 203d nkedFilesSize) = │ │ │ -00008130: 2028 405f 293b 0a0a 2020 2020 6d79 2024 (@_);.. my $ │ │ │ -00008140: 6368 6563 6b50 203d 2030 3b0a 0a20 2020 checkP = 0;.. │ │ │ -00008150: 2024 6368 6563 6b50 203d 2069 6e74 2824 $checkP = int($ │ │ │ -00008160: 6368 6563 6b65 6446 696c 6573 5369 7a65 checkedFilesSize │ │ │ -00008170: 202a 2031 3030 3030 202f 0a09 0920 2028 * 10000 /... ( │ │ │ -00008180: 2463 6865 636b 6564 4669 6c65 7353 697a $checkedFilesSiz │ │ │ -00008190: 6520 2b20 246c 696e 6b65 6446 696c 6573 e + $linkedFiles │ │ │ -000081a0: 5369 7a65 2920 2b2e 3529 202f 2031 3030 Size) +.5) / 100 │ │ │ -000081b0: 0a09 0920 2069 6620 2824 6368 6563 6b65 ... if ($checke │ │ │ -000081c0: 6446 696c 6573 5369 7a65 202b 2024 6c69 dFilesSize + $li │ │ │ -000081d0: 6e6b 6564 4669 6c65 7353 697a 6529 203e nkedFilesSize) > │ │ │ -000081e0: 2030 3b0a 0a20 2020 2024 7072 4c6f 672d 0;.. $prLog- │ │ │ -000081f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00008200: 3e20 2753 272c 0a09 0920 2027 2d73 7472 > 'S',... '-str │ │ │ -00008210: 2720 3d3e 205b 2224 7465 7874 2063 6865 ' => ["$text che │ │ │ -00008220: 636b 6564 2024 6368 6563 6b65 6446 696c cked $checkedFil │ │ │ -00008230: 6573 2066 696c 6573 2028 2220 2e0a 0909 es files (" .... │ │ │ -00008240: 0920 2020 2020 2826 3a3a 6875 6d61 6e52 . (&::humanR │ │ │ -00008250: 6561 6461 626c 6528 2463 6865 636b 6564 eadable($checked │ │ │ -00008260: 4669 6c65 7353 697a 6529 295b 305d 202e FilesSize))[0] . │ │ │ -00008270: 0a09 0909 2020 2020 2022 2920 2822 202e .... ") (" . │ │ │ -00008280: 2024 6368 6563 6b50 202e 2022 2529 222c $checkP . "%)", │ │ │ -00008290: 0a09 0909 2020 2020 2022 2474 6578 7420 .... "$text │ │ │ -000082a0: 6c69 6e6b 6564 2066 696c 6573 2077 6572 linked files wer │ │ │ -000082b0: 6520 246c 696e 6b65 6446 696c 6573 2028 e $linkedFiles ( │ │ │ -000082c0: 2220 2e20 0a09 0909 2020 2020 2028 263a " . .... (&: │ │ │ -000082d0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($ │ │ │ -000082e0: 6c69 6e6b 6564 4669 6c65 7353 697a 6529 linkedFilesSize) │ │ │ -000082f0: 295b 305d 202e 2022 2922 5d29 3b0a 7d0a )[0] . ")"]);.}. │ │ │ -00008300: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -00008310: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00008320: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00008330: 2323 230a 2320 6765 7420 616c 6c20 6469 ###.# get all di │ │ │ -00008340: 7265 6374 6f72 6965 7320 746f 2061 2067 rectories to a g │ │ │ -00008350: 6976 656e 2072 656c 6174 6976 6520 7061 iven relative pa │ │ │ -00008360: 7468 2c20 6567 2e0a 2320 3c61 2f62 2f2f th, eg..# -> │ │ │ -00008380: 3c61 2f62 2f63 3e0a 7375 6220 6765 7452 .sub getR │ │ │ -00008390: 656c 5061 7468 730a 7b0a 2020 2020 6d79 elPaths.{. my │ │ │ -000083a0: 2024 7061 7468 203d 2073 6869 6674 3b0a $path = shift;. │ │ │ -000083b0: 0a20 2020 2024 7061 7468 203d 7e20 7323 . $path =~ s# │ │ │ -000083c0: 2f2f 232f 2367 3b0a 200a 2020 2020 6d79 //#/#g;. . my │ │ │ -000083d0: 2028 4070 6172 7473 2920 3d20 7370 6c69 (@parts) = spli │ │ │ -000083e0: 7428 272f 272c 2024 7061 7468 293b 0a20 t('/', $path);. │ │ │ -000083f0: 2020 206d 7920 2840 7265 7329 3b0a 2020 my (@res);. │ │ │ -00008400: 2020 666f 7220 286d 7920 246e 203d 2030 for (my $n = 0 │ │ │ -00008410: 203b 2024 6e20 3c20 4070 6172 7473 203b ; $n < @parts ; │ │ │ -00008420: 2024 6e2b 2b29 0a20 2020 207b 0a09 7075 $n++). {..pu │ │ │ -00008430: 7368 2040 7265 732c 206a 6f69 6e28 272f sh @res, join('/ │ │ │ -00008440: 272c 2040 7061 7274 735b 302e 2e24 6e5d ', @parts[0..$n] │ │ │ -00008450: 293b 0a20 2020 207d 0a0a 2020 2020 7265 );. }.. re │ │ │ -00008460: 7475 726e 2040 7265 733b 0a7d 0a turn @res;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7043 6865 636b 4261 636b 7570 0a pCheckBackup. │ │ ├── ./usr/bin/storeBackupCheckSource │ │ │ @@ -1,832 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...$mai │ │ │ -00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ -00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ -00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use │ │ │ -00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn │ │ │ -00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib │ │ │ -00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f │ │ │ -00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. │ │ │ -00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. │ │ │ -00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se │ │ │ -00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink │ │ │ -000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo │ │ │ -000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel │ │ │ -000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f │ │ │ -000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh │ │ │ -000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file).. │ │ │ -000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link │ │ │ -00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file │ │ │ -00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub │ │ │ -00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1) │ │ │ -00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne "/").. {. │ │ │ -00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\ │ │ │ -00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. │ │ │ -00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. │ │ │ -00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f │ │ │ -00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. │ │ │ -00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, │ │ │ -000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF │ │ │ -000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);.. │ │ │ -000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = "/$file" │ │ │ -000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR "<$file> do │ │ │ -00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\n" │ │ │ -00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. } │ │ │ -00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= "/ │ │ │ -00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib"; │ │ │ -00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den │ │ │ -00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. │ │ │ -00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = ` │ │ │ -00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c │ │ │ -00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. │ │ │ -00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir │ │ │ -000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs │ │ │ -000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir; │ │ │ -000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir; │ │ │ -000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli │ │ │ -000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir("$absDi │ │ │ -00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file"));. } │ │ │ -00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ -00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR "< │ │ │ -00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e │ │ │ -00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\n" │ │ │ -00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp │ │ │ -00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. │ │ │ -00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif │ │ │ -00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return ( │ │ │ -00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle │ │ │ -000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\// │ │ │ -000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf │ │ │ -000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname. │ │ │ -000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $ │ │ │ -000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~ │ │ │ -000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\/(.*)$/s │ │ │ -00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/' │ │ │ -00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '') │ │ │ -00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; │ │ │ -00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall │ │ │ -00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename │ │ │ -00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di │ │ │ -00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my │ │ │ -00000770: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = │ │ │ -00000780: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un │ │ │ -00000790: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, "$re │ │ │ -000007a0: 7122 3b0a 0a0a 0a72 6571 7569 7265 2027 q";....require ' │ │ │ -000007b0: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl'; │ │ │ -000007c0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO │ │ │ -000007d0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi │ │ │ -000007e0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r │ │ │ -000007f0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version. │ │ │ -00000800: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi │ │ │ -00000810: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi │ │ │ -00000820: 7265 2027 7374 6f72 6542 6163 6b75 704c re 'storeBackupL │ │ │ -00000830: 6962 2e70 6c27 3b0a 0a6d 7920 2463 6865 ib.pl';..my $che │ │ │ -00000840: 636b 5375 6d46 696c 6520 3d20 272e 6d64 ckSumFile = '.md │ │ │ -00000850: 3543 6865 636b 5375 6d73 273b 0a0a 0a3d 5CheckSums';...= │ │ │ -00000860: 6865 6164 3120 4e41 4d45 0a0a 7374 6f72 head1 NAME..stor │ │ │ -00000870: 6542 6163 6b75 7043 6865 636b 536f 7572 eBackupCheckSour │ │ │ -00000880: 6365 2e70 6c20 2d20 636f 6d70 6172 6573 ce.pl - compares │ │ │ -00000890: 2075 6e63 6861 6765 6420 6669 6c65 7320 unchaged files │ │ │ -000008a0: 696e 2073 6f75 7263 6520 7769 7468 2074 in source with t │ │ │ -000008b0: 6865 6972 0a20 2020 2020 2020 2020 2020 heir. │ │ │ -000008c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000008d0: 206d 6435 2073 756d 7320 696e 2074 6865 md5 sums in the │ │ │ -000008e0: 2062 6163 6b75 700a 0a3d 6865 6164 3120 backup..=head1 │ │ │ -000008f0: 4445 5343 5249 5054 494f 4e0a 0a54 6865 DESCRIPTION..The │ │ │ -00000900: 2074 6f6f 6c20 6973 2069 6e74 656e 6465 tool is intende │ │ │ -00000910: 6420 746f 2066 696e 6420 6669 6c65 7320 d to find files │ │ │ -00000920: 696e 2074 6865 2073 6f75 7263 6520 7468 in the source th │ │ │ -00000930: 6174 206d 6967 6874 2068 6176 6520 6368 at might have ch │ │ │ -00000940: 616e 6765 6420 6f76 6572 200a 7469 6d65 anged over .time │ │ │ -00000950: 2077 6974 686f 7574 2074 6865 2075 7365 without the use │ │ │ -00000960: 7273 2069 6e74 6572 6163 7469 6f6e 206f rs interaction o │ │ │ -00000970: 7220 6b6e 6f77 6c65 6467 652c 2066 6f72 r knowledge, for │ │ │ -00000980: 2065 7861 6d70 6c65 2062 7920 6269 7420 example by bit │ │ │ -00000990: 726f 742e 0a0a 4966 2061 2066 696c 6520 rot...If a file │ │ │ -000009a0: 6973 2075 6e63 6861 6e67 6564 2028 7361 is unchanged (sa │ │ │ -000009b0: 6d65 2063 7469 6d65 2c20 6d74 696d 652c me ctime, mtime, │ │ │ -000009c0: 2073 697a 6529 2069 6e20 7468 6520 736f size) in the so │ │ │ -000009d0: 7572 6365 2064 6972 6563 746f 7279 0a63 urce directory.c │ │ │ -000009e0: 6f6d 7061 7265 6420 746f 2074 6865 2062 ompared to the b │ │ │ -000009f0: 6163 6b75 702c 2069 743a 0a0a 2d20 7072 ackup, it:..- pr │ │ │ -00000a00: 696e 7473 2061 6e20 4552 524f 5220 6d65 ints an ERROR me │ │ │ -00000a10: 7373 6167 6520 6966 2074 6865 206d 6435 ssage if the md5 │ │ │ -00000a20: 2073 756d 2064 6966 6665 7273 0a0a 2d20 sum differs..- │ │ │ -00000a30: 7072 696e 7473 2061 2057 4152 4e49 4e47 prints a WARNING │ │ │ -00000a40: 2069 6620 7065 726d 6973 7369 6f6e 732c if permissions, │ │ │ -00000a50: 2075 6964 206f 7220 6769 6420 6469 6666 uid or gid diff │ │ │ -00000a60: 6572 730a 0a2d 2070 7269 6e74 7320 4d49 ers..- prints MI │ │ │ -00000a70: 5353 494e 4720 6966 2066 696c 6520 6973 SSING if file is │ │ │ -00000a80: 206e 6f74 2069 6e20 7468 6520 736f 7572 not in the sour │ │ │ -00000a90: 6365 2064 6972 6563 746f 7279 2028 6f70 ce directory (op │ │ │ -00000aa0: 7469 6f6e 202d 7629 0a0a 2d20 7072 696e tion -v)..- prin │ │ │ -00000ab0: 7473 2049 4e46 4f20 6966 2066 696c 6520 ts INFO if file │ │ │ -00000ac0: 6973 2069 6465 6e74 6963 616c 2028 6f70 is identical (op │ │ │ -00000ad0: 7469 6f6e 202d 7629 0a0a 3d68 6561 6431 tion -v)..=head1 │ │ │ -00000ae0: 2053 594e 4f50 5349 530a 0a20 2020 2073 SYNOPSIS.. s │ │ │ -00000af0: 746f 7265 4261 636b 7570 4368 6563 6b53 toreBackupCheckS │ │ │ -00000b00: 6f75 7263 652e 706c 202d 7320 736f 7572 ource.pl -s sour │ │ │ -00000b10: 6365 4469 7220 2d62 2073 696e 676c 6542 ceDir -b singleB │ │ │ -00000b20: 6163 6b75 7044 6972 205b 2d76 5d0a 0920 ackupDir [-v].. │ │ │ -00000b30: 2020 2020 205b 2d77 2066 696c 6550 7265 [-w filePre │ │ │ -00000b40: 6669 785d 0a09 2020 2020 2020 5b2d 2d6c fix].. [--l │ │ │ -00000b50: 6f67 4669 6c65 0a09 2020 2020 2020 205b ogFile.. [ │ │ │ -00000b60: 2d2d 706c 7573 4c6f 6753 7464 6f75 745d --plusLogStdout] │ │ │ -00000b70: 205b 2d2d 7375 7070 7265 7373 5469 6d65 [--suppressTime │ │ │ -00000b80: 5d20 5b2d 6d20 6d61 7846 696c 656c 656e ] [-m maxFilelen │ │ │ -00000b90: 5d0a 0920 2020 2020 2020 5b5b 2d6e 206e ].. [[-n n │ │ │ -00000ba0: 6f4f 664f 6c64 4669 6c65 735d 207c 205b oOfOldFiles] | [ │ │ │ -00000bb0: 2d2d 7361 7665 4c6f 6773 5d5d 0a0a 3d68 --saveLogs]]..=h │ │ │ -00000bc0: 6561 6431 204f 5054 494f 4e53 0a0a 3d6f ead1 OPTIONS..=o │ │ │ -00000bd0: 7665 7220 380a 0a3d 6974 656d 2042 3c2d ver 8..=item B<- │ │ │ -00000be0: 2d73 6f75 7263 6544 6972 3e2c 2042 3c2d -sourceDir>, B<- │ │ │ -00000bf0: 733e 0a0a 2020 2020 736f 7572 6365 2064 s>.. source d │ │ │ -00000c00: 6972 6563 746f 7279 206f 6620 6261 636b irectory of back │ │ │ -00000c10: 7570 2077 6865 6e20 7275 6e6e 696e 6720 up when running │ │ │ -00000c20: 7374 6f72 6542 6163 6b75 702e 706c 0a0a storeBackup.pl.. │ │ │ -00000c30: 3d69 7465 6d20 423c 2d2d 7369 6e67 6c65 =item B<--single │ │ │ -00000c40: 4261 636b 7570 4469 723e 2c20 423c 2d62 BackupDir>, B<-b │ │ │ -00000c50: 3e0a 0a20 2020 2064 6972 6563 746f 7279 >.. directory │ │ │ -00000c60: 206f 6620 7468 6520 6261 636b 7570 2074 of the backup t │ │ │ -00000c70: 6f20 636f 6d70 6169 7265 2073 6f75 7263 o compaire sourc │ │ │ -00000c80: 6544 6972 2077 6974 680a 2020 2020 7468 eDir with. th │ │ │ -00000c90: 6973 206d 7573 7420 6265 202a 6f6e 652a is must be *one* │ │ │ -00000ca0: 2073 696e 676c 6520 6261 636b 7570 2064 single backup d │ │ │ -00000cb0: 6972 6563 746f 7279 0a20 2020 2028 6567 irectory. (eg │ │ │ -00000cc0: 2e20 3230 3132 2e30 382e 3038 5f30 322e . 2012.08.08_02. │ │ │ -00000cd0: 3030 2e31 3129 0a0a 3d69 7465 6d20 423c 00.11)..=item B< │ │ │ -00000ce0: 2d2d 7665 7262 6f73 653e 2c20 423c 2d76 --verbose>, B<-v │ │ │ -00000cf0: 3e0a 0a20 2020 2061 6c73 6f20 7072 696e >.. also prin │ │ │ -00000d00: 7420 706f 7369 7469 7665 206d 6573 7361 t positive messa │ │ │ -00000d10: 6765 7320 2866 696c 6520 6973 2069 6465 ges (file is ide │ │ │ -00000d20: 6e74 6963 616c 2069 6e20 736f 7572 6365 ntical in source │ │ │ -00000d30: 2061 6e64 2062 6163 6b75 7029 0a0a 3d69 and backup)..=i │ │ │ -00000d40: 7465 6d20 423c 2d2d 7772 6f6e 6746 696c tem B<--wrongFil │ │ │ -00000d50: 6554 6162 6c65 733e 2c20 423c 2d77 3e0a eTables>, B<-w>. │ │ │ -00000d60: 0a20 2020 2077 7269 7465 2066 696c 656e . write filen │ │ │ -00000d70: 616d 6573 2077 6974 6820 6465 7465 6374 ames with detect │ │ │ -00000d80: 6564 2066 6175 6c74 7320 696e 2072 6567 ed faults in reg │ │ │ -00000d90: 756c 6172 2066 696c 6573 2066 6f72 0a20 ular files for. │ │ │ -00000da0: 2020 206c 6174 6572 2062 7567 2066 6978 later bug fix │ │ │ -00000db0: 696e 6720 286e 6f74 2061 7574 6f6d 6174 ing (not automat │ │ │ -00000dc0: 6564 290a 2020 2020 7061 7261 6d65 7465 ed). paramete │ │ │ -00000dd0: 7220 746f 2074 6869 7320 6f70 7469 6f6e r to this option │ │ │ -00000de0: 2069 7320 6120 6669 6c65 2070 7265 6669 is a file prefi │ │ │ -00000df0: 780a 2020 2020 6567 2e20 6966 2074 6865 x. eg. if the │ │ │ -00000e00: 2066 696c 6520 7072 6566 6978 2069 7320 file prefix is │ │ │ -00000e10: 272f 746d 702f 6275 6773 532d 272c 2074 '/tmp/bugsS-', t │ │ │ -00000e20: 6865 2066 6f6c 6c6f 7769 6e67 2066 696c he following fil │ │ │ -00000e30: 6573 2061 7265 0a20 2020 2067 656e 6572 es are. gener │ │ │ -00000e40: 6174 6564 3a0a 2020 2020 2f74 6d70 2f62 ated:. /tmp/b │ │ │ -00000e50: 7567 7353 2d66 696c 6573 2e6d 6973 7369 ugsS-files.missi │ │ │ -00000e60: 6e67 2e74 7874 0a20 2020 202f 746d 702f ng.txt. /tmp/ │ │ │ -00000e70: 6275 6773 532d 6d64 3573 756d 732e 7772 bugsS-md5sums.wr │ │ │ -00000e80: 6f6e 672e 7478 740a 0a3d 6974 656d 2042 ong.txt..=item B │ │ │ -00000e90: 3c2d 2d6c 6f67 4669 6c65 3e2c 2042 3c2d <--logFile>, B<- │ │ │ -00000ea0: 6c3e 0a0a 2020 2020 6c6f 6746 696c 652c l>.. logFile, │ │ │ -00000eb0: 2044 6566 6175 6c74 3a20 7374 646f 7574 Default: stdout │ │ │ -00000ec0: 0a0a 3d69 7465 6d20 423c 2d2d 706c 7573 ..=item B<--plus │ │ │ -00000ed0: 4c6f 6753 7464 6f75 743e 0a0a 2020 2020 LogStdout>.. │ │ │ -00000ee0: 6966 2079 6f75 2073 7065 6369 6679 2061 if you specify a │ │ │ -00000ef0: 206c 6f67 2066 696c 6520 7769 7468 202d log file with - │ │ │ -00000f00: 2d6c 6f67 4669 6c65 2079 6f75 2063 616e -logFile you can │ │ │ -00000f10: 0a20 2020 2061 6464 6974 696f 6e61 6c6c . additionall │ │ │ -00000f20: 7920 7072 696e 7420 7468 6520 6f75 7470 y print the outp │ │ │ -00000f30: 7574 2074 6f20 5354 444f 5554 2077 6974 ut to STDOUT wit │ │ │ -00000f40: 6820 7468 6973 2066 6c61 670a 0a3d 6974 h this flag..=it │ │ │ -00000f50: 656d 2042 3c2d 2d73 7570 7072 6573 7354 em B<--suppressT │ │ │ -00000f60: 696d 653e 0a0a 2020 2020 7375 7070 7265 ime>.. suppre │ │ │ -00000f70: 7373 206f 7574 7075 7420 6f66 2074 696d ss output of tim │ │ │ -00000f80: 6520 696e 206c 6f67 6669 6c65 0a0a 3d69 e in logfile..=i │ │ │ -00000f90: 7465 6d20 423c 2d2d 6d61 7846 696c 656c tem B<--maxFilel │ │ │ -00000fa0: 656e 3e2c 2042 3c2d 6d3e 0a0a 2020 2020 en>, B<-m>.. │ │ │ -00000fb0: 6d61 7869 6d61 6c20 6c65 6e67 7468 206f maximal length o │ │ │ -00000fc0: 6620 6c6f 6720 6669 6c65 2c20 6465 6661 f log file, defa │ │ │ -00000fd0: 756c 7420 3d20 3165 360a 0a3d 6974 656d ult = 1e6..=item │ │ │ -00000fe0: 2042 3c2d 2d6e 6f4f 664f 6c64 4669 6c65 B<--noOfOldFile │ │ │ -00000ff0: 733e 2c20 423c 2d6e 3e0a 0a20 2020 206e s>, B<-n>.. n │ │ │ -00001000: 756d 6265 7220 6f66 206f 6c64 206c 6f67 umber of old log │ │ │ -00001010: 2066 696c 6573 2c20 6465 6661 756c 7420 files, default │ │ │ -00001020: 3d20 350a 0a3d 6974 656d 2042 3c2d 2d73 = 5..=item B<--s │ │ │ -00001030: 6176 654c 6f67 733e 0a0a 2020 2020 7361 aveLogs>.. sa │ │ │ -00001040: 7665 206c 6f67 2066 696c 6573 2077 6974 ve log files wit │ │ │ -00001050: 6820 6461 7465 2061 6e64 2074 696d 6520 h date and time │ │ │ -00001060: 696e 7374 6561 6420 6f66 2064 656c 6574 instead of delet │ │ │ -00001070: 696e 6720 7468 650a 2020 2020 6f6c 6420 ing the. old │ │ │ -00001080: 2877 6974 6820 5b2d 6e6f 4f66 4f6c 6446 (with [-noOfOldF │ │ │ -00001090: 696c 6573 5d29 0a0a 3d69 7465 6d20 423c iles])..=item B< │ │ │ -000010a0: 2d2d 636f 6d70 7265 7373 5769 7468 3e0a --compressWith>. │ │ │ -000010b0: 0a20 2020 2063 6f6d 7072 6573 7320 7361 . compress sa │ │ │ -000010c0: 7665 6420 6c6f 6720 6669 6c65 7320 2865 ved log files (e │ │ │ -000010d0: 2e67 2e20 7769 7468 2027 677a 6970 202d .g. with 'gzip - │ │ │ -000010e0: 3927 292e 0a20 2020 2064 6566 6175 6c74 9').. default │ │ │ -000010f0: 2069 7320 2762 7a69 7032 270a 0a3d 6261 is 'bzip2'..=ba │ │ │ -00001100: 636b 0a0a 3d68 6561 6431 2043 4f50 5952 ck..=head1 COPYR │ │ │ -00001110: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright │ │ │ -00001120: 2863 2920 3230 3132 2d32 3032 3220 6279 (c) 2012-2022 by │ │ │ -00001130: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla │ │ │ -00001140: 6573 2028 7365 6520 5245 4144 4d45 292e es (see README). │ │ │ -00001150: 0a50 7562 6c69 7368 6564 2075 6e64 6572 .Published under │ │ │ -00001160: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -00001170: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -00001180: 7633 206f 7220 616e 7920 6c61 7465 7220 v3 or any later │ │ │ -00001190: 7665 7273 696f 6e0a 0a3d 6375 740a 0a6d version..=cut..m │ │ │ -000011a0: 7920 2448 656c 7020 3d20 263a 3a67 6574 y $Help = &::get │ │ │ -000011b0: 506f 6432 5465 7874 2824 3029 3b0a 0a26 Pod2Text($0);..& │ │ │ -000011c0: 7072 696e 7456 6572 7369 6f6e 285c 4041 printVersion(\@A │ │ │ -000011d0: 5247 562c 2027 2d56 272c 2027 2d2d 7665 RGV, '-V', '--ve │ │ │ -000011e0: 7273 696f 6e27 293b 0a0a 6d79 2024 4368 rsion');..my $Ch │ │ │ -000011f0: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che │ │ │ -00001200: 636b 5061 7261 6d2d 3e6e 6577 2827 2d61 ckParam->new('-a │ │ │ -00001210: 6c6c 6f77 4c69 7374 7327 203d 3e20 276e llowLists' => 'n │ │ │ -00001220: 6f27 2c0a 0909 2020 2020 272d 6c69 7374 o',... '-list │ │ │ -00001230: 2720 3d3e 205b 4f70 7469 6f6e 2d3e 6e65 ' => [Option->ne │ │ │ -00001240: 7728 272d 6e61 6d65 2720 3d3e 2027 7369 w('-name' => 'si │ │ │ -00001250: 6e67 6c65 4261 636b 7570 4469 7227 2c0a ngleBackupDir',. │ │ │ -00001260: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001270: 7469 6f6e 2720 3d3e 2027 2d62 272c 0a09 tion' => '-b',.. │ │ │ -00001280: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00001290: 6173 2720 3d3e 2027 2d2d 7369 6e67 6c65 as' => '--single │ │ │ -000012a0: 4261 636b 7570 4469 7227 2c0a 0909 0909 BackupDir',..... │ │ │ -000012b0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -000012c0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... │ │ │ -000012d0: 2027 2d6d 7573 745f 6265 2720 3d3e 2027 '-must_be' => ' │ │ │ -000012e0: 7965 7327 292c 0a20 2020 2020 2020 2020 yes'),. │ │ │ -000012f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001300: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n │ │ │ -00001310: 6577 2827 2d6e 616d 6527 203d 3e20 2773 ew('-name' => 's │ │ │ -00001320: 6f75 7263 6544 6972 272c 0a09 0909 0909 ourceDir',...... │ │ │ -00001330: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00001340: 203d 3e20 272d 7327 2c0a 0909 0909 0920 => '-s',...... │ │ │ -00001350: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00001360: 3e20 272d 2d73 6f75 7263 6544 6972 272c > '--sourceDir', │ │ │ -00001370: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -00001380: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',.... │ │ │ -00001390: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be' │ │ │ -000013a0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -000013b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000013c0: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose' │ │ │ -000013d0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000013e0: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v', │ │ │ -000013f0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00001400: 6c69 6173 2720 3d3e 2027 2d2d 7665 7262 lias' => '--verb │ │ │ -00001410: 6f73 6527 292c 0a09 0909 094f 7074 696f ose'),.....Optio │ │ │ -00001420: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001430: 3e20 2777 726f 6e67 4669 6c65 5461 626c > 'wrongFileTabl │ │ │ -00001440: 6573 272c 0a09 0909 0909 2020 2020 272d es',...... '- │ │ │ -00001450: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001460: 7727 2c0a 0909 0909 0920 2020 2027 2d63 w',...... '-c │ │ │ -00001470: 6c5f 616c 6961 7327 203d 3e20 272d 2d77 l_alias' => '--w │ │ │ -00001480: 726f 6e67 4669 6c65 5461 626c 6573 272c rongFileTables', │ │ │ -00001490: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -000014a0: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ -000014b0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000014c0: 6e61 6d65 2720 3d3e 2027 6c6f 6746 696c name' => 'logFil │ │ │ -000014d0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ -000014e0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d6c l_option' => '-l │ │ │ -000014f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001500: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6c6f _alias' => '--lo │ │ │ -00001510: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ -00001520: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ -00001530: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o │ │ │ -00001540: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not │ │ │ -00001550: 5b69 6e74 6572 6163 7469 7665 5d27 292c [interactive]'), │ │ │ -00001560: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001570: 2827 2d6e 616d 6527 203d 3e20 2770 6c75 ('-name' => 'plu │ │ │ -00001580: 734c 6f67 5374 646f 7574 272c 0a09 0909 sLogStdout',.... │ │ │ -00001590: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -000015a0: 6e27 203d 3e20 272d 2d70 6c75 734c 6f67 n' => '--plusLog │ │ │ -000015b0: 5374 646f 7574 272c 0a09 0909 0909 2020 Stdout',...... │ │ │ -000015c0: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => │ │ │ -000015d0: 275b 6c6f 6746 696c 655d 2729 2c0a 0909 '[logFile]'),... │ │ │ -000015e0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000015f0: 6e61 6d65 2720 3d3e 2027 7375 7070 7265 name' => 'suppre │ │ │ -00001600: 7373 5469 6d65 272c 0a09 0909 0909 2020 ssTime',...... │ │ │ -00001610: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00001620: 3e20 272d 2d73 7570 7072 6573 7354 696d > '--suppressTim │ │ │ -00001630: 6527 292c 0a09 0909 094f 7074 696f 6e2d e'),.....Option- │ │ │ -00001640: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00001650: 276d 6178 4669 6c65 6c65 6e27 2c0a 0909 'maxFilelen',... │ │ │ -00001660: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001670: 6f6e 2720 3d3e 2027 2d6d 272c 0a09 0909 on' => '-m',.... │ │ │ -00001680: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -00001690: 2720 3d3e 2027 2d2d 6d61 7846 696c 656c ' => '--maxFilel │ │ │ -000016a0: 656e 272c 0a09 0909 0909 2020 2020 272d en',...... '- │ │ │ -000016b0: 6465 6661 756c 7427 203d 3e20 3165 362c default' => 1e6, │ │ │ -000016c0: 0a09 0909 0909 2020 2020 272d 7061 7474 ...... '-patt │ │ │ -000016d0: 6572 6e27 203d 3e20 275c 415b 655c 645d ern' => '\A[e\d] │ │ │ -000016e0: 2b5c 5a27 2c0a 2020 2020 2020 2020 2020 +\Z',. │ │ │ -000016f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001700: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001710: 2020 272d 6f6e 6c79 5f69 6627 203d 3e27 '-only_if' =>' │ │ │ -00001720: 5b6c 6f67 4669 6c65 5d27 292c 0a09 0909 [logFile]'),.... │ │ │ -00001730: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00001740: 616d 6527 203d 3e20 276e 6f4f 664f 6c64 ame' => 'noOfOld │ │ │ -00001750: 4669 6c65 7327 2c0a 0909 0909 0920 2020 Files',...... │ │ │ -00001760: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001770: 2027 2d6e 272c 0a09 0909 0909 2020 2020 '-n',...... │ │ │ -00001780: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001790: 2d2d 6e6f 4f66 4f6c 6446 696c 6573 272c --noOfOldFiles', │ │ │ -000017a0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -000017b0: 756c 7427 203d 3e20 2735 272c 0a09 0909 ult' => '5',.... │ │ │ -000017c0: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -000017d0: 203d 3e20 275c 415c 642b 5c5a 272c 0a20 => '\A\d+\Z',. │ │ │ -000017e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000017f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001800: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl │ │ │ -00001810: 795f 6966 2720 3d3e 225b 6c6f 6746 696c y_if' =>"[logFil │ │ │ -00001820: 655d 2229 2c0a 2020 2020 2020 2020 2020 e]"),. │ │ │ -00001830: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001840: 2020 2020 2020 4f70 7469 6f6e 2d3e 6e65 Option->ne │ │ │ -00001850: 7728 272d 6e61 6d65 2720 3d3e 2027 7361 w('-name' => 'sa │ │ │ -00001860: 7665 4c6f 6773 272c 0a09 0909 0909 2020 veLogs',...... │ │ │ -00001870: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00001880: 3e20 272d 2d73 6176 654c 6f67 7327 2c0a > '--saveLogs',. │ │ │ -00001890: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000018a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000018b0: 2020 2020 2020 2020 2020 2020 272d 6465 '-de │ │ │ -000018c0: 6661 756c 7427 203d 3e20 276e 6f27 2c0a fault' => 'no',. │ │ │ -000018d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000018e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000018f0: 2020 2020 2020 2020 2020 2020 272d 6f6e '-on │ │ │ -00001900: 6c79 5f69 6627 203d 3e20 275b 6c6f 6746 ly_if' => '[logF │ │ │ -00001910: 696c 655d 2729 2c0a 2020 2020 2020 2020 ile]'),. │ │ │ -00001920: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001930: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00001940: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001950: 636f 6d70 7265 7373 5769 7468 272c 0a09 compressWith',.. │ │ │ -00001960: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00001970: 696f 6e27 203d 3e20 272d 2d63 6f6d 7072 ion' => '--compr │ │ │ -00001980: 6573 7357 6974 6827 2c0a 0909 0909 0920 essWith',...... │ │ │ -00001990: 2020 2027 2d71 756f 7465 4576 616c 2720 '-quoteEval' │ │ │ -000019a0: 3d3e 2027 7965 7327 2c0a 2020 2020 2020 => 'yes',. │ │ │ -000019b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000019c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000019d0: 2020 2020 2020 272d 6465 6661 756c 7427 '-default' │ │ │ -000019e0: 203d 3e20 2762 7a69 7032 272c 0a20 2020 => 'bzip2',. │ │ │ -000019f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001a00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001a10: 2020 2020 2020 2020 2027 2d6f 6e6c 795f '-only_ │ │ │ -00001a20: 6966 2720 3d3e 275b 6c6f 6746 696c 655d if' =>'[logFile] │ │ │ -00001a30: 2729 2c0a 2320 6869 6464 656e 206f 7074 '),.# hidden opt │ │ │ -00001a40: 696f 6e73 0a23 2075 7365 6420 6279 2073 ions.# used by s │ │ │ -00001a50: 746f 7265 4261 636b 7570 4d6f 756e 742e toreBackupMount. │ │ │ -00001a60: 706c 0a09 0909 094f 7074 696f 6e2d 3e6e pl.....Option->n │ │ │ -00001a70: 6577 2827 2d6e 616d 6527 203d 3e20 2777 ew('-name' => 'w │ │ │ -00001a80: 7269 7465 546f 4e61 6d65 6450 6970 6527 riteToNamedPipe' │ │ │ -00001a90: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001aa0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7772 option' => '--wr │ │ │ -00001ab0: 6974 6554 6f4e 616d 6564 5069 7065 272c iteToNamedPipe', │ │ │ -00001ac0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -00001ad0: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',.... │ │ │ -00001ae0: 0909 2020 2020 272d 6869 6464 656e 2720 .. '-hidden' │ │ │ -00001af0: 3d3e 2027 7965 7327 290a 0909 0909 5d29 => 'yes').....]) │ │ │ -00001b00: 3b0a 0a24 4368 6563 6b50 6172 2d3e 6368 ;..$CheckPar->ch │ │ │ -00001b10: 6563 6b28 272d 6172 6776 2720 3d3e 205c eck('-argv' => \ │ │ │ -00001b20: 4041 5247 562c 0a20 2020 2020 2020 2020 @ARGV,. │ │ │ -00001b30: 2020 2020 2020 2020 272d 6865 6c70 2720 '-help' │ │ │ -00001b40: 3d3e 2024 4865 6c70 0a20 2020 2020 2020 => $Help. │ │ │ -00001b50: 2020 2020 2020 2020 2020 293b 0a0a 0a6d );...m │ │ │ -00001b60: 7920 2473 696e 676c 6542 6163 6b75 7044 y $singleBackupD │ │ │ -00001b70: 6972 203d 2024 4368 6563 6b50 6172 2d3e ir = $CheckPar-> │ │ │ -00001b80: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s │ │ │ -00001b90: 696e 676c 6542 6163 6b75 7044 6972 2729 ingleBackupDir') │ │ │ -00001ba0: 3b0a 6d79 2024 736f 7572 6365 4469 7220 ;.my $sourceDir │ │ │ -00001bb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001bc0: 4f70 7457 6974 6850 6172 2827 736f 7572 OptWithPar('sour │ │ │ -00001bd0: 6365 4469 7227 293b 0a6d 7920 2476 6572 ceDir');.my $ver │ │ │ -00001be0: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar │ │ │ -00001bf0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00001c00: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m │ │ │ -00001c10: 7920 2477 726f 6e67 4669 6c65 5461 626c y $wrongFileTabl │ │ │ -00001c20: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -00001c30: 6765 744f 7074 5769 7468 5061 7228 2777 getOptWithPar('w │ │ │ -00001c40: 726f 6e67 4669 6c65 5461 626c 6573 2729 rongFileTables') │ │ │ -00001c50: 3b0a 6d79 2024 6c6f 6746 696c 6520 3d20 ;.my $logFile = │ │ │ -00001c60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001c70: 7457 6974 6850 6172 2827 6c6f 6746 696c tWithPar('logFil │ │ │ -00001c80: 6527 293b 0a6d 7920 2470 6c75 734c 6f67 e');.my $plusLog │ │ │ -00001c90: 5374 646f 7574 203d 2024 4368 6563 6b50 Stdout = $CheckP │ │ │ -00001ca0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00001cb0: 7450 6172 2827 706c 7573 4c6f 6753 7464 tPar('plusLogStd │ │ │ -00001cc0: 6f75 7427 293b 0a6d 7920 2477 6974 6854 out');.my $withT │ │ │ -00001cd0: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check │ │ │ -00001ce0: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00001cf0: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT │ │ │ -00001d00: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime │ │ │ -00001d10: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? ' │ │ │ -00001d20: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my │ │ │ -00001d30: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C │ │ │ -00001d40: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00001d50: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel │ │ │ -00001d60: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl │ │ │ -00001d70: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP │ │ │ -00001d80: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00001d90: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles' │ │ │ -00001da0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs │ │ │ -00001db0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001dc0: 4f70 7457 6974 6850 6172 2827 7361 7665 OptWithPar('save │ │ │ -00001dd0: 4c6f 6773 2729 3b0a 2473 6176 654c 6f67 Logs');.$saveLog │ │ │ -00001de0: 7320 3d20 2473 6176 654c 6f67 7320 3f20 s = $saveLogs ? │ │ │ -00001df0: 2779 6573 2720 3a20 276e 6f27 3b0a 6d79 'yes' : 'no';.my │ │ │ -00001e00: 2024 636f 6d70 7265 7373 5769 7468 203d $compressWith = │ │ │ -00001e10: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00001e20: 7074 5769 7468 5061 7228 2763 6f6d 7072 ptWithPar('compr │ │ │ -00001e30: 6573 7357 6974 6827 293b 0a23 2068 6964 essWith');.# hid │ │ │ -00001e40: 6465 6e20 6f70 7469 6f6e 730a 6d79 2024 den options.my $ │ │ │ -00001e50: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -00001e60: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00001e70: 744f 7074 5769 7468 5061 7228 2777 7269 tOptWithPar('wri │ │ │ -00001e80: 7465 546f 4e61 6d65 6450 6970 6527 293b teToNamedPipe'); │ │ │ -00001e90: 0a0a 0a6d 7920 2840 7061 7229 203d 2028 ...my (@par) = ( │ │ │ -00001ea0: 293b 0a69 6620 2864 6566 696e 6564 2024 );.if (defined $ │ │ │ -00001eb0: 6c6f 6746 696c 6529 0a7b 0a20 2020 2070 logFile).{. p │ │ │ -00001ec0: 7573 6820 4070 6172 2c20 2827 2d66 696c ush @par, ('-fil │ │ │ -00001ed0: 6527 203d 3e20 246c 6f67 4669 6c65 2c0a e' => $logFile,. │ │ │ -00001ee0: 0909 272d 6d75 6c74 6970 7269 6e74 2720 ..'-multiprint' │ │ │ -00001ef0: 3d3e 2027 7965 7327 293b 0a7d 0a65 6c73 => 'yes');.}.els │ │ │ -00001f00: 650a 7b0a 2020 2020 7075 7368 2040 7061 e.{. push @pa │ │ │ -00001f10: 722c 2028 272d 6669 6c65 6465 7363 7269 r, ('-filedescri │ │ │ -00001f20: 7074 6f72 272c 202a 5354 444f 5554 293b ptor', *STDOUT); │ │ │ -00001f30: 0a7d 0a0a 6d79 2028 2470 724c 6f67 4b69 .}..my ($prLogKi │ │ │ -00001f40: 6e64 2920 3d20 5b27 413a 4245 4749 4e27 nd) = ['A:BEGIN' │ │ │ -00001f50: 2c0a 0909 2020 2027 5a3a 454e 4427 2c0a ,... 'Z:END',. │ │ │ -00001f60: 0909 2020 2027 493a 494e 464f 272c 0a09 .. 'I:INFO',.. │ │ │ -00001f70: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION', │ │ │ -00001f80: 0a09 0920 2020 2757 3a57 4152 4e49 4e47 ... 'W:WARNING │ │ │ -00001f90: 272c 0a09 0920 2020 2745 3a45 5252 4f52 ',... 'E:ERROR │ │ │ -00001fa0: 275d 3b0a 6d79 2024 7072 696e 744c 6f67 '];.my $printLog │ │ │ -00001fb0: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new │ │ │ -00001fc0: 2827 2d6b 696e 6427 203d 3e20 2470 724c ('-kind' => $prL │ │ │ -00001fd0: 6f67 4b69 6e64 2c0a 0909 0920 2020 2020 ogKind,.... │ │ │ -00001fe0: 4070 6172 2c0a 0909 0920 2020 2020 272d @par,.... '- │ │ │ -00001ff0: 7769 7468 5469 6d65 2720 3d3e 2024 7769 withTime' => $wi │ │ │ -00002000: 7468 5469 6d65 2c0a 0909 0920 2020 2020 thTime,.... │ │ │ -00002010: 272d 6d61 7846 696c 656c 656e 2720 3d3e '-maxFilelen' => │ │ │ -00002020: 2024 6d61 7846 696c 656c 656e 2c0a 0909 $maxFilelen,... │ │ │ -00002030: 0920 2020 2020 272d 6e6f 4f66 4f6c 6446 . '-noOfOldF │ │ │ -00002040: 696c 6573 2720 3d3e 2024 6e6f 4f66 4f6c iles' => $noOfOl │ │ │ -00002050: 6446 696c 6573 2c0a 0909 0920 2020 2020 dFiles,.... │ │ │ -00002060: 272d 7361 7665 4c6f 6773 2720 3d3e 2024 '-saveLogs' => $ │ │ │ -00002070: 7361 7665 4c6f 6773 2c0a 0909 0920 2020 saveLogs,.... │ │ │ -00002080: 2020 272d 636f 6d70 7265 7373 5769 7468 '-compressWith │ │ │ -00002090: 2720 3d3e 2024 636f 6d70 7265 7373 5769 ' => $compressWi │ │ │ -000020a0: 7468 293b 0a0a 6d79 2024 7072 4c6f 6720 th);..my $prLog │ │ │ -000020b0: 3d20 7072 696e 744c 6f67 4d75 6c74 6970 = printLogMultip │ │ │ -000020c0: 6c65 2d3e 6e65 7728 272d 7072 4c6f 6773 le->new('-prLogs │ │ │ -000020d0: 2720 3d3e 205b 2470 7269 6e74 4c6f 675d ' => [$printLog] │ │ │ -000020e0: 293b 0a0a 6966 2028 2470 6c75 734c 6f67 );..if ($plusLog │ │ │ -000020f0: 5374 646f 7574 290a 7b0a 2020 2020 6d79 Stdout).{. my │ │ │ -00002100: 2024 7020 3d20 7072 696e 744c 6f67 2d3e $p = printLog-> │ │ │ -00002110: 6e65 7728 272d 6b69 6e64 2720 3d3e 2024 new('-kind' => $ │ │ │ -00002120: 7072 4c6f 674b 696e 642c 0a09 0909 2020 prLogKind,.... │ │ │ -00002130: 272d 6669 6c65 6465 7363 7269 7074 6f72 '-filedescriptor │ │ │ -00002140: 272c 202a 5354 444f 5554 293b 0a20 2020 ', *STDOUT);. │ │ │ -00002150: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p │ │ │ -00002160: 724c 6f67 7327 203d 3e20 5b24 705d 293b rLogs' => [$p]); │ │ │ -00002170: 0a7d 0a69 6620 2824 7772 6974 6554 6f4e .}.if ($writeToN │ │ │ -00002180: 616d 6564 5069 7065 290a 7b0a 2020 2020 amedPipe).{. │ │ │ -00002190: 6d79 2024 6e70 203d 2070 7269 6e74 4c6f my $np = printLo │ │ │ -000021a0: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' = │ │ │ -000021b0: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,... │ │ │ -000021c0: 0920 2020 272d 6669 6c65 2720 3d3e 2024 . '-file' => $ │ │ │ -000021d0: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -000021e0: 2c0a 0909 0920 2020 272d 6d61 7846 696c ,.... '-maxFil │ │ │ -000021f0: 656c 656e 2720 3d3e 2030 293b 0a20 2020 elen' => 0);. │ │ │ -00002200: 2024 7072 4c6f 672d 3e61 6464 2827 2d70 $prLog->add('-p │ │ │ -00002210: 724c 6f67 7327 203d 3e20 5b24 6e70 5d29 rLogs' => [$np]) │ │ │ -00002220: 3b0a 7d0a 0a0a 2470 724c 6f67 2d3e 7072 ;.}...$prLog->pr │ │ │ -00002230: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00002240: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str │ │ │ -00002250: 2720 3d3e 205b 2263 616e 6e6f 7420 6163 ' => ["cannot ac │ │ │ -00002260: 6365 7373 2073 6f75 7263 6544 6972 203c cess sourceDir < │ │ │ -00002270: 2473 6f75 7263 6544 6972 3e22 5d2c 0a09 $sourceDir>"],.. │ │ │ -00002280: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00002290: 2031 290a 2020 2020 756e 6c65 7373 202d 1). unless - │ │ │ -000022a0: 6420 2473 6f75 7263 6544 6972 3b0a 0a24 d $sourceDir;..$ │ │ │ -000022b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -000022c0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ -000022d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -000022e0: 7468 6973 2069 7320 6e6f 7420 6120 6675 this is not a fu │ │ │ -000022f0: 6c6c 2062 6163 6b75 7022 2c0a 0909 0920 ll backup",.... │ │ │ -00002300: 2270 6c65 6173 6520 7275 6e20 7374 6f72 "please run stor │ │ │ -00002310: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac │ │ │ -00002320: 6b75 702e 706c 206f 6e20 3c24 7369 6e67 kup.pl on <$sing │ │ │ -00002330: 6c65 4261 636b 7570 4469 723e 225d 2c0a leBackupDir>"],. │ │ │ -00002340: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00002350: 3e20 3129 0a20 2020 2069 6620 2d65 2022 > 1). if -e " │ │ │ -00002360: 2473 696e 676c 6542 6163 6b75 7044 6972 $singleBackupDir │ │ │ -00002370: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin │ │ │ -00002380: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2" │ │ │ -00002390: 3b0a 0a0a 2840 6d61 696e 3a3a 636c 6561 ;...(@main::clea │ │ │ -000023a0: 6e75 7029 203d 2028 2470 724c 6f67 2c20 nup) = ($prLog, │ │ │ -000023b0: 756e 6465 6629 3b0a 2453 4947 7b49 4e54 undef);.$SIG{INT │ │ │ -000023c0: 7d20 3d20 5c26 636c 6561 6e75 703b 0a24 } = \&cleanup;.$ │ │ │ -000023d0: 5349 477b 5445 524d 7d20 3d20 5c26 636c SIG{TERM} = \&cl │ │ │ -000023e0: 6561 6e75 703b 0a0a 0a24 7072 4c6f 672d eanup;...$prLog- │ │ │ -000023f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00002400: 3e20 2741 272c 0a09 2020 2020 2020 272d > 'A',.. '- │ │ │ -00002410: 7374 7227 203d 3e20 5b22 636f 6d70 6172 str' => ["compar │ │ │ -00002420: 696e 6720 3c24 7369 6e67 6c65 4261 636b ing <$singleBack │ │ │ -00002430: 7570 4469 723e 2077 6974 6820 3c24 736f upDir> with <$so │ │ │ -00002440: 7572 6365 4469 723e 225d 293b 0a24 7072 urceDir>"]);.$pr │ │ │ -00002450: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00002460: 6427 203d 3e20 2756 272c 0a09 2020 2020 d' => 'V',.. │ │ │ -00002470: 2020 272d 7374 7227 203d 3e20 5b22 7374 '-str' => ["st │ │ │ -00002480: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo │ │ │ -00002490: 7572 6365 2e70 6c2c 2024 6d61 696e 3a3a urce.pl, $main:: │ │ │ -000024a0: 5354 4f52 4542 4143 4b55 5056 4552 5349 STOREBACKUPVERSI │ │ │ -000024b0: 4f4e 225d 293b 0a0a 0a6d 7920 2472 6373 ON"]);...my $rcs │ │ │ -000024c0: 6620 3d20 7265 6164 4368 6563 6b53 756d f = readCheckSum │ │ │ -000024d0: 4669 6c65 2d3e 6e65 7728 272d 6368 6563 File->new('-chec │ │ │ -000024e0: 6b53 756d 4669 6c65 2720 3d3e 0a09 0909 kSumFile' =>.... │ │ │ -000024f0: 0920 2224 7369 6e67 6c65 4261 636b 7570 . "$singleBackup │ │ │ -00002500: 4469 722f 2463 6865 636b 5375 6d46 696c Dir/$checkSumFil │ │ │ -00002510: 6522 2c0a 0909 0909 2027 2d70 724c 6f67 e",..... '-prLog │ │ │ -00002520: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a24 ' => $prLog);..$ │ │ │ -00002530: 6d61 696e 3a3a 7766 7420 3d0a 2020 2020 main::wft =. │ │ │ -00002540: 7772 6974 6542 7567 7354 6f46 696c 6573 writeBugsToFiles │ │ │ -00002550: 2d3e 6e65 7728 272d 6669 6c65 5072 6566 ->new('-filePref │ │ │ -00002560: 6978 2720 3d3e 2024 7772 6f6e 6746 696c ix' => $wrongFil │ │ │ -00002570: 6554 6162 6c65 732c 0a09 0909 2020 272d eTables,.... '- │ │ │ -00002580: 6261 636b 7570 4469 7227 203d 3e20 263a backupDir' => &: │ │ │ -00002590: 3a61 6273 6f6c 7574 6550 6174 6828 2473 :absolutePath($s │ │ │ -000025a0: 6f75 7263 6544 6972 292c 0a09 0909 2020 ourceDir),.... │ │ │ -000025b0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -000025c0: 6f67 2c0a 0909 0920 2027 2d6d 6435 4d69 og,.... '-md5Mi │ │ │ -000025d0: 7373 696e 6727 203d 3e20 3029 3b0a 0a6d ssing' => 0);..m │ │ │ -000025e0: 7920 2824 6d64 3573 756d 2c20 2463 6f6d y ($md5sum, $com │ │ │ -000025f0: 7072 2c20 2464 6576 496e 6f64 652c 2024 pr, $devInode, $ │ │ │ -00002600: 696e 6f64 6542 6163 6b75 702c 2024 6374 inodeBackup, $ct │ │ │ -00002610: 696d 652c 2024 6d74 696d 652c 2024 6174 ime, $mtime, $at │ │ │ -00002620: 696d 652c 0a20 2020 2024 7369 7a65 2c20 ime,. $size, │ │ │ -00002630: 2475 6964 2c20 2467 6964 2c20 246d 6f64 $uid, $gid, $mod │ │ │ -00002640: 652c 2024 6669 6c65 6e61 6d65 293b 0a77 e, $filename);.w │ │ │ -00002650: 6869 6c65 2028 2828 246d 6435 7375 6d2c hile ((($md5sum, │ │ │ -00002660: 2024 636f 6d70 722c 2024 6465 7649 6e6f $compr, $devIno │ │ │ -00002670: 6465 2c20 2469 6e6f 6465 4261 636b 7570 de, $inodeBackup │ │ │ -00002680: 2c20 2463 7469 6d65 2c20 246d 7469 6d65 , $ctime, $mtime │ │ │ -00002690: 2c20 2461 7469 6d65 2c0a 0920 2473 697a , $atime,.. $siz │ │ │ -000026a0: 652c 2024 7569 642c 2024 6769 642c 2024 e, $uid, $gid, $ │ │ │ -000026b0: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename) │ │ │ -000026c0: 203d 2024 7263 7366 2d3e 6e65 7874 4c69 = $rcsf->nextLi │ │ │ -000026d0: 6e65 2829 2920 3e20 3029 0a7b 0a20 2020 ne()) > 0).{. │ │ │ -000026e0: 2069 6620 2824 6465 7649 6e6f 6465 203d if ($devInode = │ │ │ -000026f0: 7e20 2f5c 4144 4556 4943 452f 290a 2020 ~ /\ADEVICE/). │ │ │ -00002700: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri │ │ │ -00002710: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00002720: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -00002730: 2720 3d3e 205b 2269 676e 6f72 696e 6720 ' => ["ignoring │ │ │ -00002740: 7374 6f72 6564 2064 6576 6963 6520 3c24 stored device <$ │ │ │ -00002750: 6669 6c65 6e61 6d65 3e22 5d29 0a09 2020 filename>"]).. │ │ │ -00002760: 2020 6966 2024 7665 7262 6f73 653b 0a09 if $verbose;.. │ │ │ -00002770: 6e65 7874 3b0a 2020 2020 7d0a 0a20 2020 next;. }.. │ │ │ -00002780: 206d 7920 2466 203d 2022 2473 6f75 7263 my $f = "$sourc │ │ │ -00002790: 6544 6972 2f24 6669 6c65 6e61 6d65 223b eDir/$filename"; │ │ │ -000027a0: 0a20 2020 2069 6620 286c 656e 6774 6828 . if (length( │ │ │ -000027b0: 246d 6435 7375 6d29 203d 3d20 3332 2920 $md5sum) == 32) │ │ │ -000027c0: 2020 2320 6e6f 726d 616c 2066 696c 650a # normal file. │ │ │ -000027d0: 2020 2020 7b0a 0923 2063 6865 636b 2069 {..# check i │ │ │ -000027e0: 6620 6974 2065 7869 7374 7320 7769 7468 f it exists with │ │ │ -000027f0: 2073 616d 6520 7469 6d65 2073 7461 6d70 same time stamp │ │ │ -00002800: 2069 6e20 736f 7572 6365 4469 720a 0969 in sourceDir..i │ │ │ -00002810: 6620 282d 6520 2466 290a 097b 0a09 2020 f (-e $f)..{.. │ │ │ -00002820: 2020 756e 6c65 7373 2028 2d72 2024 6629 unless (-r $f) │ │ │ -00002830: 0a09 2020 2020 7b0a 0909 2470 724c 6f67 .. {...$prLog │ │ │ -00002840: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00002850: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ -00002860: 2027 2d73 7472 2720 3d3e 205b 2266 696c '-str' => ["fil │ │ │ -00002870: 6520 3c24 663e 2065 7869 7374 7320 6275 e <$f> exists bu │ │ │ -00002880: 7420 6973 2075 6e72 6561 6461 626c 6522 t is unreadable" │ │ │ -00002890: 5d29 3b0a 0909 246d 6169 6e3a 3a77 6674 ]);...$main::wft │ │ │ -000028a0: 2d3e 7072 696e 7428 263a 3a61 6273 6f6c ->print(&::absol │ │ │ -000028b0: 7574 6550 6174 6828 2466 292c 2027 6669 utePath($f), 'fi │ │ │ -000028c0: 6c65 4d69 7373 696e 6727 293b 0a0a 0909 leMissing');.... │ │ │ -000028d0: 6e65 7874 3b0a 0920 2020 207d 0a09 2020 next;.. }.. │ │ │ -000028e0: 2020 6d79 2028 2461 6374 4d6f 6465 2c20 my ($actMode, │ │ │ -000028f0: 2461 6374 5569 642c 2024 6163 7447 6964 $actUid, $actGid │ │ │ -00002900: 2c20 2461 6374 4374 696d 652c 2024 6163 , $actCtime, $ac │ │ │ -00002910: 744d 7469 6d65 2c0a 0909 2461 6374 4174 tMtime,...$actAt │ │ │ -00002920: 696d 652c 2024 6163 7453 697a 6529 203d ime, $actSize) = │ │ │ -00002930: 0a09 0920 2020 2028 7374 6174 2824 6629 ... (stat($f) │ │ │ -00002940: 295b 322c 2034 2c20 352c 2031 302c 2039 )[2, 4, 5, 10, 9 │ │ │ -00002950: 2c20 382c 2037 5d3b 0a09 2020 2020 2461 , 8, 7];.. $a │ │ │ -00002960: 6374 4d6f 6465 203d 2030 2075 6e6c 6573 ctMode = 0 unles │ │ │ -00002970: 7320 2461 6374 4d6f 6465 3b0a 0920 2020 s $actMode;.. │ │ │ -00002980: 2024 6163 744d 6f64 6520 263d 2030 3737 $actMode &= 077 │ │ │ -00002990: 3737 3b0a 0a09 2020 2020 6966 2028 2463 77;... if ($c │ │ │ -000029a0: 7469 6d65 203d 3d20 2461 6374 4374 696d time == $actCtim │ │ │ -000029b0: 6520 616e 6420 246d 7469 6d65 203d 3d20 e and $mtime == │ │ │ -000029c0: 2461 6374 4d74 696d 6520 616e 640a 0909 $actMtime and... │ │ │ -000029d0: 2473 697a 6520 3d3d 2024 6163 7453 697a $size == $actSiz │ │ │ -000029e0: 6529 0a09 2020 2020 7b0a 0909 6d79 2024 e).. {...my $ │ │ │ -000029f0: 6163 744d 6435 203d 2026 3a3a 6361 6c63 actMd5 = &::calc │ │ │ -00002a00: 4d44 3528 2466 2c20 2470 724c 6f67 293b MD5($f, $prLog); │ │ │ -00002a10: 0a0a 0909 756e 6c65 7373 2028 2461 6374 ....unless ($act │ │ │ -00002a20: 4d64 3529 0a09 097b 0a09 0920 2020 2024 Md5)...{... $ │ │ │ -00002a30: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002a40: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00002a50: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => ["c │ │ │ -00002a60: 616e 6e6f 7420 6361 6c63 756c 6174 6520 annot calculate │ │ │ -00002a70: 6d64 3520 7375 6d20 6f66 203c 2466 3e22 md5 sum of <$f>" │ │ │ -00002a80: 5d29 3b0a 0909 2020 2020 6e65 7874 3b0a ]);... next;. │ │ │ -00002a90: 0909 7d0a 0909 6966 2028 246d 6435 7375 ..}...if ($md5su │ │ │ -00002aa0: 6d20 6571 2024 6163 744d 6435 2920 2020 m eq $actMd5) │ │ │ -00002ab0: 2320 6c6f 6f6b 7320 676f 6f64 0a09 097b # looks good...{ │ │ │ -00002ac0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -00002ad0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002ae0: 2749 272c 0a09 0909 0920 2027 2d73 7472 'I',..... '-str │ │ │ -00002af0: 2720 3d3e 205b 223c 2466 3e20 6964 656e ' => ["<$f> iden │ │ │ -00002b00: 7469 6361 6c20 746f 2062 6163 6b75 7022 tical to backup" │ │ │ -00002b10: 5d29 0a09 0909 6966 2024 7665 7262 6f73 ])....if $verbos │ │ │ -00002b20: 653b 0a0a 0909 2020 2020 2470 724c 6f67 e;.... $prLog │ │ │ -00002b30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00002b40: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ -00002b50: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -00002b60: 3c24 663e 2068 6173 2073 616d 6520 6d64 <$f> has same md │ │ │ -00002b70: 3520 7375 6d20 6275 7420 6469 6666 6572 5 sum but differ │ │ │ -00002b80: 656e 7420 7065 726d 6973 7369 6f6e 7320 ent permissions │ │ │ -00002b90: 2220 2e0a 0909 0909 2020 2022 7468 616e " ...... "than │ │ │ -00002ba0: 2069 6e20 6261 636b 7570 225d 290a 0909 in backup"])... │ │ │ -00002bb0: 0969 6620 2824 6d6f 6465 206e 6520 2461 .if ($mode ne $a │ │ │ -00002bc0: 6374 4d6f 6465 293b 0a09 0920 2020 2024 ctMode);... $ │ │ │ -00002bd0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002be0: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ -00002bf0: 0920 2027 2d73 7472 2720 3d3e 0a09 0909 . '-str' =>.... │ │ │ -00002c00: 0920 205b 223c 2466 3e20 6861 7320 7361 . ["<$f> has sa │ │ │ -00002c10: 6d65 206d 6435 2073 756d 2062 7574 2064 me md5 sum but d │ │ │ -00002c20: 6966 6665 7265 6e74 2075 6964 2022 202e ifferent uid " . │ │ │ -00002c30: 0a09 0909 0920 2020 2274 6861 6e20 696e ..... "than in │ │ │ -00002c40: 2062 6163 6b75 7022 5d29 0a09 0909 6966 backup"])....if │ │ │ -00002c50: 2028 2475 6964 206e 6520 2461 6374 5569 ($uid ne $actUi │ │ │ -00002c60: 6429 3b0a 0909 2020 2020 2470 724c 6f67 d);... $prLog │ │ │ -00002c70: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00002c80: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ -00002c90: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -00002ca0: 3c24 663e 2068 6173 2073 616d 6520 6d64 <$f> has same md │ │ │ -00002cb0: 3520 7375 6d20 6275 7420 6469 6666 6572 5 sum but differ │ │ │ -00002cc0: 656e 7420 6769 6420 2220 2e0a 0909 0909 ent gid " ...... │ │ │ -00002cd0: 2020 2022 7468 616e 2069 6e20 6261 636b "than in back │ │ │ -00002ce0: 7570 225d 290a 0909 0969 6620 2824 6769 up"])....if ($gi │ │ │ -00002cf0: 6420 6e65 2024 6163 7447 6964 293b 0a09 d ne $actGid);.. │ │ │ -00002d00: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{... │ │ │ -00002d10: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00002d20: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00002d30: 2c0a 0909 0909 2020 272d 7374 7227 203d ,..... '-str' = │ │ │ -00002d40: 3e0a 0909 0909 2020 5b22 3c24 663e 2068 >..... ["<$f> h │ │ │ -00002d50: 6173 2073 616d 6520 6374 696d 6520 2f20 as same ctime / │ │ │ -00002d60: 6d74 696d 6520 2f20 7369 7a65 2022 202e mtime / size " . │ │ │ -00002d70: 0a09 0909 0920 2020 2261 7320 696e 2062 ..... "as in b │ │ │ -00002d80: 6163 6b75 7020 6275 7420 6469 6666 6572 ackup but differ │ │ │ -00002d90: 656e 7420 6d64 3520 7375 6d73 3a20 2461 ent md5 sums: $a │ │ │ -00002da0: 6374 4d64 3520 696e 2022 202e 0a09 0909 ctMd5 in " ..... │ │ │ -00002db0: 0920 2020 2273 6f75 7263 6544 6972 203b . "sourceDir ; │ │ │ -00002dc0: 2024 6d64 3573 756d 2069 6e20 6261 636b $md5sum in back │ │ │ -00002dd0: 7570 225d 293b 0a09 0920 2020 2024 6d61 up"]);... $ma │ │ │ -00002de0: 696e 3a3a 7766 742d 3e70 7269 6e74 2826 in::wft->print(& │ │ │ -00002df0: 3a3a 6162 736f 6c75 7465 5061 7468 2824 ::absolutePath($ │ │ │ -00002e00: 6629 2c20 276d 6435 5772 6f6e 6727 293b f), 'md5Wrong'); │ │ │ -00002e10: 0a09 097d 0a09 2020 2020 7d0a 0920 2020 ...}.. }.. │ │ │ -00002e20: 2065 6c73 650a 0920 2020 207b 0a09 096d else.. {...m │ │ │ -00002e30: 7920 2461 6374 4d64 3520 3d20 2824 7369 y $actMd5 = ($si │ │ │ -00002e40: 7a65 203d 3d20 2461 6374 5369 7a65 2920 ze == $actSize) │ │ │ -00002e50: 3f20 263a 3a63 616c 634d 4435 2824 662c ? &::calcMD5($f, │ │ │ -00002e60: 2024 7072 4c6f 6729 203a 2030 3b0a 0909 $prLog) : 0;... │ │ │ -00002e70: 6966 2028 246d 6435 7375 6d20 6571 2024 if ($md5sum eq $ │ │ │ -00002e80: 6163 744d 6435 290a 0909 7b0a 0909 2020 actMd5)...{... │ │ │ -00002e90: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00002ea0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00002eb0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -00002ec0: 0909 0909 2020 5b22 3c24 663e 2068 6173 .... ["<$f> has │ │ │ -00002ed0: 2064 6966 6665 7265 6e74 2063 7469 6d65 different ctime │ │ │ -00002ee0: 202f 206d 7469 6d65 2073 697a 6520 2220 / mtime size " │ │ │ -00002ef0: 2e0a 0909 0909 2020 2022 6275 7420 7361 ...... "but sa │ │ │ -00002f00: 6d65 206d 6435 2073 756d 225d 290a 0909 me md5 sum"])... │ │ │ -00002f10: 0969 6620 2476 6572 626f 7365 3b0a 0909 .if $verbose;... │ │ │ -00002f20: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... │ │ │ -00002f30: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00002f40: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00002f50: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ -00002f60: 205b 223c 2466 3e20 6469 6666 6572 7320 ["<$f> differs │ │ │ -00002f70: 6672 6f6d 2062 6163 6b75 7022 5d29 0a09 from backup"]).. │ │ │ -00002f80: 0909 6966 2024 7665 7262 6f73 650a 0909 ..if $verbose... │ │ │ -00002f90: 7d0a 0920 2020 207d 0a09 7d0a 0965 6c73 }.. }..}..els │ │ │ -00002fa0: 650a 097b 0a09 2020 2020 2470 724c 6f67 e..{.. $prLog │ │ │ -00002fb0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00002fc0: 3d3e 2027 4d27 2c0a 0909 0920 2027 2d73 => 'M',.... '-s │ │ │ -00002fd0: 7472 2720 3d3e 0a09 0909 2020 5b22 3c24 tr' =>.... ["<$ │ │ │ -00002fe0: 6669 6c65 6e61 6d65 3e20 6973 206d 6973 filename> is mis │ │ │ -00002ff0: 7369 6e67 2069 6e20 7468 6520 736f 7572 sing in the sour │ │ │ -00003000: 6365 2064 6972 6563 746f 7279 225d 290a ce directory"]). │ │ │ -00003010: 0909 6966 2024 7665 7262 6f73 653b 0a09 ..if $verbose;.. │ │ │ -00003020: 7d0a 2020 2020 7d0a 7d0a 0a6d 7920 2465 }. }.}..my $e │ │ │ -00003030: 6e63 203d 2024 7072 4c6f 672d 3e65 6e63 nc = $prLog->enc │ │ │ -00003040: 6f75 6e74 6572 6564 2827 2d6b 696e 6427 ountered('-kind' │ │ │ -00003050: 203d 3e20 2757 2729 3b0a 6d79 2024 5320 => 'W');.my $S │ │ │ -00003060: 3d20 2465 6e63 203e 2031 203f 2027 5327 = $enc > 1 ? 'S' │ │ │ -00003070: 203a 2027 273b 0a69 6620 2824 656e 6329 : '';.if ($enc) │ │ │ -00003080: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p │ │ │ -00003090: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -000030a0: 2757 272c 0a09 0920 2027 2d73 7472 2720 'W',... '-str' │ │ │ -000030b0: 3d3e 205b 222d 2d20 2465 6e63 2057 4152 => ["-- $enc WAR │ │ │ -000030c0: 4e49 4e47 2453 204f 4343 5552 5245 4420 NING$S OCCURRED │ │ │ -000030d0: 4455 5249 4e47 2054 4845 2043 4845 434b DURING THE CHECK │ │ │ -000030e0: 2120 2d2d 225d 290a 7d0a 656c 7365 0a7b ! --"]).}.else.{ │ │ │ -000030f0: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00003100: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00003110: 272c 0a09 0920 2027 2d73 7472 2720 3d3e ',... '-str' => │ │ │ -00003120: 205b 222d 2d20 6e6f 2057 4152 4e49 4e47 ["-- no WARNING │ │ │ -00003130: 5320 4f43 4355 5252 4544 2044 5552 494e S OCCURRED DURIN │ │ │ -00003140: 4720 5448 4520 4348 4543 4b21 202d 2d22 G THE CHECK! --" │ │ │ -00003150: 5d29 3b0a 7d0a 0a24 656e 6320 3d20 2470 ]);.}..$enc = $p │ │ │ -00003160: 724c 6f67 2d3e 656e 636f 756e 7465 7265 rLog->encountere │ │ │ -00003170: 6428 272d 6b69 6e64 2720 3d3e 2027 4527 d('-kind' => 'E' │ │ │ -00003180: 293b 0a24 5320 3d20 2465 6e63 203e 2031 );.$S = $enc > 1 │ │ │ -00003190: 203f 2027 5327 203a 2027 273b 0a69 6620 ? 'S' : '';.if │ │ │ -000031a0: 2824 656e 6329 0a7b 0a20 2020 2024 7072 ($enc).{. $pr │ │ │ -000031b0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -000031c0: 6427 203d 3e20 2745 272c 0a09 0920 2027 d' => 'E',... ' │ │ │ -000031d0: 2d73 7472 2720 3d3e 205b 222d 2d20 2465 -str' => ["-- $e │ │ │ -000031e0: 6e63 2045 5252 4f52 2453 204f 4343 5552 nc ERROR$S OCCUR │ │ │ -000031f0: 5245 4420 4455 5249 4e47 2054 4845 2043 RED DURING THE C │ │ │ -00003200: 4845 434b 2120 2d2d 225d 293b 0a7d 0a65 HECK! --"]);.}.e │ │ │ -00003210: 6c73 650a 7b0a 2020 2020 2470 724c 6f67 lse.{. $prLog │ │ │ -00003220: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00003230: 3d3e 2027 4927 2c0a 0909 2020 272d 7374 => 'I',... '-st │ │ │ -00003240: 7227 203d 3e20 5b22 2d2d 206e 6f20 4552 r' => ["-- no ER │ │ │ -00003250: 524f 5253 204f 4343 5552 5245 4420 4455 RORS OCCURRED DU │ │ │ -00003260: 5249 4e47 2054 4845 2043 4845 434b 2120 RING THE CHECK! │ │ │ -00003270: 2d2d 225d 293b 0a7d 0a0a 2470 724c 6f67 --"]);.}..$prLog │ │ │ -00003280: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00003290: 3d3e 2027 5a27 2c0a 0920 2020 2020 2027 => 'Z',.. ' │ │ │ -000032a0: 2d73 7472 2720 3d3e 205b 2263 6f6d 7061 -str' => ["compa │ │ │ -000032b0: 7269 6e67 203c 2473 696e 676c 6542 6163 ring <$singleBac │ │ │ -000032c0: 6b75 7044 6972 3e20 746f 203c 2473 6f75 kupDir> to <$sou │ │ │ -000032d0: 7263 6544 6972 3e22 5d29 3b0a 0a0a 6966 rceDir>"]);...if │ │ │ -000032e0: 2028 2470 724c 6f67 2d3e 656e 636f 756e ($prLog->encoun │ │ │ -000032f0: 7465 7265 6428 272d 6b69 6e64 2720 3d3e tered('-kind' => │ │ │ -00003300: 2022 4522 2929 0a7b 0a20 2020 2065 7869 "E")).{. exi │ │ │ -00003310: 7420 313b 0a7d 0a65 6c73 650a 7b0a 2020 t 1;.}.else.{. │ │ │ -00003320: 2020 6578 6974 2030 3b0a 7d0a 0a65 7869 exit 0;.}..exi │ │ │ -00003330: 7420 303b 0a0a 0a23 2323 2323 2323 2323 t 0;...######### │ │ │ -00003340: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003350: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003360: 2323 2323 2323 2323 230a 2320 7061 636b #########.# pack │ │ │ -00003370: 6167 6520 7072 696e 744c 6f67 4d75 6c74 age printLogMult │ │ │ -00003380: 6970 6c65 206e 6565 6473 2074 6869 7320 iple needs this │ │ │ -00003390: 6675 6e63 7469 6f6e 0a73 7562 2063 6c65 function.sub cle │ │ │ -000033a0: 616e 7570 0a7b 0a20 2020 206d 7920 2473 anup.{. my $s │ │ │ -000033b0: 6967 6e61 6d65 203d 2073 6869 6674 3b0a igname = shift;. │ │ │ -000033c0: 2020 2020 6d79 2024 6578 6974 203d 2028 my $exit = ( │ │ │ -000033d0: 7368 6966 7428 2920 7c7c 2031 293b 0a0a shift() || 1);.. │ │ │ -000033e0: 2020 2020 6578 6974 2024 6578 6974 3b0a exit $exit;. │ │ │ -000033f0: 7d0a }. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7043 6865 636b 536f 7572 6365 0a pCheckSource. │ │ ├── ./usr/bin/storeBackupConvertBackup │ │ │ @@ -1,677 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...u │ │ │ -00000300: 7365 2049 4f3a 3a48 616e 646c 653b 0a75 se IO::Handle;.u │ │ │ -00000310: 7365 2073 7472 6963 743b 0a0a 7375 6220 se strict;..sub │ │ │ -00000320: 6c69 6250 6174 680a 7b0a 2020 2020 6d79 libPath.{. my │ │ │ -00000330: 2024 6669 6c65 203d 2073 6869 6674 3b0a $file = shift;. │ │ │ -00000340: 0a20 2020 206d 7920 2464 6972 3b0a 0a20 . my $dir;.. │ │ │ -00000350: 2020 2023 2046 616c 6c73 2044 6174 6569 # Falls Datei │ │ │ -00000360: 2073 656c 6273 7420 6569 6e20 7379 6d6c selbst ein syml │ │ │ -00000370: 696e 6b20 6973 742c 2073 6f6c 616e 6765 ink ist, solange │ │ │ -00000380: 2066 6f6c 6765 6e2c 2062 6973 2061 7566 folgen, bis auf │ │ │ -00000390: 6765 6cf6 7374 0a20 2020 2069 6620 282d gel.st. if (- │ │ │ -000003a0: 6620 2466 696c 6529 0a20 2020 207b 0a09 f $file). {.. │ │ │ -000003b0: 7768 696c 6520 282d 6c20 2466 696c 6529 while (-l $file) │ │ │ -000003c0: 0a09 7b0a 0920 2020 206d 7920 246c 696e ..{.. my $lin │ │ │ -000003d0: 6b20 3d20 7265 6164 6c69 6e6b 2824 6669 k = readlink($fi │ │ │ -000003e0: 6c65 293b 0a0a 0920 2020 2069 6620 2873 le);... if (s │ │ │ -000003f0: 7562 7374 7228 246c 696e 6b2c 2030 2c20 ubstr($link, 0, │ │ │ -00000400: 3129 206e 6520 222f 2229 0a09 2020 2020 1) ne "/").. │ │ │ -00000410: 7b0a 0909 2466 696c 6520 3d7e 2073 2f5b {...$file =~ s/[ │ │ │ -00000420: 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 ^\/]+$/$link/;.. │ │ │ -00000430: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else. │ │ │ -00000440: 0920 2020 207b 0a09 0924 6669 6c65 203d . {...$file = │ │ │ -00000450: 2024 6c69 6e6b 3b0a 0920 2020 207d 0a09 $link;.. }.. │ │ │ -00000460: 7d0a 0a09 2824 6469 722c 2024 6669 6c65 }...($dir, $file │ │ │ -00000470: 2920 3d20 2673 706c 6974 4669 6c65 4469 ) = &splitFileDi │ │ │ -00000480: 7228 2466 696c 6529 3b0a 0924 6669 6c65 r($file);..$file │ │ │ -00000490: 203d 2022 2f24 6669 6c65 223b 0a20 2020 = "/$file";. │ │ │ -000004a0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ -000004b0: 7b0a 0970 7269 6e74 2053 5444 4552 5220 {..print STDERR │ │ │ -000004c0: 223c 2466 696c 653e 2064 6f65 7320 6e6f "<$file> does no │ │ │ -000004d0: 7420 6578 6973 7421 5c6e 223b 0a09 6578 t exist!\n";..ex │ │ │ -000004e0: 6974 2031 3b0a 2020 2020 7d0a 0a20 2020 it 1;. }.. │ │ │ -000004f0: 2024 6469 7220 2e3d 2022 2f2e 2e2f 6c69 $dir .= "/../li │ │ │ -00000500: 6222 3b20 2020 2020 2020 2020 2020 2320 b"; # │ │ │ -00000510: 5066 6164 207a 7520 6465 6e20 4269 626c Pfad zu den Bibl │ │ │ -00000520: 696f 7468 656b 656e 0a20 2020 206d 7920 iotheken. my │ │ │ -00000530: 246f 6c64 4469 7220 3d20 602f 6269 6e2f $oldDir = `/bin/ │ │ │ -00000540: 7077 6460 3b0a 2020 2020 6368 6f6d 7020 pwd`;. chomp │ │ │ -00000550: 246f 6c64 4469 723b 0a20 2020 2069 6620 $oldDir;. if │ │ │ -00000560: 2863 6864 6972 2024 6469 7229 0a20 2020 (chdir $dir). │ │ │ -00000570: 207b 0a09 6d79 2024 6162 7344 6972 203d {..my $absDir = │ │ │ -00000580: 2060 2f62 696e 2f70 7764 603b 0a09 6368 `/bin/pwd`;..ch │ │ │ -00000590: 6f70 2024 6162 7344 6972 3b0a 0963 6864 op $absDir;..chd │ │ │ -000005a0: 6972 2024 6f6c 6444 6972 3b0a 0a09 7265 ir $oldDir;...re │ │ │ -000005b0: 7475 726e 2028 2673 706c 6974 4669 6c65 turn (&splitFile │ │ │ -000005c0: 4469 7228 2224 6162 7344 6972 2466 696c Dir("$absDir$fil │ │ │ -000005d0: 6522 2929 3b0a 2020 2020 7d0a 2020 2020 e"));. }. │ │ │ -000005e0: 656c 7365 0a20 2020 207b 0a09 7072 696e else. {..prin │ │ │ -000005f0: 7420 5354 4445 5252 2022 3c24 6469 723e t STDERR "<$dir> │ │ │ -00000600: 2064 6f65 7320 6e6f 7420 6578 6973 742c does not exist, │ │ │ -00000610: 2065 7869 7469 6e67 5c6e 223b 0a20 2020 exiting\n";. │ │ │ -00000620: 207d 0a7d 0a73 7562 2073 706c 6974 4669 }.}.sub splitFi │ │ │ -00000630: 6c65 4469 720a 7b0a 2020 2020 6d79 2024 leDir.{. my $ │ │ │ -00000640: 6e61 6d65 203d 2073 6869 6674 3b0a 0a20 name = shift;.. │ │ │ -00000650: 2020 2072 6574 7572 6e20 2827 2e27 2c20 return ('.', │ │ │ -00000660: 246e 616d 6529 2075 6e6c 6573 7320 2824 $name) unless ($ │ │ │ -00000670: 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 2020 name =~/\//); │ │ │ -00000680: 2023 206e 7572 2065 696e 6661 6368 6572 # nur einfacher │ │ │ -00000690: 2044 6174 6569 6e61 6d65 0a0a 2020 2020 Dateiname.. │ │ │ -000006a0: 6d79 2028 2464 6972 2c20 2466 696c 6529 my ($dir, $file) │ │ │ -000006b0: 203d 2024 6e61 6d65 203d 7e20 2f5e 282e = $name =~ /^(. │ │ │ -000006c0: 2a29 5c2f 282e 2a29 242f 733b 0a20 2020 *)\/(.*)$/s;. │ │ │ -000006d0: 2024 6469 7220 3d20 272f 2720 6966 2028 $dir = '/' if ( │ │ │ -000006e0: 2464 6972 2065 7120 2727 293b 2020 2020 $dir eq ''); │ │ │ -000006f0: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00000700: 2067 696c 742c 2066 616c 6c73 207a 2e42 gilt, falls z.B │ │ │ -00000710: 2e20 2f66 696c 656e 616d 650a 2020 2020 . /filename. │ │ │ -00000720: 7265 7475 726e 2028 2464 6972 2c20 2466 return ($dir, $f │ │ │ -00000730: 696c 6529 3b0a 7d0a 6d79 2028 2472 6571 ile);.}.my ($req │ │ │ -00000740: 2c20 2470 726f 6729 203d 2026 6c69 6250 , $prog) = &libP │ │ │ -00000750: 6174 6828 2430 293b 0a75 6e73 6869 6674 ath($0);.unshift │ │ │ -00000760: 2040 494e 432c 2022 2472 6571 223b 0a0a @INC, "$req";.. │ │ │ -00000770: 0a72 6571 7569 7265 2027 7665 7273 696f .require 'versio │ │ │ -00000780: 6e2e 706c 273b 0a72 6571 7569 7265 2027 n.pl';.require ' │ │ │ -00000790: 6669 6c65 4469 722e 706c 273b 0a0a 6d79 fileDir.pl';..my │ │ │ -000007a0: 2024 6d64 3543 6865 636b 5375 6d73 203d $md5CheckSums = │ │ │ -000007b0: 2027 2e6d 6435 4368 6563 6b53 756d 7327 '.md5CheckSums' │ │ │ -000007c0: 3b0a 0a3d 6865 6164 3120 4e41 4d45 0a0a ;..=head1 NAME.. │ │ │ -000007d0: 7374 6f72 6542 6163 6b75 7043 6f6e 7665 storeBackupConve │ │ │ -000007e0: 7274 4261 636b 7570 2e70 6c20 2d20 636f rtBackup.pl - co │ │ │ -000007f0: 6e76 6572 7473 206f 6c64 2062 6163 6b75 nverts old backu │ │ │ -00000800: 7073 2063 7265 6174 6564 2077 6974 6820 ps created with │ │ │ -00000810: 7374 6f72 6542 6163 6b75 702e 706c 2074 storeBackup.pl t │ │ │ -00000820: 6f20 7468 6520 6e65 7765 7374 2076 6572 o the newest ver │ │ │ -00000830: 7369 6f6e 2c0a 0a3d 6865 6164 3120 5359 sion,..=head1 SY │ │ │ -00000840: 4e4f 5053 4953 0a0a 7374 6f72 6542 6163 NOPSIS..storeBac │ │ │ -00000850: 6b75 7043 6f6e 7665 7274 4261 636b 7570 kupConvertBackup │ │ │ -00000860: 2e70 6c20 7374 6f72 6542 6163 6b75 702d .pl storeBackup- │ │ │ -00000870: 6469 720a 0a3d 6865 6164 3120 4445 5343 dir..=head1 DESC │ │ │ -00000880: 5249 5054 494f 4e0a 0a54 6869 7320 7072 RIPTION..This pr │ │ │ -00000890: 6f67 7261 6d20 636f 6e76 6572 7473 206f ogram converts o │ │ │ -000008a0: 6c64 2062 6163 6b75 7073 2063 7265 6174 ld backups creat │ │ │ -000008b0: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac │ │ │ -000008c0: 6b75 702e 706c 2074 6f20 7468 6520 6e65 kup.pl to the ne │ │ │ -000008d0: 7765 7374 2076 6572 7369 6f6e 2c0a 6375 west version,.cu │ │ │ -000008e0: 7272 656e 746c 7920 7665 7273 696f 6e20 rrently version │ │ │ -000008f0: 312e 332e 0a79 6f75 2063 616e 2073 6565 1.3..you can see │ │ │ -00000900: 2074 6865 2076 6572 7369 6f6e 2062 7920 the version by │ │ │ -00000910: 7479 7069 6e67 3a0a 0a68 6561 6420 2d31 typing:..head -1 │ │ │ -00000920: 203c 202e 2e2e 3c73 746f 7265 4261 636b < .../date_time │ │ │ -00000940: 2f2e 6d64 3543 6865 636b 5375 6d73 2e69 /.md5CheckSums.i │ │ │ -00000950: 6e66 6f0a 0a6f 7220 6966 2074 6861 7420 nfo..or if that │ │ │ -00000960: 6669 6c65 2064 6f65 7320 6e6f 7420 6578 file does not ex │ │ │ -00000970: 6973 743a 0a0a 627a 6970 3220 2d64 203c ist:..bzip2 -d < │ │ │ -00000980: 202e 2e2e 3c73 746f 7265 4261 636b 7570 .../date_time/. │ │ │ -000009a0: 6d64 3543 6865 636b 5375 6d73 2e62 7a32 md5CheckSums.bz2 │ │ │ -000009b0: 207c 2068 6561 6420 2d31 0a0a 2869 6620 | head -1..(if │ │ │ -000009c0: 796f 7520 646f 206e 6f74 2073 6565 2027 you do not see ' │ │ │ -000009d0: 2323 2376 6572 7369 6f6e 3d2e 2e2e 272c ###version=...', │ │ │ -000009e0: 2069 7420 6973 2076 6572 7369 6f6e 2031 it is version 1 │ │ │ -000009f0: 2e30 0a0a 3d68 6561 6431 2043 4f50 5952 .0..=head1 COPYR │ │ │ -00000a00: 4947 4854 0a0a 436f 7079 7269 6768 7420 IGHT..Copyright │ │ │ -00000a10: 2863 2920 3230 3032 2d32 3032 3220 6279 (c) 2002-2022 by │ │ │ -00000a20: 2048 6569 6e7a 2d4a 6f73 6566 2043 6c61 Heinz-Josef Cla │ │ │ -00000a30: 6573 2028 7365 6520 5245 4144 4d45 290a es (see README). │ │ │ -00000a40: 5075 626c 6973 6865 6420 756e 6465 7220 Published under │ │ │ -00000a50: 7468 6520 474e 5520 4765 6e65 7261 6c20 the GNU General │ │ │ -00000a60: 5075 626c 6963 204c 6963 656e 7365 2076 Public License v │ │ │ -00000a70: 3320 6f72 2061 6e79 206c 6174 6572 2076 3 or any later v │ │ │ -00000a80: 6572 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 ersion..=cut..my │ │ │ -00000a90: 2024 4865 6c70 203d 2026 3a3a 6765 7450 $Help = &::getP │ │ │ -00000aa0: 6f64 3254 6578 7428 2430 293b 0a0a 2670 od2Text($0);..&p │ │ │ -00000ab0: 7269 6e74 5665 7273 696f 6e28 5c40 4152 rintVersion(\@AR │ │ │ -00000ac0: 4756 2c20 272d 5627 2c20 272d 2d76 6572 GV, '-V', '--ver │ │ │ -00000ad0: 7369 6f6e 2729 3b0a 0a64 6965 2024 4865 sion');..die $He │ │ │ -00000ae0: 6c70 2069 6620 2840 4152 4756 2021 3d20 lp if (@ARGV != │ │ │ -00000af0: 3129 3b0a 0a6d 7920 2464 6972 203d 2073 1);..my $dir = s │ │ │ -00000b00: 6869 6674 2040 4152 4756 3b0a 6469 6520 hift @ARGV;.die │ │ │ -00000b10: 2264 6972 6563 746f 7279 203c 2464 6972 "directory <$dir │ │ │ -00000b20: 3e20 646f 6573 206e 6f74 2065 7869 7374 > does not exist │ │ │ -00000b30: 2220 756e 6c65 7373 2028 2d64 2024 6469 " unless (-d $di │ │ │ -00000b40: 7229 3b0a 0a6f 7065 6e64 6972 2844 4952 r);..opendir(DIR │ │ │ -00000b50: 2c20 2464 6972 2920 6f72 0a20 2020 2064 , $dir) or. d │ │ │ -00000b60: 6965 2022 6361 6e6e 6f74 206f 7065 6e20 ie "cannot open │ │ │ -00000b70: 3c24 6469 723e 223b 0a6d 7920 2824 656e <$dir>";.my ($en │ │ │ -00000b80: 7472 792c 2040 656e 7472 6965 7329 3b0a try, @entries);. │ │ │ -00000b90: 7768 696c 6520 2824 656e 7472 7920 3d20 while ($entry = │ │ │ -00000ba0: 7265 6164 6469 7220 4449 5229 0a7b 0a20 readdir DIR).{. │ │ │ -00000bb0: 2020 206d 7920 2465 203d 2022 2464 6972 my $e = "$dir │ │ │ -00000bc0: 2f24 656e 7472 7922 3b0a 2020 2020 6e65 /$entry";. ne │ │ │ -00000bd0: 7874 2069 6620 282d 6c20 2465 2061 6e64 xt if (-l $e and │ │ │ -00000be0: 206e 6f74 202d 6420 2465 293b 0a20 2020 not -d $e);. │ │ │ -00000bf0: 2070 7573 6820 4065 6e74 7269 6573 2c20 push @entries, │ │ │ -00000c00: 2465 6e74 7279 3b0a 7d0a 636c 6f73 6564 $entry;.}.closed │ │ │ -00000c10: 6972 2844 4952 293b 0a0a 6d79 2024 666c ir(DIR);..my $fl │ │ │ -00000c20: 6167 203d 2030 3b0a 6d79 2024 6920 3d20 ag = 0;.my $i = │ │ │ -00000c30: 313b 0a66 6f72 6561 6368 2024 656e 7472 1;.foreach $entr │ │ │ -00000c40: 7920 2873 6f72 7420 4065 6e74 7269 6573 y (sort @entries │ │ │ -00000c50: 290a 7b0a 2020 2020 6e65 7874 2075 6e6c ).{. next unl │ │ │ -00000c60: 6573 7320 2465 6e74 7279 203d 7e0a 092f ess $entry =~../ │ │ │ -00000c70: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \A(\d{4})\.(\d{2 │ │ │ -00000c80: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\.(\d{2})_(\d{ │ │ │ -00000c90: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\.(\d{2})\.(\ │ │ │ -00000ca0: 647b 327d 295c 5a2f 6f3b 0a0a 2020 2020 d{2})\Z/o;.. │ │ │ -00000cb0: 2466 6c61 6720 3d20 313b 2020 2023 2069 $flag = 1; # i │ │ │ -00000cc0: 7267 656e 6465 696e 2064 6972 6563 746f rgendein directo │ │ │ -00000cd0: 7279 2067 6566 756e 6465 6e0a 0a20 2020 ry gefunden.. │ │ │ -00000ce0: 206d 7920 2465 203d 2022 2464 6972 2f24 my $e = "$dir/$ │ │ │ -00000cf0: 656e 7472 7922 3b0a 2020 2020 6d79 2024 entry";. my $ │ │ │ -00000d00: 636f 6d70 7265 7373 203d 2030 3b0a 0a61 compress = 0;..a │ │ │ -00000d10: 6761 696e 466f 724e 6578 7456 6572 7369 gainForNextVersi │ │ │ -00000d20: 6f6e 3a0a 2020 2020 6966 2028 2d66 2022 on:. if (-f " │ │ │ -00000d30: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ -00000d40: 2e69 6e66 6f22 2920 2320 6162 2056 6572 .info") # ab Ver │ │ │ -00000d50: 7369 6f6e 2031 2e32 0a20 2020 207b 0a09 sion 1.2. {.. │ │ │ -00000d60: 6966 2028 2d66 2022 2465 2f24 6d64 3543 if (-f "$e/$md5C │ │ │ -00000d70: 6865 636b 5375 6d73 2e62 7a32 2229 2020 heckSums.bz2") │ │ │ -00000d80: 2320 6b6f 6d70 7269 6d69 6572 7465 2056 # komprimierte V │ │ │ -00000d90: 6572 7369 6f6e 206c 6965 6774 2076 6f72 ersion liegt vor │ │ │ -00000da0: 2c20 6e65 686d 656e 0a09 7b0a 0920 2020 , nehmen..{.. │ │ │ -00000db0: 2024 636f 6d70 7265 7373 203d 2031 3b0a $compress = 1;. │ │ │ -00000dc0: 097d 0a09 656c 7369 6620 282d 6620 2224 .}..elsif (-f "$ │ │ │ -00000dd0: 652f 246d 6435 4368 6563 6b53 756d 7322 e/$md5CheckSums" │ │ │ -00000de0: 290a 097b 0a09 2020 2020 2463 6f6d 7072 )..{.. $compr │ │ │ -00000df0: 6573 7320 3d20 303b 0a09 7d0a 0965 6c73 ess = 0;..}..els │ │ │ -00000e00: 650a 097b 0a09 2020 2020 7072 696e 7420 e..{.. print │ │ │ -00000e10: 2263 616e 6e6f 7420 6f70 656e 203c 2465 "cannot open <$e │ │ │ -00000e20: 2f24 6d64 3543 6865 636b 5375 6d73 5c5b /$md5CheckSums\[ │ │ │ -00000e30: 2e62 7a32 5c5d 3e5c 6e22 3b0a 0920 2020 .bz2\]>\n";.. │ │ │ -00000e40: 206e 6578 743b 0a09 7d0a 0a09 6f70 656e next;..}...open │ │ │ -00000e50: 2849 4e46 4f2c 2022 2465 2f24 6d64 3543 (INFO, "$e/$md5C │ │ │ -00000e60: 6865 636b 5375 6d73 2e69 6e66 6f22 2920 heckSums.info") │ │ │ -00000e70: 6f72 0a09 2020 2020 6469 6520 2263 616e or.. die "can │ │ │ -00000e80: 6e6f 7420 6f70 656e 203c 2465 2f24 6d64 not open <$e/$md │ │ │ -00000e90: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info" │ │ │ -00000ea0: 3b0a 096d 7920 2476 3b0a 096d 7920 246c ;..my $v;..my $l │ │ │ -00000eb0: 203d 203c 494e 464f 3e3b 0a09 6368 6f70 = ;..chop │ │ │ -00000ec0: 2024 6c3b 0a09 6966 2028 246c 203d 7e20 $l;..if ($l =~ │ │ │ -00000ed0: 2f5e 7665 7273 696f 6e3d 285c 532b 292f /^version=(\S+)/ │ │ │ -00000ee0: 290a 097b 0a09 2020 2020 2476 203d 2024 )..{.. $v = $ │ │ │ -00000ef0: 313b 0a09 7d0a 0965 6c73 650a 097b 0a09 1;..}..else..{.. │ │ │ -00000f00: 2020 2020 7072 696e 7420 2263 616e 6e6f print "canno │ │ │ -00000f10: 7420 6669 6e64 2076 6572 7369 6f6e 2069 t find version i │ │ │ -00000f20: 6e66 6f72 6d61 7469 6f6e 2069 6e20 2465 nformation in $e │ │ │ -00000f30: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i │ │ │ -00000f40: 6e66 6f5c 6e22 3b0a 0920 2020 206e 6578 nfo\n";.. nex │ │ │ -00000f50: 743b 0a09 7d0a 0969 6620 2824 7620 6571 t;..}..if ($v eq │ │ │ -00000f60: 2027 312e 3327 290a 097b 0a09 2020 2020 '1.3')..{.. │ │ │ -00000f70: 7072 696e 7420 2224 656e 7472 793a 2076 print "$entry: v │ │ │ -00000f80: 6572 7369 6f6e 203c 2476 3e20 3d3e 206f ersion <$v> => o │ │ │ -00000f90: 6b2e 5c6e 223b 0a09 7d0a 0965 6c73 6966 k.\n";..}..elsif │ │ │ -00000fa0: 2028 2476 2065 7120 2731 2e32 2729 0a09 ($v eq '1.2').. │ │ │ -00000fb0: 7b0a 0920 2020 2070 7269 6e74 2022 2465 {.. print "$e │ │ │ -00000fc0: 6e74 7279 3a20 7665 7273 696f 6e20 3c24 ntry: version <$ │ │ │ -00000fd0: 763e 2063 6f6e 7665 7274 696e 6720 746f v> converting to │ │ │ -00000fe0: 2031 2e33 202e 2e2e 223b 0a09 2020 2020 1.3 ...";.. │ │ │ -00000ff0: 5354 444f 5554 2d3e 6175 746f 666c 7573 STDOUT->autoflus │ │ │ -00001000: 6828 3129 3b0a 0920 2020 206d 7920 2824 h(1);.. my ($ │ │ │ -00001010: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode │ │ │ -00001020: 293b 0a09 2020 2020 6966 2028 2463 6f6d );.. if ($com │ │ │ -00001030: 7072 6573 7320 3d3d 2031 290a 0920 2020 press == 1).. │ │ │ -00001040: 207b 0a09 0928 2475 6964 2c20 2467 6964 {...($uid, $gid │ │ │ -00001050: 2c20 246d 6f64 6529 203d 2028 7374 6174 , $mode) = (stat │ │ │ -00001060: 2822 2465 2f24 6d64 3543 6865 636b 5375 ("$e/$md5CheckSu │ │ │ -00001070: 6d73 2e62 7a32 2229 295b 342c 2035 2c20 ms.bz2"))[4, 5, │ │ │ -00001080: 325d 3b0a 0909 756e 6c69 6e6b 2022 2465 2];...unlink "$e │ │ │ -00001090: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n │ │ │ -000010a0: 6577 2e62 7a32 222c 2022 2465 2f24 6d64 ew.bz2", "$e/$md │ │ │ -000010b0: 3543 6865 636b 5375 6d73 2e69 6e66 6f22 5CheckSums.info" │ │ │ -000010c0: 3b0a 0909 6f70 656e 2846 494c 452c 2022 ;...open(FILE, " │ │ │ -000010d0: 627a 6970 3220 2d64 203c 205c 2724 652f bzip2 -d < \'$e/ │ │ │ -000010e0: 246d 6435 4368 6563 6b53 756d 732e 627a $md5CheckSums.bz │ │ │ -000010f0: 325c 2720 7c22 2920 6f72 0a09 0920 2020 2\' |") or... │ │ │ -00001100: 2064 6965 2022 6361 6e6e 6f74 206f 7065 die "cannot ope │ │ │ -00001110: 6e20 2465 2f24 6d64 3543 6865 636b 5375 n $e/$md5CheckSu │ │ │ -00001120: 6d73 2e62 7a32 223b 0a09 096f 7065 6e28 ms.bz2";...open( │ │ │ -00001130: 4e45 572c 2022 7c20 627a 6970 3220 3e20 NEW, "| bzip2 > │ │ │ -00001140: 5c27 2465 2f24 6d64 3543 6865 636b 5375 \'$e/$md5CheckSu │ │ │ -00001150: 6d73 2e6e 6577 2e62 7a32 5c27 2229 206f ms.new.bz2\'") o │ │ │ -00001160: 720a 0909 2020 2020 6469 6520 2263 616e r... die "can │ │ │ -00001170: 6e6f 7420 627a 6970 3220 3e20 2465 2f24 not bzip2 > $e/$ │ │ │ -00001180: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new │ │ │ -00001190: 2e62 7a32 223b 0a09 2020 2020 7d0a 0920 .bz2";.. }.. │ │ │ -000011a0: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ -000011b0: 0928 2475 6964 2c20 2467 6964 2c20 246d .($uid, $gid, $m │ │ │ -000011c0: 6f64 6529 203d 2028 7374 6174 2822 2465 ode) = (stat("$e │ │ │ -000011d0: 2f24 6d64 3543 6865 636b 5375 6d73 2229 /$md5CheckSums") │ │ │ -000011e0: 295b 342c 2035 2c20 325d 3b0a 0909 756e )[4, 5, 2];...un │ │ │ -000011f0: 6c69 6e6b 2022 2465 2f24 6d64 3543 6865 link "$e/$md5Che │ │ │ -00001200: 636b 5375 6d73 2e6e 6577 222c 2022 2465 ckSums.new", "$e │ │ │ -00001210: 2f24 6d64 3543 6865 636b 5375 6d73 2e69 /$md5CheckSums.i │ │ │ -00001220: 6e66 6f22 3b0a 0909 6f70 656e 2846 494c nfo";...open(FIL │ │ │ -00001230: 452c 2022 3c20 2465 2f24 6d64 3543 6865 E, "< $e/$md5Che │ │ │ -00001240: 636b 5375 6d73 2229 206f 720a 0909 2020 ckSums") or... │ │ │ -00001250: 2020 6469 6520 2263 616e 6e6f 7420 6f70 die "cannot op │ │ │ -00001260: 656e 2024 652f 246d 6435 4368 6563 6b53 en $e/$md5CheckS │ │ │ -00001270: 756d 7322 3b0a 0909 6f70 656e 284e 4557 ums";...open(NEW │ │ │ -00001280: 2c20 223e 2024 652f 246d 6435 4368 6563 , "> $e/$md5Chec │ │ │ -00001290: 6b53 756d 732e 6e65 7722 2920 6f72 0a09 kSums.new") or.. │ │ │ -000012a0: 0920 2020 2064 6965 2022 6361 6e6e 6f74 . die "cannot │ │ │ -000012b0: 2077 7269 7465 2024 652f 246d 6435 4368 write $e/$md5Ch │ │ │ -000012c0: 6563 6b53 756d 732e 6e65 7722 3b0a 0920 eckSums.new";.. │ │ │ -000012d0: 2020 207d 0a09 2020 2020 246d 6f64 6520 }.. $mode │ │ │ -000012e0: 263d 2030 3737 3737 3b0a 0920 2020 2024 &= 07777;.. $ │ │ │ -000012f0: 6c20 3d20 3c46 494c 453e 3b20 2020 2020 l = ; │ │ │ -00001300: 2320 6572 7374 6520 5a65 696c 6520 fc62 # erste Zeile .b │ │ │ -00001310: 6572 6c65 7365 6e0a 0920 2020 2070 7269 erlesen.. pri │ │ │ -00001320: 6e74 204e 4557 2022 2320 636f 6e74 656e nt NEW "# conten │ │ │ -00001330: 7473 2f6d 6435 2063 6f6d 7072 2064 6576 ts/md5 compr dev │ │ │ -00001340: 2d69 6e6f 6465 2069 6e6f 6465 4261 636b -inode inodeBack │ │ │ -00001350: 7570 2063 7469 6d65 206d 7469 6d65 2061 up ctime mtime a │ │ │ -00001360: 7469 6d65 2073 697a 6520 7569 6420 6769 time size uid gi │ │ │ -00001370: 6420 6d6f 6465 2066 696c 656e 616d 655c d mode filename\ │ │ │ -00001380: 6e22 3b0a 0a09 2020 2020 6f70 656e 2849 n";... open(I │ │ │ -00001390: 4e46 4f5f 4e45 572c 2022 3e20 2465 2f24 NFO_NEW, "> $e/$ │ │ │ -000013a0: 6d64 3543 6865 636b 5375 6d73 2e69 6e66 md5CheckSums.inf │ │ │ -000013b0: 6f2e 6e65 7722 2920 6f72 0a09 0964 6965 o.new") or...die │ │ │ -000013c0: 2022 6361 6e6e 6f74 2077 7269 7465 2024 "cannot write $ │ │ │ -000013d0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ -000013e0: 696e 666f 2e6e 6577 223b 0a0a 0920 2020 info.new";... │ │ │ -000013f0: 2077 6869 6c65 2028 246c 203d 203c 4649 while ($l = ).. {...ch │ │ │ -00001410: 6f70 2024 6c3b 0a09 096d 7920 2824 6d64 op $l;...my ($md │ │ │ -00001420: 3573 756d 2c20 2463 6f6d 7072 2c20 2464 5sum, $compr, $d │ │ │ -00001430: 6576 496e 6f64 652c 2024 696e 6f64 6542 evInode, $inodeB │ │ │ -00001440: 6163 6b75 702c 2024 6374 696d 652c 2024 ackup, $ctime, $ │ │ │ -00001450: 6d74 696d 652c 2024 7369 7a65 2c0a 0909 mtime, $size,... │ │ │ -00001460: 2020 2020 2475 6964 2c20 2467 6964 2c20 $uid, $gid, │ │ │ -00001470: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename │ │ │ -00001480: 293b 0a09 096d 7920 2464 203d 2027 5b5c );...my $d = '[\ │ │ │ -00001490: 642d 5d27 3b20 2020 2020 2023 205c 6420 d-]'; # \d │ │ │ -000014a0: 756e 6420 4d69 6e75 737a 6569 6368 656e und Minuszeichen │ │ │ -000014b0: 0a09 096d 7920 246e 203d 2028 246d 6435 ...my $n = ($md5 │ │ │ -000014c0: 7375 6d2c 2024 636f 6d70 722c 2024 6465 sum, $compr, $de │ │ │ -000014d0: 7649 6e6f 6465 2c20 2469 6e6f 6465 4261 vInode, $inodeBa │ │ │ -000014e0: 636b 7570 2c20 2463 7469 6d65 2c0a 0909 ckup, $ctime,... │ │ │ -000014f0: 0920 246d 7469 6d65 2c20 2473 697a 652c . $mtime, $size, │ │ │ -00001500: 2024 7569 642c 2024 6769 642c 2024 6d6f $uid, $gid, $mo │ │ │ -00001510: 6465 2c20 2466 696c 656e 616d 6529 203d de, $filename) = │ │ │ -00001520: 0a09 0909 2020 2020 2024 6c20 3d7e 202f .... $l =~ / │ │ │ -00001530: 5e28 5c77 2b29 5c73 2b28 5c77 2b29 5c73 ^(\w+)\s+(\w+)\s │ │ │ -00001540: 2b28 5c53 2b29 5c73 2b28 2464 2b29 5c73 +(\S+)\s+($d+)\s │ │ │ -00001550: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ -00001560: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ -00001570: 2b28 2464 2b29 5c73 2b28 2464 2b29 5c73 +($d+)\s+($d+)\s │ │ │ -00001580: 2b28 2e2a 292f 6f3b 0a09 0969 6620 2824 +(.*)/o;...if ($ │ │ │ -00001590: 6e20 213d 2031 3129 0a09 097b 0a09 0920 n != 11)...{... │ │ │ -000015a0: 2020 2070 7269 6e74 2022 6361 6e6e 6f74 print "cannot │ │ │ -000015b0: 2072 6561 6420 6c69 6e65 3a20 3c24 6c3e read line: <$l> │ │ │ -000015c0: 5c6e 223b 0a09 097d 0a0a 0909 6d79 2024 \n";...}....my $ │ │ │ -000015d0: 6174 696d 6520 3d20 246d 7469 6d65 3b0a atime = $mtime;. │ │ │ -000015e0: 0909 7072 696e 7420 4e45 5720 2224 6d64 ..print NEW "$md │ │ │ -000015f0: 3573 756d 2024 636f 6d70 7220 2464 6576 5sum $compr $dev │ │ │ -00001600: 496e 6f64 6520 2469 6e6f 6465 4261 636b Inode $inodeBack │ │ │ -00001610: 7570 2024 6374 696d 6520 2220 2e0a 0909 up $ctime " .... │ │ │ -00001620: 2020 2020 2224 6d74 696d 6520 2461 7469 "$mtime $ati │ │ │ -00001630: 6d65 2024 7369 7a65 2024 7569 6420 2467 me $size $uid $g │ │ │ -00001640: 6964 2024 6d6f 6465 2024 6669 6c65 6e61 id $mode $filena │ │ │ -00001650: 6d65 5c6e 223b 0a09 2020 2020 7d0a 0920 me\n";.. }.. │ │ │ -00001660: 2020 2063 6c6f 7365 2846 494c 4529 3b0a close(FILE);. │ │ │ -00001670: 0920 2020 2063 6c6f 7365 284e 4557 293b . close(NEW); │ │ │ -00001680: 0a09 2020 2020 7072 696e 7420 494e 464f .. print INFO │ │ │ -00001690: 5f4e 4557 2022 7665 7273 696f 6e3d 312e _NEW "version=1. │ │ │ -000016a0: 335c 6e22 3b0a 0920 2020 206d 7920 2840 3\n";.. my (@ │ │ │ -000016b0: 6c29 203d 203c 494e 464f 3e3b 0a09 2020 l) = ;.. │ │ │ -000016c0: 2020 7072 696e 7420 494e 464f 5f4e 4557 print INFO_NEW │ │ │ -000016d0: 2022 406c 223b 0a09 2020 2020 636c 6f73 "@l";.. clos │ │ │ -000016e0: 6528 494e 464f 5f4e 4557 293b 0a09 2020 e(INFO_NEW);.. │ │ │ -000016f0: 2020 7072 696e 7420 225c 6e22 3b0a 0920 print "\n";.. │ │ │ -00001700: 2020 2069 6620 2824 636f 6d70 7265 7373 if ($compress │ │ │ -00001710: 203d 3d20 3129 0a09 2020 2020 7b0a 0909 == 1).. {... │ │ │ -00001720: 756e 6c69 6e6b 2022 2465 2f24 6d64 3543 unlink "$e/$md5C │ │ │ -00001730: 6865 636b 5375 6d73 2e62 7a32 223b 0a09 heckSums.bz2";.. │ │ │ -00001740: 0972 656e 616d 6520 2224 652f 246d 6435 .rename "$e/$md5 │ │ │ -00001750: 4368 6563 6b53 756d 732e 6e65 772e 627a CheckSums.new.bz │ │ │ -00001760: 3222 2c20 2224 652f 246d 6435 4368 6563 2", "$e/$md5Chec │ │ │ -00001770: 6b53 756d 732e 627a 3222 3b0a 0909 6368 kSums.bz2";...ch │ │ │ -00001780: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ -00001790: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ -000017a0: 732e 627a 3222 3b0a 0909 6368 6d6f 6420 s.bz2";...chmod │ │ │ -000017b0: 246d 6f64 652c 2022 2465 2f24 6d64 3543 $mode, "$e/$md5C │ │ │ -000017c0: 6865 636b 5375 6d73 2e62 7a32 223b 0a09 heckSums.bz2";.. │ │ │ -000017d0: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else. │ │ │ -000017e0: 0920 2020 207b 0a09 0975 6e6c 696e 6b20 . {...unlink │ │ │ -000017f0: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ -00001800: 7322 3b0a 0909 7265 6e61 6d65 2022 2465 s";...rename "$e │ │ │ -00001810: 2f24 6d64 3543 6865 636b 5375 6d73 2e6e /$md5CheckSums.n │ │ │ -00001820: 6577 222c 2022 2465 2f24 6d64 3543 6865 ew", "$e/$md5Che │ │ │ -00001830: 636b 5375 6d73 223b 0a09 0963 686f 776e ckSums";...chown │ │ │ -00001840: 2024 7569 642c 2024 6769 642c 2022 2465 $uid, $gid, "$e │ │ │ -00001850: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums"; │ │ │ -00001860: 0a09 0963 686d 6f64 2024 6d6f 6465 2c20 ...chmod $mode, │ │ │ -00001870: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ -00001880: 7322 3b0a 0920 2020 207d 0a09 2020 2020 s";.. }.. │ │ │ -00001890: 6d6b 6469 7220 2224 652f 2e73 746f 7265 mkdir "$e/.store │ │ │ -000018a0: 4261 636b 7570 4c69 6e6b 7322 2c20 3037 BackupLinks", 07 │ │ │ -000018b0: 3737 3b0a 0920 2020 2075 6e6c 696e 6b20 77;.. unlink │ │ │ -000018c0: 2224 652f 246d 6435 4368 6563 6b53 756d "$e/$md5CheckSum │ │ │ -000018d0: 732e 696e 666f 223b 0a09 2020 2020 7265 s.info";.. re │ │ │ -000018e0: 6e61 6d65 2022 2465 2f24 6d64 3543 6865 name "$e/$md5Che │ │ │ -000018f0: 636b 5375 6d73 2e69 6e66 6f2e 6e65 7722 ckSums.info.new" │ │ │ -00001900: 2c20 2224 652f 246d 6435 4368 6563 6b53 , "$e/$md5CheckS │ │ │ -00001910: 756d 732e 696e 666f 223b 0a09 7d0a 0965 ums.info";..}..e │ │ │ -00001920: 6c73 650a 097b 0a09 2020 2020 7072 696e lse..{.. prin │ │ │ -00001930: 7420 2224 656e 7472 793a 2075 6e73 7570 t "$entry: unsup │ │ │ -00001940: 706f 7274 6564 2076 6572 7369 6f6e 203c ported version < │ │ │ -00001950: 2476 3e5c 6e22 3b0a 097d 0a09 636c 6f73 $v>\n";..}..clos │ │ │ -00001960: 6528 494e 464f 293b 0a20 2020 207d 0a20 e(INFO);. }. │ │ │ -00001970: 2020 2065 6c73 6520 2020 2020 2020 2020 else │ │ │ -00001980: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001990: 2020 2023 2056 6572 7369 6f6e 2031 2e30 # Version 1.0 │ │ │ -000019a0: 2075 6e64 2031 2e31 0a20 2020 207b 0a09 und 1.1. {.. │ │ │ -000019b0: 6966 2028 2d66 2022 2465 2f24 6d64 3543 if (-f "$e/$md5C │ │ │ -000019c0: 6865 636b 5375 6d73 2e62 7a32 2229 2020 heckSums.bz2") │ │ │ -000019d0: 2320 6b6f 6d70 7269 6d69 6572 7465 2056 # komprimierte V │ │ │ -000019e0: 6572 7369 6f6e 206c 6965 6774 2076 6f72 ersion liegt vor │ │ │ -000019f0: 2c20 6e65 686d 656e 0a09 7b0a 0920 2020 , nehmen..{.. │ │ │ -00001a00: 206f 7065 6e28 4649 4c45 2c20 2262 7a69 open(FILE, "bzi │ │ │ -00001a10: 7032 202d 6420 3c20 5c27 2465 2f24 6d64 p2 -d < \'$e/$md │ │ │ -00001a20: 3543 6865 636b 5375 6d73 2e62 7a32 5c27 5CheckSums.bz2\' │ │ │ -00001a30: 207c 2229 3b0a 0920 2020 2024 636f 6d70 |");.. $comp │ │ │ -00001a40: 7265 7373 203d 2031 3b0a 097d 0a09 656c ress = 1;..}..el │ │ │ -00001a50: 7369 6620 282d 6620 2465 2f24 6d64 3543 sif (-f $e/$md5C │ │ │ -00001a60: 6865 636b 5375 6d73 290a 097b 0a09 2020 heckSums)..{.. │ │ │ -00001a70: 2020 6f70 656e 2846 494c 452c 2022 3c20 open(FILE, "< │ │ │ -00001a80: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ -00001a90: 2229 3b0a 097d 0a09 656c 7365 0a09 7b0a ");..}..else..{. │ │ │ -00001aa0: 0920 2020 2070 7269 6e74 2022 6361 6e6e . print "cann │ │ │ -00001ab0: 6f74 206f 7065 6e20 3c24 652f 246d 6435 ot open <$e/$md5 │ │ │ -00001ac0: 4368 6563 6b53 756d 735c 5b2e 627a 325c CheckSums\[.bz2\ │ │ │ -00001ad0: 5d3e 5c6e 223b 0a09 2020 2020 6e65 7874 ]>\n";.. next │ │ │ -00001ae0: 3b0a 097d 0a09 6d79 2024 763b 0a09 6d79 ;..}..my $v;..my │ │ │ -00001af0: 2024 6c20 3d20 3c46 494c 453e 3b0a 0963 $l = ;..c │ │ │ -00001b00: 686f 7020 246c 3b0a 0969 6620 2824 6c20 hop $l;..if ($l │ │ │ -00001b10: 3d7e 202f 5e23 2323 7665 7273 696f 6e3d =~ /^###version= │ │ │ -00001b20: 282e 2a29 2f29 0a09 7b0a 0920 2020 2024 (.*)/)..{.. $ │ │ │ -00001b30: 7620 3d20 2431 3b0a 097d 0a09 656c 7365 v = $1;..}..else │ │ │ -00001b40: 0a09 7b0a 0920 2020 2024 7620 3d20 2731 ..{.. $v = '1 │ │ │ -00001b50: 2e30 273b 0a09 7d0a 0a09 6966 2028 2476 .0';..}...if ($v │ │ │ -00001b60: 2065 7120 2731 2e30 2729 0a09 7b0a 0920 eq '1.0')..{.. │ │ │ -00001b70: 2020 2070 7269 6e74 2022 2465 6e74 7279 print "$entry │ │ │ -00001b80: 3a20 7665 7273 696f 6e20 3c24 763e 2063 : version <$v> c │ │ │ -00001b90: 6f6e 7665 7274 696e 6720 746f 2031 2e31 onverting to 1.1 │ │ │ -00001ba0: 202e 2e2e 223b 0a09 2020 2020 5354 444f ...";.. STDO │ │ │ -00001bb0: 5554 2d3e 6175 746f 666c 7573 6828 3129 UT->autoflush(1) │ │ │ -00001bc0: 3b0a 0920 2020 2069 6620 2824 636f 6d70 ;.. if ($comp │ │ │ -00001bd0: 7265 7373 203d 3d20 3129 0a09 2020 2020 ress == 1).. │ │ │ -00001be0: 7b0a 0909 756e 6c69 6e6b 2022 2465 2f24 {...unlink "$e/$ │ │ │ -00001bf0: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new │ │ │ -00001c00: 2e62 7a32 223b 0a09 096f 7065 6e28 4e45 .bz2";...open(NE │ │ │ -00001c10: 572c 2022 7c20 627a 6970 3220 3e20 5c27 W, "| bzip2 > \' │ │ │ -00001c20: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ -00001c30: 2e6e 6577 2e62 7a32 5c27 2229 206f 720a .new.bz2\'") or. │ │ │ -00001c40: 0909 2020 2020 6469 6520 2263 616e 6e6f .. die "canno │ │ │ -00001c50: 7420 627a 6970 3220 3e20 2465 2f24 6d64 t bzip2 > $e/$md │ │ │ -00001c60: 3543 6865 636b 5375 6d73 2e6e 6577 2e62 5CheckSums.new.b │ │ │ -00001c70: 7a32 223b 0a09 2020 2020 7d0a 0920 2020 z2";.. }.. │ │ │ -00001c80: 2065 6c73 650a 0920 2020 207b 0a09 0975 else.. {...u │ │ │ -00001c90: 6e6c 696e 6b20 2224 652f 246d 6435 4368 nlink "$e/$md5Ch │ │ │ -00001ca0: 6563 6b53 756d 732e 6e65 7722 3b0a 0909 eckSums.new";... │ │ │ -00001cb0: 6f70 656e 284e 4557 2c20 223e 2024 652f open(NEW, "> $e/ │ │ │ -00001cc0: 246d 6435 4368 6563 6b53 756d 732e 6e65 $md5CheckSums.ne │ │ │ -00001cd0: 7722 2920 6f72 0a09 0920 2020 2064 6965 w") or... die │ │ │ -00001ce0: 2022 6361 6e6e 6f74 2077 7269 7465 2024 "cannot write $ │ │ │ -00001cf0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ -00001d00: 6e65 7722 3b0a 0920 2020 207d 0a09 2020 new";.. }.. │ │ │ -00001d10: 2020 7072 696e 7420 4e45 5720 2223 2323 print NEW "### │ │ │ -00001d20: 7665 7273 696f 6e3d 312e 315c 6e22 3b0a version=1.1\n";. │ │ │ -00001d30: 0920 2020 2070 7269 6e74 204e 4557 2022 . print NEW " │ │ │ -00001d40: 2323 2365 7863 6570 7444 6972 7353 6570 ###exceptDirsSep │ │ │ -00001d50: 3d2c 5c6e 223b 0a09 2020 2020 7072 696e =,\n";.. prin │ │ │ -00001d60: 7420 4e45 5720 2223 2323 6578 6365 7074 t NEW "###except │ │ │ -00001d70: 4469 7273 3d5c 6e22 3b0a 0a09 2020 2020 Dirs=\n";... │ │ │ -00001d80: 6d79 2024 6920 3d20 303b 2020 2020 2320 my $i = 0; # │ │ │ -00001d90: 5ae4 686c 6572 2c20 6465 7220 696e 6f64 Z.hler, der inod │ │ │ -00001da0: 6573 2073 696d 756c 6965 7274 0a09 2020 es simuliert.. │ │ │ -00001db0: 2020 7768 696c 6520 2824 6c20 3d20 3c46 while ($l = ).. {...i │ │ │ -00001dd0: 6620 2824 6c20 3d7e 202f 5e23 2323 2f29 f ($l =~ /^###/) │ │ │ -00001de0: 0a09 097b 0a09 0920 2020 2070 7269 6e74 ...{... print │ │ │ -00001df0: 204e 4557 2024 6c3b 0a09 0920 2020 206e NEW $l;... n │ │ │ -00001e00: 6578 743b 0a09 097d 0a0a 0909 2469 2b2b ext;...}....$i++ │ │ │ -00001e10: 3b0a 0909 6368 6f70 2024 6c3b 0a09 096d ;...chop $l;...m │ │ │ -00001e20: 7920 2824 6d64 3573 756d 2c20 2463 6f6d y ($md5sum, $com │ │ │ -00001e30: 7072 2c20 2463 7469 6d65 2c20 246d 7469 pr, $ctime, $mti │ │ │ -00001e40: 6d65 2c20 2473 697a 652c 2024 7569 642c me, $size, $uid, │ │ │ -00001e50: 2024 6769 642c 0a09 0920 2020 2024 6d6f $gid,... $mo │ │ │ -00001e60: 6465 2c20 2466 696c 656e 616d 6529 3b0a de, $filename);. │ │ │ -00001e70: 0909 6d79 2024 6420 3d20 275b 5c64 2d5d ..my $d = '[\d-] │ │ │ -00001e80: 273b 2020 2020 2020 2320 5c64 2075 6e64 '; # \d und │ │ │ -00001e90: 204d 696e 7573 7a65 6963 6865 6e0a 0909 Minuszeichen... │ │ │ -00001ea0: 6d79 2024 6e20 3d20 2824 6d64 3573 756d my $n = ($md5sum │ │ │ -00001eb0: 2c20 2463 6f6d 7072 2c20 2463 7469 6d65 , $compr, $ctime │ │ │ -00001ec0: 2c20 246d 7469 6d65 2c20 2473 697a 652c , $mtime, $size, │ │ │ -00001ed0: 2024 7569 642c 0a09 0909 2024 6769 642c $uid,.... $gid, │ │ │ -00001ee0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam │ │ │ -00001ef0: 6529 203d 0a09 0924 6c20 3d7e 202f 5e28 e) =...$l =~ /^( │ │ │ -00001f00: 5c77 2b29 5c73 2b28 5c77 2b29 5c73 2b28 \w+)\s+(\w+)\s+( │ │ │ -00001f10: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\s+($d+)\s+( │ │ │ -00001f20: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\s+($d+)\s+( │ │ │ -00001f30: 2464 2b29 5c73 2b28 2464 2b29 5c73 2b28 $d+)\s+($d+)\s+( │ │ │ -00001f40: 2e2a 292f 6f3b 0a09 0970 7269 6e74 204e .*)/o;...print N │ │ │ -00001f50: 4557 0a09 0920 2020 2022 246d 6435 7375 EW... "$md5su │ │ │ -00001f60: 6d20 2463 6f6d 7072 2031 2d24 6920 2463 m $compr 1-$i $c │ │ │ -00001f70: 7469 6d65 2024 6d74 696d 6520 2473 697a time $mtime $siz │ │ │ -00001f80: 6520 2475 6964 2024 6769 6420 246d 6f64 e $uid $gid $mod │ │ │ -00001f90: 6520 2466 696c 656e 616d 655c 6e22 3b0a e $filename\n";. │ │ │ -00001fa0: 0920 2020 207d 0a09 2020 2020 636c 6f73 . }.. clos │ │ │ -00001fb0: 6528 4e45 5729 3b0a 0920 2020 2069 6620 e(NEW);.. if │ │ │ -00001fc0: 2824 636f 6d70 7265 7373 203d 3d20 3129 ($compress == 1) │ │ │ -00001fd0: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink │ │ │ -00001fe0: 2022 2465 2f24 6d64 3543 6865 636b 5375 "$e/$md5CheckSu │ │ │ -00001ff0: 6d73 2e62 7a32 223b 0a09 0972 656e 616d ms.bz2";...renam │ │ │ -00002000: 6520 2224 652f 246d 6435 4368 6563 6b53 e "$e/$md5CheckS │ │ │ -00002010: 756d 732e 6e65 772e 627a 3222 2c20 2224 ums.new.bz2", "$ │ │ │ -00002020: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ -00002030: 627a 3222 3b0a 0909 6368 6d6f 6420 3036 bz2";...chmod 06 │ │ │ -00002040: 3030 2c20 2224 652f 246d 6435 4368 6563 00, "$e/$md5Chec │ │ │ -00002050: 6b53 756d 732e 627a 3222 3b0a 0920 2020 kSums.bz2";.. │ │ │ -00002060: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00002070: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink "$e │ │ │ -00002080: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums"; │ │ │ -00002090: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename "$e/$m │ │ │ -000020a0: 6435 4368 6563 6b53 756d 732e 6e65 7722 d5CheckSums.new" │ │ │ -000020b0: 2c20 2224 652f 246d 6435 4368 6563 6b53 , "$e/$md5CheckS │ │ │ -000020c0: 756d 7322 3b0a 0909 6368 6d6f 6420 3036 ums";...chmod 06 │ │ │ -000020d0: 3030 2c20 2224 652f 246d 6435 4368 6563 00, "$e/$md5Chec │ │ │ -000020e0: 6b53 756d 7322 3b0a 0920 2020 207d 0a09 kSums";.. }.. │ │ │ -000020f0: 2020 2020 7072 696e 7420 2220 6f6b 5c6e print " ok\n │ │ │ -00002100: 223b 0a0a 0920 2020 2067 6f74 6f20 6167 ";... goto ag │ │ │ -00002110: 6169 6e46 6f72 4e65 7874 5665 7273 696f ainForNextVersio │ │ │ -00002120: 6e3b 0a09 7d0a 0965 6c73 6966 2028 2476 n;..}..elsif ($v │ │ │ -00002130: 2065 7120 2731 2e31 2729 0a09 7b0a 0920 eq '1.1')..{.. │ │ │ -00002140: 2020 2070 7269 6e74 2022 2465 6e74 7279 print "$entry │ │ │ -00002150: 3a20 7665 7273 696f 6e20 3c24 763e 2063 : version <$v> c │ │ │ -00002160: 6f6e 7665 7274 696e 6720 746f 2031 2e32 onverting to 1.2 │ │ │ -00002170: 202e 2e2e 223b 0a09 2020 2020 5354 444f ...";.. STDO │ │ │ -00002180: 5554 2d3e 6175 746f 666c 7573 6828 3129 UT->autoflush(1) │ │ │ -00002190: 3b0a 0920 2020 2069 6620 2824 636f 6d70 ;.. if ($comp │ │ │ -000021a0: 7265 7373 203d 3d20 3129 0a09 2020 2020 ress == 1).. │ │ │ -000021b0: 7b0a 0909 756e 6c69 6e6b 2022 2465 2f24 {...unlink "$e/$ │ │ │ -000021c0: 6d64 3543 6865 636b 5375 6d73 2e6e 6577 md5CheckSums.new │ │ │ -000021d0: 2e62 7a32 222c 2022 2465 2f24 6d64 3543 .bz2", "$e/$md5C │ │ │ -000021e0: 6865 636b 5375 6d73 2e69 6e66 6f22 3b0a heckSums.info";. │ │ │ -000021f0: 0909 6f70 656e 284e 4557 2c20 227c 2062 ..open(NEW, "| b │ │ │ -00002200: 7a69 7032 203e 205c 2724 652f 246d 6435 zip2 > \'$e/$md5 │ │ │ -00002210: 4368 6563 6b53 756d 732e 6e65 772e 627a CheckSums.new.bz │ │ │ -00002220: 325c 2722 2920 6f72 0a09 0920 2020 2064 2\'") or... d │ │ │ -00002230: 6965 2022 6361 6e6e 6f74 2062 7a69 7032 ie "cannot bzip2 │ │ │ -00002240: 203e 2024 652f 246d 6435 4368 6563 6b53 > $e/$md5CheckS │ │ │ -00002250: 756d 732e 6e65 772e 627a 3222 3b0a 0920 ums.new.bz2";.. │ │ │ -00002260: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ -00002270: 2020 2020 7b0a 0909 756e 6c69 6e6b 2022 {...unlink " │ │ │ -00002280: 2465 2f24 6d64 3543 6865 636b 5375 6d73 $e/$md5CheckSums │ │ │ -00002290: 2e6e 6577 222c 2022 2465 2f24 6d64 3543 .new", "$e/$md5C │ │ │ -000022a0: 6865 636b 5375 6d73 2e69 6e66 6f22 3b0a heckSums.info";. │ │ │ -000022b0: 0909 6f70 656e 284e 4557 2c20 223e 2024 ..open(NEW, "> $ │ │ │ -000022c0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ -000022d0: 6e65 7722 2920 6f72 0a09 0920 2020 2064 new") or... d │ │ │ -000022e0: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie "cannot write │ │ │ -000022f0: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum │ │ │ -00002300: 732e 6e65 7722 3b0a 0920 2020 207d 0a09 s.new";.. }.. │ │ │ -00002310: 2020 2020 6f70 656e 2849 4e46 4f2c 2022 open(INFO, " │ │ │ -00002320: 3e20 2465 2f24 6d64 3543 6865 636b 5375 > $e/$md5CheckSu │ │ │ -00002330: 6d73 2e69 6e66 6f22 2920 6f72 0a09 0964 ms.info") or...d │ │ │ -00002340: 6965 2022 6361 6e6e 6f74 2077 7269 7465 ie "cannot write │ │ │ -00002350: 2024 652f 246d 6435 4368 6563 6b53 756d $e/$md5CheckSum │ │ │ -00002360: 732e 696e 666f 223b 0a0a 0920 2020 2070 s.info";... p │ │ │ -00002370: 7269 6e74 2049 4e46 4f20 2276 6572 7369 rint INFO "versi │ │ │ -00002380: 6f6e 3d31 2e32 5c6e 223b 0a0a 0920 2020 on=1.2\n";... │ │ │ -00002390: 206d 7920 2470 6f73 7466 6978 3b0a 0920 my $postfix;.. │ │ │ -000023a0: 2020 2077 6869 6c65 2028 246c 203d 203c while ($l = < │ │ │ -000023b0: 4649 4c45 3e29 0a09 2020 2020 7b0a 0909 FILE>).. {... │ │ │ -000023c0: 6966 2028 246c 203d 7e20 2f5e 2323 2320 if ($l =~ /^### │ │ │ -000023d0: 2f29 2020 2023 2053 7061 6c74 656e 7665 /) # Spaltenve │ │ │ -000023e0: 727a 6569 6368 6e69 730a 0909 7b0a 0909 rzeichnis...{... │ │ │ -000023f0: 2020 2020 7072 696e 7420 4e45 5720 2223 print NEW "# │ │ │ -00002400: 2063 6f6e 7465 6e74 732f 6d64 3520 636f contents/md5 co │ │ │ -00002410: 6d70 7220 6465 762d 696e 6f64 6520 696e mpr dev-inode in │ │ │ -00002420: 6f64 6542 6163 6b75 7020 2220 2e0a 0909 odeBackup " .... │ │ │ -00002430: 0922 6374 696d 6520 6d74 696d 6520 7369 ."ctime mtime si │ │ │ -00002440: 7a65 2075 6964 2067 6964 206d 6f64 6520 ze uid gid mode │ │ │ -00002450: 6669 6c65 6e61 6d65 5c6e 223b 0a09 0920 filename\n";... │ │ │ -00002460: 2020 206e 6578 743b 0a09 097d 0a09 0965 next;...}...e │ │ │ -00002470: 6c73 6966 2028 246c 203d 7e20 2f5e 2323 lsif ($l =~ /^## │ │ │ -00002480: 2328 2e2a 3f29 3d28 2e2a 292f 290a 0909 #(.*?)=(.*)/)... │ │ │ -00002490: 7b0a 0909 2020 2020 7072 696e 7420 494e {... print IN │ │ │ -000024a0: 464f 2022 2431 3d24 325c 6e22 3b0a 0909 FO "$1=$2\n";... │ │ │ -000024b0: 2020 2020 2470 6f73 7466 6978 203d 2024 $postfix = $ │ │ │ -000024c0: 3220 6966 2028 2431 2065 7120 2770 6f73 2 if ($1 eq 'pos │ │ │ -000024d0: 7466 6978 2729 3b0a 0909 2020 2020 6e65 tfix');... ne │ │ │ -000024e0: 7874 3b0a 0909 7d0a 0a09 0963 686f 7020 xt;...}....chop │ │ │ -000024f0: 246c 3b0a 0909 6d79 2028 246d 6435 7375 $l;...my ($md5su │ │ │ -00002500: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI │ │ │ -00002510: 6e6f 6465 2c20 2463 7469 6d65 2c20 246d node, $ctime, $m │ │ │ -00002520: 7469 6d65 2c20 2473 697a 652c 2024 7569 time, $size, $ui │ │ │ -00002530: 642c 2024 6769 642c 0a09 0920 2020 2024 d, $gid,... $ │ │ │ -00002540: 6d6f 6465 2c20 2466 696c 656e 616d 6529 mode, $filename) │ │ │ -00002550: 3b0a 0909 6d79 2024 6420 3d20 275b 5c64 ;...my $d = '[\d │ │ │ -00002560: 2d5d 273b 2020 2020 2020 2320 5c64 2075 -]'; # \d u │ │ │ -00002570: 6e64 204d 696e 7573 7a65 6963 6865 6e0a nd Minuszeichen. │ │ │ -00002580: 0909 6d79 2024 6e20 3d20 2824 6d64 3573 ..my $n = ($md5s │ │ │ -00002590: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev │ │ │ -000025a0: 496e 6f64 652c 2024 6374 696d 652c 2024 Inode, $ctime, $ │ │ │ -000025b0: 6d74 696d 652c 2024 7369 7a65 2c20 2475 mtime, $size, $u │ │ │ -000025c0: 6964 2c0a 0909 0920 2467 6964 2c20 246d id,.... $gid, $m │ │ │ -000025d0: 6f64 652c 2024 6669 6c65 6e61 6d65 2920 ode, $filename) │ │ │ -000025e0: 3d0a 0909 246c 203d 7e20 2f5e 285c 772b =...$l =~ /^(\w+ │ │ │ -000025f0: 295c 732b 285c 772b 295c 732b 285c 532b )\s+(\w+)\s+(\S+ │ │ │ -00002600: 295c 732b 2824 642b 295c 732b 2824 642b )\s+($d+)\s+($d+ │ │ │ -00002610: 295c 732b 2824 642b 295c 732b 2824 642b )\s+($d+)\s+($d+ │ │ │ -00002620: 295c 732b 2824 642b 295c 732b 2824 642b )\s+($d+)\s+($d+ │ │ │ -00002630: 295c 732b 282e 2a29 2f6f 3b0a 0909 2320 )\s+(.*)/o;...# │ │ │ -00002640: 496e 6f64 6520 696d 2042 6163 6b75 7020 Inode im Backup │ │ │ -00002650: 6572 6d69 7474 656c 6e0a 0909 6d79 2024 ermitteln...my $ │ │ │ -00002660: 696e 6f64 6542 6163 6b75 703b 0a09 096d inodeBackup;...m │ │ │ -00002670: 7920 2466 203d 2022 2465 2f24 6669 6c65 y $f = "$e/$file │ │ │ -00002680: 6e61 6d65 223b 0a09 0924 6620 3d7e 2073 name";...$f =~ s │ │ │ -00002690: 2f5c 5c30 412f 5c6e 2f6f 673b 2020 2020 /\\0A/\n/og; │ │ │ -000026a0: 2320 275c 6e27 2077 6965 6465 7268 6572 # '\n' wiederher │ │ │ -000026b0: 7374 656c 6c65 6e0a 0909 2466 203d 7e20 stellen...$f =~ │ │ │ -000026c0: 732f 5c5c 3543 2f5c 5c2f 6f67 3b20 2020 s/\\5C/\\/og; │ │ │ -000026d0: 2023 2027 5c5c 2720 7769 6564 6572 6865 # '\\' wiederhe │ │ │ -000026e0: 7273 7465 6c6c 656e 0a0a 0909 2466 202e rstellen....$f . │ │ │ -000026f0: 3d20 2470 6f73 7466 6978 2069 6620 2824 = $postfix if ($ │ │ │ -00002700: 636f 6d70 7220 6571 2027 6327 293b 0a09 compr eq 'c');.. │ │ │ -00002710: 0969 6620 2824 6d64 3573 756d 2065 7120 .if ($md5sum eq │ │ │ -00002720: 2773 796d 6c69 6e6b 2729 0a09 097b 0a09 'symlink')...{.. │ │ │ -00002730: 0920 2020 2024 696e 6f64 6542 6163 6b75 . $inodeBacku │ │ │ -00002740: 7020 3d20 286c 7374 6174 2824 6629 295b p = (lstat($f))[ │ │ │ -00002750: 315d 3b0a 0909 7d0a 0909 656c 7365 0a09 1];...}...else.. │ │ │ -00002760: 097b 0a09 0920 2020 2024 696e 6f64 6542 .{... $inodeB │ │ │ -00002770: 6163 6b75 7020 3d20 2873 7461 7428 2466 ackup = (stat($f │ │ │ -00002780: 2929 5b31 5d3b 0a09 097d 0a0a 0909 7072 ))[1];...}....pr │ │ │ -00002790: 696e 7420 4e45 570a 0909 2020 2020 2224 int NEW... "$ │ │ │ -000027a0: 6d64 3573 756d 2024 636f 6d70 7220 2464 md5sum $compr $d │ │ │ -000027b0: 6576 496e 6f64 6520 2469 6e6f 6465 4261 evInode $inodeBa │ │ │ -000027c0: 636b 7570 2024 6374 696d 6520 246d 7469 ckup $ctime $mti │ │ │ -000027d0: 6d65 2022 202e 0a09 0920 2020 2020 2020 me " .... │ │ │ -000027e0: 2224 7369 7a65 2024 7569 6420 2467 6964 "$size $uid $gid │ │ │ -000027f0: 2024 6d6f 6465 2024 6669 6c65 6e61 6d65 $mode $filename │ │ │ -00002800: 5c6e 223b 0a09 2020 2020 7d0a 0920 2020 \n";.. }.. │ │ │ -00002810: 2063 6c6f 7365 284e 4557 293b 0a09 2020 close(NEW);.. │ │ │ -00002820: 2020 636c 6f73 6528 494e 464f 293b 0a09 close(INFO);.. │ │ │ -00002830: 2020 2020 6368 6d6f 6420 3036 3030 2c20 chmod 0600, │ │ │ -00002840: 2224 6524 6d64 3543 6865 636b 5375 6d73 "$e$md5CheckSums │ │ │ -00002850: 2e69 6e66 6f22 3b0a 0920 2020 2069 6620 .info";.. if │ │ │ -00002860: 2824 636f 6d70 7265 7373 203d 3d20 3129 ($compress == 1) │ │ │ -00002870: 0a09 2020 2020 7b0a 0909 756e 6c69 6e6b .. {...unlink │ │ │ -00002880: 2022 2465 2f24 6d64 3543 6865 636b 5375 "$e/$md5CheckSu │ │ │ -00002890: 6d73 2e62 7a32 223b 0a09 0972 656e 616d ms.bz2";...renam │ │ │ -000028a0: 6520 2224 652f 246d 6435 4368 6563 6b53 e "$e/$md5CheckS │ │ │ -000028b0: 756d 732e 6e65 772e 627a 3222 2c20 2224 ums.new.bz2", "$ │ │ │ -000028c0: 652f 246d 6435 4368 6563 6b53 756d 732e e/$md5CheckSums. │ │ │ -000028d0: 627a 3222 3b0a 0909 6368 6d6f 6420 3036 bz2";...chmod 06 │ │ │ -000028e0: 3030 2c20 2224 652f 246d 6435 4368 6563 00, "$e/$md5Chec │ │ │ -000028f0: 6b53 756d 732e 627a 3222 3b0a 0920 2020 kSums.bz2";.. │ │ │ -00002900: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00002910: 2020 7b0a 0909 756e 6c69 6e6b 2022 2465 {...unlink "$e │ │ │ -00002920: 2f24 6d64 3543 6865 636b 5375 6d73 223b /$md5CheckSums"; │ │ │ -00002930: 0a09 0972 656e 616d 6520 2224 652f 246d ...rename "$e/$m │ │ │ -00002940: 6435 4368 6563 6b53 756d 732e 6e65 7722 d5CheckSums.new" │ │ │ -00002950: 2c20 2224 652f 246d 6435 4368 6563 6b53 , "$e/$md5CheckS │ │ │ -00002960: 756d 7322 3b0a 0909 6368 6d6f 6420 3036 ums";...chmod 06 │ │ │ -00002970: 3030 2c20 2224 652f 246d 6435 4368 6563 00, "$e/$md5Chec │ │ │ -00002980: 6b53 756d 7322 3b0a 0920 2020 207d 0a09 kSums";.. }.. │ │ │ -00002990: 2020 2020 7072 696e 7420 2220 6f6b 5c6e print " ok\n │ │ │ -000029a0: 223b 0a09 2020 2020 636c 6f73 6528 4649 ";.. close(FI │ │ │ -000029b0: 4c45 293b 0a09 7d0a 0965 6c73 650a 097b LE);..}..else..{ │ │ │ -000029c0: 0a09 2020 2020 7072 696e 7420 2224 656e .. print "$en │ │ │ -000029d0: 7472 793a 2075 6e73 7570 706f 7274 6564 try: unsupported │ │ │ -000029e0: 2076 6572 7369 6f6e 203c 2476 3e5c 6e22 version <$v>\n" │ │ │ -000029f0: 3b0a 097d 0a20 2020 207d 0a7d 0a0a 0a70 ;..}. }.}...p │ │ │ -00002a00: 7269 6e74 2022 4552 524f 523a 206e 6f20 rint "ERROR: no │ │ │ -00002a10: 6261 636b 7570 2064 6972 6563 746f 7269 backup directori │ │ │ -00002a20: 6573 2066 6f75 6e64 5c6e 220a 2020 2020 es found\n". │ │ │ -00002a30: 756e 6c65 7373 2028 2466 6c61 6729 3b0a unless ($flag);. │ │ │ -00002a40: 0a . │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7043 6f6e 7665 7274 4261 636b 7570 0a pConvertBackup. │ │ ├── ./usr/bin/storeBackupDel │ │ │ @@ -1,1322 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 332d 3230 3232 290a 2320 2020 2020 2020 3-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...$mai │ │ │ -00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ -00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ -00000320: 0a75 7365 2073 7472 6963 743b 0a0a 7573 .use strict;..us │ │ │ -00000330: 6520 4663 6e74 6c20 7177 284f 5f52 4457 e Fcntl qw(O_RDW │ │ │ -00000340: 5220 4f5f 4352 4541 5429 3b0a 7573 6520 R O_CREAT);.use │ │ │ -00000350: 4669 6c65 3a3a 436f 7079 3b0a 7573 6520 File::Copy;.use │ │ │ -00000360: 504f 5349 583b 0a0a 7375 6220 6c69 6250 POSIX;..sub libP │ │ │ -00000370: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi │ │ │ -00000380: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. │ │ │ -00000390: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. # │ │ │ -000003a0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel │ │ │ -000003b0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink │ │ │ -000003c0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol │ │ │ -000003d0: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel. │ │ │ -000003e0: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f │ │ │ -000003f0: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil │ │ │ -00000400: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{. │ │ │ -00000410: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = │ │ │ -00000420: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file); │ │ │ -00000430: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst │ │ │ -00000440: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n │ │ │ -00000450: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e "/").. {... │ │ │ -00000460: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\/] │ │ │ -00000470: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. │ │ │ -00000480: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. │ │ │ -00000490: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li │ │ │ -000004a0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}... │ │ │ -000004b0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = │ │ │ -000004c0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ -000004d0: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = " │ │ │ -000004e0: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file";. }. │ │ │ -000004f0: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p │ │ │ -00000500: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR "<$f │ │ │ -00000510: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex │ │ │ -00000520: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\n";..exit 1 │ │ │ -00000530: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di │ │ │ -00000540: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= "/../lib"; │ │ │ -00000550: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad │ │ │ -00000560: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth │ │ │ -00000570: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old │ │ │ -00000580: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -00000590: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old │ │ │ -000005a0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd │ │ │ -000005b0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {.. │ │ │ -000005c0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b │ │ │ -000005d0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $ │ │ │ -000005e0: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $ │ │ │ -000005f0: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return │ │ │ -00000600: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir( │ │ │ -00000610: 2224 6162 7344 6972 2466 696c 6522 2929 "$absDir$file")) │ │ │ -00000620: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -00000630: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -00000640: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR "<$dir> doe │ │ │ -00000650: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000660: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\n";. }.} │ │ │ -00000670: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi │ │ │ -00000680: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name │ │ │ -00000690: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r │ │ │ -000006a0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam │ │ │ -000006b0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name │ │ │ -000006c0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\//); # n │ │ │ -000006d0: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat │ │ │ -000006e0: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my ( │ │ │ -000006f0: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $ │ │ │ -00000700: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\/ │ │ │ -00000710: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di │ │ │ -00000720: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir │ │ │ -00000730: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); │ │ │ -00000740: 2020 2020 2020 2020 2020 2023 2067 696c # gil │ │ │ -00000750: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f │ │ │ -00000760: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu │ │ │ -00000770: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file) │ │ │ -00000780: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p │ │ │ -00000790: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath( │ │ │ -000007a0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN │ │ │ -000007b0: 432c 2022 2472 6571 223b 0a0a 0a72 6571 C, "$req";...req │ │ │ -000007c0: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku │ │ │ -000007d0: 704c 6962 2e70 6c27 3b0a 7265 7175 6972 pLib.pl';.requir │ │ │ -000007e0: 6520 2763 6865 636b 5061 7261 6d32 2e70 e 'checkParam2.p │ │ │ -000007f0: 6c27 3b0a 7265 7175 6972 6520 2763 6865 l';.require 'che │ │ │ -00000800: 636b 4f62 6a50 6172 2e70 6c27 3b0a 7265 ckObjPar.pl';.re │ │ │ -00000810: 7175 6972 6520 2770 724c 6f67 2e70 6c27 quire 'prLog.pl' │ │ │ -00000820: 3b0a 7265 7175 6972 6520 2776 6572 7369 ;.require 'versi │ │ │ -00000830: 6f6e 2e70 6c27 3b0a 7265 7175 6972 6520 on.pl';.require │ │ │ -00000840: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';. │ │ │ -00000850: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir │ │ │ -00000860: 2e70 6c27 3b0a 7265 7175 6972 6520 2768 .pl';.require 'h │ │ │ -00000870: 756d 616e 5265 6164 2e70 6c27 3b0a 0a6d umanRead.pl';..m │ │ │ -00000880: 7920 246c 6f63 6b46 696c 6520 3d20 2824 y $lockFile = ($ │ │ │ -00000890: 454e 567b 2755 5345 5227 7d20 6571 2027 ENV{'USER'} eq ' │ │ │ -000008a0: 726f 6f74 2729 203f 2020 2020 2023 2064 root') ? # d │ │ │ -000008b0: 6566 6175 6c74 2076 616c 7565 0a09 0927 efault value...' │ │ │ -000008c0: 2f76 6172 2f6c 6f63 6b2f 7374 6f72 6542 /var/lock/storeB │ │ │ -000008d0: 6163 6b75 702e 6c6f 636b 2720 3a0a 0909 ackup.lock' :... │ │ │ -000008e0: 2445 4e56 7b27 484f 4d45 277d 202e 2027 $ENV{'HOME'} . ' │ │ │ -000008f0: 2f73 746f 7265 4261 636b 7570 2e6c 6f63 /storeBackup.loc │ │ │ -00000900: 6b27 3b0a 6d79 2024 6b65 6570 416c 6c20 k';.my $keepAll │ │ │ -00000910: 3d20 2733 3064 273b 0a6d 7920 246b 6565 = '30d';.my $kee │ │ │ -00000920: 7044 7570 6c69 6361 7465 203d 2027 3764 pDuplicate = '7d │ │ │ -00000930: 273b 0a6d 7920 2463 6865 636b 5375 6d46 ';.my $checkSumF │ │ │ -00000940: 696c 6520 3d20 272e 6d64 3543 6865 636b ile = '.md5Check │ │ │ -00000950: 5375 6d73 273b 0a6d 7920 2463 686d 6f64 Sums';.my $chmod │ │ │ -00000960: 4d44 3546 696c 6520 3d20 2730 3630 3027 MD5File = '0600' │ │ │ -00000970: 3b0a 0a3d 6865 6164 3120 4e41 4d45 0a0a ;..=head1 NAME.. │ │ │ -00000980: 7374 6f72 6542 6163 6b75 7044 656c 2e70 storeBackupDel.p │ │ │ -00000990: 6c20 2d20 7468 6973 2070 726f 6772 616d l - this program │ │ │ -000009a0: 2064 656c 6574 6573 2062 6163 6b75 7073 deletes backups │ │ │ -000009b0: 2063 7265 6174 6564 2062 7920 7374 6f72 created by stor │ │ │ -000009c0: 6542 6163 6b75 700a 0a3d 6865 6164 3120 eBackup..=head1 │ │ │ -000009d0: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store │ │ │ -000009e0: 4261 636b 7570 4465 6c2e 706c 205b 2d66 BackupDel.pl [-f │ │ │ -000009f0: 2063 6f6e 6669 6746 696c 655d 205b 2d2d configFile] [-- │ │ │ -00000a00: 7072 696e 745d 0a09 5b2d 6220 6261 636b print]..[-b back │ │ │ -00000a10: 7570 4469 7265 6374 6f72 795d 205b 2d53 upDirectory] [-S │ │ │ -00000a20: 2073 6572 6965 735d 205b 2d2d 646f 4e6f series] [--doNo │ │ │ -00000a30: 7444 656c 6574 655d 0a09 5b2d 2d64 656c tDelete]..[--del │ │ │ -00000a40: 6574 654e 6f74 4669 6e69 7368 6564 4469 eteNotFinishedDi │ │ │ -00000a50: 7273 5d20 5b2d 4c20 6c6f 636b 4669 6c65 rs] [-L lockFile │ │ │ -00000a60: 5d0a 095b 2d2d 6b65 6570 416c 6c20 7469 ]..[--keepAll ti │ │ │ -00000a70: 6d65 5065 7269 6f64 5d20 5b2d 2d6b 6565 mePeriod] [--kee │ │ │ -00000a80: 7057 6565 6b64 6179 2065 6e74 7279 5d20 pWeekday entry] │ │ │ -00000a90: 5b2d 2d6b 6565 7046 6972 7374 4f66 5965 [--keepFirstOfYe │ │ │ -00000aa0: 6172 5d0a 095b 2d2d 6b65 6570 4c61 7374 ar]..[--keepLast │ │ │ -00000ab0: 4f66 5965 6172 5d20 5b2d 2d6b 6565 7046 OfYear] [--keepF │ │ │ -00000ac0: 6972 7374 4f66 4d6f 6e74 685d 205b 2d2d irstOfMonth] [-- │ │ │ -00000ad0: 6b65 6570 4c61 7374 4f66 4d6f 6e74 685d keepLastOfMonth] │ │ │ -00000ae0: 0a09 5b2d 2d6b 6565 7046 6972 7374 4f66 ..[--keepFirstOf │ │ │ -00000af0: 5765 656b 5d20 5b2d 2d6b 6565 704c 6173 Week] [--keepLas │ │ │ -00000b00: 744f 6657 6565 6b5d 0a09 5b2d 2d6b 6565 tOfWeek]..[--kee │ │ │ -00000b10: 7044 7570 6c69 6361 7465 5d20 5b2d 2d6b pDuplicate] [--k │ │ │ -00000b20: 6565 704d 696e 4e75 6d62 6572 5d20 5b2d eepMinNumber] [- │ │ │ -00000b30: 2d6b 6565 704d 6178 4e75 6d62 6572 5d0a -keepMaxNumber]. │ │ │ -00000b40: 095b 2d6c 206c 6f67 4669 6c65 0a09 205b .[-l logFile.. [ │ │ │ -00000b50: 2d2d 706c 7573 4c6f 6753 7464 6f75 745d --plusLogStdout] │ │ │ -00000b60: 205b 2d2d 7375 7070 7265 7373 5469 6d65 [--suppressTime │ │ │ -00000b70: 5d20 5b2d 6d20 6d61 7846 696c 656c 656e ] [-m maxFilelen │ │ │ -00000b80: 5d0a 0920 5b5b 2d6e 206e 6f4f 664f 6c64 ].. [[-n noOfOld │ │ │ -00000b90: 4669 6c65 735d 207c 205b 2d2d 7361 7665 Files] | [--save │ │ │ -00000ba0: 4c6f 6773 5d0a 0920 5b2d 2d63 6f6d 7072 Logs].. [--compr │ │ │ -00000bb0: 6573 7357 6974 6820 636f 6d70 7265 7373 essWith compress │ │ │ -00000bc0: 7072 6f67 5d5d 0a0a 3d68 6561 6431 2057 prog]]..=head1 W │ │ │ -00000bd0: 4152 4e49 4e47 0a0a 2020 2121 2120 5553 ARNING.. !!! US │ │ │ -00000be0: 4147 4520 494e 2050 4152 414c 4c45 4c20 AGE IN PARALLEL │ │ │ -00000bf0: 5749 5448 2073 746f 7265 4261 636b 7570 WITH storeBackup │ │ │ -00000c00: 2e70 6c20 4341 4e20 4445 5354 524f 5920 .pl CAN DESTROY │ │ │ -00000c10: 594f 5552 2042 4143 4b55 5053 2021 2121 YOUR BACKUPS !!! │ │ │ -00000c20: 0a0a 3d68 6561 6431 204f 5054 494f 4e53 ..=head1 OPTIONS │ │ │ -00000c30: 0a0a 3d6f 7665 7220 380a 0a3d 6974 656d ..=over 8..=item │ │ │ -00000c40: 2042 3c2d 2d66 696c 653e 2c20 423c 2d66 B<--file>, B<-f │ │ │ -00000c50: 3e0a 0a20 2020 2063 6f6e 6669 6775 7261 >.. configura │ │ │ -00000c60: 7469 6f6e 2066 696c 6520 2869 6e73 7465 tion file (inste │ │ │ -00000c70: 6164 206f 6620 7061 7261 6d65 7465 7273 ad of parameters │ │ │ -00000c80: 290a 0a3d 6974 656d 2042 3c2d 2d70 7269 )..=item B<--pri │ │ │ -00000c90: 6e74 3e0a 0a20 2020 2070 7269 6e74 2063 nt>.. print c │ │ │ -00000ca0: 6f6e 6669 6775 7261 7469 6f6e 2072 6561 onfiguration rea │ │ │ -00000cb0: 6420 6672 6f6d 2063 6f6e 6669 6775 7261 d from configura │ │ │ -00000cc0: 7469 6f6e 2066 696c 6520 616e 6420 7374 tion file and st │ │ │ -00000cd0: 6f70 0a0a 3d69 7465 6d20 423c 2d2d 6261 op..=item B<--ba │ │ │ -00000ce0: 636b 7570 4469 723e 2c20 423c 2d62 3e0a ckupDir>, B<-b>. │ │ │ -00000cf0: 0a20 2020 2074 6f70 206c 6576 656c 2064 . top level d │ │ │ -00000d00: 6972 6563 746f 7279 206f 6620 616c 6c20 irectory of all │ │ │ -00000d10: 6261 636b 7570 7320 286d 7573 7420 6578 backups (must ex │ │ │ -00000d20: 6973 7429 0a0a 3d69 7465 6d20 423c 2d2d ist)..=item B<-- │ │ │ -00000d30: 7365 7269 6573 3e2c 2042 3c2d 533e 0a0a series>, B<-S>.. │ │ │ -00000d40: 2020 2020 6469 7265 6374 6f72 7920 6f66 directory of │ │ │ -00000d50: 2062 6163 6b75 7020 7365 7269 6573 0a20 backup series. │ │ │ -00000d60: 2020 2073 616d 6520 7061 7261 6d65 7465 same paramete │ │ │ -00000d70: 7220 6173 2069 6e20 7374 6f72 6542 6163 r as in storeBac │ │ │ -00000d80: 6b75 7020 2f20 7265 6c61 7469 7665 2070 kup / relative p │ │ │ -00000d90: 6174 680a 2020 2020 6672 6f6d 2062 6163 ath. from bac │ │ │ -00000da0: 6b75 7044 6972 2c20 6465 6661 756c 7420 kupDir, default │ │ │ -00000db0: 6973 2027 6465 6661 756c 7427 0a0a 3d69 is 'default'..=i │ │ │ -00000dc0: 7465 6d20 423c 2d2d 6c6f 636b 4669 6c65 tem B<--lockFile │ │ │ -00000dd0: 3e2c 2042 3c2d 4c3e 0a0a 2020 2020 6c6f >, B<-L>.. lo │ │ │ -00000de0: 636b 2066 696c 652c 2069 6620 6578 6973 ck file, if exis │ │ │ -00000df0: 7473 2c20 6e65 7720 696e 7374 616e 6365 ts, new instance │ │ │ -00000e00: 7320 7769 6c6c 2066 696e 6973 6820 6966 s will finish if │ │ │ -00000e10: 0a20 2020 2061 6e20 6f6c 6420 6973 2061 . an old is a │ │ │ -00000e20: 6c72 6561 6479 2072 756e 6e69 6e67 2c20 lready running, │ │ │ -00000e30: 6465 6661 756c 7420 6973 2024 6c6f 636b default is $lock │ │ │ -00000e40: 4669 6c65 0a20 2020 2074 6869 7320 7479 File. this ty │ │ │ -00000e50: 7065 206f 6620 6c6f 636b 2066 696c 6573 pe of lock files │ │ │ -00000e60: 2064 6f65 7320 6e6f 7420 776f 726b 2061 does not work a │ │ │ -00000e70: 6372 6f73 7320 6d75 6c74 6970 6c65 2073 cross multiple s │ │ │ -00000e80: 6572 7665 7273 0a20 2020 2061 6e64 2069 ervers. and i │ │ │ -00000e90: 7320 6e6f 7420 6465 7369 676e 6564 2074 s not designed t │ │ │ -00000ea0: 6f20 7365 7061 7261 7465 2073 746f 7265 o separate store │ │ │ -00000eb0: 4261 636b 7570 2e70 6c20 616e 640a 2020 Backup.pl and. │ │ │ -00000ec0: 2020 7374 6f72 6542 6163 6b75 7055 7064 storeBackupUpd │ │ │ -00000ed0: 6174 6542 6163 6b75 702e 706c 206f 7220 ateBackup.pl or │ │ │ -00000ee0: 616e 7920 6f74 6865 7220 7374 6f72 6542 any other storeB │ │ │ -00000ef0: 6163 6b75 700a 2020 2020 7072 6f63 6573 ackup. proces │ │ │ -00000f00: 7320 696e 2061 2073 6570 6172 6174 6520 s in a separate │ │ │ -00000f10: 5049 4420 7370 6163 650a 2020 2020 4465 PID space. De │ │ │ -00000f20: 6661 756c 7420 6c6f 636b 2066 696c 6520 fault lock file │ │ │ -00000f30: 666f 7220 726f 6f74 2069 7320 696e 202f for root is in / │ │ │ -00000f40: 7661 722f 6c6f 636b 2c20 666f 7220 6f74 var/lock, for ot │ │ │ -00000f50: 6865 7273 2069 6e20 5c24 484f 4d45 0a0a hers in \$HOME.. │ │ │ -00000f60: 3d69 7465 6d20 423c 2d2d 646f 4e6f 7444 =item B<--doNotD │ │ │ -00000f70: 656c 6574 653e 0a0a 2020 2020 7465 7374 elete>.. test │ │ │ -00000f80: 206f 6e6c 792c 2064 6f20 6e6f 7420 6465 only, do not de │ │ │ -00000f90: 6c65 7465 2061 6e79 2062 6163 6b75 700a lete any backup. │ │ │ -00000fa0: 0a3d 6974 656d 2042 3c2d 2d64 656c 6574 .=item B<--delet │ │ │ -00000fb0: 654e 6f74 4669 6e69 7368 6564 4469 7273 eNotFinishedDirs │ │ │ -00000fc0: 3e0a 0a20 2020 2064 656c 6574 6520 6f6c >.. delete ol │ │ │ -00000fd0: 6420 6261 636b 7570 7320 7768 6963 6820 d backups which │ │ │ -00000fe0: 7768 6572 6520 6e6f 7420 6669 6e69 7368 where not finish │ │ │ -00000ff0: 6564 0a20 2020 2074 6869 7320 7769 6c6c ed. this will │ │ │ -00001000: 206e 6f74 2068 6170 7065 6e20 6966 2064 not happen if d │ │ │ -00001010: 6f4e 6f74 4465 6c65 7465 2069 7320 7365 oNotDelete is se │ │ │ -00001020: 740a 0a3d 6974 656d 2042 3c2d 2d6b 6565 t..=item B<--kee │ │ │ -00001030: 7041 6c6c 3e0a 0a20 2020 206b 6565 7020 pAll>.. keep │ │ │ -00001040: 6261 636b 7570 7320 7768 6963 6820 6172 backups which ar │ │ │ -00001050: 6520 6e6f 7420 6f6c 6465 7220 7468 616e e not older than │ │ │ -00001060: 2074 6865 2073 7065 6369 6669 6564 2061 the specified a │ │ │ -00001070: 6d6f 756e 740a 2020 2020 6f66 2074 696d mount. of tim │ │ │ -00001080: 652e 2054 6869 7320 6973 206c 696b 6520 e. This is like │ │ │ -00001090: 6120 6465 6661 756c 7420 7661 6c75 6520 a default value │ │ │ -000010a0: 666f 7220 616c 6c20 6461 7973 2069 6e0a for all days in. │ │ │ -000010b0: 2020 2020 2d2d 6b65 6570 5765 656b 6461 --keepWeekda │ │ │ -000010c0: 792e 2042 6567 696e 7320 6465 6c65 7469 y. Begins deleti │ │ │ -000010d0: 6e67 2061 7420 7468 6520 656e 6420 6f66 ng at the end of │ │ │ -000010e0: 2074 6865 2073 6372 6970 740a 2020 2020 the script. │ │ │ -000010f0: 7468 6520 7469 6d65 2072 616e 6765 2068 the time range h │ │ │ -00001100: 6173 2074 6f20 6265 2073 7065 6369 6669 as to be specifi │ │ │ -00001110: 6564 2069 6e20 666f 726d 6174 2027 6468 ed in format 'dh │ │ │ -00001120: 6d73 272c 2065 2e67 2e0a 2020 2020 3130 ms', e.g.. 10 │ │ │ -00001130: 6434 6820 6d65 616e 7320 3130 2064 6179 d4h means 10 day │ │ │ -00001140: 7320 616e 6420 3420 686f 7572 730a 2020 s and 4 hours. │ │ │ -00001150: 2020 6465 6661 756c 7420 3d20 246b 6565 default = $kee │ │ │ -00001160: 7041 6c6c 3b0a 0a3d 6974 656d 2042 3c2d pAll;..=item B<- │ │ │ -00001170: 2d6b 6565 7057 6565 6b64 6179 3e0a 0a09 -keepWeekday>... │ │ │ -00001180: 0920 2020 206b 6565 7020 6261 636b 7570 . keep backup │ │ │ -00001190: 7320 666f 7220 7468 6520 7370 6563 6966 s for the specif │ │ │ -000011a0: 6965 6420 6461 7973 2066 6f72 2074 6865 ied days for the │ │ │ -000011b0: 2073 7065 6369 6669 6564 0a09 0920 2020 specified... │ │ │ -000011c0: 2061 6d6f 756e 7420 6f66 2074 696d 652e amount of time. │ │ │ -000011d0: 204f 7665 7277 7269 7465 7320 7468 6520 Overwrites the │ │ │ -000011e0: 6465 6661 756c 7420 7661 6c75 6573 2063 default values c │ │ │ -000011f0: 686f 7365 6e20 696e 0a09 0920 2020 202d hosen in... - │ │ │ -00001200: 2d6b 6565 7041 6c6c 2e20 274d 6f6e 2c57 -keepAll. 'Mon,W │ │ │ -00001210: 6564 3a34 3064 2053 6174 3a36 3064 3130 ed:40d Sat:60d10 │ │ │ -00001220: 6d27 206d 6561 6e73 3a0a 0909 096b 6565 m' means:....kee │ │ │ -00001230: 7020 6261 636b 7570 7320 6f66 204d 6f6e p backups of Mon │ │ │ -00001240: 2061 6e64 2057 6564 2034 3064 6179 7320 and Wed 40days │ │ │ -00001250: 2b20 356d 696e 730a 0909 096b 6565 7020 + 5mins....keep │ │ │ -00001260: 6261 636b 7570 7320 6f66 2053 6174 2036 backups of Sat 6 │ │ │ -00001270: 3064 6179 7320 2b20 3130 6d69 6e73 0a09 0days + 10mins.. │ │ │ -00001280: 0909 6b65 6570 2062 6163 6b75 7073 206f ..keep backups o │ │ │ -00001290: 6620 7468 6520 7265 7374 206f 6620 7468 f the rest of th │ │ │ -000012a0: 6520 6461 7973 206c 696b 6520 7370 6369 e days like spci │ │ │ -000012b0: 6669 6564 2069 6e0a 0909 0909 2d2d 6b65 fied in.....--ke │ │ │ -000012c0: 6570 416c 6c20 2864 6566 6175 6c74 2024 epAll (default $ │ │ │ -000012d0: 6b65 6570 416c 6c29 0a09 0920 2020 2069 keepAll)... i │ │ │ -000012e0: 6620 796f 7520 616c 736f 2075 7365 2074 f you also use t │ │ │ -000012f0: 6865 2027 6172 6368 6976 6520 666c 6167 he 'archive flag │ │ │ -00001300: 2720 6974 206d 6561 6e73 2074 6f20 6e6f ' it means to no │ │ │ -00001310: 740a 0909 2020 2020 6465 6c65 7465 2074 t... delete t │ │ │ -00001320: 6865 2061 6666 6563 7465 6420 6469 7265 he affected dire │ │ │ -00001330: 6374 6f72 6965 7320 7669 6120 2d2d 6b65 ctories via --ke │ │ │ -00001340: 6570 4d61 784e 756d 6265 723a 0a09 0920 epMaxNumber:... │ │ │ -00001350: 2020 2020 2020 6131 3064 3468 206d 6561 a10d4h mea │ │ │ -00001360: 6e73 2031 3020 6461 7973 2061 6e64 2034 ns 10 days and 4 │ │ │ -00001370: 2068 6f75 7273 2061 6e64 2027 6172 6368 hours and 'arch │ │ │ -00001380: 6976 6520 666c 6167 270a 0909 2020 2020 ive flag'... │ │ │ -00001390: 652e 672e 2027 4d6f 6e2c 5765 643a 6134 e.g. 'Mon,Wed:a4 │ │ │ -000013a0: 3064 2053 6174 3a36 3064 3130 6d27 206d 0d Sat:60d10m' m │ │ │ -000013b0: 6561 6e73 3a0a 0909 096b 6565 7020 6261 eans:....keep ba │ │ │ -000013c0: 636b 7570 7320 6f66 204d 6f6e 2061 6e64 ckups of Mon and │ │ │ -000013d0: 2057 6564 2034 3064 6179 7320 2b20 356d Wed 40days + 5m │ │ │ -000013e0: 696e 7320 2b20 2761 7263 6869 7665 270a ins + 'archive'. │ │ │ -000013f0: 0909 096b 6565 7020 6261 636b 7570 7320 ...keep backups │ │ │ -00001400: 6f66 2053 6174 2036 3064 6179 7320 2b20 of Sat 60days + │ │ │ -00001410: 3130 6d69 6e73 0a09 0909 6b65 6570 2062 10mins....keep b │ │ │ -00001420: 6163 6b75 7073 206f 6620 7468 6520 7265 ackups of the re │ │ │ -00001430: 7374 206f 6620 7468 6520 6461 7973 206c st of the days l │ │ │ -00001440: 696b 6520 7370 6563 6966 6965 6420 696e ike specified in │ │ │ -00001450: 0a09 0909 092d 2d6b 6565 7041 6c6c 2028 .....--keepAll ( │ │ │ -00001460: 6465 6661 756c 7420 246b 6565 7041 6c6c default $keepAll │ │ │ -00001470: 290a 0a3d 6974 656d 2042 3c2d 2d6b 6565 )..=item B<--kee │ │ │ -00001480: 7046 6972 7374 4f66 5965 6172 3e0a 0a20 pFirstOfYear>.. │ │ │ -00001490: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete │ │ │ -000014a0: 2074 6865 2066 6972 7374 2062 6163 6b75 the first backu │ │ │ -000014b0: 7020 6f66 2061 2079 6561 720a 2020 2020 p of a year. │ │ │ -000014c0: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe │ │ │ -000014d0: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib │ │ │ -000014e0: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag │ │ │ -000014f0: 270a 0a3d 6974 656d 2042 3c2d 2d6b 6565 '..=item B<--kee │ │ │ -00001500: 704c 6173 744f 6659 6561 723e 0a0a 2020 pLastOfYear>.. │ │ │ -00001510: 2020 646f 206e 6f74 2064 656c 6574 6520 do not delete │ │ │ -00001520: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup │ │ │ -00001530: 6f66 2061 2079 6561 720a 2020 2020 666f of a year. fo │ │ │ -00001540: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri │ │ │ -00001550: 6f64 2077 6974 6820 706f 7373 6962 6c65 od with possible │ │ │ -00001560: 2027 6172 6368 6976 6520 666c 6167 270a 'archive flag'. │ │ │ -00001570: 0a3d 6974 656d 2042 3c2d 2d6b 6565 7046 .=item B<--keepF │ │ │ -00001580: 6972 7374 4f66 4d6f 6e74 683e 0a0a 2020 irstOfMonth>.. │ │ │ -00001590: 2020 646f 206e 6f74 2064 656c 6574 6520 do not delete │ │ │ -000015a0: 7468 6520 6669 7273 7420 6261 636b 7570 the first backup │ │ │ -000015b0: 206f 6620 6120 6d6f 6e74 680a 2020 2020 of a month. │ │ │ -000015c0: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe │ │ │ -000015d0: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib │ │ │ -000015e0: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag │ │ │ -000015f0: 270a 0a3d 6974 656d 2042 3c2d 2d6b 6565 '..=item B<--kee │ │ │ -00001600: 704c 6173 744f 664d 6f6e 7468 3e0a 0a20 pLastOfMonth>.. │ │ │ -00001610: 2020 2064 6f20 6e6f 7420 6465 6c65 7465 do not delete │ │ │ -00001620: 2074 6865 206c 6173 7420 6261 636b 7570 the last backup │ │ │ -00001630: 206f 6620 6120 6d6f 6e74 680a 2020 2020 of a month. │ │ │ -00001640: 666f 726d 6174 2069 7320 7469 6d65 5065 format is timePe │ │ │ -00001650: 7269 6f64 2077 6974 6820 706f 7373 6962 riod with possib │ │ │ -00001660: 6c65 2027 6172 6368 6976 6520 666c 6167 le 'archive flag │ │ │ -00001670: 270a 0a3d 6974 656d 2042 3c2d 2d66 6972 '..=item B<--fir │ │ │ -00001680: 7374 4461 794f 6657 6565 6b3e 0a0a 2020 stDayOfWeek>.. │ │ │ -00001690: 2020 6465 6661 756c 743a 2027 5375 6e27 default: 'Sun' │ │ │ -000016a0: 2e20 5468 6973 2076 616c 7565 2069 7320 . This value is │ │ │ -000016b0: 7573 6564 2066 6f72 2063 616c 6375 6c61 used for calcula │ │ │ -000016c0: 7469 6e67 0a20 2020 202d 2d6b 6565 7046 ting. --keepF │ │ │ -000016d0: 6972 7374 4f66 5765 656b 2061 6e64 202d irstOfWeek and - │ │ │ -000016e0: 2d6b 6565 704c 6173 744f 6657 6565 6b0a -keepLastOfWeek. │ │ │ -000016f0: 0a3d 6974 656d 2042 3c2d 2d6b 6565 7046 .=item B<--keepF │ │ │ -00001700: 6972 7374 4f66 5765 656b 3e0a 0a20 2020 irstOfWeek>.. │ │ │ -00001710: 2064 6f20 6e6f 7420 6465 6c65 7465 2074 do not delete t │ │ │ -00001720: 6865 2066 6972 7374 2062 6163 6b75 7020 he first backup │ │ │ -00001730: 6f66 2061 2077 6565 6b0a 2020 2020 666f of a week. fo │ │ │ -00001740: 726d 6174 2069 7320 7469 6d65 5065 7269 rmat is timePeri │ │ │ -00001750: 6f64 2077 6974 6820 706f 7373 6962 6c65 od with possible │ │ │ -00001760: 2027 6172 6368 6976 6520 666c 6167 270a 'archive flag'. │ │ │ -00001770: 0a3d 6974 656d 2042 3c2d 2d6b 6565 704c .=item B<--keepL │ │ │ -00001780: 6173 744f 6657 6565 6b3e 0a0a 2020 2020 astOfWeek>.. │ │ │ -00001790: 646f 206e 6f74 2064 656c 6574 6520 7468 do not delete th │ │ │ -000017a0: 6520 6c61 7374 2062 6163 6b75 7020 6f66 e last backup of │ │ │ -000017b0: 2061 2077 6565 6b0a 2020 2020 666f 726d a week. form │ │ │ -000017c0: 6174 2069 7320 7469 6d65 5065 7269 6f64 at is timePeriod │ │ │ -000017d0: 2077 6974 6820 706f 7373 6962 6c65 2027 with possible ' │ │ │ -000017e0: 6172 6368 6976 6520 666c 6167 270a 0a3d archive flag'..= │ │ │ -000017f0: 6974 656d 2042 3c2d 2d6b 6565 7044 7570 item B<--keepDup │ │ │ -00001800: 6c69 6361 7465 3e0a 0a20 2020 206b 6565 licate>.. kee │ │ │ -00001810: 7020 6d75 6c74 6970 6c65 2062 6163 6b75 p multiple backu │ │ │ -00001820: 7073 206f 6620 6f6e 6520 6461 7920 7570 ps of one day up │ │ │ -00001830: 2074 6f20 7469 6d65 5065 7269 6f64 0a20 to timePeriod. │ │ │ -00001840: 2020 2066 6f72 6d61 7420 6973 2074 696d format is tim │ │ │ -00001850: 6550 6572 696f 642c 2027 6172 6368 6976 ePeriod, 'archiv │ │ │ -00001860: 6520 666c 6167 2720 6973 206e 6f74 2070 e flag' is not p │ │ │ -00001870: 6f73 7369 626c 650a 2020 2020 6465 6661 ossible. defa │ │ │ -00001880: 756c 7420 3d20 246b 6565 7044 7570 6c69 ult = $keepDupli │ │ │ -00001890: 6361 7465 3b0a 0a3d 6974 656d 2042 3c2d cate;..=item B<- │ │ │ -000018a0: 2d6b 6565 704d 696e 4e75 6d62 6572 3e0a -keepMinNumber>. │ │ │ -000018b0: 0a20 2020 204b 6565 7020 7468 6174 206d . Keep that m │ │ │ -000018c0: 696d 696e 756d 206f 6620 6261 636b 7570 iminum of backup │ │ │ -000018d0: 732e 204d 756c 7469 706c 6520 6261 636b s. Multiple back │ │ │ -000018e0: 7570 7320 6f66 206f 6e65 0a20 2020 2064 ups of one. d │ │ │ -000018f0: 6179 2061 7265 2063 6f75 6e74 6564 2061 ay are counted a │ │ │ -00001900: 7320 6f6e 6520 6261 636b 7570 2e20 4465 s one backup. De │ │ │ -00001910: 6661 756c 7420 6973 2031 302e 0a0a 3d69 fault is 10...=i │ │ │ -00001920: 7465 6d20 423c 2d2d 6b65 6570 4d61 784e tem B<--keepMaxN │ │ │ -00001930: 756d 6265 723e 0a0a 2020 2020 5472 7920 umber>.. Try │ │ │ -00001940: 746f 206b 6565 7020 6f6e 6c79 2074 6861 to keep only tha │ │ │ -00001950: 7420 6d61 7869 6d75 6d20 6f66 2062 6163 t maximum of bac │ │ │ -00001960: 6b75 7073 2e20 4966 2079 6f75 2068 6176 kups. If you hav │ │ │ -00001970: 650a 2020 2020 6d6f 7265 2062 6163 6b75 e. more backu │ │ │ -00001980: 7073 2c20 7468 6520 666f 6c6c 6f77 696e ps, the followin │ │ │ -00001990: 6720 7365 7175 656e 6365 206f 6620 6465 g sequence of de │ │ │ -000019a0: 6c65 7469 6e67 2077 696c 6c0a 2020 2020 leting will. │ │ │ -000019b0: 6861 7070 656e 3a0a 0920 2020 202d 2064 happen:.. - d │ │ │ -000019c0: 656c 6574 6520 616c 6c20 6475 706c 6963 elete all duplic │ │ │ -000019d0: 6174 6573 206f 6620 6120 6461 792c 2062 ates of a day, b │ │ │ -000019e0: 6567 696e 6e69 6e67 2077 6974 6820 7468 eginning with th │ │ │ -000019f0: 650a 2020 2020 2020 2020 2020 2020 2020 e. │ │ │ -00001a00: 6f6c 6420 6f6e 6365 2c20 6578 6365 7074 old once, except │ │ │ -00001a10: 2074 6865 206f 6c64 6573 7420 6f66 2065 the oldest of e │ │ │ -00001a20: 7665 7279 2064 6179 0a09 2020 2020 2d20 very day.. - │ │ │ -00001a30: 6966 2074 6869 7320 6973 206e 6f74 2065 if this is not e │ │ │ -00001a40: 6e6f 7567 682c 2064 656c 6574 6520 7468 nough, delete th │ │ │ -00001a50: 6520 7265 7374 206f 6620 7468 6520 6261 e rest of the ba │ │ │ -00001a60: 636b 7570 730a 0920 2020 2020 2062 6567 ckups.. beg │ │ │ -00001a70: 696e 6e69 6e67 2077 6974 6820 7468 6520 inning with the │ │ │ -00001a80: 6f6c 6465 7374 2c20 6275 7420 2a6e 6576 oldest, but *nev │ │ │ -00001a90: 6572 2a20 6120 6261 636b 7570 2077 6974 er* a backup wit │ │ │ -00001aa0: 680a 0920 2020 2020 2074 6865 2027 6172 h.. the 'ar │ │ │ -00001ab0: 6368 6976 6520 666c 6167 2720 6f72 2074 chive flag' or t │ │ │ -00001ac0: 6865 206c 6173 7420 6261 636b 7570 0a0a he last backup.. │ │ │ -00001ad0: 3d69 7465 6d20 423c 2d2d 6b65 6570 5265 =item B<--keepRe │ │ │ -00001ae0: 6c61 7469 7665 3e2c 2042 3c2d 523e 0a0a lative>, B<-R>.. │ │ │ -00001af0: 2020 2020 416c 7465 726e 6174 6976 6520 Alternative │ │ │ -00001b00: 6465 6c65 7469 6f6e 2073 6368 656d 652e deletion scheme. │ │ │ -00001b10: 2049 6620 796f 7520 7573 6520 7468 6973 If you use this │ │ │ -00001b20: 206f 7074 696f 6e2c 2061 6c6c 206f 7468 option, all oth │ │ │ -00001b30: 6572 0a20 2020 206b 6565 7020 6f70 7469 er. keep opti │ │ │ -00001b40: 6f6e 7320 6172 6520 6967 6e6f 7265 642e ons are ignored. │ │ │ -00001b50: 2050 7265 7365 7276 6573 2062 6163 6b75 Preserves backu │ │ │ -00001b60: 7073 2064 6570 656e 6469 6e67 0a20 2020 ps depending. │ │ │ -00001b70: 206f 6e20 7468 6569 7220 2a72 656c 6174 on their *relat │ │ │ -00001b80: 6976 652a 2061 6765 2e20 4578 616d 706c ive* age. Exampl │ │ │ -00001b90: 653a 0a20 2020 202d 5220 2731 6420 3764 e:. -R '1d 7d │ │ │ -00001ba0: 2036 3164 2039 3264 270a 2020 2020 2020 61d 92d'. │ │ │ -00001bb0: 2020 7769 6c6c 2028 7472 7920 746f 2920 will (try to) │ │ │ -00001bc0: 656e 7375 7265 2074 6861 7420 7468 6572 ensure that ther │ │ │ -00001bd0: 6520 6973 2061 6c77 6179 730a 092d 204f e is always..- O │ │ │ -00001be0: 6e65 2062 6163 6b75 7020 6265 7477 6565 ne backup betwee │ │ │ -00001bf0: 6e20 3120 6461 7920 616e 6420 3720 6461 n 1 day and 7 da │ │ │ -00001c00: 7973 206f 6c64 0a09 2d20 4f6e 6520 6261 ys old..- One ba │ │ │ -00001c10: 636b 7570 2062 6574 7765 656e 2035 2064 ckup between 5 d │ │ │ -00001c20: 6179 7320 616e 6420 3220 6d6f 6e74 6873 ays and 2 months │ │ │ -00001c30: 206f 6c64 0a09 2d20 4f6e 6520 6261 636b old..- One back │ │ │ -00001c40: 7570 2062 6574 7765 656e 2032 206d 6f6e up between 2 mon │ │ │ -00001c50: 7468 7320 616e 6420 3320 6d6f 6e74 6873 ths and 3 months │ │ │ -00001c60: 206f 6c64 0a09 4966 2074 6865 7265 2069 old..If there i │ │ │ -00001c70: 7320 6e6f 2062 6163 6b75 7020 666f 7220 s no backup for │ │ │ -00001c80: 6120 7370 6563 6966 6965 6420 7469 6d65 a specified time │ │ │ -00001c90: 7370 616e 0a09 2865 2e67 2e20 6265 6361 span..(e.g. beca │ │ │ -00001ca0: 7573 6520 7468 6520 6c61 7374 2062 6163 use the last bac │ │ │ -00001cb0: 6b75 7020 7761 7320 646f 6e65 206d 6f72 kup was done mor │ │ │ -00001cc0: 6520 7468 616e 2032 2077 6565 6b73 0a09 e than 2 weeks.. │ │ │ -00001cd0: 6167 6f29 2074 6865 206e 6578 7420 6f6c ago) the next ol │ │ │ -00001ce0: 6465 7220 6261 636b 7570 2077 696c 6c20 der backup will │ │ │ -00001cf0: 6265 2075 7365 6420 666f 7220 7468 6973 be used for this │ │ │ -00001d00: 2074 696d 6573 7061 6e2e 0a0a 3d69 7465 timespan...=ite │ │ │ -00001d10: 6d20 423c 2d2d 6c6f 6746 696c 653e 2c20 m B<--logFile>, │ │ │ -00001d20: 423c 2d6c 3e0a 0a20 2020 206c 6f67 2066 B<-l>.. log f │ │ │ -00001d30: 696c 6520 2864 6566 6175 6c74 2069 7320 ile (default is │ │ │ -00001d40: 5354 444f 5554 290a 0a3d 6974 656d 2042 STDOUT)..=item B │ │ │ -00001d50: 3c2d 2d70 6c75 734c 6f67 5374 646f 7574 <--plusLogStdout │ │ │ -00001d60: 3e0a 0a20 2020 2069 6620 796f 7520 7370 >.. if you sp │ │ │ -00001d70: 6563 6966 7920 6120 6c6f 6720 6669 6c65 ecify a log file │ │ │ -00001d80: 2077 6974 6820 2d2d 6c6f 6746 696c 6520 with --logFile │ │ │ -00001d90: 796f 7520 6361 6e0a 2020 2020 6164 6469 you can. addi │ │ │ -00001da0: 7469 6f6e 616c 6c79 2070 7269 6e74 2074 tionally print t │ │ │ -00001db0: 6865 206f 7574 7075 7420 746f 2053 5444 he output to STD │ │ │ -00001dc0: 4f55 5420 7769 7468 2074 6869 7320 666c OUT with this fl │ │ │ -00001dd0: 6167 0a0a 3d69 7465 6d20 423c 2d2d 7375 ag..=item B<--su │ │ │ -00001de0: 7070 7265 7373 5469 6d65 3e0a 0a20 2020 ppressTime>.. │ │ │ -00001df0: 2073 7570 7072 6573 7320 6f75 7470 7574 suppress output │ │ │ -00001e00: 206f 6620 7469 6d65 2069 6e20 6c6f 6766 of time in logf │ │ │ -00001e10: 696c 650a 0a3d 6974 656d 2042 3c2d 2d6d ile..=item B<--m │ │ │ -00001e20: 6178 4669 6c65 6c65 6e3e 2c20 423c 2d6d axFilelen>, B<-m │ │ │ -00001e30: 3e0a 0a20 2020 206d 6178 696d 616c 206c >.. maximal l │ │ │ -00001e40: 656e 6774 6820 6f66 2066 696c 652c 2064 ength of file, d │ │ │ -00001e50: 6566 6175 6c74 203d 2031 6536 0a0a 3d69 efault = 1e6..=i │ │ │ -00001e60: 7465 6d20 423c 2d2d 6e6f 4f66 4f6c 6446 tem B<--noOfOldF │ │ │ -00001e70: 696c 6573 3e2c 2042 3c2d 6e3e 0a0a 2020 iles>, B<-n>.. │ │ │ -00001e80: 2020 6e75 6d62 6572 206f 6620 6f6c 6420 number of old │ │ │ -00001e90: 6c6f 6720 6669 6c65 732c 2064 6566 6175 log files, defau │ │ │ -00001ea0: 6c74 203d 2035 0a0a 3d69 7465 6d20 423c lt = 5..=item B< │ │ │ -00001eb0: 2d2d 7361 7665 4c6f 6773 3e0a 0a20 2020 --saveLogs>.. │ │ │ -00001ec0: 2073 6176 6520 6c6f 6720 6669 6c65 7320 save log files │ │ │ -00001ed0: 7769 7468 2064 6174 6520 616e 6420 7469 with date and ti │ │ │ -00001ee0: 6d65 2069 6e73 7465 6164 206f 6620 6465 me instead of de │ │ │ -00001ef0: 6c65 7469 6e67 2074 6865 0a20 2020 206f leting the. o │ │ │ -00001f00: 6c64 2028 7769 7468 205b 2d6e 6f4f 664f ld (with [-noOfO │ │ │ -00001f10: 6c64 4669 6c65 735d 290a 0a3d 6974 656d ldFiles])..=item │ │ │ -00001f20: 2042 3c2d 2d63 6f6d 7072 6573 7357 6974 B<--compressWit │ │ │ -00001f30: 683e 0a0a 2020 2020 636f 6d70 7265 7373 h>.. compress │ │ │ -00001f40: 2073 6176 6564 206c 6f67 2066 696c 6573 saved log files │ │ │ -00001f50: 2028 652e 672e 2077 6974 6820 2767 7a69 (e.g. with 'gzi │ │ │ -00001f60: 7020 2d39 2729 0a20 2020 2064 6566 6175 p -9'). defau │ │ │ -00001f70: 6c74 2069 7320 2762 7a69 7032 270a 0a3d lt is 'bzip2'..= │ │ │ -00001f80: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP │ │ │ -00001f90: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh │ │ │ -00001fa0: 7420 2863 2920 3230 3033 2d32 3032 3220 t (c) 2003-2022 │ │ │ -00001fb0: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C │ │ │ -00001fc0: 6c61 6573 2028 7365 6520 5245 4144 4d45 laes (see README │ │ │ -00001fd0: 292e 0a50 7562 6c69 7368 6564 2075 6e64 )..Published und │ │ │ -00001fe0: 6572 2074 6865 2047 4e55 2047 656e 6572 er the GNU Gener │ │ │ -00001ff0: 616c 2050 7562 6c69 6320 4c69 6365 6e73 al Public Licens │ │ │ -00002000: 6520 7633 206f 7220 616e 7920 6c61 7465 e v3 or any late │ │ │ -00002010: 7220 7665 7273 696f 6e0a 0a3d 6375 740a r version..=cut. │ │ │ -00002020: 0a6d 7920 2448 656c 7020 3d20 263a 3a67 .my $Help = &::g │ │ │ -00002030: 6574 506f 6432 5465 7874 2824 3029 3b0a etPod2Text($0);. │ │ │ -00002040: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\ │ │ │ -00002050: 4041 5247 562c 2027 2d56 272c 2027 2d2d @ARGV, '-V', '-- │ │ │ -00002060: 7665 7273 696f 6e27 293b 0a0a 6d79 2024 version');..my $ │ │ │ -00002070: 7374 6172 7444 6174 6520 3d20 6461 7465 startDate = date │ │ │ -00002080: 546f 6f6c 732d 3e6e 6577 2829 3b0a 0a6d Tools->new();..m │ │ │ -00002090: 7920 2443 6865 636b 5061 7220 3d0a 2020 y $CheckPar =. │ │ │ -000020a0: 2020 4368 6563 6b50 6172 616d 2d3e 6e65 CheckParam->ne │ │ │ -000020b0: 7728 272d 616c 6c6f 774c 6973 7473 2720 w('-allowLists' │ │ │ -000020c0: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... ' │ │ │ -000020d0: 2d63 6f6e 6669 6746 696c 6527 203d 3e20 -configFile' => │ │ │ -000020e0: 272d 6627 2c0a 0909 2020 2020 272d 6c69 '-f',... '-li │ │ │ -000020f0: 7374 2720 3d3e 205b 4f70 7469 6f6e 2d3e st' => [Option-> │ │ │ -00002100: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00002110: 636f 6e66 6967 4669 6c65 272c 0a09 0909 configFile',.... │ │ │ -00002120: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00002130: 6e27 203d 3e20 272d 6627 2c0a 0909 0909 n' => '-f',..... │ │ │ -00002140: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00002150: 203d 3e20 272d 2d66 696c 6527 2c0a 0909 => '--file',... │ │ │ -00002160: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ -00002170: 3d3e 2027 7965 7327 292c 0a20 2020 2020 => 'yes'),. │ │ │ -00002180: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002190: 2020 2020 2020 2020 2020 204f 7074 696f Optio │ │ │ -000021a0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000021b0: 3e20 2770 7269 6e74 272c 0a09 0909 0909 > 'print',...... │ │ │ -000021c0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -000021d0: 203d 3e20 272d 2d70 7269 6e74 2729 2c0a => '--print'),. │ │ │ -000021e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000021f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002200: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00002210: 6d65 2720 3d3e 2027 6261 636b 7570 4469 me' => 'backupDi │ │ │ -00002220: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ -00002230: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b │ │ │ -00002240: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00002250: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba │ │ │ -00002260: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... │ │ │ -00002270: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -00002280: 2762 6163 6b75 7044 6972 272c 0a09 0909 'backupDir',.... │ │ │ -00002290: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be' │ │ │ -000022a0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ -000022b0: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -000022c0: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -000022d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -000022e0: 3d3e 2027 7365 7269 6573 272c 0a09 0909 => 'series',.... │ │ │ -000022f0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00002300: 6e27 203d 3e20 272d 5327 2c0a 0909 0909 n' => '-S',..... │ │ │ -00002310: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00002320: 203d 3e20 272d 2d73 6572 6965 7327 2c0a => '--series',. │ │ │ -00002330: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00002340: 7927 203d 3e20 2773 6572 6965 7327 2c0a y' => 'series',. │ │ │ -00002350: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ -00002360: 6c74 2720 3d3e 2027 6465 6661 756c 7427 lt' => 'default' │ │ │ -00002370: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -00002380: 6577 2827 2d6e 616d 6527 203d 3e20 276c ew('-name' => 'l │ │ │ -00002390: 6f63 6b46 696c 6527 2c0a 0909 0909 0920 ockFile',...... │ │ │ -000023a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000023b0: 3d3e 2027 2d4c 272c 0a09 0909 0909 2020 => '-L',...... │ │ │ -000023c0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -000023d0: 2027 2d2d 6c6f 636b 4669 6c65 272c 0a09 '--lockFile',.. │ │ │ -000023e0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -000023f0: 2720 3d3e 2027 6c6f 636b 4669 6c65 272c ' => 'lockFile', │ │ │ -00002400: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -00002410: 756c 7427 203d 3e20 246c 6f63 6b46 696c ult' => $lockFil │ │ │ -00002420: 6529 2c0a 0909 0909 4f70 7469 6f6e 2d3e e),.....Option-> │ │ │ -00002430: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00002440: 646f 4e6f 7444 656c 6574 6527 2c0a 0909 doNotDelete',... │ │ │ -00002450: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00002460: 6f6e 2720 3d3e 2027 2d2d 646f 4e6f 7444 on' => '--doNotD │ │ │ -00002470: 656c 6574 6527 2c0a 0909 0909 0920 2020 elete',...... │ │ │ -00002480: 2027 2d63 665f 6b65 7927 203d 3e20 2764 '-cf_key' => 'd │ │ │ -00002490: 6f4e 6f74 4465 6c65 7465 272c 0a09 0909 oNotDelete',.... │ │ │ -000024a0: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ -000024b0: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ -000024c0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ -000024d0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -000024e0: 3d3e 2027 6465 6c65 7465 4e6f 7446 696e => 'deleteNotFin │ │ │ -000024f0: 6973 6865 6444 6972 7327 2c0a 0909 0909 ishedDirs',..... │ │ │ -00002500: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00002510: 2720 3d3e 2027 2d2d 6465 6c65 7465 4e6f ' => '--deleteNo │ │ │ -00002520: 7446 696e 6973 6865 6444 6972 7327 2c0a tFinishedDirs',. │ │ │ -00002530: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00002540: 7927 203d 3e20 2764 656c 6574 654e 6f74 y' => 'deleteNot │ │ │ -00002550: 4669 6e69 7368 6564 4469 7273 272c 0a09 FinishedDirs',.. │ │ │ -00002560: 0909 0909 2020 2020 272d 6366 5f6e 6f4f .... '-cf_noO │ │ │ -00002570: 7074 5365 7427 203d 3e20 5b27 7965 7327 ptSet' => ['yes' │ │ │ -00002580: 2c20 276e 6f27 5d29 2c0a 0909 0909 4f70 , 'no']),.....Op │ │ │ -00002590: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000025a0: 2720 3d3e 2027 6b65 6570 416c 6c27 2c0a ' => 'keepAll',. │ │ │ -000025b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000025c0: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ -000025d0: 416c 6c27 2c0a 0909 0909 0920 2020 2027 All',...... ' │ │ │ -000025e0: 2d63 665f 6b65 7927 203d 3e20 276b 6565 -cf_key' => 'kee │ │ │ -000025f0: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... │ │ │ -00002600: 272d 6465 6661 756c 7427 203d 3e20 246b '-default' => $k │ │ │ -00002610: 6565 7041 6c6c 292c 0a09 0909 094f 7074 eepAll),.....Opt │ │ │ -00002620: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00002630: 203d 3e20 276b 6565 7057 6565 6b64 6179 => 'keepWeekday │ │ │ -00002640: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00002650: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ -00002660: 6565 7057 6565 6b64 6179 272c 0a09 0909 eepWeekday',.... │ │ │ -00002670: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00002680: 3d3e 2027 6b65 6570 5765 656b 6461 7927 => 'keepWeekday' │ │ │ -00002690: 2c0a 0909 0909 0920 2020 2027 2d71 756f ,...... '-quo │ │ │ -000026a0: 7465 4576 616c 2720 3d3e 2027 7965 7327 teEval' => 'yes' │ │ │ -000026b0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -000026c0: 6577 2827 2d6e 616d 6527 203d 3e20 276b ew('-name' => 'k │ │ │ -000026d0: 6565 7046 6972 7374 4f66 5965 6172 272c eepFirstOfYear', │ │ │ -000026e0: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -000026f0: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ -00002700: 7046 6972 7374 4f66 5965 6172 272c 0a09 pFirstOfYear',.. │ │ │ -00002710: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -00002720: 2720 3d3e 2027 6b65 6570 4669 7273 744f ' => 'keepFirstO │ │ │ -00002730: 6659 6561 7227 2c0a 0909 0909 0920 2020 fYear',...... │ │ │ -00002740: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ -00002750: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option- │ │ │ -00002760: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00002770: 276b 6565 704c 6173 744f 6659 6561 7227 'keepLastOfYear' │ │ │ -00002780: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00002790: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6b65 option' => '--ke │ │ │ -000027a0: 6570 4c61 7374 4f66 5965 6172 272c 0a09 epLastOfYear',.. │ │ │ -000027b0: 0909 0909 2020 2020 272d 6366 5f6b 6579 .... '-cf_key │ │ │ -000027c0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf │ │ │ -000027d0: 5965 6172 272c 0a09 0909 0909 2020 2020 Year',...... │ │ │ -000027e0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -000027f0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00002800: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00002810: 6b65 6570 4669 7273 744f 664d 6f6e 7468 keepFirstOfMonth │ │ │ -00002820: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00002830: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6b _option' => '--k │ │ │ -00002840: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth' │ │ │ -00002850: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00002860: 6b65 7927 203d 3e20 276b 6565 7046 6972 key' => 'keepFir │ │ │ -00002870: 7374 4f66 4d6f 6e74 6827 2c0a 0909 0909 stOfMonth',..... │ │ │ -00002880: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -00002890: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ -000028a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000028b0: 203d 3e20 276b 6565 704c 6173 744f 664d => 'keepLastOfM │ │ │ -000028c0: 6f6e 7468 272c 0a09 0909 0909 2020 2020 onth',...... │ │ │ -000028d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000028e0: 272d 2d6b 6565 704c 6173 744f 664d 6f6e '--keepLastOfMon │ │ │ -000028f0: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ -00002900: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep │ │ │ -00002910: 4c61 7374 4f66 4d6f 6e74 6827 2c0a 0909 LastOfMonth',... │ │ │ -00002920: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ -00002930: 3d3e 2027 7965 7327 292c 0a20 2020 2020 => 'yes'),. │ │ │ -00002940: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002950: 2020 2020 2020 2020 2020 204f 7074 696f Optio │ │ │ -00002960: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00002970: 3e20 2766 6972 7374 4461 794f 6657 6565 > 'firstDayOfWee │ │ │ -00002980: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c │ │ │ -00002990: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -000029a0: 6669 7273 7444 6179 4f66 5765 656b 272c firstDayOfWeek', │ │ │ -000029b0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ -000029c0: 6579 2720 3d3e 2027 6669 7273 7444 6179 ey' => 'firstDay │ │ │ -000029d0: 4f66 5765 656b 272c 0a09 0909 0909 2020 OfWeek',...... │ │ │ -000029e0: 2020 272d 6465 6661 756c 7427 203d 3e20 '-default' => │ │ │ -000029f0: 2753 756e 2729 2c0a 0909 0909 4f70 7469 'Sun'),.....Opti │ │ │ -00002a00: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00002a10: 3d3e 2027 6b65 6570 4669 7273 744f 6657 => 'keepFirstOfW │ │ │ -00002a20: 6565 6b27 2c0a 0909 0909 0920 2020 2027 eek',...... ' │ │ │ -00002a30: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00002a40: 2d2d 6b65 6570 4669 7273 744f 6657 6565 --keepFirstOfWee │ │ │ -00002a50: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c │ │ │ -00002a60: 665f 6b65 7927 203d 3e20 276b 6565 7046 f_key' => 'keepF │ │ │ -00002a70: 6972 7374 4f66 5765 656b 272c 0a09 0909 irstOfWeek',.... │ │ │ -00002a80: 0909 2020 2020 272d 7061 7261 6d27 203d .. '-param' = │ │ │ -00002a90: 3e20 2779 6573 2729 2c0a 0909 0909 4f70 > 'yes'),.....Op │ │ │ -00002aa0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00002ab0: 2720 3d3e 2027 6b65 6570 4c61 7374 4f66 ' => 'keepLastOf │ │ │ -00002ac0: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... │ │ │ -00002ad0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00002ae0: 272d 2d6b 6565 704c 6173 744f 6657 6565 '--keepLastOfWee │ │ │ -00002af0: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c │ │ │ -00002b00: 665f 6b65 7927 203d 3e20 276b 6565 704c f_key' => 'keepL │ │ │ -00002b10: 6173 744f 6657 6565 6b27 2c0a 0909 0909 astOfWeek',..... │ │ │ -00002b20: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -00002b30: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. │ │ │ -00002b40: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002b50: 2020 2020 2020 2020 204f 7074 696f 6e2d Option- │ │ │ -00002b60: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00002b70: 276b 6565 7044 7570 6c69 6361 7465 272c 'keepDuplicate', │ │ │ -00002b80: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00002b90: 7074 696f 6e27 203d 3e20 272d 2d6b 6565 ption' => '--kee │ │ │ -00002ba0: 7044 7570 6c69 6361 7465 272c 0a09 0909 pDuplicate',.... │ │ │ -00002bb0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00002bc0: 3d3e 2027 6b65 6570 4475 706c 6963 6174 => 'keepDuplicat │ │ │ -00002bd0: 6527 2c0a 0909 0909 0920 2020 2027 2d64 e',...... '-d │ │ │ -00002be0: 6566 6175 6c74 2720 3d3e 2024 6b65 6570 efault' => $keep │ │ │ -00002bf0: 4475 706c 6963 6174 6529 2c0a 2020 2020 Duplicate),. │ │ │ -00002c00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002c10: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ -00002c20: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00002c30: 3d3e 2027 6b65 6570 4d69 6e4e 756d 6265 => 'keepMinNumbe │ │ │ -00002c40: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ -00002c50: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00002c60: 6b65 6570 4d69 6e4e 756d 6265 7227 2c0a keepMinNumber',. │ │ │ -00002c70: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00002c80: 7927 203d 3e20 276b 6565 704d 696e 4e75 y' => 'keepMinNu │ │ │ -00002c90: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... │ │ │ -00002ca0: 272d 6465 6661 756c 7427 203d 3e20 3130 '-default' => 10 │ │ │ -00002cb0: 2c0a 0909 0909 0920 2020 2027 2d70 6174 ,...... '-pat │ │ │ -00002cc0: 7465 726e 2720 3d3e 2027 5c41 5c64 2b5c tern' => '\A\d+\ │ │ │ -00002cd0: 5a27 292c 0a20 2020 2020 2020 2020 2020 Z'),. │ │ │ -00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002cf0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ -00002d00: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee │ │ │ -00002d10: 704d 6178 4e75 6d62 6572 272c 0a09 0909 pMaxNumber',.... │ │ │ -00002d20: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00002d30: 6e27 203d 3e20 272d 2d6b 6565 704d 6178 n' => '--keepMax │ │ │ -00002d40: 4e75 6d62 6572 272c 0a09 0909 0909 2020 Number',...... │ │ │ -00002d50: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -00002d60: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',. │ │ │ -00002d70: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ -00002d80: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... │ │ │ -00002d90: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' => │ │ │ -00002da0: 2027 5c41 5c64 2b5c 5a27 292c 0a20 2020 '\A\d+\Z'),. │ │ │ -00002db0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002dc0: 2020 2020 2020 2020 2020 2020 204f 7074 Opt │ │ │ -00002dd0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00002de0: 203d 3e20 276b 6565 7052 656c 6174 6976 => 'keepRelativ │ │ │ -00002df0: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ -00002e00: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00002e10: 6b65 6570 5265 6c61 7469 7665 272c 0a09 keepRelative',.. │ │ │ -00002e20: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00002e30: 6173 2720 3d3e 2027 2d52 272c 0a09 0909 as' => '-R',.... │ │ │ -00002e40: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00002e50: 3d3e 2027 6b65 6570 5265 6c61 7469 7665 => 'keepRelative │ │ │ -00002e60: 272c 0a09 0909 0909 2020 2020 272d 7175 ',...... '-qu │ │ │ -00002e70: 6f74 6545 7661 6c27 203d 3e20 2779 6573 oteEval' => 'yes │ │ │ -00002e80: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00002e90: 7261 6d27 203d 3e20 2779 6573 2729 2c0a ram' => 'yes'),. │ │ │ -00002ea0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00002eb0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF │ │ │ -00002ec0: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ -00002ed0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00002ee0: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '- │ │ │ -00002ef0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00002f00: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... │ │ │ -00002f10: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -00002f20: 276c 6f67 4669 6c65 272c 0a09 0909 0909 'logFile',...... │ │ │ -00002f30: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00002f40: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -00002f50: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00002f60: 3d3e 2027 706c 7573 4c6f 6753 7464 6f75 => 'plusLogStdou │ │ │ -00002f70: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ -00002f80: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00002f90: 706c 7573 4c6f 6753 7464 6f75 7427 2c0a plusLogStdout',. │ │ │ -00002fa0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00002fb0: 7927 203d 3e20 2770 6c75 734c 6f67 5374 y' => 'plusLogSt │ │ │ -00002fc0: 646f 7574 272c 0a09 0909 0909 2020 2020 dout',...... │ │ │ -00002fd0: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ -00002fe0: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ -00002ff0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00003000: 7728 272d 6e61 6d65 2720 3d3e 2027 7375 w('-name' => 'su │ │ │ -00003010: 7070 7265 7373 5469 6d65 272c 0a09 0909 ppressTime',.... │ │ │ -00003020: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00003030: 6e27 203d 3e20 272d 2d73 7570 7072 6573 n' => '--suppres │ │ │ -00003040: 7354 696d 6527 2c0a 0909 0909 0920 2020 sTime',...... │ │ │ -00003050: 2027 2d63 665f 6b65 7927 203d 3e20 2773 '-cf_key' => 's │ │ │ -00003060: 7570 7072 6573 7354 696d 6527 2c0a 0909 uppressTime',... │ │ │ -00003070: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if │ │ │ -00003080: 2720 3d3e 2022 5b6c 6f67 4669 6c65 5d22 ' => "[logFile]" │ │ │ -00003090: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -000030a0: 6e6f 4f70 7453 6574 2720 3d3e 205b 2779 noOptSet' => ['y │ │ │ -000030b0: 6573 272c 2027 6e6f 275d 292c 0a09 0909 es', 'no']),.... │ │ │ -000030c0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -000030d0: 616d 6527 203d 3e20 276d 6178 4669 6c65 ame' => 'maxFile │ │ │ -000030e0: 6c65 6e27 2c0a 0909 0909 0920 2020 2027 len',...... ' │ │ │ -000030f0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00003100: 2d6d 272c 0a09 0909 0909 2020 2020 272d -m',...... '- │ │ │ -00003110: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00003120: 6d61 7846 696c 656c 656e 272c 0a09 0909 maxFilelen',.... │ │ │ -00003130: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00003140: 3d3e 2027 6d61 7846 696c 656c 656e 272c => 'maxFilelen', │ │ │ -00003150: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -00003160: 756c 7427 203d 3e20 3165 362c 0a09 0909 ult' => 1e6,.... │ │ │ -00003170: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -00003180: 203d 3e20 275c 415b 655c 645d 2b5c 5a27 => '\A[e\d]+\Z' │ │ │ -00003190: 2c0a 0909 0909 0920 2020 2027 2d6f 6e6c ,...... '-onl │ │ │ -000031a0: 795f 6966 2720 3d3e 2022 5b6c 6f67 4669 y_if' => "[logFi │ │ │ -000031b0: 6c65 5d22 292c 0a09 0909 094f 7074 696f le]"),.....Optio │ │ │ -000031c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000031d0: 3e20 276e 6f4f 664f 6c64 4669 6c65 7327 > 'noOfOldFiles' │ │ │ -000031e0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000031f0: 6f70 7469 6f6e 2720 3d3e 2027 2d6e 272c option' => '-n', │ │ │ -00003200: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00003210: 6c69 6173 2720 3d3e 2027 2d2d 6e6f 4f66 lias' => '--noOf │ │ │ -00003220: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',...... │ │ │ -00003230: 2020 2020 272d 6366 5f6b 6579 2720 3d3e '-cf_key' => │ │ │ -00003240: 2027 6e6f 4f66 4f6c 6446 696c 6573 272c 'noOfOldFiles', │ │ │ -00003250: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -00003260: 756c 7427 203d 3e20 2735 272c 0a09 0909 ult' => '5',.... │ │ │ -00003270: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -00003280: 203d 3e20 275c 415c 642b 5c5a 272c 0a09 => '\A\d+\Z',.. │ │ │ -00003290: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -000032a0: 6627 203d 3e22 5b6c 6f67 4669 6c65 5d22 f' =>"[logFile]" │ │ │ -000032b0: 292c 0a20 2020 2020 2020 2020 2020 2020 ),. │ │ │ -000032c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000032d0: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -000032e0: 2d6e 616d 6527 203d 3e20 2773 6176 654c -name' => 'saveL │ │ │ -000032f0: 6f67 7327 2c0a 0909 0909 0920 2020 2027 ogs',...... ' │ │ │ -00003300: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00003310: 2d2d 7361 7665 4c6f 6773 272c 0a09 0909 --saveLogs',.... │ │ │ -00003320: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00003330: 3d3e 2027 7361 7665 4c6f 6773 272c 0a09 => 'saveLogs',.. │ │ │ -00003340: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -00003350: 6627 203d 3e20 225b 6c6f 6746 696c 655d f' => "[logFile] │ │ │ -00003360: 222c 0a09 0909 0909 2020 2020 272d 6366 ",...... '-cf │ │ │ -00003370: 5f6e 6f4f 7074 5365 7427 203d 3e20 5b27 _noOptSet' => [' │ │ │ -00003380: 7965 7327 2c20 276e 6f27 5d29 2c0a 2020 yes', 'no']),. │ │ │ -00003390: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000033a0: 2020 2020 2020 2020 2020 2020 2020 4f70 Op │ │ │ -000033b0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000033c0: 2720 3d3e 2027 636f 6d70 7265 7373 5769 ' => 'compressWi │ │ │ -000033d0: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ -000033e0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -000033f0: 2d63 6f6d 7072 6573 7357 6974 6827 2c0a -compressWith',. │ │ │ -00003400: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -00003410: 7927 203d 3e20 2763 6f6d 7072 6573 7357 y' => 'compressW │ │ │ -00003420: 6974 6827 2c0a 0909 0909 0920 2020 2027 ith',...... ' │ │ │ -00003430: 2d71 756f 7465 4576 616c 2720 3d3e 2027 -quoteEval' => ' │ │ │ -00003440: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -00003450: 2d64 6566 6175 6c74 2720 3d3e 2027 627a -default' => 'bz │ │ │ -00003460: 6970 3227 2c0a 0909 0909 0920 2020 2027 ip2',...... ' │ │ │ -00003470: 2d6f 6e6c 795f 6966 2720 3d3e 225b 6c6f -only_if' =>"[lo │ │ │ -00003480: 6746 696c 655d 2229 2c0a 2320 6869 6464 gFile]"),.# hidd │ │ │ -00003490: 656e 206f 7074 696f 6e73 0a09 0909 094f en options.....O │ │ │ -000034a0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -000034b0: 6527 203d 3e20 2770 7269 6e74 416c 6c27 e' => 'printAll' │ │ │ -000034c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000034d0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr │ │ │ -000034e0: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... │ │ │ -000034f0: 2020 272d 6869 6464 656e 2720 3d3e 2027 '-hidden' => ' │ │ │ -00003500: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -00003510: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00003520: 3e20 2774 6f64 6179 4f70 7427 2c0a 0909 > 'todayOpt',... │ │ │ -00003530: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00003540: 6f6e 2720 3d3e 2027 2d2d 746f 6461 7927 on' => '--today' │ │ │ -00003550: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00003560: 6b65 7927 203d 3e20 2774 6f64 6179 272c key' => 'today', │ │ │ -00003570: 0a09 0909 0909 2020 2020 272d 6869 6464 ...... '-hidd │ │ │ -00003580: 656e 2720 3d3e 2027 7965 7327 2c0a 0909 en' => 'yes',... │ │ │ -00003590: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ -000035a0: 3d3e 2027 7965 7327 292c 0a23 2075 7365 => 'yes'),.# use │ │ │ -000035b0: 6420 6279 2073 746f 7265 4261 636b 7570 d by storeBackup │ │ │ -000035c0: 4d6f 756e 742e 706c 0a09 0909 094f 7074 Mount.pl.....Opt │ │ │ -000035d0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000035e0: 203d 3e20 2777 7269 7465 546f 4e61 6d65 => 'writeToName │ │ │ -000035f0: 6450 6970 6527 2c0a 0909 0909 0920 2020 dPipe',...... │ │ │ -00003600: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00003610: 2027 2d2d 7772 6974 6554 6f4e 616d 6564 '--writeToNamed │ │ │ -00003620: 5069 7065 272c 0a09 0909 0909 2020 2020 Pipe',...... │ │ │ -00003630: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00003640: 272c 0a09 0909 0909 2020 2020 272d 6869 ',...... '-hi │ │ │ -00003650: 6464 656e 2720 3d3e 2027 7965 7327 290a dden' => 'yes'). │ │ │ -00003660: 0909 0909 5d0a 0909 2020 2020 293b 0a0a ....]... );.. │ │ │ -00003670: 2443 6865 636b 5061 722d 3e63 6865 636b $CheckPar->check │ │ │ -00003680: 2827 2d61 7267 7627 203d 3e20 5c40 4152 ('-argv' => \@AR │ │ │ -00003690: 4756 2c0a 2020 2020 2020 2020 2020 2020 GV,. │ │ │ -000036a0: 2020 2020 2027 2d68 656c 7027 203d 3e20 '-help' => │ │ │ -000036b0: 2448 656c 702c 0a20 2020 2020 2020 2020 $Help,. │ │ │ -000036c0: 2020 2020 2020 2020 272d 6967 6e6f 7265 '-ignore │ │ │ -000036d0: 4164 6469 7469 6f6e 616c 4b65 7973 2720 AdditionalKeys' │ │ │ -000036e0: 3d3e 2031 0a20 2020 2020 2020 2020 2020 => 1. │ │ │ -000036f0: 2020 2020 2020 293b 0a0a 2320 4175 7377 );..# Ausw │ │ │ -00003700: 6572 7475 6e67 2064 6572 2050 6172 616d ertung der Param │ │ │ -00003710: 6574 6572 0a6d 7920 2463 6f6e 6669 6746 eter.my $configF │ │ │ -00003720: 696c 6520 3d20 2443 6865 636b 5061 722d ile = $CheckPar- │ │ │ -00003730: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00003740: 636f 6e66 6967 4669 6c65 2729 3b0a 6d79 configFile');.my │ │ │ -00003750: 2024 7072 696e 7420 3d20 2443 6865 636b $print = $Check │ │ │ -00003760: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00003770: 7574 5061 7228 2770 7269 6e74 2729 3b0a utPar('print');. │ │ │ -00003780: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir = │ │ │ -00003790: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000037a0: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu │ │ │ -000037b0: 7044 6972 2729 3b0a 6d79 2024 7365 7269 pDir');.my $seri │ │ │ -000037c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -000037d0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s │ │ │ -000037e0: 6572 6965 7327 293b 0a0a 6d79 2024 6c6f eries');..my $lo │ │ │ -000037f0: 636b 4669 6c65 203d 2024 4368 6563 6b50 ckFile = $CheckP │ │ │ -00003800: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00003810: 7228 276c 6f63 6b46 696c 6527 293b 0a6d r('lockFile');.m │ │ │ -00003820: 7920 2464 6f4e 6f74 4465 6c65 7465 203d y $doNotDelete = │ │ │ -00003830: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003840: 7074 5769 7468 6f75 7450 6172 2827 646f ptWithoutPar('do │ │ │ -00003850: 4e6f 7444 656c 6574 6527 293b 0a6d 7920 NotDelete');.my │ │ │ -00003860: 2464 656c 6574 654e 6f74 4669 6e69 7368 $deleteNotFinish │ │ │ -00003870: 6564 4469 7273 203d 2024 4368 6563 6b50 edDirs = $CheckP │ │ │ -00003880: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00003890: 7450 6172 2827 6465 6c65 7465 4e6f 7446 tPar('deleteNotF │ │ │ -000038a0: 696e 6973 6865 6444 6972 7327 293b 0a24 inishedDirs');.$ │ │ │ -000038b0: 6b65 6570 416c 6c20 3d20 2443 6865 636b keepAll = $Check │ │ │ -000038c0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -000038d0: 6172 2827 6b65 6570 416c 6c27 293b 0a6d ar('keepAll');.m │ │ │ -000038e0: 7920 246b 6565 7057 6565 6b64 6179 203d y $keepWeekday = │ │ │ -000038f0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003900: 7074 5769 7468 5061 7228 276b 6565 7057 ptWithPar('keepW │ │ │ -00003910: 6565 6b64 6179 2729 3b0a 246b 6565 7057 eekday');.$keepW │ │ │ -00003920: 6565 6b64 6179 203d 2022 4024 6b65 6570 eekday = "@$keep │ │ │ -00003930: 5765 656b 6461 7922 2069 6620 6465 6669 Weekday" if defi │ │ │ -00003940: 6e65 6420 246b 6565 7057 6565 6b64 6179 ned $keepWeekday │ │ │ -00003950: 3b0a 6d79 2024 6b65 6570 4669 7273 744f ;.my $keepFirstO │ │ │ -00003960: 6659 6561 7220 3d20 2443 6865 636b 5061 fYear = $CheckPa │ │ │ -00003970: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00003980: 2827 6b65 6570 4669 7273 744f 6659 6561 ('keepFirstOfYea │ │ │ -00003990: 7227 293b 0a6d 7920 246b 6565 704c 6173 r');.my $keepLas │ │ │ -000039a0: 744f 6659 6561 7220 3d20 2443 6865 636b tOfYear = $Check │ │ │ -000039b0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -000039c0: 6172 2827 6b65 6570 4c61 7374 4f66 5965 ar('keepLastOfYe │ │ │ -000039d0: 6172 2729 3b0a 6d79 2024 6b65 6570 4669 ar');.my $keepFi │ │ │ -000039e0: 7273 744f 664d 6f6e 7468 203d 2024 4368 rstOfMonth = $Ch │ │ │ -000039f0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00003a00: 7468 5061 7228 276b 6565 7046 6972 7374 thPar('keepFirst │ │ │ -00003a10: 4f66 4d6f 6e74 6827 293b 0a6d 7920 246b OfMonth');.my $k │ │ │ -00003a20: 6565 704c 6173 744f 664d 6f6e 7468 203d eepLastOfMonth = │ │ │ -00003a30: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003a40: 7074 5769 7468 5061 7228 276b 6565 704c ptWithPar('keepL │ │ │ -00003a50: 6173 744f 664d 6f6e 7468 2729 3b0a 6d79 astOfMonth');.my │ │ │ -00003a60: 2024 6669 7273 7444 6179 4f66 5765 656b $firstDayOfWeek │ │ │ -00003a70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00003a80: 744f 7074 5769 7468 5061 7228 2766 6972 tOptWithPar('fir │ │ │ -00003a90: 7374 4461 794f 6657 6565 6b27 293b 0a6d stDayOfWeek');.m │ │ │ -00003aa0: 7920 246b 6565 7046 6972 7374 4f66 5765 y $keepFirstOfWe │ │ │ -00003ab0: 656b 203d 2024 4368 6563 6b50 6172 2d3e ek = $CheckPar-> │ │ │ -00003ac0: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k │ │ │ -00003ad0: 6565 7046 6972 7374 4f66 5765 656b 2729 eepFirstOfWeek') │ │ │ -00003ae0: 3b0a 6d79 2024 6b65 6570 4c61 7374 4f66 ;.my $keepLastOf │ │ │ -00003af0: 5765 656b 203d 2024 4368 6563 6b50 6172 Week = $CheckPar │ │ │ -00003b00: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00003b10: 276b 6565 704c 6173 744f 6657 6565 6b27 'keepLastOfWeek' │ │ │ -00003b20: 293b 0a24 6b65 6570 4475 706c 6963 6174 );.$keepDuplicat │ │ │ -00003b30: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ -00003b40: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke │ │ │ -00003b50: 6570 4475 706c 6963 6174 6527 293b 0a6d epDuplicate');.m │ │ │ -00003b60: 7920 246b 6565 704d 696e 4e75 6d62 6572 y $keepMinNumber │ │ │ -00003b70: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00003b80: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee │ │ │ -00003b90: 704d 696e 4e75 6d62 6572 2729 3b0a 6d79 pMinNumber');.my │ │ │ -00003ba0: 2024 6b65 6570 4d61 784e 756d 6265 7220 $keepMaxNumber │ │ │ -00003bb0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00003bc0: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ -00003bd0: 4d61 784e 756d 6265 7227 293b 0a6d 7920 MaxNumber');.my │ │ │ -00003be0: 246b 6565 7052 656c 6174 6976 6520 3d20 $keepRelative = │ │ │ -00003bf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00003c00: 7457 6974 6850 6172 2827 6b65 6570 5265 tWithPar('keepRe │ │ │ -00003c10: 6c61 7469 7665 2729 3b0a 6d79 2024 6c6f lative');.my $lo │ │ │ -00003c20: 6746 696c 6520 3d20 2443 6865 636b 5061 gFile = $CheckPa │ │ │ -00003c30: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00003c40: 2827 6c6f 6746 696c 6527 293b 0a6d 7920 ('logFile');.my │ │ │ -00003c50: 2470 6c75 734c 6f67 5374 646f 7574 203d $plusLogStdout = │ │ │ -00003c60: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003c70: 7074 5769 7468 6f75 7450 6172 2827 706c ptWithoutPar('pl │ │ │ -00003c80: 7573 4c6f 6753 7464 6f75 7427 293b 0a6d usLogStdout');.m │ │ │ -00003c90: 7920 2477 6974 6854 696d 6520 3d20 6e6f y $withTime = no │ │ │ -00003ca0: 7420 2443 6865 636b 5061 722d 3e67 6574 t $CheckPar->get │ │ │ -00003cb0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s │ │ │ -00003cc0: 7570 7072 6573 7354 696d 6527 293b 0a24 uppressTime');.$ │ │ │ -00003cd0: 7769 7468 5469 6d65 203d 2024 7769 7468 withTime = $with │ │ │ -00003ce0: 5469 6d65 203f 2027 7965 7327 203a 2027 Time ? 'yes' : ' │ │ │ -00003cf0: 6e6f 273b 0a6d 7920 246d 6178 4669 6c65 no';.my $maxFile │ │ │ -00003d00: 6c65 6e20 3d20 2443 6865 636b 5061 722d len = $CheckPar- │ │ │ -00003d10: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00003d20: 6d61 7846 696c 656c 656e 2729 3b0a 6d79 maxFilelen');.my │ │ │ -00003d30: 2024 6e6f 4f66 4f6c 6446 696c 6573 203d $noOfOldFiles = │ │ │ -00003d40: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003d50: 7074 5769 7468 5061 7228 276e 6f4f 664f ptWithPar('noOfO │ │ │ -00003d60: 6c64 4669 6c65 7327 293b 0a6d 7920 2473 ldFiles');.my $s │ │ │ -00003d70: 6176 654c 6f67 7320 3d20 2443 6865 636b aveLogs = $Check │ │ │ -00003d80: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00003d90: 7574 5061 7228 2773 6176 654c 6f67 7327 utPar('saveLogs' │ │ │ -00003da0: 2920 3f20 2779 6573 2720 3a20 276e 6f27 ) ? 'yes' : 'no' │ │ │ -00003db0: 3b0a 6d79 2024 636f 6d70 7265 7373 5769 ;.my $compressWi │ │ │ -00003dc0: 7468 203d 2024 4368 6563 6b50 6172 2d3e th = $CheckPar-> │ │ │ -00003dd0: 6765 744f 7074 5769 7468 5061 7228 2763 getOptWithPar('c │ │ │ -00003de0: 6f6d 7072 6573 7357 6974 6827 293b 0a23 ompressWith');.# │ │ │ -00003df0: 2068 6964 6465 6e20 6f70 7469 6f6e 730a hidden options. │ │ │ -00003e00: 6d79 2024 7072 696e 7441 6c6c 203d 2024 my $printAll = $ │ │ │ -00003e10: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00003e20: 5769 7468 6f75 7450 6172 2827 7072 696e WithoutPar('prin │ │ │ -00003e30: 7441 6c6c 2729 3b0a 2470 7269 6e74 203d tAll');.$print = │ │ │ -00003e40: 2031 2069 6620 2470 7269 6e74 416c 6c3b 1 if $printAll; │ │ │ -00003e50: 0a6d 7920 2474 6f64 6179 4f70 7420 3d20 .my $todayOpt = │ │ │ -00003e60: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00003e70: 7457 6974 6850 6172 2827 746f 6461 794f tWithPar('todayO │ │ │ -00003e80: 7074 2729 3b20 2023 2066 6f72 6d61 7420 pt'); # format │ │ │ -00003e90: 6c69 6b65 0a6d 7920 2477 7269 7465 546f like.my $writeTo │ │ │ -00003ea0: 4e61 6d65 6450 6970 6520 3d20 2443 6865 NamedPipe = $Che │ │ │ -00003eb0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00003ec0: 6850 6172 2827 7772 6974 6554 6f4e 616d hPar('writeToNam │ │ │ -00003ed0: 6564 5069 7065 2729 3b0a 2020 2020 2020 edPipe');. │ │ │ -00003ee0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003ef0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003f00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003f10: 2320 6261 636b 7570 2064 6972 206e 616d # backup dir nam │ │ │ -00003f20: 650a 0a69 6620 2824 7072 696e 7429 0a7b e..if ($print).{ │ │ │ -00003f30: 0a20 2020 2024 4368 6563 6b50 6172 2d3e . $CheckPar-> │ │ │ -00003f40: 7072 696e 7428 272d 7368 6f77 4869 6464 print('-showHidd │ │ │ -00003f50: 656e 2720 3d3e 2024 7072 696e 7441 6c6c en' => $printAll │ │ │ -00003f60: 293b 0a20 2020 2065 7869 7420 303b 0a7d );. exit 0;.} │ │ │ -00003f70: 0a0a 6d79 2024 7072 4c6f 6731 3b0a 6d79 ..my $prLog1;.my │ │ │ -00003f80: 2028 406b 696e 6429 203d 2028 2741 3a42 (@kind) = ('A:B │ │ │ -00003f90: 4547 494e 272c 2027 5a3a 454e 4427 2c27 EGIN', 'Z:END',' │ │ │ -00003fa0: 493a 494e 464f 272c 2027 573a 5741 524e I:INFO', 'W:WARN │ │ │ -00003fb0: 494e 4727 2c20 2745 3a45 5252 4f52 272c ING', 'E:ERROR', │ │ │ -00003fc0: 0a09 2020 2020 2020 2753 3a53 5441 5449 .. 'S:STATI │ │ │ -00003fd0: 5354 4943 272c 2027 443a 4445 4255 4727 STIC', 'D:DEBUG' │ │ │ -00003fe0: 2c20 2756 3a56 4552 5349 4f4e 2729 3b0a , 'V:VERSION');. │ │ │ -00003ff0: 0a69 6620 2824 6c6f 6746 696c 6529 0a7b .if ($logFile).{ │ │ │ -00004000: 0a20 2020 2024 7072 4c6f 6731 203d 2070 . $prLog1 = p │ │ │ -00004010: 7269 6e74 4c6f 672d 3e6e 6577 2827 2d6b rintLog->new('-k │ │ │ -00004020: 696e 6427 203d 3e20 5c40 6b69 6e64 2c0a ind' => \@kind,. │ │ │ -00004030: 0909 0920 2020 2027 2d66 696c 6527 203d ... '-file' = │ │ │ -00004040: 3e20 246c 6f67 4669 6c65 2c0a 0909 0920 > $logFile,.... │ │ │ -00004050: 2020 2027 2d77 6974 6854 696d 6527 203d '-withTime' = │ │ │ -00004060: 3e20 2477 6974 6854 696d 652c 0a09 0909 > $withTime,.... │ │ │ -00004070: 2020 2020 272d 6d61 7846 696c 656c 656e '-maxFilelen │ │ │ -00004080: 2720 3d3e 2024 6d61 7846 696c 656c 656e ' => $maxFilelen │ │ │ -00004090: 2c0a 0909 0920 2020 2027 2d6e 6f4f 664f ,.... '-noOfO │ │ │ -000040a0: 6c64 4669 6c65 7327 203d 3e20 246e 6f4f ldFiles' => $noO │ │ │ -000040b0: 664f 6c64 4669 6c65 7329 3b0a 7d0a 656c fOldFiles);.}.el │ │ │ -000040c0: 7365 0a7b 0a20 2020 2024 7072 4c6f 6731 se.{. $prLog1 │ │ │ -000040d0: 203d 2070 7269 6e74 4c6f 672d 3e6e 6577 = printLog->new │ │ │ -000040e0: 2827 2d6b 696e 6427 203d 3e20 5c40 6b69 ('-kind' => \@ki │ │ │ -000040f0: 6e64 293b 0a7d 0a0a 6d79 2024 7072 4c6f nd);.}..my $prLo │ │ │ -00004100: 6720 3d20 7072 696e 744c 6f67 4d75 6c74 g = printLogMult │ │ │ -00004110: 6970 6c65 2d3e 6e65 7728 272d 7072 4c6f iple->new('-prLo │ │ │ -00004120: 6773 2720 3d3e 205b 2470 724c 6f67 315d gs' => [$prLog1] │ │ │ -00004130: 293b 0a0a 6966 2028 2470 6c75 734c 6f67 );..if ($plusLog │ │ │ -00004140: 5374 646f 7574 290a 7b0a 2020 2020 6d79 Stdout).{. my │ │ │ -00004150: 2024 7020 3d20 7072 696e 744c 6f67 2d3e $p = printLog-> │ │ │ -00004160: 6e65 7728 272d 6b69 6e64 2720 3d3e 205c new('-kind' => \ │ │ │ -00004170: 406b 696e 642c 2c0a 0909 0920 2027 2d66 @kind,,.... '-f │ │ │ -00004180: 696c 6564 6573 6372 6970 746f 7227 2c20 iledescriptor', │ │ │ -00004190: 2a53 5444 4f55 5429 3b0a 2020 2020 2470 *STDOUT);. $p │ │ │ -000041a0: 724c 6f67 2d3e 6164 6428 272d 7072 4c6f rLog->add('-prLo │ │ │ -000041b0: 6773 2720 3d3e 205b 2470 5d29 3b0a 7d0a gs' => [$p]);.}. │ │ │ -000041c0: 6966 2028 2477 7269 7465 546f 4e61 6d65 if ($writeToName │ │ │ -000041d0: 6450 6970 6529 0a7b 0a20 2020 206d 7920 dPipe).{. my │ │ │ -000041e0: 246e 7020 3d20 7072 696e 744c 6f67 2d3e $np = printLog-> │ │ │ -000041f0: 6e65 7728 272d 6b69 6e64 2720 3d3e 205c new('-kind' => \ │ │ │ -00004200: 406b 696e 642c 0a09 0909 2020 2027 2d66 @kind,.... '-f │ │ │ -00004210: 696c 6527 203d 3e20 2477 7269 7465 546f ile' => $writeTo │ │ │ -00004220: 4e61 6d65 6450 6970 652c 0a09 0909 2020 NamedPipe,.... │ │ │ -00004230: 2027 2d6d 6178 4669 6c65 6c65 6e27 203d '-maxFilelen' = │ │ │ -00004240: 3e20 3029 3b0a 2020 2020 2470 724c 6f67 > 0);. $prLog │ │ │ -00004250: 2d3e 6164 6428 272d 7072 4c6f 6773 2720 ->add('-prLogs' │ │ │ -00004260: 3d3e 205b 246e 705d 293b 0a7d 0a0a 2840 => [$np]);.}..(@ │ │ │ -00004270: 6d61 696e 3a3a 636c 6561 6e75 7029 203d main::cleanup) = │ │ │ -00004280: 2028 2470 724c 6f67 2c20 756e 6465 6629 ($prLog, undef) │ │ │ -00004290: 3b0a 2453 4947 7b49 4e54 7d20 3d20 5c26 ;.$SIG{INT} = \& │ │ │ -000042a0: 636c 6561 6e75 703b 0a24 5349 477b 5445 cleanup;.$SIG{TE │ │ │ -000042b0: 524d 7d20 3d20 5c26 636c 6561 6e75 703b RM} = \&cleanup; │ │ │ -000042c0: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -000042d0: 272d 6b69 6e64 2720 3d3e 2027 4127 2c0a '-kind' => 'A',. │ │ │ -000042e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000042f0: 0a09 2020 2020 2020 5b22 7374 6172 7469 .. ["starti │ │ │ -00004300: 6e67 2064 656c 6574 696f 6e20 696e 203c ng deletion in < │ │ │ -00004310: 2462 6163 6b75 7044 6972 3e2c 2073 6572 $backupDir>, ser │ │ │ -00004320: 6965 7320 3c24 7365 7269 6573 3e22 5d29 ies <$series>"]) │ │ │ -00004330: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print( │ │ │ -00004340: 272d 6b69 6e64 2720 3d3e 2027 5627 2c0a '-kind' => 'V',. │ │ │ -00004350: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00004360: 205b 2273 746f 7265 4261 636b 7570 4465 ["storeBackupDe │ │ │ -00004370: 6c2e 706c 2c20 246d 6169 6e3a 3a53 544f l.pl, $main::STO │ │ │ -00004380: 5245 4241 434b 5550 5645 5253 494f 4e22 REBACKUPVERSION" │ │ │ -00004390: 5d29 3b0a 0a24 7072 4c6f 672d 3e70 7269 ]);..$prLog->pri │ │ │ -000043a0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000043b0: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -000043c0: 203d 3e20 5b22 6261 636b 7570 4469 7220 => ["backupDir │ │ │ -000043d0: 6469 7265 6374 6f72 7920 3c24 6261 636b directory <$back │ │ │ -000043e0: 7570 4469 723e 2064 6f65 7320 6e6f 7420 upDir> does not │ │ │ -000043f0: 6578 6973 745c 6e24 4865 6c70 225d 2c0a exist\n$Help"],. │ │ │ -00004400: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00004410: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless │ │ │ -00004420: 2d65 2024 6261 636b 7570 4469 723b 0a0a -e $backupDir;.. │ │ │ -00004430: 6d79 2024 7461 7267 6574 4469 7220 3d20 my $targetDir = │ │ │ -00004440: 2224 6261 636b 7570 4469 722f 2473 6572 "$backupDir/$ser │ │ │ -00004450: 6965 7322 3b0a 2470 724c 6f67 2d3e 7072 ies";.$prLog->pr │ │ │ -00004460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00004470: 4527 2c0a 0920 2020 2020 2027 2d73 7472 E',.. '-str │ │ │ -00004480: 2720 3d3e 205b 2263 616e 6e6f 7420 7772 ' => ["cannot wr │ │ │ -00004490: 6974 6520 746f 2074 6172 6765 7420 6469 ite to target di │ │ │ -000044a0: 7265 6374 6f72 7920 3c24 7461 7267 6574 rectory <$target │ │ │ -000044b0: 4469 723e 225d 2c0a 0920 2020 2020 2027 Dir>"],.. ' │ │ │ -000044c0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ -000044d0: 2075 6e6c 6573 7320 282d 7720 2474 6172 unless (-w $tar │ │ │ -000044e0: 6765 7444 6972 293b 0a24 7461 7267 6574 getDir);.$target │ │ │ -000044f0: 4469 7220 3d20 3a3a 6162 736f 6c75 7465 Dir = ::absolute │ │ │ -00004500: 5061 7468 2824 7461 7267 6574 4469 7229 Path($targetDir) │ │ │ -00004510: 3b0a 0a0a 6d79 2024 616c 6c4c 696e 6b73 ;...my $allLinks │ │ │ -00004520: 203d 206c 6174 654c 696e 6b73 2d3e 6e65 = lateLinks->ne │ │ │ -00004530: 7728 272d 6469 7273 2720 3d3e 205b 2474 w('-dirs' => [$t │ │ │ -00004540: 6172 6765 7444 6972 5d2c 0a09 0909 2020 argetDir],.... │ │ │ -00004550: 2020 2020 272d 6b69 6e64 2720 3d3e 2027 '-kind' => ' │ │ │ -00004560: 7265 6375 7273 6976 6553 6561 7263 6827 recursiveSearch' │ │ │ -00004570: 2c0a 0909 0920 2020 2020 2027 2d76 6572 ,.... '-ver │ │ │ -00004580: 626f 7365 2720 3d3e 2030 2c0a 0909 0920 bose' => 0,.... │ │ │ -00004590: 2020 2020 2027 2d70 724c 6f67 2720 3d3e '-prLog' => │ │ │ -000045a0: 2024 7072 4c6f 6729 3b0a 0a0a 230a 2320 $prLog);...#.# │ │ │ -000045b0: 6c6f 636b 2066 696c 6520 fc62 6572 7072 lock file .berpr │ │ │ -000045c0: fc66 656e 0a23 0a3a 3a63 6865 636b 4c6f .fen.#.::checkLo │ │ │ -000045d0: 636b 4669 6c65 2824 6c6f 636b 4669 6c65 ckFile($lockFile │ │ │ -000045e0: 2c20 2470 724c 6f67 293b 0a0a 6d79 2024 , $prLog);..my $ │ │ │ -000045f0: 7374 6174 4465 6c4f 6c64 4261 636b 7570 statDelOldBackup │ │ │ -00004600: 4469 7273 203d 0a20 2020 2073 7461 7469 Dirs =. stati │ │ │ -00004610: 7374 6963 4465 6c65 7465 4f6c 6442 6163 sticDeleteOldBac │ │ │ -00004620: 6b75 7044 6972 732d 3e6e 6577 2827 2d70 kupDirs->new('-p │ │ │ -00004630: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -00004640: 3b0a 6d79 2024 746f 6461 7920 3d20 6461 ;.my $today = da │ │ │ -00004650: 7465 546f 6f6c 732d 3e6e 6577 2829 3b0a teTools->new();. │ │ │ -00004660: 6966 2028 2474 6f64 6179 4f70 7429 0a7b if ($todayOpt).{ │ │ │ -00004670: 0a20 2020 2069 6620 2824 746f 6461 794f . if ($todayO │ │ │ -00004680: 7074 203d 7e20 2f5c 4128 5c64 7b34 7d29 pt =~ /\A(\d{4}) │ │ │ -00004690: 5c2e 285c 647b 327d 295c 2e28 5c64 7b32 \.(\d{2})\.(\d{2 │ │ │ -000046a0: 7d29 5f28 5c64 7b32 7d29 2e28 5c64 7b32 })_(\d{2}).(\d{2 │ │ │ -000046b0: 7d29 2e28 5c64 7b32 7d29 5c5a 2f29 0a20 }).(\d{2})\Z/). │ │ │ -000046c0: 2020 207b 0a09 2474 6f64 6179 203d 2064 {..$today = d │ │ │ -000046d0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 272d ateTools->new('- │ │ │ -000046e0: 7965 6172 2720 3d3e 2024 312c 0a09 0909 year' => $1,.... │ │ │ -000046f0: 0927 2d6d 6f6e 7468 2720 3d3e 2024 322c .'-month' => $2, │ │ │ -00004700: 0a09 0909 0927 2d64 6179 2720 3d3e 2024 .....'-day' => $ │ │ │ -00004710: 332c 0a09 0909 0927 2d68 6f75 7227 203d 3,.....'-hour' = │ │ │ -00004720: 3e20 2434 2c0a 0909 0909 272d 6d69 6e27 > $4,.....'-min' │ │ │ -00004730: 203d 3e20 2435 2c0a 0909 0909 272d 7365 => $5,.....'-se │ │ │ -00004740: 6327 203d 3e20 2436 293b 0a09 2470 724c c' => $6);..$prL │ │ │ -00004750: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00004760: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... │ │ │ -00004770: 2020 272d 7374 7227 203d 3e0a 0909 2020 '-str' =>... │ │ │ -00004780: 2020 2020 5b22 2474 6f64 6179 4f70 7420 ["$todayOpt │ │ │ -00004790: 286f 7074 696f 6e20 746f 6461 7929 2069 (option today) i │ │ │ -000047a0: 7320 6e6f 7420 6120 7661 6c69 6420 6461 s not a valid da │ │ │ -000047b0: 7465 225d 2c0a 0909 2020 2020 2020 272d te"],... '- │ │ │ -000047c0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ -000047d0: 2075 6e6c 6573 7320 2474 6f64 6179 2d3e unless $today-> │ │ │ -000047e0: 6973 5661 6c69 6428 293b 0a09 2470 724c isValid();..$prL │ │ │ -000047f0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00004800: 2720 3d3e 2027 5727 2c0a 0909 2020 2020 ' => 'W',... │ │ │ -00004810: 2020 272d 7374 7227 203d 3e20 5b22 7365 '-str' => ["se │ │ │ -00004820: 7474 696e 6720 746f 6461 7920 746f 2022 tting today to " │ │ │ -00004830: 202e 0a09 0909 0920 2474 6f64 6179 2d3e ...... $today-> │ │ │ -00004840: 6765 7444 6174 6554 696d 6528 295d 293b getDateTime()]); │ │ │ -00004850: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -00004860: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -00004870: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00004880: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -00004890: 7472 2720 3d3e 205b 2266 6f72 6d61 7420 tr' => ["format │ │ │ -000048a0: 6572 726f 7220 6174 206f 7074 696f 6e20 error at option │ │ │ -000048b0: 746f 6461 792c 206d 7573 7420 6265 222c today, must be", │ │ │ -000048c0: 0a09 0909 0920 2220 2059 5959 592e 4d4d ..... " YYYY.MM │ │ │ -000048d0: 2e44 445f 4848 2e4d 4d2e 5353 225d 2c0a .DD_HH.MM.SS"],. │ │ │ -000048e0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ -000048f0: 3d3e 2031 293b 0a20 2020 207d 0a7d 0a0a => 1);. }.}.. │ │ │ -00004900: 6d79 2024 6465 6c4f 6c64 203d 0a20 2020 my $delOld =. │ │ │ -00004910: 2064 656c 6574 654f 6c64 4261 636b 7570 deleteOldBackup │ │ │ -00004920: 4469 7273 2d3e 6e65 7728 272d 7461 7267 Dirs->new('-targ │ │ │ -00004930: 6574 4469 7227 203d 3e20 2474 6172 6765 etDir' => $targe │ │ │ -00004940: 7444 6972 2c0a 0909 0920 2020 2020 272d tDir,.... '- │ │ │ -00004950: 646f 4e6f 7444 656c 6574 6527 203d 3e20 doNotDelete' => │ │ │ -00004960: 2464 6f4e 6f74 4465 6c65 7465 2c0a 0909 $doNotDelete,... │ │ │ -00004970: 0920 2020 2020 272d 6465 6c65 7465 4e6f . '-deleteNo │ │ │ -00004980: 7446 696e 6973 6865 6444 6972 7327 203d tFinishedDirs' = │ │ │ -00004990: 3e20 2464 656c 6574 654e 6f74 4669 6e69 > $deleteNotFini │ │ │ -000049a0: 7368 6564 4469 7273 2c0a 0909 0920 2020 shedDirs,.... │ │ │ -000049b0: 2020 272d 6368 6563 6b53 756d 4669 6c65 '-checkSumFile │ │ │ -000049c0: 2720 3d3e 2024 6368 6563 6b53 756d 4669 ' => $checkSumFi │ │ │ -000049d0: 6c65 2c0a 0909 0920 2020 2020 272d 7072 le,.... '-pr │ │ │ -000049e0: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,. │ │ │ -000049f0: 0909 0920 2020 2020 272d 746f 6461 7927 ... '-today' │ │ │ -00004a00: 203d 3e20 2474 6f64 6179 2c0a 0909 0920 => $today,.... │ │ │ -00004a10: 2020 2020 272d 6b65 6570 4669 7273 744f '-keepFirstO │ │ │ -00004a20: 6659 6561 7227 203d 3e20 246b 6565 7046 fYear' => $keepF │ │ │ -00004a30: 6972 7374 4f66 5965 6172 2c0a 0909 0920 irstOfYear,.... │ │ │ -00004a40: 2020 2020 272d 6b65 6570 4c61 7374 4f66 '-keepLastOf │ │ │ -00004a50: 5965 6172 2720 3d3e 2024 6b65 6570 4c61 Year' => $keepLa │ │ │ -00004a60: 7374 4f66 5965 6172 2c0a 0909 0920 2020 stOfYear,.... │ │ │ -00004a70: 2020 272d 6b65 6570 4669 7273 744f 664d '-keepFirstOfM │ │ │ -00004a80: 6f6e 7468 2720 3d3e 2024 6b65 6570 4669 onth' => $keepFi │ │ │ -00004a90: 7273 744f 664d 6f6e 7468 2c0a 0909 0920 rstOfMonth,.... │ │ │ -00004aa0: 2020 2020 272d 6b65 6570 4c61 7374 4f66 '-keepLastOf │ │ │ -00004ab0: 4d6f 6e74 6827 203d 3e20 246b 6565 704c Month' => $keepL │ │ │ -00004ac0: 6173 744f 664d 6f6e 7468 2c0a 0909 0920 astOfMonth,.... │ │ │ -00004ad0: 2020 2020 272d 6669 7273 7444 6179 4f66 '-firstDayOf │ │ │ -00004ae0: 5765 656b 2720 3d3e 2024 6669 7273 7444 Week' => $firstD │ │ │ -00004af0: 6179 4f66 5765 656b 2c0a 0909 0920 2020 ayOfWeek,.... │ │ │ -00004b00: 2020 272d 6b65 6570 4669 7273 744f 6657 '-keepFirstOfW │ │ │ -00004b10: 6565 6b27 203d 3e20 246b 6565 7046 6972 eek' => $keepFir │ │ │ -00004b20: 7374 4f66 5765 656b 2c0a 0909 0920 2020 stOfWeek,.... │ │ │ -00004b30: 2020 272d 6b65 6570 4c61 7374 4f66 5765 '-keepLastOfWe │ │ │ -00004b40: 656b 2720 3d3e 2024 6b65 6570 4c61 7374 ek' => $keepLast │ │ │ -00004b50: 4f66 5765 656b 2c0a 0909 0920 2020 2020 OfWeek,.... │ │ │ -00004b60: 272d 6b65 6570 416c 6c27 203d 3e20 246b '-keepAll' => $k │ │ │ -00004b70: 6565 7041 6c6c 2c0a 0909 0920 2020 2020 eepAll,.... │ │ │ -00004b80: 272d 6b65 6570 5265 6c61 7469 7665 2720 '-keepRelative' │ │ │ -00004b90: 3d3e 2024 6b65 6570 5265 6c61 7469 7665 => $keepRelative │ │ │ -00004ba0: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ -00004bb0: 5765 656b 6461 7927 203d 3e20 246b 6565 Weekday' => $kee │ │ │ -00004bc0: 7057 6565 6b64 6179 2c0a 0909 0920 2020 pWeekday,.... │ │ │ -00004bd0: 2020 272d 6b65 6570 4475 706c 6963 6174 '-keepDuplicat │ │ │ -00004be0: 6527 203d 3e20 246b 6565 7044 7570 6c69 e' => $keepDupli │ │ │ -00004bf0: 6361 7465 2c0a 0909 0920 2020 2020 272d cate,.... '- │ │ │ -00004c00: 6b65 6570 4d69 6e4e 756d 6265 7227 203d keepMinNumber' = │ │ │ -00004c10: 3e20 246b 6565 704d 696e 4e75 6d62 6572 > $keepMinNumber │ │ │ -00004c20: 2c0a 0909 0920 2020 2020 272d 6b65 6570 ,.... '-keep │ │ │ -00004c30: 4d61 784e 756d 6265 7227 203d 3e20 246b MaxNumber' => $k │ │ │ -00004c40: 6565 704d 6178 4e75 6d62 6572 2c0a 0909 eepMaxNumber,... │ │ │ -00004c50: 0920 2020 2020 272d 7374 6174 4465 6c4f . '-statDelO │ │ │ -00004c60: 6c64 4261 636b 7570 4469 7273 2720 3d3e ldBackupDirs' => │ │ │ -00004c70: 2024 7374 6174 4465 6c4f 6c64 4261 636b $statDelOldBack │ │ │ -00004c80: 7570 4469 7273 2c0a 0909 0920 2020 2020 upDirs,.... │ │ │ -00004c90: 272d 6c61 7465 4c69 6e6b 7350 6172 616d '-lateLinksParam │ │ │ -00004ca0: 2720 3d3e 2075 6e64 6566 2c0a 0909 0920 ' => undef,.... │ │ │ -00004cb0: 2020 2020 272d 616c 6c4c 696e 6b73 2720 '-allLinks' │ │ │ -00004cc0: 3d3e 2024 616c 6c4c 696e 6b73 0a09 0909 => $allLinks.... │ │ │ -00004cd0: 2020 2020 2029 3b0a 0a24 6465 6c4f 6c64 );..$delOld │ │ │ -00004ce0: 2d3e 6368 6563 6b42 6163 6b75 7073 2829 ->checkBackups() │ │ │ -00004cf0: 3b0a 0a24 6465 6c4f 6c64 2d3e 6465 6c65 ;..$delOld->dele │ │ │ -00004d00: 7465 4261 636b 7570 7328 293b 0a24 7374 teBackups();.$st │ │ │ -00004d10: 6174 4465 6c4f 6c64 4261 636b 7570 4469 atDelOldBackupDi │ │ │ -00004d20: 7273 2d3e 7072 696e 7428 293b 0a0a 2320 rs->print();..# │ │ │ -00004d30: 5374 6174 6973 7469 6b20 fc62 6572 2044 Statistik .ber D │ │ │ -00004d40: 6175 6572 2075 6e64 2043 5055 2d56 6572 auer und CPU-Ver │ │ │ -00004d50: 6272 6175 6368 0a0a 6d79 2028 406c 293b brauch..my (@l); │ │ │ -00004d60: 0a6d 7920 2824 7573 6572 2c24 7379 7374 .my ($user,$syst │ │ │ -00004d70: 656d 2c24 6375 7365 722c 2463 7379 7374 em,$cuser,$csyst │ │ │ -00004d80: 656d 2920 3d20 7469 6d65 733b 0a6d 7920 em) = times;.my │ │ │ -00004d90: 2824 7472 656e 6e29 203d 2022 2d2d 2d2d ($trenn) = "---- │ │ │ -00004da0: 2d2d 2d2b 2d2d 2d2d 2d2d 2d2d 2d2d 2b2d ---+----------+- │ │ │ -00004db0: 2d2d 2d2d 2d2d 2d2d 2d22 3b0a 7075 7368 ---------";.push │ │ │ -00004dc0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf("%- │ │ │ -00004dd0: 3773 7c25 3130 737c 2531 3073 222c 2022 7s|%10s|%10s", " │ │ │ -00004de0: 205b 7365 635d 222c 2022 7573 6572 222c [sec]", "user", │ │ │ -00004df0: 2022 7379 7374 656d 2229 3b0a 7075 7368 "system");.push │ │ │ -00004e00: 2040 6c2c 2022 2474 7265 6e6e 223b 0a70 @l, "$trenn";.p │ │ │ -00004e10: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf( │ │ │ -00004e20: 2225 2d37 737c 2531 302e 3266 7c25 3130 "%-7s|%10.2f|%10 │ │ │ -00004e30: 2e32 6622 2c20 2270 726f 6365 7373 222c .2f", "process", │ │ │ -00004e40: 2024 7573 6572 2c20 2473 7973 7465 6d29 $user, $system) │ │ │ -00004e50: 3b0a 7075 7368 2040 6c2c 2073 7072 696e ;.push @l, sprin │ │ │ -00004e60: 7466 2822 252d 3773 7c25 3130 2e32 667c tf("%-7s|%10.2f| │ │ │ -00004e70: 2531 302e 3266 222c 2022 6368 696c 6473 %10.2f", "childs │ │ │ -00004e80: 222c 2024 6375 7365 722c 2024 6373 7973 ", $cuser, $csys │ │ │ -00004e90: 7465 6d29 3b0a 7075 7368 2040 6c2c 2022 tem);.push @l, " │ │ │ -00004ea0: 2474 7265 6e6e 223b 0a6d 7920 2824 752c $trenn";.my ($u, │ │ │ -00004eb0: 2024 7329 203d 2028 2463 7573 6572 202b $s) = ($cuser + │ │ │ -00004ec0: 2024 7573 6572 2c20 2463 7379 7374 656d $user, $csystem │ │ │ -00004ed0: 202b 2024 7379 7374 656d 293b 0a70 7573 + $system);.pus │ │ │ -00004ee0: 6820 406c 2c20 7370 7269 6e74 6628 2225 h @l, sprintf("% │ │ │ -00004ef0: 2d37 737c 2531 302e 3266 7c25 3130 2e32 -7s|%10.2f|%10.2 │ │ │ -00004f00: 6620 3d3e 2025 2e32 6622 2c20 2273 756d f => %.2f", "sum │ │ │ -00004f10: 222c 2024 752c 2024 732c 2024 7520 2b20 ", $u, $s, $u + │ │ │ -00004f20: 2473 293b 0a0a 6d79 2028 4073 7461 7274 $s);..my (@start │ │ │ -00004f30: 4461 7465 2920 3d20 2829 3b0a 6966 2028 Date) = ();.if ( │ │ │ -00004f40: 2473 7461 7274 4461 7465 290a 7b0a 2020 $startDate).{. │ │ │ -00004f50: 2020 7075 7368 2040 7374 6172 7444 6174 push @startDat │ │ │ -00004f60: 652c 2027 2020 2020 2020 2020 2020 2070 e, ' p │ │ │ -00004f70: 7265 636f 6d6d 616e 6420 6475 7261 7469 recommand durati │ │ │ -00004f80: 6f6e 203d 2027 202e 0a09 2473 7461 7274 on = ' ...$start │ │ │ -00004f90: 4461 7465 2d3e 6465 6c74 6149 6e53 7472 Date->deltaInStr │ │ │ -00004fa0: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' = │ │ │ -00004fb0: 3e20 2473 7461 7274 4461 7465 293b 0a7d > $startDate);.} │ │ │ -00004fc0: 0a0a 6d79 2024 6445 6e64 203d 2064 6174 ..my $dEnd = dat │ │ │ -00004fd0: 6554 6f6f 6c73 2d3e 6e65 7728 293b 0a6d eTools->new();.m │ │ │ -00004fe0: 7920 2464 7572 6174 696f 6e20 3d20 2473 y $duration = $s │ │ │ -00004ff0: 7461 7274 4461 7465 2d3e 6465 6c74 6149 tartDate->deltaI │ │ │ -00005000: 6e53 6563 7328 272d 7365 636f 6e64 4461 nSecs('-secondDa │ │ │ -00005010: 7465 2720 3d3e 2024 6445 6e64 293b 0a24 te' => $dEnd);.$ │ │ │ -00005020: 6475 7261 7469 6f6e 203d 2031 2069 6620 duration = 1 if │ │ │ -00005030: 2824 6475 7261 7469 6f6e 203d 3d20 3029 ($duration == 0) │ │ │ -00005040: 3b20 2020 2320 4d69 6e69 6d61 6c65 7220 ; # Minimaler │ │ │ -00005050: 5765 7274 0a0a 2470 724c 6f67 2d3e 7072 Wert..$prLog->pr │ │ │ -00005060: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005070: 5327 2c0a 0920 2020 2020 2027 2d73 7472 S',.. '-str │ │ │ -00005080: 2720 3d3e 0a09 2020 2020 2020 5b27 2020 ' =>.. [' │ │ │ -00005090: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000050a0: 2020 2020 6475 7261 7469 6f6e 203d 2027 duration = ' │ │ │ -000050b0: 202e 0a09 2020 2020 2020 2064 6174 6554 ... dateT │ │ │ -000050c0: 6f6f 6c73 3a3a 7661 6c54 6f53 7472 2827 ools::valToStr(' │ │ │ -000050d0: 2d73 6563 2720 3d3e 2024 6475 7261 7469 -sec' => $durati │ │ │ -000050e0: 6f6e 292c 0a09 2020 2020 2020 2040 6c0a on),.. @l. │ │ │ -000050f0: 0920 2020 2020 2020 5d29 3b0a 0a24 7072 . ]);..$pr │ │ │ -00005100: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00005110: 6427 203d 3e20 2749 272c 0a09 2020 2020 d' => 'I',.. │ │ │ -00005120: 2020 272d 7374 7227 203d 3e20 5b22 7265 '-str' => ["re │ │ │ -00005130: 6d6f 7669 6e67 206c 6f63 6b20 6669 6c65 moving lock file │ │ │ -00005140: 203c 246c 6f63 6b46 696c 653e 225d 293b <$lockFile>"]); │ │ │ -00005150: 0a75 6e6c 696e 6b20 246c 6f63 6b46 696c .unlink $lockFil │ │ │ -00005160: 653b 0a0a 2470 724c 6f67 2d3e 7072 696e e;..$prLog->prin │ │ │ -00005170: 7428 272d 6b69 6e64 2720 3d3e 2027 5a27 t('-kind' => 'Z' │ │ │ -00005180: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -00005190: 3d3e 0a09 2020 2020 2020 5b22 6669 6e69 =>.. ["fini │ │ │ -000051a0: 7368 6564 2064 656c 6574 696f 6e20 696e shed deletion in │ │ │ -000051b0: 203c 2462 6163 6b75 7044 6972 3e2c 2073 <$backupDir>, s │ │ │ -000051c0: 6572 6965 7320 3c24 7365 7269 6573 3e22 eries <$series>" │ │ │ -000051d0: 5d29 3b0a 0a0a 6578 6974 2030 3b0a 0a0a ]);...exit 0;... │ │ │ -000051e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000051f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005200: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005210: 2323 0a23 2070 6163 6b61 6765 2070 7269 ##.# package pri │ │ │ -00005220: 6e74 4c6f 674d 756c 7469 706c 6520 6e65 ntLogMultiple ne │ │ │ -00005230: 6564 7320 7468 6973 2066 756e 6374 696f eds this functio │ │ │ -00005240: 6e0a 7375 6220 636c 6561 6e75 700a 7b0a n.sub cleanup.{. │ │ │ -00005250: 2020 2020 6d79 2024 7369 676e 616d 6520 my $signame │ │ │ -00005260: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -00005270: 2465 7869 7420 3d20 2873 6869 6674 2829 $exit = (shift() │ │ │ -00005280: 207c 7c20 3129 3b0a 0a20 2020 2065 7869 || 1);.. exi │ │ │ -00005290: 7420 2465 7869 743b 0a7d 0a t $exit;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7044 656c 0a pDel. │ │ ├── ./usr/bin/storeBackupMergeIsolatedBackup │ │ │ @@ -1,904 +1,5 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...$mai │ │ │ -00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ -00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ -00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use │ │ │ -00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn │ │ │ -00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib │ │ │ -00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f │ │ │ -00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. │ │ │ -00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. │ │ │ -00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se │ │ │ -00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink │ │ │ -000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo │ │ │ -000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel │ │ │ -000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f │ │ │ -000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh │ │ │ -000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file).. │ │ │ -000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link │ │ │ -00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file │ │ │ -00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub │ │ │ -00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1) │ │ │ -00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne "/").. {. │ │ │ -00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\ │ │ │ -00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. │ │ │ -00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. │ │ │ -00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f │ │ │ -00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. │ │ │ -00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, │ │ │ -000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF │ │ │ -000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);.. │ │ │ -000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = "/$file" │ │ │ -000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR "<$file> do │ │ │ -00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\n" │ │ │ -00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. } │ │ │ -00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= "/ │ │ │ -00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib"; │ │ │ -00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den │ │ │ -00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. │ │ │ -00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = ` │ │ │ -00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c │ │ │ -00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. │ │ │ -00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir │ │ │ -000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs │ │ │ -000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir; │ │ │ -000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir; │ │ │ -000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli │ │ │ -000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir("$absDi │ │ │ -00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file"));. } │ │ │ -00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ -00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR "< │ │ │ -00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e │ │ │ -00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\n" │ │ │ -00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp │ │ │ -00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. │ │ │ -00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif │ │ │ -00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return ( │ │ │ -00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle │ │ │ -000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\// │ │ │ -000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf │ │ │ -000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname. │ │ │ -000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $ │ │ │ -000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~ │ │ │ -000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\/(.*)$/s │ │ │ -00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/' │ │ │ -00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '') │ │ │ -00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; │ │ │ -00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall │ │ │ -00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename │ │ │ -00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di │ │ │ -00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my │ │ │ -00000770: 2875 6e73 6869 6674 2040 494e 432c 2022 (unshift @INC, " │ │ │ -00000780: 2472 6571 223b 0a24 7265 712c 2024 7072 $req";.$req, $pr │ │ │ -00000790: 6f67 2920 3d20 266c 6962 5061 7468 2824 og) = &libPath($ │ │ │ -000007a0: 3029 3b0a 0a0a 0a72 6571 7569 7265 2027 0);....require ' │ │ │ -000007b0: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl'; │ │ │ -000007c0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO │ │ │ -000007d0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi │ │ │ -000007e0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r │ │ │ -000007f0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version. │ │ │ -00000800: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi │ │ │ -00000810: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi │ │ │ -00000820: 7265 2027 666f 726b 5072 6f63 2e70 6c27 re 'forkProc.pl' │ │ │ -00000830: 3b0a 0a6d 7920 2474 6d70 6469 7220 3d20 ;..my $tmpdir = │ │ │ -00000840: 272f 746d 7027 3b20 2020 2020 2020 2020 '/tmp'; │ │ │ -00000850: 2020 2020 2023 2064 6566 6175 6c74 2076 # default v │ │ │ -00000860: 616c 7565 0a24 746d 7064 6972 203d 2024 alue.$tmpdir = $ │ │ │ -00000870: 454e 567b 2754 4d50 4449 5227 7d20 6966 ENV{'TMPDIR'} if │ │ │ -00000880: 2064 6566 696e 6564 2024 454e 567b 2754 defined $ENV{'T │ │ │ -00000890: 4d50 4449 5227 7d3b 0a0a 0a3d 6865 6164 MPDIR'};...=head │ │ │ -000008a0: 3120 4e41 4d45 0a0a 7374 6f72 6542 6163 1 NAME..storeBac │ │ │ -000008b0: 6b75 704d 6572 6765 4973 6f6c 6174 6564 kupMergeIsolated │ │ │ -000008c0: 4261 636b 7570 2e70 6c20 2d20 636f 7079 Backup.pl - copy │ │ │ -000008d0: 2069 736f 6c61 7465 6420 6261 636b 7570 isolated backup │ │ │ -000008e0: 7320 746f 206d 6169 6e20 6f6e 650a 0a3d s to main one..= │ │ │ -000008f0: 6865 6164 3120 4445 5343 5249 5054 494f head1 DESCRIPTIO │ │ │ -00000900: 4e0a 0a0a 0a3d 6865 6164 3120 5359 4e4f N....=head1 SYNO │ │ │ -00000910: 5053 4953 0a0a 6261 7365 6420 6f6e 2063 PSIS..based on c │ │ │ -00000920: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ -00000930: 653a 0a0a 7374 6f72 6542 6163 6b75 704d e:..storeBackupM │ │ │ -00000940: 6572 6765 4973 6f6c 6174 6564 4261 636b ergeIsolatedBack │ │ │ -00000950: 7570 2e70 6c20 2d66 2069 736f 6c61 7465 up.pl -f isolate │ │ │ -00000960: 436f 6e66 6967 4669 6c65 205b 2d76 5d20 ConfigFile [-v] │ │ │ -00000970: 5b2d 2d6d 6f76 655d 0a20 2020 2020 2020 [--move]. │ │ │ -00000980: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000990: 2020 2020 2020 2020 2020 205b 2d2d 666f [--fo │ │ │ -000009a0: 7263 655d 205b 2d54 2074 6d70 6469 725d rce] [-T tmpdir] │ │ │ -000009b0: 0a0a 6e6f 2063 6f6e 6669 6775 7261 7469 ..no configurati │ │ │ -000009c0: 6f6e 2066 696c 653a 0a0a 2020 2020 7374 on file:.. st │ │ │ -000009d0: 6f72 6542 6163 6b75 7053 6574 7570 4973 oreBackupSetupIs │ │ │ -000009e0: 6f6c 6174 6564 4d6f 6465 2e70 6c20 2d69 olatedMode.pl -i │ │ │ -000009f0: 2069 736f 6c61 7465 4261 636b 7570 4469 isolateBackupDi │ │ │ -00000a00: 7220 2d62 2062 6163 6b75 7044 6972 0a20 r -b backupDir. │ │ │ -00000a10: 2020 2009 0909 0920 2020 205b 2d53 2073 .... [-S s │ │ │ -00000a20: 6572 6965 735d 205b 2d76 5d20 5b2d 2d6d eries] [-v] [--m │ │ │ -00000a30: 6f76 655d 205b 2d2d 666f 7263 655d 0a20 ove] [--force]. │ │ │ -00000a40: 2020 2009 0909 0920 2020 205b 2d54 2074 .... [-T t │ │ │ -00000a50: 6d70 6469 725d 0a0a 3d68 6561 6431 204f mpdir]..=head1 O │ │ │ -00000a60: 5054 494f 4e53 0a0a 3d6f 7665 7220 380a PTIONS..=over 8. │ │ │ -00000a70: 0a3d 6974 656d 2042 3c2d 2d63 6f6e 6669 .=item B<--confi │ │ │ -00000a80: 6746 696c 653e 2c20 423c 2d66 3e0a 0a20 gFile>, B<-f>.. │ │ │ -00000a90: 2020 2063 6f6e 6669 6775 7261 7469 6f6e configuration │ │ │ -00000aa0: 2066 696c 6520 7573 6564 2066 6f72 2069 file used for i │ │ │ -00000ab0: 736f 6c61 7465 6420 6d6f 6465 2061 6e64 solated mode and │ │ │ -00000ac0: 0a20 2020 2067 656e 6572 6174 6564 2062 . generated b │ │ │ -00000ad0: 7920 7374 6f72 6542 6163 6b75 7053 6574 y storeBackupSet │ │ │ -00000ae0: 7570 4973 6f6c 6174 6564 4d6f 6465 2e70 upIsolatedMode.p │ │ │ -00000af0: 6c0a 2020 2020 2863 6f6e 7461 696e 7320 l. (contains │ │ │ -00000b00: 6b65 7920 226d 6572 6765 4261 636b 7570 key "mergeBackup │ │ │ -00000b10: 4469 7222 2077 6869 6368 2070 6f69 6e74 Dir" which point │ │ │ -00000b20: 7320 746f 2079 6f75 720a 2020 2020 6d61 s to your. ma │ │ │ -00000b30: 696e 2062 6163 6b75 7020 6469 7265 6374 in backup direct │ │ │ -00000b40: 6f72 7929 0a0a 3d69 7465 6d20 423c 2d2d ory)..=item B<-- │ │ │ -00000b50: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir │ │ │ -00000b60: 3e2c 2042 3c2d 693e 0a0a 2020 2020 6973 >, B<-i>.. is │ │ │ -00000b70: 6f6c 6174 6564 2062 6163 6b75 7020 6469 olated backup di │ │ │ -00000b80: 7265 6374 6f72 7920 6672 6f6d 2077 6869 rectory from whi │ │ │ -00000b90: 6368 206d 6574 6120 6461 7461 2068 6173 ch meta data has │ │ │ -00000ba0: 2074 6f20 6265 0a20 2020 2063 6f70 6965 to be. copie │ │ │ -00000bb0: 6420 746f 2062 6163 6b75 7044 6972 2e0a d to backupDir.. │ │ │ -00000bc0: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu │ │ │ -00000bd0: 7044 6972 3e2c 2042 3c2d 623e 0a0a 2020 pDir>, B<-b>.. │ │ │ -00000be0: 2020 6261 636b 7570 2064 6972 6563 746f backup directo │ │ │ -00000bf0: 7279 2074 6f20 7768 6963 6820 796f 7572 ry to which your │ │ │ -00000c00: 2062 6163 6b75 7020 6461 7461 2068 6173 backup data has │ │ │ -00000c10: 2074 6f20 6265 0a20 2020 2063 6f70 6965 to be. copie │ │ │ -00000c20: 6420 2874 6f20 796f 7572 206d 6169 6e20 d (to your main │ │ │ -00000c30: 6261 636b 7570 2064 6972 6563 746f 7279 backup directory │ │ │ -00000c40: 290a 2020 2020 5468 6973 2069 7320 7468 ). This is th │ │ │ -00000c50: 6520 6469 7265 6374 6f72 7920 6672 6f6d e directory from │ │ │ -00000c60: 2077 6865 7265 2073 746f 7265 4261 636b where storeBack │ │ │ -00000c70: 7570 5365 7475 7049 736f 6c61 7465 644d upSetupIsolatedM │ │ │ -00000c80: 6f64 652e 706c 0a20 2020 2063 6f70 6965 ode.pl. copie │ │ │ -00000c90: 6420 7468 6520 6d65 7461 2064 6174 6120 d the meta data │ │ │ -00000ca0: 746f 2079 6f75 7220 6973 6f6c 6174 6564 to your isolated │ │ │ -00000cb0: 2062 6163 6b75 7020 6469 7265 6374 6f72 backup director │ │ │ -00000cc0: 790a 0a3d 6974 656d 2042 3c2d 2d73 6572 y..=item B<--ser │ │ │ -00000cd0: 6965 733e 2c20 423c 2d53 3e0a 0a20 2020 ies>, B<-S>.. │ │ │ -00000ce0: 2073 6572 6965 7320 6f66 2077 6869 6368 series of which │ │ │ -00000cf0: 206d 6574 6120 6461 7461 2068 6176 6520 meta data have │ │ │ -00000d00: 746f 2062 6520 636f 7069 6564 2074 6f20 to be copied to │ │ │ -00000d10: 7461 7267 6574 4469 722e 0a20 2020 2048 targetDir.. H │ │ │ -00000d20: 6173 2074 6f20 6265 2073 7065 6369 6669 as to be specifi │ │ │ -00000d30: 6564 2069 6620 6d6f 7265 2074 6861 6e20 ed if more than │ │ │ -00000d40: 6f6e 6520 7365 7269 6573 2065 7869 7374 one series exist │ │ │ -00000d50: 0a20 2020 2069 6e20 6261 636b 7570 4469 . in backupDi │ │ │ -00000d60: 720a 0a3d 6974 656d 2042 3c2d 2d76 6572 r..=item B<--ver │ │ │ -00000d70: 626f 7365 3e2c 2042 3c2d 763e 0a0a 2020 bose>, B<-v>.. │ │ │ -00000d80: 2020 6765 6e65 7261 7465 2076 6572 626f generate verbo │ │ │ -00000d90: 7365 206d 6573 7361 6765 730a 0a3d 6974 se messages..=it │ │ │ -00000da0: 656d 2042 3c2d 2d6d 6f76 653e 0a0a 2020 em B<--move>.. │ │ │ -00000db0: 2020 6d6f 7665 2069 6e73 7465 6164 206f move instead o │ │ │ -00000dc0: 6620 636f 7079 3b20 6f6e 6c79 2073 7570 f copy; only sup │ │ │ -00000dd0: 706f 7274 6564 2069 6620 6973 6f6c 6174 ported if isolat │ │ │ -00000de0: 6564 4261 636b 7570 4469 720a 2020 2020 edBackupDir. │ │ │ -00000df0: 616e 6420 6261 636b 7570 4469 7220 6172 and backupDir ar │ │ │ -00000e00: 6520 6f6e 2074 6865 2073 616d 6520 6669 e on the same fi │ │ │ -00000e10: 6c65 7379 7374 656d 0a0a 3d69 7465 6d20 lesystem..=item │ │ │ -00000e20: 423c 2d2d 666f 7263 653e 0a0a 2020 2020 B<--force>.. │ │ │ -00000e30: 666f 7263 6520 636f 7079 696e 673b 2064 force copying; d │ │ │ -00000e40: 6f20 6e6f 7420 6669 6e61 6c6c 7920 6173 o not finally as │ │ │ -00000e50: 6b0a 0a3d 6974 656d 2042 3c2d 2d74 6d70 k..=item B<--tmp │ │ │ -00000e60: 6469 723e 2c20 423c 2d54 3e0a 0a20 2020 dir>, B<-T>.. │ │ │ -00000e70: 2064 6972 6563 746f 7279 2066 6f72 2074 directory for t │ │ │ -00000e80: 656d 706f 7261 7279 2066 696c 6573 2c20 emporary files, │ │ │ -00000e90: 6465 6661 756c 7420 6973 203c 2f74 6d70 default is ..=back..=head1 │ │ │ -00000eb0: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy │ │ │ -00000ec0: 7269 6768 7420 2863 2920 3230 3132 2d32 right (c) 2012-2 │ │ │ -00000ed0: 3032 3220 6279 2048 6569 6e7a 2d4a 6f73 022 by Heinz-Jos │ │ │ -00000ee0: 6566 2043 6c61 6573 2028 7365 6520 5245 ef Claes (see RE │ │ │ -00000ef0: 4144 4d45 292e 0a50 7562 6c69 7368 6564 ADME)..Published │ │ │ -00000f00: 2075 6e64 6572 2074 6865 2047 4e55 2047 under the GNU G │ │ │ -00000f10: 656e 6572 616c 2050 7562 6c69 6320 4c69 eneral Public Li │ │ │ -00000f20: 6365 6e73 6520 7633 206f 7220 616e 7920 cense v3 or any │ │ │ -00000f30: 6c61 7465 7220 7665 7273 696f 6e0a 0a3d later version..= │ │ │ -00000f40: 6375 740a 0a6d 7920 2448 656c 7020 3d20 cut..my $Help = │ │ │ -00000f50: 263a 3a67 6574 506f 6432 5465 7874 2824 &::getPod2Text($ │ │ │ -00000f60: 3029 3b0a 0a26 7072 696e 7456 6572 7369 0);..&printVersi │ │ │ -00000f70: 6f6e 285c 4041 5247 562c 2027 2d56 272c on(\@ARGV, '-V', │ │ │ -00000f80: 2027 2d2d 7665 7273 696f 6e27 293b 0a0a '--version');.. │ │ │ -00000f90: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. │ │ │ -00000fa0: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n │ │ │ -00000fb0: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists' │ │ │ -00000fc0: 203d 3e20 276e 6f27 2c0a 0909 2020 2020 => 'no',... │ │ │ -00000fd0: 272d 6c69 7374 2720 3d3e 205b 4f70 7469 '-list' => [Opti │ │ │ -00000fe0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00000ff0: 3d3e 2027 636f 6e66 6967 4669 6c65 272c => 'configFile', │ │ │ -00001000: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00001010: 7074 696f 6e27 203d 3e20 272d 6627 2c0a ption' => '-f',. │ │ │ -00001020: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ -00001030: 6961 7327 203d 3e20 272d 2d63 6f6e 6669 ias' => '--confi │ │ │ -00001040: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ -00001050: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ -00001060: 7327 2c0a 0909 2020 2020 272d 6f6e 6c79 s',... '-only │ │ │ -00001070: 5f69 6627 203d 3e20 276e 6f74 205b 6973 _if' => 'not [is │ │ │ -00001080: 6f6c 6174 6542 6163 6b75 7044 6972 5d20 olateBackupDir] │ │ │ -00001090: 616e 6420 6e6f 7420 5b62 6163 6b75 7044 and not [backupD │ │ │ -000010a0: 6972 5d27 292c 0a09 0909 094f 7074 696f ir]'),.....Optio │ │ │ -000010b0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000010c0: 3e20 2769 736f 6c61 7465 4261 636b 7570 > 'isolateBackup │ │ │ -000010d0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... ' │ │ │ -000010e0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -000010f0: 2d69 272c 0a09 0909 0909 2020 2020 272d -i',...... '- │ │ │ -00001100: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001110: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir │ │ │ -00001120: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00001130: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',.. │ │ │ -00001140: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' │ │ │ -00001150: 3d3e 2027 5b62 6163 6b75 7044 6972 5d20 => '[backupDir] │ │ │ -00001160: 616e 6420 6e6f 7420 5b63 6f6e 6669 6746 and not [configF │ │ │ -00001170: 696c 655d 2729 2c0a 0909 0909 4f70 7469 ile]'),.....Opti │ │ │ -00001180: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001190: 3d3e 2027 6261 636b 7570 4469 7227 2c0a => 'backupDir',. │ │ │ -000011a0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000011b0: 7469 6f6e 2720 3d3e 2027 2d62 272c 0a09 tion' => '-b',.. │ │ │ -000011c0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -000011d0: 6173 2720 3d3e 2027 2d2d 6261 636b 7570 as' => '--backup │ │ │ -000011e0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... ' │ │ │ -000011f0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -00001200: 2c0a 0909 2020 2020 272d 6f6e 6c79 5f69 ,... '-only_i │ │ │ -00001210: 6627 203d 3e20 275b 6973 6f6c 6174 6542 f' => '[isolateB │ │ │ -00001220: 6163 6b75 7044 6972 5d20 616e 6420 6e6f ackupDir] and no │ │ │ -00001230: 7420 5b63 6f6e 6669 6746 696c 655d 2729 t [configFile]') │ │ │ -00001240: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00001250: 7728 272d 6e61 6d65 2720 3d3e 2027 7365 w('-name' => 'se │ │ │ -00001260: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... │ │ │ -00001270: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001280: 272d 5327 2c0a 0909 0909 0920 2020 2027 '-S',...... ' │ │ │ -00001290: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -000012a0: 2d73 6572 6965 7327 2c0a 0909 0909 0920 -series',...... │ │ │ -000012b0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -000012c0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -000012d0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 5b69 -only_if' => '[i │ │ │ -000012e0: 736f 6c61 7465 4261 636b 7570 4469 725d solateBackupDir] │ │ │ -000012f0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00001300: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001310: 7665 7262 6f73 6527 2c0a 0909 0909 0920 verbose',...... │ │ │ -00001320: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00001330: 3d3e 2027 2d76 272c 0a09 0909 0909 2020 => '-v',...... │ │ │ -00001340: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00001350: 2027 2d2d 7665 7262 6f73 6527 292c 0a09 '--verbose'),.. │ │ │ -00001360: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001370: 2d6e 616d 6527 203d 3e20 276d 6f76 6527 -name' => 'move' │ │ │ -00001380: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001390: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 6d6f option' => '--mo │ │ │ -000013a0: 7665 2729 2c0a 0909 0909 4f70 7469 6f6e ve'),.....Option │ │ │ -000013b0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -000013c0: 2027 666f 7263 6527 2c0a 0909 0909 0920 'force',...... │ │ │ -000013d0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000013e0: 3d3e 2027 2d2d 666f 7263 6527 292c 0a09 => '--force'),.. │ │ │ -000013f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001400: 2d6e 616d 6527 203d 3e20 2773 6b69 7053 -name' => 'skipS │ │ │ -00001410: 796e 6327 2c0a 0909 0909 0920 2020 2027 ync',...... ' │ │ │ -00001420: 2d68 6964 6465 6e27 203d 3e20 2779 6573 -hidden' => 'yes │ │ │ -00001430: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001440: 5f6f 7074 696f 6e27 203d 3e20 272d 2d73 _option' => '--s │ │ │ -00001450: 6b69 7053 796e 6327 292c 0a09 0909 094f kipSync'),.....O │ │ │ -00001460: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001470: 6527 203d 3e20 2774 6d70 6469 7227 2c0a e' => 'tmpdir',. │ │ │ -00001480: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001490: 7469 6f6e 2720 3d3e 2027 2d54 272c 0a09 tion' => '-T',.. │ │ │ -000014a0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -000014b0: 6173 2720 3d3e 2027 2d2d 746d 7064 6972 as' => '--tmpdir │ │ │ -000014c0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -000014d0: 6661 756c 7427 203d 3e20 2474 6d70 6469 fault' => $tmpdi │ │ │ -000014e0: 7229 0a09 0909 095d 293b 0a0a 2443 6865 r).....]);..$Che │ │ │ -000014f0: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a │ │ │ -00001500: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \@ARGV,. │ │ │ -00001510: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001520: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel │ │ │ -00001530: 700a 2020 2020 2020 2020 2020 2020 2020 p. │ │ │ -00001540: 2020 2029 3b0a 0a0a 6d79 2024 636f 6e66 );...my $conf │ │ │ -00001550: 6967 4669 6c65 203d 2024 4368 6563 6b50 igFile = $CheckP │ │ │ -00001560: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00001570: 7228 2763 6f6e 6669 6746 696c 6527 293b r('configFile'); │ │ │ -00001580: 0a6d 7920 2469 736f 6c61 7465 4261 636b .my $isolateBack │ │ │ -00001590: 7570 4469 7220 3d20 2443 6865 636b 5061 upDir = $CheckPa │ │ │ -000015a0: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -000015b0: 2827 6973 6f6c 6174 6542 6163 6b75 7044 ('isolateBackupD │ │ │ -000015c0: 6972 2729 3b0a 6d79 2024 6261 636b 7570 ir');.my $backup │ │ │ -000015d0: 4469 7220 3d20 2443 6865 636b 5061 722d Dir = $CheckPar- │ │ │ -000015e0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -000015f0: 6261 636b 7570 4469 7227 293b 0a6d 7920 backupDir');.my │ │ │ -00001600: 2473 6572 6965 7320 3d20 2443 6865 636b $series = $Check │ │ │ -00001610: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00001620: 6172 2827 7365 7269 6573 2729 3b20 2023 ar('series'); # │ │ │ -00001630: 206d 7573 7420 6265 2073 7065 6369 6669 must be specifi │ │ │ -00001640: 6564 2069 660a 2020 2020 2020 2020 2020 ed if. │ │ │ -00001650: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001660: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001670: 2020 2020 2020 2020 2320 6d6f 7265 2074 # more t │ │ │ -00001680: 6861 6e20 3120 7365 7269 6573 2065 7869 han 1 series exi │ │ │ -00001690: 7374 0a6d 7920 2476 6572 626f 7365 203d st.my $verbose = │ │ │ -000016a0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000016b0: 7074 5769 7468 6f75 7450 6172 2827 7665 ptWithoutPar('ve │ │ │ -000016c0: 7262 6f73 6527 293b 0a6d 7920 246d 6f76 rbose');.my $mov │ │ │ -000016d0: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ -000016e0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -000016f0: 276d 6f76 6527 293b 0a6d 7920 2466 6f72 'move');.my $for │ │ │ -00001700: 6365 203d 2024 4368 6563 6b50 6172 2d3e ce = $CheckPar-> │ │ │ -00001710: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -00001720: 2827 666f 7263 6527 293b 0a6d 7920 2473 ('force');.my $s │ │ │ -00001730: 6b69 7053 796e 6320 3d20 2443 6865 636b kipSync = $Check │ │ │ -00001740: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00001750: 7574 5061 7228 2773 6b69 7053 796e 6327 utPar('skipSync' │ │ │ -00001760: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch │ │ │ -00001770: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00001780: 7468 5061 7228 2774 6d70 6469 7227 293b thPar('tmpdir'); │ │ │ -00001790: 0a0a 6d79 2024 7072 4c6f 673b 0a6d 7920 ..my $prLog;.my │ │ │ -000017a0: 2824 7072 4c6f 674b 696e 6429 203d 205b ($prLogKind) = [ │ │ │ -000017b0: 2741 3a42 4547 494e 272c 0a09 0920 2020 'A:BEGIN',... │ │ │ -000017c0: 275a 3a45 4e44 272c 0a09 0920 2020 2749 'Z:END',... 'I │ │ │ -000017d0: 3a49 4e46 4f27 2c0a 0909 2020 2027 573a :INFO',... 'W: │ │ │ -000017e0: 5741 524e 494e 4727 2c0a 0909 2020 2027 WARNING',... ' │ │ │ -000017f0: 453a 4552 524f 5227 5d3b 0a24 7072 4c6f E:ERROR'];.$prLo │ │ │ -00001800: 6720 3d20 7072 696e 744c 6f67 2d3e 6e65 g = printLog->ne │ │ │ -00001810: 7728 272d 6b69 6e64 2720 3d3e 2024 7072 w('-kind' => $pr │ │ │ -00001820: 4c6f 674b 696e 642c 0a09 0920 2020 2020 LogKind,... │ │ │ -00001830: 2020 272d 746d 7064 6972 2720 3d3e 2024 '-tmpdir' => $ │ │ │ -00001840: 746d 7064 6972 293b 0a0a 0a24 7072 4c6f tmpdir);...$prLo │ │ │ -00001850: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00001860: 203d 3e20 2745 272c 0a09 2020 2020 2020 => 'E',.. │ │ │ -00001870: 272d 7374 7227 203d 3e20 5b22 706c 6561 '-str' => ["plea │ │ │ -00001880: 7365 2064 6566 696e 6520 3c63 6f6e 6669 se define or \n$H │ │ │ -000018b0: 656c 7022 5d2c 0a09 2020 2020 2020 272d elp"],.. '- │ │ │ -000018c0: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ -000018d0: 756e 6c65 7373 2028 2463 6f6e 6669 6746 unless ($configF │ │ │ -000018e0: 696c 6520 6f72 2024 6973 6f6c 6174 6542 ile or $isolateB │ │ │ -000018f0: 6163 6b75 7044 6972 293b 0a0a 0a69 6620 ackupDir);...if │ │ │ -00001900: 2824 636f 6e66 6967 4669 6c65 2920 2020 ($configFile) │ │ │ -00001910: 2020 2023 2072 6561 6420 6973 6f6c 6174 # read isolat │ │ │ -00001920: 6543 6f6e 6669 6746 696c 650a 7b0a 2020 eConfigFile.{. │ │ │ -00001930: 2020 6d79 2024 6973 6f6c 6174 6543 6f6e my $isolateCon │ │ │ -00001940: 6620 3d0a 0943 6865 636b 5061 7261 6d2d f =..CheckParam- │ │ │ -00001950: 3e6e 6577 2827 2d63 6f6e 6669 6746 696c >new('-configFil │ │ │ -00001960: 6527 203d 3e20 272d 6627 2c0a 0909 0927 e' => '-f',....' │ │ │ -00001970: 2d6c 6973 7427 203d 3e20 5b0a 0909 0920 -list' => [.... │ │ │ -00001980: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -00001990: 2d6e 616d 6527 203d 3e20 2769 736f 6c61 -name' => 'isola │ │ │ -000019a0: 7465 436f 6e66 6967 4669 6c65 272c 0a09 teConfigFile',.. │ │ │ -000019b0: 0909 0909 272d 636c 5f6f 7074 696f 6e27 ....'-cl_option' │ │ │ -000019c0: 203d 3e20 272d 6627 2c0a 0909 0909 0927 => '-f',......' │ │ │ -000019d0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -000019e0: 292c 0a09 0909 2020 2020 4f70 7469 6f6e ),.... Option │ │ │ -000019f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001a00: 2027 6261 636b 7570 4469 7227 2c0a 0909 'backupDir',... │ │ │ -00001a10: 0909 0927 2d63 665f 6b65 7927 203d 3e20 ...'-cf_key' => │ │ │ -00001a20: 2762 6163 6b75 7044 6972 272c 0a09 0909 'backupDir',.... │ │ │ -00001a30: 0909 272d 7061 7261 6d27 203d 3e20 2779 ..'-param' => 'y │ │ │ -00001a40: 6573 2729 2c0a 0909 0920 2020 204f 7074 es'),.... Opt │ │ │ -00001a50: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00001a60: 203d 3e20 276d 6572 6765 4261 636b 7570 => 'mergeBackup │ │ │ -00001a70: 4469 7227 2c0a 0909 0909 0927 2d63 665f Dir',......'-cf_ │ │ │ -00001a80: 6b65 7927 203d 3e20 276d 6572 6765 4261 key' => 'mergeBa │ │ │ -00001a90: 636b 7570 4469 7227 2c0a 0909 0909 0927 ckupDir',......' │ │ │ -00001aa0: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -00001ab0: 292c 0a09 0909 2020 2020 4f70 7469 6f6e ),.... Option │ │ │ -00001ac0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001ad0: 2027 7365 7269 6573 272c 0a09 0909 0909 'series',...... │ │ │ -00001ae0: 272d 6366 5f6b 6579 2720 3d3e 2027 7365 '-cf_key' => 'se │ │ │ -00001af0: 7269 6573 272c 0a09 0909 0909 272d 6465 ries',......'-de │ │ │ -00001b00: 6661 756c 7427 203d 3e20 2764 6566 6175 fault' => 'defau │ │ │ -00001b10: 6c74 2729 0a09 0909 5d29 3b0a 2020 2020 lt')....]);. │ │ │ -00001b20: 2469 736f 6c61 7465 436f 6e66 2d3e 6368 $isolateConf->ch │ │ │ -00001b30: 6563 6b28 272d 6172 6776 2720 3d3e 205b eck('-argv' => [ │ │ │ -00001b40: 272d 6627 203d 3e20 2463 6f6e 6669 6746 '-f' => $configF │ │ │ -00001b50: 696c 655d 2c0a 0909 0927 2d68 656c 7027 ile],....'-help' │ │ │ -00001b60: 203d 3e20 2263 616e 6e6f 7420 7265 6164 => "cannot read │ │ │ -00001b70: 2066 696c 6520 3c24 636f 6e66 6967 4669 file <$configFi │ │ │ -00001b80: 6c65 3e5c 6e22 2c0a 0909 0927 2d69 676e le>\n",....'-ign │ │ │ -00001b90: 6f72 6541 6464 6974 696f 6e61 6c4b 6579 oreAdditionalKey │ │ │ -00001ba0: 7327 203d 3e20 3129 3b0a 0a20 2020 2024 s' => 1);.. $ │ │ │ -00001bb0: 6973 6f6c 6174 6542 6163 6b75 7044 6972 isolateBackupDir │ │ │ -00001bc0: 203d 2024 6973 6f6c 6174 6543 6f6e 662d = $isolateConf- │ │ │ -00001bd0: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00001be0: 6261 636b 7570 4469 7227 293b 0a20 2020 backupDir');. │ │ │ -00001bf0: 2024 6261 636b 7570 4469 7220 3d20 2469 $backupDir = $i │ │ │ -00001c00: 736f 6c61 7465 436f 6e66 2d3e 6765 744f solateConf->getO │ │ │ -00001c10: 7074 5769 7468 5061 7228 276d 6572 6765 ptWithPar('merge │ │ │ -00001c20: 4261 636b 7570 4469 7227 293b 0a20 2020 BackupDir');. │ │ │ -00001c30: 2024 7365 7269 6573 203d 2024 6973 6f6c $series = $isol │ │ │ -00001c40: 6174 6543 6f6e 662d 3e67 6574 4f70 7457 ateConf->getOptW │ │ │ -00001c50: 6974 6850 6172 2827 7365 7269 6573 2729 ithPar('series') │ │ │ -00001c60: 3b0a 0a20 2020 2024 7072 4c6f 672d 3e70 ;.. $prLog->p │ │ │ -00001c70: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00001c80: 2749 272c 0a09 0920 2027 2d73 7472 2720 'I',... '-str' │ │ │ -00001c90: 3d3e 205b 2265 7874 7261 6374 6564 2066 => ["extracted f │ │ │ -00001ca0: 726f 6d20 2469 736f 6c61 7465 4261 636b rom $isolateBack │ │ │ -00001cb0: 7570 4469 723a 222c 0a09 0909 2020 2020 upDir:",.... │ │ │ -00001cc0: 2022 5c74 6261 636b 7570 4469 7220 3d20 "\tbackupDir = │ │ │ -00001cd0: 3c24 6261 636b 7570 4469 723e 222c 0a09 <$backupDir>",.. │ │ │ -00001ce0: 0909 2020 2020 2022 5c74 6973 6f6c 6174 .. "\tisolat │ │ │ -00001cf0: 6542 6163 6b75 7044 6972 203d 203c 2469 eBackupDir = <$i │ │ │ -00001d00: 736f 6c61 7465 4261 636b 7570 4469 723e solateBackupDir> │ │ │ -00001d10: 222c 0a09 0909 2020 2020 2022 5c74 7365 ",.... "\tse │ │ │ -00001d20: 7269 6573 203d 203c 2473 6572 6965 733e ries = <$series> │ │ │ -00001d30: 225d 290a 0969 6620 2476 6572 626f 7365 "])..if $verbose │ │ │ -00001d40: 3b0a 7d0a 656c 7369 6620 286e 6f74 2024 ;.}.elsif (not $ │ │ │ -00001d50: 7365 7269 6573 2920 2020 2020 2320 6e6f series) # no │ │ │ -00001d60: 2063 6f6e 6669 6720 6669 6c65 2c20 7365 config file, se │ │ │ -00001d70: 7269 6573 206e 6f74 2073 6574 2c20 7472 ries not set, tr │ │ │ -00001d80: 7920 746f 0a7b 2020 2020 2020 2020 2020 y to.{ │ │ │ -00001d90: 2020 2020 2020 2020 2020 2020 2023 2064 # d │ │ │ -00001da0: 6574 6563 7420 6e61 6d65 206f 6620 7365 etect name of se │ │ │ -00001db0: 7269 6573 0a09 6c6f 6361 6c20 2a44 4952 ries..local *DIR │ │ │ -00001dc0: 3b0a 096f 7065 6e64 6972 2844 4952 2c20 ;..opendir(DIR, │ │ │ -00001dd0: 2469 736f 6c61 7465 4261 636b 7570 4469 $isolateBackupDi │ │ │ -00001de0: 7229 206f 720a 0920 2020 2024 7072 4c6f r) or.. $prLo │ │ │ -00001df0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00001e00: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ -00001e10: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -00001e20: 206f 7065 6e64 6972 203c 2469 736f 6c61 opendir <$isola │ │ │ -00001e30: 7465 4261 636b 7570 4469 723e 2c20 6578 teBackupDir>, ex │ │ │ -00001e40: 6974 696e 6722 5d2c 0a09 0909 2020 272d iting"],.... '- │ │ │ -00001e50: 6578 6974 2720 3d3e 2031 293b 0a09 6d79 exit' => 1);..my │ │ │ -00001e60: 2028 2465 6e74 7279 2c20 4065 6e74 7269 ($entry, @entri │ │ │ -00001e70: 6573 293b 0a09 7768 696c 6520 2824 656e es);..while ($en │ │ │ -00001e80: 7472 7920 3d20 7265 6164 6469 7220 4449 try = readdir DI │ │ │ -00001e90: 5229 0a09 7b0a 0920 2020 206e 6578 7420 R)..{.. next │ │ │ -00001ea0: 6966 2028 2465 6e74 7279 2065 7120 272e if ($entry eq '. │ │ │ -00001eb0: 2720 6f72 2024 656e 7472 7920 6571 2027 ' or $entry eq ' │ │ │ -00001ec0: 2e2e 2729 3b0a 0920 2020 206d 7920 2465 ..');.. my $e │ │ │ -00001ed0: 203d 2022 2462 6163 6b75 7044 6972 2f24 = "$backupDir/$ │ │ │ -00001ee0: 656e 7472 7922 3b0a 0920 2020 206e 6578 entry";.. nex │ │ │ -00001ef0: 7420 6966 2028 2d6c 2024 6520 616e 6420 t if (-l $e and │ │ │ -00001f00: 6e6f 7420 2d64 2024 6529 3b20 2020 2320 not -d $e); # │ │ │ -00001f10: 6f6e 6c79 2064 6972 6563 746f 7269 6573 only directories │ │ │ -00001f20: 0a09 2020 2020 6e65 7874 2075 6e6c 6573 .. next unles │ │ │ -00001f30: 7320 2d64 2024 653b 0a09 2020 2020 6966 s -d $e;.. if │ │ │ -00001f40: 2028 2465 6e74 7279 203d 7e0a 0909 2f5c ($entry =~.../\ │ │ │ -00001f50: 4128 5c64 7b34 7d29 5c2e 285c 647b 327d A(\d{4})\.(\d{2} │ │ │ -00001f60: 295c 2e28 5c64 7b32 7d29 5f28 5c64 7b32 )\.(\d{2})_(\d{2 │ │ │ -00001f70: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\.(\d{2})\.(\d │ │ │ -00001f80: 7b32 7d29 5c5a 2f6f 290a 0920 2020 207b {2})\Z/o).. { │ │ │ -00001f90: 0a09 0924 7365 7269 6573 203d 2027 2e27 ...$series = '.' │ │ │ -00001fa0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin │ │ │ -00001fb0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ -00001fc0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -00001fd0: 2720 3d3e 205b 2266 6f75 6e64 2073 6572 ' => ["found ser │ │ │ -00001fe0: 6965 7320 3c2e 3e20 696e 203c 2469 736f ies <.> in <$iso │ │ │ -00001ff0: 6c61 7465 4261 636b 7570 4469 723e 225d lateBackupDir>"] │ │ │ -00002000: 293b 0a09 096c 6173 743b 0a09 2020 2020 );...last;.. │ │ │ -00002010: 7d0a 0920 2020 2070 7573 6820 4065 6e74 }.. push @ent │ │ │ -00002020: 7269 6573 2c20 2465 6e74 7279 3b0a 097d ries, $entry;..} │ │ │ -00002030: 0a09 636c 6f73 6564 6972 2844 4952 293b ..closedir(DIR); │ │ │ -00002040: 0a0a 0975 6e6c 6573 7320 2824 7365 7269 ...unless ($seri │ │ │ -00002050: 6573 290a 097b 0a09 2020 2020 2470 724c es)..{.. $prL │ │ │ -00002060: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002070: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -00002080: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -00002090: 666f 756e 6420 6d6f 7265 2074 6861 6e20 found more than │ │ │ -000020a0: 6f6e 6520 6261 636b 7570 2073 6572 6965 one backup serie │ │ │ -000020b0: 7320 696e 203c 2469 736f 6c61 7465 4261 s in <$isolateBa │ │ │ -000020c0: 636b 7570 4469 723e 222c 0a09 0909 2020 ckupDir>",.... │ │ │ -000020d0: 2022 2c20 706c 6561 7365 2073 7065 6369 ", please speci │ │ │ -000020e0: 6679 2073 6572 6965 7320 7769 7468 206f fy series with o │ │ │ -000020f0: 7074 696f 6e20 2d2d 7365 7269 6573 3b20 ption --series; │ │ │ -00002100: 666f 756e 643a 222c 0a09 0909 2020 2073 found:",.... s │ │ │ -00002110: 6f72 7420 4065 6e74 7269 6573 5d2c 0a09 ort @entries],.. │ │ │ -00002120: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ -00002130: 290a 0909 6966 2040 656e 7472 6965 7320 )...if @entries │ │ │ -00002140: 3e20 313b 0a09 7d0a 0924 7072 4c6f 672d > 1;..}..$prLog- │ │ │ -00002150: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00002160: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -00002170: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -00002180: 205b 226e 6f20 7365 7269 6573 2066 6f75 ["no series fou │ │ │ -00002190: 6e64 2069 6e20 3c24 6973 6f6c 6174 6542 nd in <$isolateB │ │ │ -000021a0: 6163 6b75 7044 6972 3e2c 2065 7869 7469 ackupDir>, exiti │ │ │ -000021b0: 6e67 225d 2c0a 0909 2020 2020 2020 272d ng"],... '- │ │ │ -000021c0: 6578 6974 2720 3d3e 2031 290a 0920 2020 exit' => 1).. │ │ │ -000021d0: 2069 6620 4065 6e74 7269 6573 203d 3d20 if @entries == │ │ │ -000021e0: 303b 0a0a 0924 7365 7269 6573 203d 2024 0;...$series = $ │ │ │ -000021f0: 656e 7472 6965 735b 305d 3b0a 7d0a 0a24 entries[0];.}..$ │ │ │ -00002200: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002210: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. │ │ │ -00002220: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00002230: 6964 656e 7469 6669 6564 2073 6572 6965 identified serie │ │ │ -00002240: 7320 3c24 7365 7269 6573 3e22 5d29 0a20 s <$series>"]). │ │ │ -00002250: 2020 2069 6620 2476 6572 626f 7365 3b0a if $verbose;. │ │ │ -00002260: 0a23 0a23 206c 6f61 6420 6261 636b 7570 .#.# load backup │ │ │ -00002270: 2064 6972 6563 746f 7269 6573 0a23 0a6d directories.#.m │ │ │ -00002280: 7920 2824 6d65 7461 4461 7461 4261 636b y ($metaDataBack │ │ │ -00002290: 7570 2c20 4069 736f 6c61 7442 6163 6b75 up, @isolatBacku │ │ │ -000022a0: 7073 293b 0a7b 0a20 2020 206c 6f63 616c ps);.{. local │ │ │ -000022b0: 202a 4449 523b 0a20 2020 206d 7920 2469 *DIR;. my $i │ │ │ -000022c0: 736f 6c44 6972 203d 2022 2469 736f 6c61 solDir = "$isola │ │ │ -000022d0: 7465 4261 636b 7570 4469 722f 2473 6572 teBackupDir/$ser │ │ │ -000022e0: 6965 7322 3b0a 2020 2020 6f70 656e 6469 ies";. opendi │ │ │ -000022f0: 7228 4449 522c 2024 6973 6f6c 4469 7229 r(DIR, $isolDir) │ │ │ -00002300: 206f 720a 0924 7072 4c6f 672d 3e70 7269 or..$prLog->pri │ │ │ -00002310: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00002320: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -00002330: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => ["cannot op │ │ │ -00002340: 656e 6469 7220 3c24 6973 6f6c 4469 723e endir <$isolDir> │ │ │ -00002350: 2c20 6578 6974 696e 6722 5d2c 0a09 0920 , exiting"],... │ │ │ -00002360: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00002370: 3129 3b0a 2020 2020 6d79 2028 2465 6e74 1);. my ($ent │ │ │ -00002380: 7279 2c20 4065 6e74 7269 6573 293b 0a20 ry, @entries);. │ │ │ -00002390: 2020 2077 6869 6c65 2028 2465 6e74 7279 while ($entry │ │ │ -000023a0: 203d 2072 6561 6464 6972 2044 4952 290a = readdir DIR). │ │ │ -000023b0: 2020 2020 7b0a 096e 6578 7420 6966 2028 {..next if ( │ │ │ -000023c0: 2d6c 2024 656e 7472 7920 616e 6420 6e6f -l $entry and no │ │ │ -000023d0: 7420 2d64 2024 656e 7472 7929 3b20 2020 t -d $entry); │ │ │ -000023e0: 2320 6f6e 6c79 2064 6972 6563 746f 7269 # only directori │ │ │ -000023f0: 6573 0a09 7075 7368 2040 656e 7472 6965 es..push @entrie │ │ │ -00002400: 732c 2024 656e 7472 790a 0920 2020 2069 s, $entry.. i │ │ │ -00002410: 6620 2465 6e74 7279 203d 7e0a 0920 2020 f $entry =~.. │ │ │ -00002420: 202f 5c41 285c 647b 347d 295c 2e28 5c64 /\A(\d{4})\.(\d │ │ │ -00002430: 7b32 7d29 5c2e 285c 647b 327d 295f 285c {2})\.(\d{2})_(\ │ │ │ -00002440: 647b 327d 295c 2e28 5c64 7b32 7d29 5c2e d{2})\.(\d{2})\. │ │ │ -00002450: 285c 647b 327d 295c 5a2f 6f3b 0a20 2020 (\d{2})\Z/o;. │ │ │ -00002460: 207d 0a20 2020 2063 6c6f 7365 6469 7228 }. closedir( │ │ │ -00002470: 4449 5229 3b0a 0a20 2020 2024 7072 4c6f DIR);.. $prLo │ │ │ -00002480: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00002490: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -000024a0: 7472 2720 3d3e 0a09 0920 205b 2264 6964 tr' =>... ["did │ │ │ -000024b0: 6e27 7420 6669 6e64 2061 2062 6163 6b75 n't find a backu │ │ │ -000024c0: 7020 696e 2024 6973 6f6c 4469 722c 2065 p in $isolDir, e │ │ │ -000024d0: 7869 7469 6e67 225d 2c0a 0909 2020 272d xiting"],... '- │ │ │ -000024e0: 6578 6974 2720 3d3e 2031 290a 0969 6620 exit' => 1)..if │ │ │ -000024f0: 4065 6e74 7269 6573 203c 2032 3b0a 0a20 @entries < 2;.. │ │ │ -00002500: 2020 2028 246d 6574 6144 6174 6142 6163 ($metaDataBac │ │ │ -00002510: 6b75 702c 2040 6973 6f6c 6174 4261 636b kup, @isolatBack │ │ │ -00002520: 7570 7329 203d 2073 6f72 7420 2840 656e ups) = sort (@en │ │ │ -00002530: 7472 6965 7329 3b0a 0a23 7072 696e 7420 tries);..#print │ │ │ -00002540: 226d 6574 6144 6174 6142 6163 6b75 7020 "metaDataBackup │ │ │ -00002550: 3d20 246d 6574 6144 6174 6142 6163 6b75 = $metaDataBacku │ │ │ -00002560: 705c 6e22 3b0a 2370 7269 6e74 2022 6973 p\n";.#print "is │ │ │ -00002570: 6f6c 6174 4261 636b 7570 7320 3d20 4069 olatBackups = @i │ │ │ -00002580: 736f 6c61 7442 6163 6b75 7073 5c6e 223b solatBackups\n"; │ │ │ -00002590: 0a7d 0a0a 230a 2320 646f 7562 6c65 2063 .}..#.# double c │ │ │ -000025a0: 6865 636b 206d 6574 6144 6174 6142 6163 heck metaDataBac │ │ │ -000025b0: 6b75 7020 696e 2069 736f 6c61 7465 4261 kup in isolateBa │ │ │ -000025c0: 636b 7570 4469 7220 3d3d 2062 6163 6b75 ckupDir == backu │ │ │ -000025d0: 7044 6972 0a23 0a7b 0a20 2020 206d 7920 pDir.#.{. my │ │ │ -000025e0: 246d 6574 6149 736f 6c20 3d20 2224 6973 $metaIsol = "$is │ │ │ -000025f0: 6f6c 6174 6542 6163 6b75 7044 6972 2f24 olateBackupDir/$ │ │ │ -00002600: 7365 7269 6573 2f24 6d65 7461 4461 7461 series/$metaData │ │ │ -00002610: 4261 636b 7570 223b 0a20 2020 206d 7920 Backup";. my │ │ │ -00002620: 246d 6574 614f 7269 6720 3d20 2224 6261 $metaOrig = "$ba │ │ │ -00002630: 636b 7570 4469 722f 2473 6572 6965 732f ckupDir/$series/ │ │ │ -00002640: 246d 6574 6144 6174 6142 6163 6b75 7022 $metaDataBackup" │ │ │ -00002650: 3b0a 0a23 7072 696e 7420 226d 6574 6149 ;..#print "metaI │ │ │ -00002660: 736f 6c20 3d20 246d 6574 6149 736f 6c5c sol = $metaIsol\ │ │ │ -00002670: 6e22 3b0a 2370 7269 6e74 2022 6d65 7461 n";.#print "meta │ │ │ -00002680: 4f72 6967 203d 2024 6d65 7461 4f72 6967 Orig = $metaOrig │ │ │ -00002690: 5c6e 223b 0a0a 2020 2020 2470 724c 6f67 \n";.. $prLog │ │ │ -000026a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000026b0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ -000026c0: 7227 203d 3e0a 2020 2020 205b 2266 6f75 r' =>. ["fou │ │ │ -000026d0: 6e64 206d 6574 6120 6461 7461 206f 6620 nd meta data of │ │ │ -000026e0: 6261 636b 7570 203c 246d 6574 6144 6174 backup <$metaDat │ │ │ -000026f0: 6142 6163 6b75 703e 2069 6e20 3c24 6973 aBackup> in <$is │ │ │ -00002700: 6f6c 6174 6542 6163 6b75 7044 6972 2f24 olateBackupDir/$ │ │ │ -00002710: 7365 7269 6573 3e2c 222e 0a20 2020 2020 series>,".. │ │ │ -00002720: 2220 6275 7420 6361 6e6e 6f74 2066 696e " but cannot fin │ │ │ -00002730: 6420 3c24 6d65 7461 4461 7461 4261 636b d <$metaDataBack │ │ │ -00002740: 7570 3e20 696e 203c 2462 6163 6b75 7044 up> in <$backupD │ │ │ -00002750: 6972 2f24 7365 7269 6573 3e22 5d2c 0a09 ir/$series>"],.. │ │ │ -00002760: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ -00002770: 0a09 756e 6c65 7373 202d 6420 246d 6574 ..unless -d $met │ │ │ -00002780: 614f 7269 673b 0a0a 2020 2020 6d79 2024 aOrig;.. my $ │ │ │ -00002790: 6620 3d20 756e 6465 663b 0a20 2020 2069 f = undef;. i │ │ │ -000027a0: 6620 282d 6620 2224 6d65 7461 4973 6f6c f (-f "$metaIsol │ │ │ -000027b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2229 /.md5CheckSums") │ │ │ -000027c0: 0a20 2020 207b 0a09 2466 203d 2022 2e6d . {..$f = ".m │ │ │ -000027d0: 6435 4368 6563 6b53 756d 7322 3b0a 2020 d5CheckSums";. │ │ │ -000027e0: 2020 7d0a 2020 2020 656c 7369 6620 282d }. elsif (- │ │ │ -000027f0: 6620 2224 6d65 7461 4973 6f6c 2f2e 6d64 f "$metaIsol/.md │ │ │ -00002800: 3543 6865 636b 5375 6d73 2e62 7a32 2229 5CheckSums.bz2") │ │ │ -00002810: 0a20 2020 207b 0a09 2466 203d 2022 2e6d . {..$f = ".m │ │ │ -00002820: 6435 4368 6563 6b53 756d 732e 627a 3222 d5CheckSums.bz2" │ │ │ -00002830: 3b0a 2020 2020 7d0a 2020 2020 2470 724c ;. }. $prL │ │ │ -00002840: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002850: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '- │ │ │ -00002860: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -00002870: 2072 6561 6420 3c24 6d65 7461 4973 6f6c read <$metaIsol │ │ │ -00002880: 2f2e 6d64 3543 6865 636b 5375 6d73 5b2e /.md5CheckSums[. │ │ │ -00002890: 627a 325d 3e22 5d2c 0a09 0920 2027 2d65 bz2]>"],... '-e │ │ │ -000028a0: 7869 7427 203d 3e20 3129 0a09 756e 6c65 xit' => 1)..unle │ │ │ -000028b0: 7373 2024 663b 0a20 2020 2024 7072 4c6f ss $f;. $prLo │ │ │ -000028c0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000028d0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -000028e0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -000028f0: 7265 6164 203c 246d 6574 614f 7269 672f read <$metaOrig/ │ │ │ -00002900: 2466 3e22 5d2c 0a09 0920 2027 2d65 7869 $f>"],... '-exi │ │ │ -00002910: 7427 203d 3e20 3129 0a09 756e 6c65 7373 t' => 1)..unless │ │ │ -00002920: 202d 6620 2224 6d65 7461 4f72 6967 2f24 -f "$metaOrig/$ │ │ │ -00002930: 6622 3b0a 0a20 2020 206d 7920 2469 736f f";.. my $iso │ │ │ -00002940: 6c4d 6435 203d 2026 3a3a 6361 6c63 4d44 lMd5 = &::calcMD │ │ │ -00002950: 3528 2224 6d65 7461 4973 6f6c 2f24 6622 5("$metaIsol/$f" │ │ │ -00002960: 2c20 2470 724c 6f67 293b 0a20 2020 206d , $prLog);. m │ │ │ -00002970: 7920 246f 7269 674d 6435 203d 2026 3a3a y $origMd5 = &:: │ │ │ -00002980: 6361 6c63 4d44 3528 2224 6d65 7461 4f72 calcMD5("$metaOr │ │ │ -00002990: 6967 2f24 6622 2c20 2470 724c 6f67 293b ig/$f", $prLog); │ │ │ -000029a0: 0a23 7072 696e 7420 2269 736f 6c4d 6435 .#print "isolMd5 │ │ │ -000029b0: 203d 2024 6973 6f6c 4d64 355c 6e22 3b0a = $isolMd5\n";. │ │ │ -000029c0: 2370 7269 6e74 2022 6f72 6967 4d64 3520 #print "origMd5 │ │ │ -000029d0: 3d20 246f 7269 674d 6435 5c6e 223b 0a20 = $origMd5\n";. │ │ │ -000029e0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -000029f0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00002a00: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00002a10: 2224 6620 6469 6666 6572 7320 696e 203c "$f differs in < │ │ │ -00002a20: 246d 6574 6149 736f 6c3e 2061 6e64 203c $metaIsol> and < │ │ │ -00002a30: 246d 6574 614f 7269 673e 2c20 6578 6974 $metaOrig>, exit │ │ │ -00002a40: 696e 6722 5d2c 0a09 0920 2027 2d65 7869 ing"],... '-exi │ │ │ -00002a50: 7427 203d 3e20 3129 0a09 756e 6c65 7373 t' => 1)..unless │ │ │ -00002a60: 2024 6973 6f6c 4d64 3520 6571 2024 6f72 $isolMd5 eq $or │ │ │ -00002a70: 6967 4d64 353b 0a7d 0a0a 756e 6c65 7373 igMd5;.}..unless │ │ │ -00002a80: 2028 2466 6f72 6365 290a 7b0a 2020 2020 ($force).{. │ │ │ -00002a90: 6d79 2024 616e 7377 6572 203d 2027 7965 my $answer = 'ye │ │ │ -00002aa0: 7327 3b0a 2020 2020 646f 0a20 2020 207b s';. do. { │ │ │ -00002ab0: 0a09 7072 696e 7420 2269 6e20 6469 7265 ..print "in dire │ │ │ -00002ac0: 6374 6f72 7920 3c24 6973 6f6c 6174 6542 ctory <$isolateB │ │ │ -00002ad0: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series │ │ │ -00002ae0: 3e2c 2063 6f70 795c 6e5c 743c 222c 0a09 >, copy\n\t<",.. │ │ │ -00002af0: 6a6f 696e 2822 3e5c 6e5c 743c 222c 4069 join(">\n\t<",@i │ │ │ -00002b00: 736f 6c61 7442 6163 6b75 7073 292c 2022 solatBackups), " │ │ │ -00002b10: 3e5c 6e74 6f5c 6e5c 743c 2462 6163 6b75 >\nto\n\t<$backu │ │ │ -00002b20: 7044 6972 2f24 7365 7269 6573 3e5c 6e22 pDir/$series>\n" │ │ │ -00002b30: 2c0a 0922 3f5c 6e79 6573 202f 206e 6f20 ,.."?\nyes / no │ │ │ -00002b40: 2d3e 2022 3b0a 0924 616e 7377 6572 203d -> ";..$answer = │ │ │ -00002b50: 203c 5354 4449 4e3e 3b0a 0963 686f 6d70 ;..chomp │ │ │ -00002b60: 2024 616e 7377 6572 3b0a 2020 2020 7d20 $answer;. } │ │ │ -00002b70: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n │ │ │ -00002b80: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans │ │ │ -00002b90: 7765 7220 6e65 2027 6e6f 2729 3b0a 0a20 wer ne 'no');.. │ │ │ -00002ba0: 2020 2065 7869 7420 3020 6966 2024 616e exit 0 if $an │ │ │ -00002bb0: 7377 6572 2065 7120 276e 6f27 3b0a 7d0a swer eq 'no';.}. │ │ │ -00002bc0: 0a7b 0a20 2020 206d 7920 2824 7461 7267 .{. my ($targ │ │ │ -00002bd0: 6574 4c69 6e6b 4672 6f6d 2c20 2474 6172 etLinkFrom, $tar │ │ │ -00002be0: 6765 7443 6f75 6e74 2920 3d0a 0926 3a3a getCount) =..&:: │ │ │ -00002bf0: 7265 6164 4c69 6e6b 4672 6f6d 456e 7472 readLinkFromEntr │ │ │ -00002c00: 6965 7328 2224 6261 636b 7570 4469 722f ies("$backupDir/ │ │ │ -00002c10: 2473 6572 6965 732f 246d 6574 6144 6174 $series/$metaDat │ │ │ -00002c20: 6142 6163 6b75 7022 2c20 2470 724c 6f67 aBackup", $prLog │ │ │ -00002c30: 293b 0a20 2020 206d 7920 2824 6d65 7267 );. my ($merg │ │ │ -00002c40: 654c 696e 6b46 726f 6d2c 2024 6d65 7267 eLinkFrom, $merg │ │ │ -00002c50: 6543 6f75 6e74 2920 3d0a 0926 3a3a 7265 eCount) =..&::re │ │ │ -00002c60: 6164 4c69 6e6b 4672 6f6d 456e 7472 6965 adLinkFromEntrie │ │ │ -00002c70: 7328 2224 6973 6f6c 6174 6542 6163 6b75 s("$isolateBacku │ │ │ -00002c80: 7044 6972 2f24 7365 7269 6573 2f24 6d65 pDir/$series/$me │ │ │ -00002c90: 7461 4461 7461 4261 636b 7570 222c 2024 taDataBackup", $ │ │ │ -00002ca0: 7072 4c6f 6729 3b0a 2020 2020 666f 7265 prLog);. fore │ │ │ -00002cb0: 6163 6820 6d79 2024 6c66 2028 736f 7274 ach my $lf (sort │ │ │ -00002cc0: 206b 6579 7320 2524 6d65 7267 654c 696e keys %$mergeLin │ │ │ -00002cd0: 6b46 726f 6d29 0a20 2020 207b 0a09 756e kFrom). {..un │ │ │ -00002ce0: 6c65 7373 2028 6578 6973 7473 2024 2474 less (exists $$t │ │ │ -00002cf0: 6172 6765 744c 696e 6b46 726f 6d7b 246c argetLinkFrom{$l │ │ │ -00002d00: 667d 290a 097b 0a09 2020 2020 6c6f 6361 f})..{.. loca │ │ │ -00002d10: 6c20 2a46 494c 453b 0a09 2020 2020 6d79 l *FILE;.. my │ │ │ -00002d20: 2024 6620 3d20 2224 6261 636b 7570 4469 $f = "$backupDi │ │ │ -00002d30: 722f 2473 6572 6965 732f 246d 6574 6144 r/$series/$metaD │ │ │ -00002d40: 6174 6142 6163 6b75 702f 2e73 746f 7265 ataBackup/.store │ │ │ -00002d50: 4261 636b 7570 4c69 6e6b 7322 3b0a 0920 BackupLinks";.. │ │ │ -00002d60: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00002d70: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00002d80: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -00002d90: 0909 0920 205b 2261 646a 7573 7469 6e67 ... ["adjusting │ │ │ -00002da0: 2072 6566 6572 6e63 6520 3c24 6c66 3e20 refernce <$lf> │ │ │ -00002db0: 696e 203c 2466 2f24 7461 7267 6574 436f in <$f/$targetCo │ │ │ -00002dc0: 756e 743e 225d 293b 0a09 2020 2020 6f70 unt>"]);.. op │ │ │ -00002dd0: 656e 2846 494c 452c 2027 3e27 2c20 2224 en(FILE, '>', "$ │ │ │ -00002de0: 662f 6c69 6e6b 4672 6f6d 2474 6172 6765 f/linkFrom$targe │ │ │ -00002df0: 7443 6f75 6e74 2229 206f 720a 0909 2470 tCount") or...$p │ │ │ -00002e00: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00002e10: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -00002e20: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00002e30: 2263 616e 6e6f 7420 7772 6974 6520 3c24 "cannot write <$ │ │ │ -00002e40: 662f 2474 6172 6765 7443 6f75 6e74 3e22 f/$targetCount>" │ │ │ -00002e50: 5d2c 0a09 0909 2020 2020 2020 272d 6164 ],.... '-ad │ │ │ -00002e60: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__, │ │ │ -00002e70: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... │ │ │ -00002e80: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00002e90: 3129 3b0a 0920 2020 2070 7269 6e74 2046 1);.. print F │ │ │ -00002ea0: 494c 4520 2224 6c66 5c6e 223b 0a09 2020 ILE "$lf\n";.. │ │ │ -00002eb0: 2020 636c 6f73 6528 4649 4c45 292c 0a09 close(FILE),.. │ │ │ -00002ec0: 2020 2020 2b2b 2474 6172 6765 7443 6f75 ++$targetCou │ │ │ -00002ed0: 6e74 3b0a 097d 0a20 2020 207d 0a7d 0a0a nt;..}. }.}.. │ │ │ -00002ee0: 230a 2320 6368 6563 6b73 2066 6f72 206f #.# checks for o │ │ │ -00002ef0: 7074 696f 6e20 2d2d 6d6f 7665 0a23 0a24 ption --move.#.$ │ │ │ -00002f00: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002f10: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ -00002f20: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00002f30: 6469 7265 6374 6f72 7920 3c24 6973 6f6c directory <$isol │ │ │ -00002f40: 6174 6542 6163 6b75 7044 6972 2f24 7365 ateBackupDir/$se │ │ │ -00002f50: 7269 6573 3e20 646f 6573 206e 6f74 2065 ries> does not e │ │ │ -00002f60: 7869 7422 5d2c 0a09 2020 2020 2020 272d xit"],.. '- │ │ │ -00002f70: 6578 6974 2720 3d3e 2031 290a 2020 2020 exit' => 1). │ │ │ -00002f80: 756e 6c65 7373 202d 6520 2224 6973 6f6c unless -e "$isol │ │ │ -00002f90: 6174 6542 6163 6b75 7044 6972 2f24 7365 ateBackupDir/$se │ │ │ -00002fa0: 7269 6573 223b 0a24 7072 4c6f 672d 3e70 ries";.$prLog->p │ │ │ -00002fb0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00002fc0: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ -00002fd0: 7227 203d 3e20 5b22 6469 7265 6374 6f72 r' => ["director │ │ │ -00002fe0: 7920 3c24 6261 636b 7570 4469 722f 2473 y <$backupDir/$s │ │ │ -00002ff0: 6572 6965 733e 2064 6f65 7320 6e6f 7420 eries> does not │ │ │ -00003000: 6578 6974 225d 2c0a 0920 2020 2020 2027 exit"],.. ' │ │ │ -00003010: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ -00003020: 2075 6e6c 6573 7320 2d65 2022 2462 6163 unless -e "$bac │ │ │ -00003030: 6b75 7044 6972 2f24 7365 7269 6573 223b kupDir/$series"; │ │ │ -00003040: 0a0a 6966 2028 246d 6f76 6529 0a7b 0a20 ..if ($move).{. │ │ │ -00003050: 2020 206d 7920 2464 3120 3d20 2873 7461 my $d1 = (sta │ │ │ -00003060: 7428 2224 6973 6f6c 6174 6542 6163 6b75 t("$isolateBacku │ │ │ -00003070: 7044 6972 2f24 7365 7269 6573 2229 295b pDir/$series"))[ │ │ │ -00003080: 305d 3b0a 2020 2020 6d79 2024 6432 203d 0];. my $d2 = │ │ │ -00003090: 2028 7374 6174 2822 2462 6163 6b75 7044 (stat("$backupD │ │ │ -000030a0: 6972 2f24 7365 7269 6573 2229 295b 305d ir/$series"))[0] │ │ │ -000030b0: 3b0a 2020 2020 2470 724c 6f67 2d3e 7072 ;. $prLog->pr │ │ │ -000030c0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000030d0: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' = │ │ │ -000030e0: 3e20 5b22 6973 6f6c 6174 6564 4261 636b > ["isolatedBack │ │ │ -000030f0: 7570 4469 7220 3c24 6973 6f6c 6174 6542 upDir <$isolateB │ │ │ -00003100: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series │ │ │ -00003110: 3e20 616e 6420 2220 2e0a 0909 2020 2262 > and " .... "b │ │ │ -00003120: 6163 6b75 7044 6972 203c 2462 6163 6b75 ackupDir <$backu │ │ │ -00003130: 7044 6972 2f24 7365 7269 6573 3e20 6172 pDir/$series> ar │ │ │ -00003140: 6520 6e6f 7420 6f6e 2074 6865 2073 616d e not on the sam │ │ │ -00003150: 6520 6669 6c65 7379 7374 656d 222c 0a09 e filesystem",.. │ │ │ -00003160: 0909 2020 2020 2022 7573 6167 6520 6f66 .. "usage of │ │ │ -00003170: 206f 7074 696f 6e20 2d2d 6d6f 7665 2069 option --move i │ │ │ -00003180: 7320 6e6f 7420 7375 7070 706f 7274 6564 s not suppported │ │ │ -00003190: 225d 2c0a 0909 2020 272d 6578 6974 2720 "],... '-exit' │ │ │ -000031a0: 3d3e 2031 290a 0969 6620 2464 3120 213d => 1)..if $d1 != │ │ │ -000031b0: 2024 6432 3b0a 7d0a 0a23 0a23 2063 6f70 $d2;.}..#.# cop │ │ │ -000031c0: 7920 6461 7461 2066 726f 6d20 6973 6f6c y data from isol │ │ │ -000031d0: 6174 6564 2062 6163 6b75 7020 746f 2062 ated backup to b │ │ │ -000031e0: 6163 6b75 7044 6972 0a23 0a24 7072 4c6f ackupDir.#.$prLo │ │ │ -000031f0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00003200: 203d 3e20 2749 272c 0a09 2020 2020 2020 => 'I',.. │ │ │ -00003210: 272d 7374 7227 203d 3e20 5b22 636f 7079 '-str' => ["copy │ │ │ -00003220: 696e 6720 6461 7461 202e 202e 202e 225d ing data . . ."] │ │ │ -00003230: 293b 0a0a 6d79 2024 643b 0a66 6f72 6561 );..my $d;.forea │ │ │ -00003240: 6368 2024 6420 2840 6973 6f6c 6174 4261 ch $d (@isolatBa │ │ │ -00003250: 636b 7570 7329 0a7b 0a20 2020 2024 7072 ckups).{. $pr │ │ │ -00003260: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00003270: 6427 203d 3e20 2749 272c 0a09 0920 2027 d' => 'I',... ' │ │ │ -00003280: 2d73 7472 2720 3d3e 205b 2263 6f70 7969 -str' => ["copyi │ │ │ -00003290: 6e67 203c 2469 736f 6c61 7465 4261 636b ng <$isolateBack │ │ │ -000032a0: 7570 4469 722f 2473 6572 6965 732f 2464 upDir/$series/$d │ │ │ -000032b0: 3e20 746f 2022 202e 0a09 0909 2020 2020 > to " ..... │ │ │ -000032c0: 2022 3c24 6261 636b 7570 4469 722f 2473 "<$backupDir/$s │ │ │ -000032d0: 6572 6965 733e 225d 290a 0969 6620 2476 eries>"])..if $v │ │ │ -000032e0: 6572 626f 7365 3b0a 0a20 2020 2069 6620 erbose;.. if │ │ │ -000032f0: 2824 6d6f 7665 290a 2020 2020 7b0a 0926 ($move). {..& │ │ │ -00003300: 3a3a 6d76 436f 6d6d 2822 2469 736f 6c61 ::mvComm("$isola │ │ │ -00003310: 7465 4261 636b 7570 4469 722f 2473 6572 teBackupDir/$ser │ │ │ -00003320: 6965 732f 2464 2220 3d3e 2022 2462 6163 ies/$d" => "$bac │ │ │ -00003330: 6b75 7044 6972 2f24 7365 7269 6573 222c kupDir/$series", │ │ │ -00003340: 0a09 0920 2022 2474 6d70 6469 722f 7374 ... "$tmpdir/st │ │ │ -00003350: 6275 4d65 7267 652d 222c 2024 7072 4c6f buMerge-", $prLo │ │ │ -00003360: 6729 3b0a 2020 2020 7d0a 2020 2020 656c g);. }. el │ │ │ -00003370: 7365 0a20 2020 207b 0a09 263a 3a63 6f70 se. {..&::cop │ │ │ -00003380: 7944 6972 2822 2469 736f 6c61 7465 4261 yDir("$isolateBa │ │ │ -00003390: 636b 7570 4469 722f 2473 6572 6965 732f ckupDir/$series/ │ │ │ -000033a0: 2464 2220 3d3e 2022 2462 6163 6b75 7044 $d" => "$backupD │ │ │ -000033b0: 6972 2f24 7365 7269 6573 222c 0a09 0920 ir/$series",... │ │ │ -000033c0: 2020 2224 746d 7064 6972 2f73 7462 754d "$tmpdir/stbuM │ │ │ -000033d0: 6572 6765 2d22 2c20 2470 724c 6f67 2c20 erge-", $prLog, │ │ │ -000033e0: 3029 3b0a 2020 2020 7d0a 7d0a 230a 2320 0);. }.}.#.# │ │ │ -000033f0: 636f 7079 2028 616e 6420 6368 6563 6b20 copy (and check │ │ │ -00003400: 666f 7220 6e75 6d62 6572 696e 6729 206c for numbering) l │ │ │ -00003410: 696e 6b46 726f 6d20 6669 6c65 7320 6261 inkFrom files ba │ │ │ -00003420: 636b 2074 6f20 7265 6665 7265 6e63 6520 ck to reference │ │ │ -00003430: 6469 7265 6374 6f72 790a 230a 0a75 6e6c directory.#..unl │ │ │ -00003440: 6573 7320 2824 736b 6970 5379 6e63 290a ess ($skipSync). │ │ │ -00003450: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr │ │ │ -00003460: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00003470: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' = │ │ │ -00003480: 3e20 5b22 7379 6e63 696e 6720 2e2e 2e22 > ["syncing ..." │ │ │ -00003490: 5d29 3b0a 2020 2020 7379 7374 656d 2022 ]);. system " │ │ │ -000034a0: 2f62 696e 2f73 796e 6322 3b0a 7d0a 0a24 /bin/sync";.}..$ │ │ │ -000034b0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -000034c0: 696e 6427 203d 3e20 2749 272c 0a09 2020 ind' => 'I',.. │ │ │ -000034d0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -000034e0: 6669 6e69 7368 6564 2063 6f70 7969 6e67 finished copying │ │ │ -000034f0: 2064 6174 6122 2c0a 0909 0920 2270 6c65 data",.... "ple │ │ │ -00003500: 6173 6520 7275 6e22 2c0a 0909 0920 225c ase run",.... "\ │ │ │ -00003510: 7473 746f 7265 4261 636b 7570 5570 6461 tstoreBackupUpda │ │ │ -00003520: 7465 4261 636b 7570 2e70 6c20 2d62 205c teBackup.pl -b \ │ │ │ -00003530: 2224 6261 636b 7570 4469 725c 2222 5d29 "$backupDir\""]) │ │ │ -00003540: 3b0a 0a0a 6578 6974 2030 3b0a 0a0a 2323 ;...exit 0;...## │ │ │ -00003550: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003560: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003570: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00003580: 0a73 7562 2072 6561 644c 696e 6b46 726f .sub readLinkFro │ │ │ -00003590: 6d45 6e74 7269 6573 0a7b 0a20 2020 206d mEntries.{. m │ │ │ -000035a0: 7920 2824 6469 722c 2024 7072 4c6f 6729 y ($dir, $prLog) │ │ │ -000035b0: 203d 2040 5f3b 0a0a 2020 2020 6c6f 6361 = @_;.. loca │ │ │ -000035c0: 6c20 2a44 4952 3b0a 2020 2020 6d79 2024 l *DIR;. my $ │ │ │ -000035d0: 6420 3d20 2224 6469 722f 2e73 746f 7265 d = "$dir/.store │ │ │ -000035e0: 4261 636b 7570 4c69 6e6b 7322 3b0a 2020 BackupLinks";. │ │ │ -000035f0: 2020 6f70 656e 6469 7228 4449 522c 2024 opendir(DIR, $ │ │ │ -00003600: 6429 206f 720a 0924 7072 4c6f 672d 3e70 d) or..$prLog->p │ │ │ -00003610: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00003620: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -00003630: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -00003640: 6f70 656e 6469 7220 3c24 6469 723e 225d opendir <$dir>"] │ │ │ -00003650: 2c0a 0909 2020 2020 2020 272d 6164 6427 ,... '-add' │ │ │ -00003660: 203d 3e20 5b5f 5f46 494c 455f 5f2c 205f => [__FILE__, _ │ │ │ -00003670: 5f4c 494e 455f 5f5d 2c0a 0909 2020 2020 _LINE__],... │ │ │ -00003680: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1); │ │ │ -00003690: 0a20 2020 206d 7920 2825 6c69 6e6b 4672 . my (%linkFr │ │ │ -000036a0: 6f6d 2c20 2465 6e74 7279 293b 0a20 2020 om, $entry);. │ │ │ -000036b0: 206d 7920 2463 6f75 6e74 203d 2030 3b0a my $count = 0;. │ │ │ -000036c0: 2020 2020 7768 696c 6520 2824 656e 7472 while ($entr │ │ │ -000036d0: 7920 3d20 7265 6164 6469 7220 4449 5229 y = readdir DIR) │ │ │ -000036e0: 0a20 2020 207b 0a09 6966 2028 2465 6e74 . {..if ($ent │ │ │ -000036f0: 7279 203d 7e20 2f5c 416c 696e 6b46 726f ry =~ /\AlinkFro │ │ │ -00003700: 6d5c 642b 5c5a 2f29 0a09 7b0a 0920 2020 m\d+\Z/)..{.. │ │ │ -00003710: 2024 636f 756e 742b 2b3b 0a09 2020 2020 $count++;.. │ │ │ -00003720: 6c6f 6361 6c20 2a46 494c 453b 0a09 2020 local *FILE;.. │ │ │ -00003730: 2020 6f70 656e 2846 494c 452c 2027 3c27 open(FILE, '<' │ │ │ -00003740: 2c20 2224 642f 2465 6e74 7279 2229 206f , "$d/$entry") o │ │ │ -00003750: 720a 0909 2470 724c 6f67 2d3e 7072 696e r...$prLog->prin │ │ │ -00003760: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00003770: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -00003780: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => ["cannot op │ │ │ -00003790: 656e 6469 7220 3c24 642f 2465 6e74 7279 endir <$d/$entry │ │ │ -000037a0: 3e22 5d2c 0a09 0909 2020 2020 2020 272d >"],.... '- │ │ │ -000037b0: 6164 6427 203d 3e20 5b5f 5f46 494c 455f add' => [__FILE_ │ │ │ -000037c0: 5f2c 205f 5f4c 494e 455f 5f5d 2c0a 0909 _, __LINE__],... │ │ │ -000037d0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -000037e0: 3e20 3129 3b0a 0920 2020 206d 7920 246c > 1);.. my $l │ │ │ -000037f0: 203d 203c 4649 4c45 3e3b 0a09 2020 2020 = ;.. │ │ │ -00003800: 6368 6f6d 7020 246c 3b0a 0920 2020 2024 chomp $l;.. $ │ │ │ -00003810: 6c69 6e6b 4672 6f6d 7b24 6c7d 203d 2024 linkFrom{$l} = $ │ │ │ -00003820: 656e 7472 793b 0a09 2020 2020 636c 6f73 entry;.. clos │ │ │ -00003830: 6528 4649 4c45 293b 0a09 7d0a 2020 2020 e(FILE);..}. │ │ │ -00003840: 7d0a 2020 2020 636c 6f73 6564 6972 2844 }. closedir(D │ │ │ -00003850: 4952 293b 0a0a 2020 2020 7265 7475 726e IR);.. return │ │ │ -00003860: 205c 256c 696e 6b46 726f 6d2c 2024 636f \%linkFrom, $co │ │ │ -00003870: 756e 743b 0a7d 0a unt;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 704d 6572 6765 4973 6f6c 6174 6564 4261 pMergeIsolatedBa │ │ │ +00000040: 636b 7570 0a ckup. │ │ ├── ./usr/bin/storeBackupMount │ │ │ @@ -1,1486 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 342d 3230 3232 290a 2320 2020 2020 2020 4-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a75 7365 2073 7472 6963 743b 0a75 ;..use strict;.u │ │ │ -00000330: 7365 204e 6574 3a3a 5069 6e67 3b0a 0a0a se Net::Ping;... │ │ │ -00000340: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. │ │ │ -00000350: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi │ │ │ -00000360: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir │ │ │ -00000370: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D │ │ │ -00000380: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein │ │ │ -00000390: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol │ │ │ -000003a0: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis │ │ │ -000003b0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i │ │ │ -000003c0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). │ │ │ -000003d0: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f │ │ │ -000003e0: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my │ │ │ -000003f0: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink │ │ │ -00000400: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i │ │ │ -00000410: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link, │ │ │ -00000420: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne "/").. │ │ │ -00000430: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~ │ │ │ -00000440: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\/]+$/$link │ │ │ -00000450: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e │ │ │ -00000460: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi │ │ │ -00000470: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. │ │ │ -00000480: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $ │ │ │ -00000490: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi │ │ │ -000004a0: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$ │ │ │ -000004b0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = "/$file"; │ │ │ -000004c0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -000004d0: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD │ │ │ -000004e0: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR "<$file> doe │ │ │ -000004f0: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000500: 7469 6e67 215c 6e22 3b0a 2020 2020 2020 ting!\n";. │ │ │ -00000510: 2020 504f 5349 583a 3a5f 6578 6974 2032 POSIX::_exit 2 │ │ │ -00000520: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di │ │ │ -00000530: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= "/../lib"; │ │ │ -00000540: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad │ │ │ -00000550: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth │ │ │ -00000560: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old │ │ │ -00000570: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -00000580: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old │ │ │ -00000590: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd │ │ │ -000005a0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {.. │ │ │ -000005b0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b │ │ │ -000005c0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $ │ │ │ -000005d0: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $ │ │ │ -000005e0: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return │ │ │ -000005f0: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir( │ │ │ -00000600: 2224 6162 7344 6972 2466 696c 6522 2929 "$absDir$file")) │ │ │ -00000610: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -00000620: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -00000630: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR "<$dir> doe │ │ │ -00000640: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000650: 7469 6e67 5c6e 223b 0a20 2020 2020 2020 ting\n";. │ │ │ -00000660: 2050 4f53 4958 3a3a 5f65 7869 7420 323b POSIX::_exit 2; │ │ │ -00000670: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl │ │ │ -00000680: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. │ │ │ -00000690: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift │ │ │ -000006a0: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return (' │ │ │ -000006b0: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles │ │ │ -000006c0: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\//) │ │ │ -000006d0: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa │ │ │ -000006e0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname.. │ │ │ -000006f0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f │ │ │ -00000700: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ │ │ │ -00000710: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\/(.*)$/s; │ │ │ -00000720: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' │ │ │ -00000730: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq ''); │ │ │ -00000740: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000750: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls │ │ │ -00000760: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename. │ │ │ -00000770: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir │ │ │ -00000780: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my ( │ │ │ -00000790: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = & │ │ │ -000007a0: 6c69 6250 6174 6828 2430 293b 0a75 6e73 libPath($0);.uns │ │ │ -000007b0: 6869 6674 2040 494e 432c 2022 2472 6571 hift @INC, "$req │ │ │ -000007c0: 223b 0a0a 0a72 6571 7569 7265 2027 6368 ";...require 'ch │ │ │ -000007d0: 6563 6b50 6172 616d 322e 706c 273b 0a72 eckParam2.pl';.r │ │ │ -000007e0: 6571 7569 7265 2027 6368 6563 6b4f 626a equire 'checkObj │ │ │ -000007f0: 5061 722e 706c 273b 0a72 6571 7569 7265 Par.pl';.require │ │ │ -00000800: 2027 7072 4c6f 672e 706c 273b 0a72 6571 'prLog.pl';.req │ │ │ -00000810: 7569 7265 2027 666f 726b 5072 6f63 2e70 uire 'forkProc.p │ │ │ -00000820: 6c27 3b0a 7265 7175 6972 6520 2764 6174 l';.require 'dat │ │ │ -00000830: 6554 6f6f 6c73 2e70 6c27 3b0a 7265 7175 eTools.pl';.requ │ │ │ -00000840: 6972 6520 2776 6572 7369 6f6e 2e70 6c27 ire 'version.pl' │ │ │ -00000850: 3b0a 7265 7175 6972 6520 2766 696c 6544 ;.require 'fileD │ │ │ -00000860: 6972 2e70 6c27 3b0a 0a24 6d61 696e 3a3a ir.pl';..$main:: │ │ │ -00000870: 6578 6974 203d 2030 3b20 2020 2020 2020 exit = 0; │ │ │ -00000880: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000890: 2020 2020 2020 2020 2320 6578 6974 2073 # exit s │ │ │ -000008a0: 7461 7475 730a 0a6d 7920 2474 6d70 6469 tatus..my $tmpdi │ │ │ -000008b0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; │ │ │ -000008c0: 2020 2020 2020 2020 2023 2064 6566 6175 # defau │ │ │ -000008d0: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir │ │ │ -000008e0: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR' │ │ │ -000008f0: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN │ │ │ -00000900: 567b 2754 4d50 4449 5227 7d3b 0a0a 3d68 V{'TMPDIR'};..=h │ │ │ -00000910: 6561 6431 204e 414d 450a 0a4d 6f75 6e74 ead1 NAME..Mount │ │ │ -00000920: 7320 6669 6c65 2073 7973 7465 6d73 2028 s file systems ( │ │ │ -00000930: 6465 6669 6e65 6420 696e 202f 6574 632f defined in /etc/ │ │ │ -00000940: 6673 7461 6229 2061 6e64 2073 7461 7274 fstab) and start │ │ │ -00000950: 7320 7374 6f72 6542 6163 6b75 700a 7265 s storeBackup.re │ │ │ -00000960: 6c61 7465 6420 7072 6f67 7261 6d73 0a69 lated programs.i │ │ │ -00000970: 6620 796f 7520 7573 6520 636f 6d6d 616e f you use comman │ │ │ -00000980: 6420 6c69 6e65 2c20 7468 6520 6f72 6465 d line, the orde │ │ │ -00000990: 7220 6f66 2065 7865 6375 7469 6f6e 2064 r of execution d │ │ │ -000009a0: 6570 656e 6473 206f 6e20 7468 6520 6f72 epends on the or │ │ │ -000009b0: 6465 720a 6f66 2074 6865 202d 2d73 746f der.of the --sto │ │ │ -000009c0: 7265 4261 636b 7570 2a20 6f70 7469 6f6e reBackup* option │ │ │ -000009d0: 730a 6966 2079 6f75 2075 7365 2074 6865 s.if you use the │ │ │ -000009e0: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f │ │ │ -000009f0: 696c 652c 2074 6865 206f 6465 7220 6f66 ile, the oder of │ │ │ -00000a00: 2065 7865 6375 7469 6f6e 2064 6570 656e execution depen │ │ │ -00000a10: 6473 206f 6e0a 6f70 7469 6f6e 2027 6f72 ds on.option 'or │ │ │ -00000a20: 6465 724f 6645 7865 6375 7469 6f6e 270a derOfExecution'. │ │ │ -00000a30: 0a3d 6865 6164 3120 5359 4e4f 5053 4953 .=head1 SYNOPSIS │ │ │ -00000a40: 0a0a 2020 2020 2020 2020 7374 6f72 6542 .. storeB │ │ │ -00000a50: 6163 6b75 704d 6f75 6e74 2e70 6c20 2d2d ackupMount.pl -- │ │ │ -00000a60: 6865 6c70 0a6f 720a 2020 2020 2020 2020 help.or. │ │ │ -00000a70: 7374 6f72 6542 6163 6b75 704d 6f75 6e74 storeBackupMount │ │ │ -00000a80: 2e70 6c20 2d67 2063 6f6e 6669 6746 696c .pl -g configFil │ │ │ -00000a90: 650a 6f72 0a20 2020 2020 2020 2073 746f e.or. sto │ │ │ -00000aa0: 7265 4261 636b 7570 4d6f 756e 742e 706c reBackupMount.pl │ │ │ -00000ab0: 202d 6620 636f 6e66 6967 4669 6c65 0a6f -f configFile.o │ │ │ -00000ac0: 720a 0973 746f 7265 4261 636b 7570 4d6f r..storeBackupMo │ │ │ -00000ad0: 756e 742e 706c 205b 2d73 2073 6572 7665 unt.pl [-s serve │ │ │ -00000ae0: 7273 5d20 5b2d 645d 205b 2d6c 206c 6f67 rs] [-d] [-l log │ │ │ -00000af0: 4669 6c65 0a09 2020 2020 2020 205b 2d2d File.. [-- │ │ │ -00000b00: 7375 7070 7265 7373 5469 6d65 5d20 5b2d suppressTime] [- │ │ │ -00000b10: 6d20 6d61 7846 696c 656c 656e 5d0a 0920 m maxFilelen].. │ │ │ -00000b20: 2020 2020 2020 5b5b 2d6e 206e 6f4f 664f [[-n noOfO │ │ │ -00000b30: 6c64 4669 6c65 735d 207c 205b 2d2d 7361 ldFiles] | [--sa │ │ │ -00000b40: 7665 4c6f 6773 5d5d 0a09 2020 2020 2020 veLogs]].. │ │ │ -00000b50: 205b 2d2d 636f 6d70 7265 7373 5769 7468 [--compressWith │ │ │ -00000b60: 2063 6f6d 7072 6573 7370 726f 675d 5d0a compressprog]]. │ │ │ -00000b70: 0920 2020 205b 2d2d 7374 6f72 6542 6163 . [--storeBac │ │ │ -00000b80: 6b75 7020 7374 6f72 6542 6163 6b75 702d kup storeBackup- │ │ │ -00000b90: 5061 7261 6d73 5d0a 0920 2020 205b 2d2d Params].. [-- │ │ │ -00000ba0: 7374 6f72 6542 6163 6b75 7055 7064 6174 storeBackupUpdat │ │ │ -00000bb0: 6542 6163 6b75 7020 7374 6f72 6542 6163 eBackup storeBac │ │ │ -00000bc0: 6b75 7055 7064 6174 6542 6163 6b75 702d kupUpdateBackup- │ │ │ -00000bd0: 5061 7261 6d73 5d0a 0920 2020 205b 2d2d Params].. [-- │ │ │ -00000be0: 7374 6f72 6542 6163 6b75 7043 6865 636b storeBackupCheck │ │ │ -00000bf0: 4261 636b 7570 2073 746f 7265 4261 636b Backup storeBack │ │ │ -00000c00: 7570 4368 6563 6b42 6163 6b75 702d 5061 upCheckBackup-Pa │ │ │ -00000c10: 7261 6d73 5d0a 0920 2020 205b 2d2d 7374 rams].. [--st │ │ │ -00000c20: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo │ │ │ -00000c30: 7572 6365 2073 746f 7265 4261 636b 7570 urce storeBackup │ │ │ -00000c40: 4368 6563 6b53 6f75 7263 652d 5061 7261 CheckSource-Para │ │ │ -00000c50: 6d73 5d0a 0920 2020 205b 2d2d 7374 6f72 ms].. [--stor │ │ │ -00000c60: 6542 6163 6b75 7044 656c 2073 746f 7265 eBackupDel store │ │ │ -00000c70: 4261 636b 7570 4465 6c2d 5061 7261 6d73 BackupDel-Params │ │ │ -00000c80: 5d0a 0920 2020 205b 2d2d 7072 696e 7441 ].. [--printA │ │ │ -00000c90: 6e64 5374 6f70 5d20 5b2d 6b20 6b69 6c6c ndStop] [-k kill │ │ │ -00000ca0: 5469 6d65 5d20 5b2d 5420 746d 7064 6972 Time] [-T tmpdir │ │ │ -00000cb0: 5d20 5b6d 6f75 6e74 506f 696e 7473 2e2e ] [mountPoints.. │ │ │ -00000cc0: 2e5d 0a0a 3d68 6561 6431 2044 4553 4352 .]..=head1 DESCR │ │ │ -00000cd0: 4950 5449 4f4e 0a0a 5468 6973 2073 6372 IPTION..This scr │ │ │ -00000ce0: 6970 7420 646f 6573 2074 6865 2066 6f6c ipt does the fol │ │ │ -00000cf0: 6c6f 7769 6e67 3a0a 0a3d 6f76 6572 2034 lowing:..=over 4 │ │ │ -00000d00: 0a0a 3d69 7465 6d20 2d20 6368 6563 6b73 ..=item - checks │ │ │ -00000d10: 2061 6e20 6e66 7320 7365 7276 6572 2077 an nfs server w │ │ │ -00000d20: 6974 6820 7069 6e67 0a0a 3d69 7465 6d20 ith ping..=item │ │ │ -00000d30: 2d20 6d6f 756e 7473 2074 6861 7420 7365 - mounts that se │ │ │ -00000d40: 7276 6572 2076 6961 2061 206c 6973 7420 rver via a list │ │ │ -00000d50: 6f66 206d 6f75 6e74 2070 6f69 6e74 730a of mount points. │ │ │ -00000d60: 0a3d 6974 656d 202d 2073 7461 7274 7320 .=item - starts │ │ │ -00000d70: 7374 6f72 6542 6163 6b75 7020 2877 6974 storeBackup (wit │ │ │ -00000d80: 6820 6120 636f 6e66 6967 2066 696c 6529 h a config file) │ │ │ -00000d90: 0a0a 3d69 7465 6d20 2d20 756d 6f75 6e74 ..=item - umount │ │ │ -00000da0: 7320 7468 6174 2073 6572 7665 720a 0a3d s that server..= │ │ │ -00000db0: 6261 636b 0a0a 3d68 6561 6431 204f 5054 back..=head1 OPT │ │ │ -00000dc0: 494f 4e53 0a0a 3d6f 7665 7220 380a 0a3d IONS..=over 8..= │ │ │ -00000dd0: 6974 656d 2042 3c2d 2d68 656c 703e 0a0a item B<--help>.. │ │ │ -00000de0: 2020 2020 7368 6f77 2074 6869 7320 6865 show this he │ │ │ -00000df0: 6c70 0a0a 3d69 7465 6d20 423c 2d2d 6765 lp..=item B<--ge │ │ │ -00000e00: 6e65 7261 7465 3e2c 2042 3c2d 673e 0a0a nerate>, B<-g>.. │ │ │ -00000e10: 2020 2020 6765 6e65 7261 7465 2061 2074 generate a t │ │ │ -00000e20: 656d 706c 6174 6520 6f66 2074 6865 2063 emplate of the c │ │ │ -00000e30: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ -00000e40: 650a 0a3d 6974 656d 2042 3c2d 2d66 696c e..=item B<--fil │ │ │ -00000e50: 653e 2c20 423c 2d66 3e0a 0a20 2020 2063 e>, B<-f>.. c │ │ │ -00000e60: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ -00000e70: 6520 2869 6e73 7465 6164 206f 6620 6f72 e (instead of or │ │ │ -00000e80: 2061 6464 6974 696f 6e61 6c6c 7920 746f additionally to │ │ │ -00000e90: 206f 7074 696f 6e73 0a20 2020 206f 6e20 options. on │ │ │ -00000ea0: 636f 6d6d 616e 6420 6c69 6e65 290a 0a3d command line)..= │ │ │ -00000eb0: 6974 656d 2042 3c2d 2d73 6572 7665 7273 item B<--servers │ │ │ -00000ec0: 3e2c 2042 3c2d 733e 0a0a 2020 2020 6e61 >, B<-s>.. na │ │ │ -00000ed0: 6d65 2873 2920 6f72 2069 7020 6164 6472 me(s) or ip addr │ │ │ -00000ee0: 6573 7328 6573 2920 6f66 2074 6865 206e ess(es) of the n │ │ │ -00000ef0: 6673 2073 6572 7665 7228 7329 0a20 2020 fs server(s). │ │ │ -00000f00: 2054 6869 7320 6f70 7469 6f6e 2063 616e This option can │ │ │ -00000f10: 2062 6520 7265 7065 6174 6564 206d 756c be repeated mul │ │ │ -00000f20: 7469 706c 6520 7469 6d65 730a 0a3d 6974 tiple times..=it │ │ │ -00000f30: 656d 2042 3c2d 2d64 6562 7567 3e2c 2042 em B<--debug>, B │ │ │ -00000f40: 3c2d 643e 0a0a 2020 2020 6765 6e65 7261 <-d>.. genera │ │ │ -00000f50: 7465 2073 6f6d 6520 6465 6275 6720 6d65 te some debug me │ │ │ -00000f60: 7373 6167 6573 0a0a 3d69 7465 6d20 423c ssages..=item B< │ │ │ -00000f70: 2d2d 6c6f 6746 696c 653e 2c20 423c 2d6c --logFile>, B<-l │ │ │ -00000f80: 3e0a 0a20 2020 206c 6f67 4669 6c65 2066 >.. logFile f │ │ │ -00000f90: 6f72 2074 6869 7320 7072 6f63 6573 732e or this process. │ │ │ -00000fa0: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is │ │ │ -00000fb0: 5354 444f 5554 2e0a 0a3d 6974 656d 2042 STDOUT...=item B │ │ │ -00000fc0: 3c2d 2d73 7570 7072 6573 7354 696d 653e <--suppressTime> │ │ │ -00000fd0: 0a0a 2020 2020 7375 7070 7265 7373 206f .. suppress o │ │ │ -00000fe0: 7574 7075 7420 6f66 2074 696d 6520 696e utput of time in │ │ │ -00000ff0: 206c 6f67 6669 6c65 0a0a 3d69 7465 6d20 logfile..=item │ │ │ -00001000: 423c 2d2d 6d61 7846 696c 656c 656e 3e2c B<--maxFilelen>, │ │ │ -00001010: 2042 3c2d 6d3e 0a0a 2020 2020 6d61 7869 B<-m>.. maxi │ │ │ -00001020: 6d61 6c20 6c65 6e67 7468 206f 6620 6c6f mal length of lo │ │ │ -00001030: 6720 6669 6c65 2c20 6465 6661 756c 7420 g file, default │ │ │ -00001040: 3d20 3165 360a 0a3d 6974 656d 2042 3c2d = 1e6..=item B<- │ │ │ -00001050: 2d6e 6f4f 664f 6c64 4669 6c65 733e 2c20 -noOfOldFiles>, │ │ │ -00001060: 423c 2d6e 3e0a 0a20 2020 206e 756d 6265 B<-n>.. numbe │ │ │ -00001070: 7220 6f66 206f 6c64 206c 6f67 2066 696c r of old log fil │ │ │ -00001080: 6573 2c20 6465 6661 756c 7420 3d20 350a es, default = 5. │ │ │ -00001090: 0a3d 6974 656d 2042 3c2d 2d73 6176 654c .=item B<--saveL │ │ │ -000010a0: 6f67 733e 0a0a 2020 2020 7361 7665 206c ogs>.. save l │ │ │ -000010b0: 6f67 2066 696c 6573 2077 6974 6820 6461 og files with da │ │ │ -000010c0: 7465 2061 6e64 2074 696d 6520 696e 7374 te and time inst │ │ │ -000010d0: 6561 6420 6f66 2064 656c 6574 696e 6720 ead of deleting │ │ │ -000010e0: 7468 650a 2020 2020 6f6c 6420 2877 6974 the. old (wit │ │ │ -000010f0: 6820 5b2d 6e6f 4f66 4f6c 6446 696c 6573 h [-noOfOldFiles │ │ │ -00001100: 5d29 0a0a 3d69 7465 6d20 423c 2d2d 636f ])..=item B<--co │ │ │ -00001110: 6d70 7265 7373 5769 7468 3e0a 0a20 2020 mpressWith>.. │ │ │ -00001120: 2063 6f6d 7072 6573 7320 7361 7665 6420 compress saved │ │ │ -00001130: 6c6f 6720 6669 6c65 7320 2865 2e67 2e20 log files (e.g. │ │ │ -00001140: 7769 7468 2027 677a 6970 202d 3927 290a with 'gzip -9'). │ │ │ -00001150: 2020 2020 6465 6661 756c 7420 6973 2027 default is ' │ │ │ -00001160: 627a 6970 3227 0a20 2020 2054 6869 7320 bzip2'. This │ │ │ -00001170: 7061 7261 6d65 7465 7220 6973 2070 6172 parameter is par │ │ │ -00001180: 7365 6420 6c69 6b65 2061 206c 696e 6520 sed like a line │ │ │ -00001190: 696e 2074 6865 2063 6f6e 6669 6775 7261 in the configura │ │ │ -000011a0: 7469 6f6e 0a20 2020 2066 696c 6520 616e tion. file an │ │ │ -000011b0: 6420 6e6f 726d 616c 6c79 2068 6173 2074 d normally has t │ │ │ -000011c0: 6f20 6265 2071 756f 7465 642e 0a0a 3d69 o be quoted...=i │ │ │ -000011d0: 7465 6d20 423c 2d2d 7374 6f72 6542 6163 tem B<--storeBac │ │ │ -000011e0: 6b75 703e 0a0a 2020 2020 2020 7275 6e20 kup>.. run │ │ │ -000011f0: 7374 6f72 6542 6163 6b75 702e 706c 0a20 storeBackup.pl. │ │ │ -00001200: 2020 2020 2075 7365 2074 6869 7320 7061 use this pa │ │ │ -00001210: 7261 6d65 7465 7220 6173 206f 7074 696f rameter as optio │ │ │ -00001220: 6e73 2066 6f72 2073 746f 7265 4261 636b ns for storeBack │ │ │ -00001230: 7570 2e70 6c0a 2020 2020 2020 5468 6973 up.pl. This │ │ │ -00001240: 2070 6172 616d 6574 6572 2069 7320 7061 parameter is pa │ │ │ -00001250: 7273 6564 206c 696b 6520 7468 6520 6c69 rsed like the li │ │ │ -00001260: 6e65 2069 6e20 7468 650a 2020 2020 2020 ne in the. │ │ │ -00001270: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi │ │ │ -00001280: 6c65 2061 6e64 206e 6f72 6d61 6c6c 7920 le and normally │ │ │ -00001290: 6861 7320 746f 2062 6520 7175 6f74 6564 has to be quoted │ │ │ -000012a0: 2c0a 2020 2020 2020 6567 2e20 272d 6620 ,. eg. '-f │ │ │ -000012b0: 7374 6275 2e63 6f6e 6627 0a0a 3d69 7465 stbu.conf'..=ite │ │ │ -000012c0: 6d20 423c 2d2d 7374 6f72 6542 6163 6b75 m B<--storeBacku │ │ │ -000012d0: 7055 7064 6174 6542 6163 6b75 703e 0a0a pUpdateBackup>.. │ │ │ -000012e0: 2020 2020 2020 7275 6e20 7374 6f72 6542 run storeB │ │ │ -000012f0: 6163 6b75 7055 7064 6174 6542 6163 6b75 ackupUpdateBacku │ │ │ -00001300: 702e 706c 0a20 2020 2020 2075 7365 2074 p.pl. use t │ │ │ -00001310: 6869 7320 7061 7261 6d65 7465 7220 6173 his parameter as │ │ │ -00001320: 206f 7074 696f 6e73 2066 6f72 2073 746f options for sto │ │ │ -00001330: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa │ │ │ -00001340: 636b 7570 2e70 6c0a 2020 2020 2020 5468 ckup.pl. Th │ │ │ -00001350: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is │ │ │ -00001360: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the │ │ │ -00001370: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. │ │ │ -00001380: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration │ │ │ -00001390: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall │ │ │ -000013a0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot │ │ │ -000013b0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '- │ │ │ -000013c0: 6220 2f62 6163 6b75 7044 6972 270a 0a3d b /backupDir'..= │ │ │ -000013d0: 6974 656d 2042 3c2d 2d73 746f 7265 4261 item B<--storeBa │ │ │ -000013e0: 636b 7570 4368 6563 6b42 6163 6b75 703e ckupCheckBackup> │ │ │ -000013f0: 0a0a 2020 2020 2020 7275 6e20 7374 6f72 .. run stor │ │ │ -00001400: 6542 6163 6b75 7043 6865 636b 4261 636b eBackupCheckBack │ │ │ -00001410: 7570 2e70 6c0a 2020 2020 2020 7573 6520 up.pl. use │ │ │ -00001420: 7468 6973 2070 6172 616d 6574 6572 2061 this parameter a │ │ │ -00001430: 7320 6f70 7469 6f6e 7320 666f 7220 7374 s options for st │ │ │ -00001440: 6f72 6542 6163 6b75 7043 6865 636b 4261 oreBackupCheckBa │ │ │ -00001450: 636b 7570 2e70 6c0a 2020 2020 2020 5468 ckup.pl. Th │ │ │ -00001460: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is │ │ │ -00001470: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the │ │ │ -00001480: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. │ │ │ -00001490: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration │ │ │ -000014a0: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall │ │ │ -000014b0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot │ │ │ -000014c0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '- │ │ │ -000014d0: 6320 2f62 6163 6b75 7044 6972 270a 0a3d c /backupDir'..= │ │ │ -000014e0: 6974 656d 2042 3c2d 2d73 746f 7265 4261 item B<--storeBa │ │ │ -000014f0: 636b 7570 4368 6563 6b53 6f75 7263 653e ckupCheckSource> │ │ │ -00001500: 0a0a 2020 2020 2020 7275 6e20 7374 6f72 .. run stor │ │ │ -00001510: 6542 6163 6b75 7043 6865 636b 536f 7572 eBackupCheckSour │ │ │ -00001520: 6365 2e70 6c0a 2020 2020 2020 7573 6520 ce.pl. use │ │ │ -00001530: 7468 6973 2070 6172 616d 6574 6572 2061 this parameter a │ │ │ -00001540: 7320 6f70 7469 6f6e 7320 666f 7220 7374 s options for st │ │ │ -00001550: 6f72 6542 6163 6b75 7043 6865 636b 536f oreBackupCheckSo │ │ │ -00001560: 7572 6365 2e70 6c0a 2020 2020 2020 5468 urce.pl. Th │ │ │ -00001570: 6973 2070 6172 616d 6574 6572 2069 7320 is parameter is │ │ │ -00001580: 7061 7273 6564 206c 696b 6520 7468 6520 parsed like the │ │ │ -00001590: 6c69 6e65 2069 6e20 7468 650a 2020 2020 line in the. │ │ │ -000015a0: 2020 636f 6e66 6967 7572 6174 696f 6e20 configuration │ │ │ -000015b0: 6669 6c65 2061 6e64 206e 6f72 6d61 6c6c file and normall │ │ │ -000015c0: 7920 6861 7320 746f 2062 6520 7175 6f74 y has to be quot │ │ │ -000015d0: 6564 2c0a 2020 2020 2020 6567 2e20 272d ed,. eg. '- │ │ │ -000015e0: 7320 2f68 6f6d 652f 626f 6220 2d62 202f s /home/bob -b / │ │ │ -000015f0: 6261 636b 7570 4469 7227 0a0a 3d69 7465 backupDir'..=ite │ │ │ -00001600: 6d20 423c 2d2d 7374 6f72 6542 6163 6b75 m B<--storeBacku │ │ │ -00001610: 7044 656c 3e0a 0a20 2020 2020 2072 756e pDel>.. run │ │ │ -00001620: 2073 746f 7265 4261 636b 7570 4465 6c2e storeBackupDel. │ │ │ -00001630: 706c 0a20 2020 2020 2075 7365 2074 6869 pl. use thi │ │ │ -00001640: 7320 7061 7261 6d65 7465 7220 6173 206f s parameter as o │ │ │ -00001650: 7074 696f 6e73 2066 6f72 2073 746f 7265 ptions for store │ │ │ -00001660: 4261 636b 7570 4465 6c2e 706c 0a20 2020 BackupDel.pl. │ │ │ -00001670: 2020 2054 6869 7320 7061 7261 6d65 7465 This paramete │ │ │ -00001680: 7220 6973 2070 6172 7365 6420 6c69 6b65 r is parsed like │ │ │ -00001690: 2074 6865 206c 696e 6520 696e 2074 6865 the line in the │ │ │ -000016a0: 0a20 2020 2020 2063 6f6e 6669 6775 7261 . configura │ │ │ -000016b0: 7469 6f6e 2066 696c 6520 616e 6420 6e6f tion file and no │ │ │ -000016c0: 726d 616c 6c79 2068 6173 2074 6f20 6265 rmally has to be │ │ │ -000016d0: 2071 756f 7465 642c 0a20 2020 2020 2065 quoted,. e │ │ │ -000016e0: 672e 2027 2d66 2073 7462 752e 636f 6e66 g. '-f stbu.conf │ │ │ -000016f0: 270a 0a3d 6974 656d 2042 3c2d 2d70 7269 '..=item B<--pri │ │ │ -00001700: 6e74 416e 6453 746f 703e 2c20 423c 2d70 ntAndStop>, B<-p │ │ │ -00001710: 3e0a 0a20 2020 2020 2070 7269 6e74 206f >.. print o │ │ │ -00001720: 7074 696f 6e73 2061 6e64 2073 746f 7020 ptions and stop │ │ │ -00001730: 7072 6f63 6573 7369 6e67 0a0a 3d69 7465 processing..=ite │ │ │ -00001740: 6d20 423c 2d2d 6b69 6c6c 5469 6d65 3e20 m B<--killTime> │ │ │ -00001750: 423c 2d6b 3e0a 0a20 2020 2074 696d 6520 B<-k>.. time │ │ │ -00001760: 756e 7469 6c20 616e 7920 6f66 2074 6865 until any of the │ │ │ -00001770: 2070 726f 6772 616d 7320 7374 6172 7465 programs starte │ │ │ -00001780: 6420 7769 6c6c 2062 6520 6b69 6c6c 6564 d will be killed │ │ │ -00001790: 2e0a 2020 2020 6465 6661 756c 7420 6973 .. default is │ │ │ -000017a0: 2033 3635 2064 6179 732e 0a20 2020 2074 365 days.. t │ │ │ -000017b0: 6865 2074 696d 6520 7261 6e67 6520 6861 he time range ha │ │ │ -000017c0: 7320 746f 2062 6520 7370 6563 6966 6965 s to be specifie │ │ │ -000017d0: 6420 696e 2066 6f72 6d61 7420 2764 686d d in format 'dhm │ │ │ -000017e0: 7327 2c20 652e 672e 0a20 2020 2031 3064 s', e.g.. 10d │ │ │ -000017f0: 3468 206d 6561 6e73 2031 3020 6461 7973 4h means 10 days │ │ │ -00001800: 2061 6e64 2034 2068 6f75 7273 0a0a 3d69 and 4 hours..=i │ │ │ -00001810: 7465 6d20 423c 2d2d 746d 7064 6972 3e2c tem B<--tmpdir>, │ │ │ -00001820: 2042 3c2d 543e 0a0a 2020 2020 6469 7265 B<-T>.. dire │ │ │ -00001830: 6374 6f72 7920 666f 7220 7465 6d70 6f72 ctory for tempor │ │ │ -00001840: 6172 7920 6669 6c65 732c 2064 6566 6175 ary files, defau │ │ │ -00001850: 6c74 2069 7320 3c2f 746d 703e 0a0a 3d69 lt is ..=i │ │ │ -00001860: 7465 6d20 463c 6d6f 756e 7450 6f69 6e74 tem F.. List of │ │ │ -00001880: 6d6f 756e 7420 706f 696e 7473 206e 6565 mount points nee │ │ │ -00001890: 6465 6420 746f 2070 6572 666f 726d 2074 ded to perform t │ │ │ -000018a0: 6865 2062 6163 6b75 702e 0a20 2020 2054 he backup.. T │ │ │ -000018b0: 6869 7320 6d75 7374 2062 6520 6120 6c69 his must be a li │ │ │ -000018c0: 7374 206f 6620 7061 7468 7320 7768 6963 st of paths whic │ │ │ -000018d0: 6820 6861 7665 2074 6f20 6265 0a20 2020 h have to be. │ │ │ -000018e0: 2064 6566 696e 6564 2069 6e20 2f65 7463 defined in /etc │ │ │ -000018f0: 2f66 7374 6162 2e0a 2020 2020 2d0a 2020 /fstab.. -. │ │ │ -00001900: 2020 6966 2079 6f75 2061 6464 2027 726f if you add 'ro │ │ │ -00001910: 2c27 206f 7220 2772 772c 2720 746f 2074 ,' or 'rw,' to t │ │ │ -00001920: 6865 2062 6567 696e 6e69 6e67 206f 6620 he beginning of │ │ │ -00001930: 6120 6d6f 756e 740a 2020 2020 706f 696e a mount. poin │ │ │ -00001940: 742c 2079 6f75 2063 616e 206f 7665 7277 t, you can overw │ │ │ -00001950: 7269 7465 2074 6861 7420 6f70 7469 6f6e rite that option │ │ │ -00001960: 2073 6574 2069 6e20 2f65 7463 2f66 7374 set in /etc/fst │ │ │ -00001970: 6162 0a0a 2020 2020 6578 616d 706c 653a ab.. example: │ │ │ -00001980: 0a20 2020 2072 6f2c 2f66 696c 6553 7973 . ro,/fileSys │ │ │ -00001990: 7465 6d54 6f52 6561 640a 2020 2020 2020 temToRead. │ │ │ -000019a0: 2077 696c 6c20 6d6f 756e 7420 2f66 696c will mount /fil │ │ │ -000019b0: 6553 7973 7465 6d54 6f52 6561 6420 7265 eSystemToRead re │ │ │ -000019c0: 6164 206f 6e6c 792c 2065 7665 6e20 6966 ad only, even if │ │ │ -000019d0: 2074 6865 0a20 2020 2020 2020 636f 7272 the. corr │ │ │ -000019e0: 6573 706f 6e64 696e 6720 656e 7472 7920 esponding entry │ │ │ -000019f0: 696e 202f 6574 632f 6673 7461 6220 6d6f in /etc/fstab mo │ │ │ -00001a00: 756e 7473 2069 7320 7265 6164 2f77 7269 unts is read/wri │ │ │ -00001a10: 7465 0a0a 2020 2020 6f6e 6c79 2072 6f6f te.. only roo │ │ │ -00001a20: 7420 6973 2061 6c6c 6f77 6564 2074 6f20 t is allowed to │ │ │ -00001a30: 7573 6520 7468 6973 2066 6561 7475 7265 use this feature │ │ │ -00001a40: 210a 0a3d 6261 636b 0a0a 3d68 6561 6431 !..=back..=head1 │ │ │ -00001a50: 2045 5849 5420 5354 4154 5553 0a0a 3d6f EXIT STATUS..=o │ │ │ -00001a60: 7665 7220 340a 0a3d 6974 656d 2030 202d ver 4..=item 0 - │ │ │ -00001a70: 3e20 6576 6572 7974 6869 6e67 2069 7320 > everything is │ │ │ -00001a80: 6f6b 0a0a 3d69 7465 6d20 3120 2d3e 2065 ok..=item 1 -> e │ │ │ -00001a90: 7272 6f72 2066 726f 6d20 6361 6c6c 6564 rror from called │ │ │ -00001aa0: 2070 726f 6772 616d 0a0a 3d69 7465 6d20 program..=item │ │ │ -00001ab0: 3220 2d3e 2065 7272 6f72 2066 726f 6d20 2 -> error from │ │ │ -00001ac0: 7374 6f72 6542 6163 6b75 704d 6f75 6e74 storeBackupMount │ │ │ -00001ad0: 0a0a 3d69 7465 6d20 3320 2d3e 2065 7272 ..=item 3 -> err │ │ │ -00001ae0: 6f72 2066 726f 6d20 626f 7468 2070 726f or from both pro │ │ │ -00001af0: 6772 616d 730a 0a3d 6261 636b 0a0a 3d68 grams..=back..=h │ │ │ -00001b00: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT.. │ │ │ -00001b10: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20 │ │ │ -00001b20: 3034 2d32 3032 3220 6279 2048 6569 6e7a 04-2022 by Heinz │ │ │ -00001b30: 2d4a 6f73 6566 2043 6c61 6573 2028 7365 -Josef Claes (se │ │ │ -00001b40: 6520 5245 4144 4d45 292e 0a50 7562 6c69 e README)..Publi │ │ │ -00001b50: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G │ │ │ -00001b60: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi │ │ │ -00001b70: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or │ │ │ -00001b80: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio │ │ │ -00001b90: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel │ │ │ -00001ba0: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te │ │ │ -00001bb0: 7874 2824 3029 3b0a 0a6d 7920 2474 656d xt($0);..my $tem │ │ │ -00001bc0: 706c 6174 6543 6f6e 6669 6746 696c 6520 plateConfigFile │ │ │ -00001bd0: 3d20 3c3c 454f 433b 0a23 2063 6f6e 6669 = <new('-name' => │ │ │ -000029f0: 2024 702c 0a09 0927 2d63 6c5f 6f70 7469 $p,...'-cl_opti │ │ │ -00002a00: 6f6e 2720 3d3e 2022 2d2d 2470 222c 0a09 on' => "--$p",.. │ │ │ -00002a10: 0927 2d71 756f 7465 4576 616c 2720 3d3e .'-quoteEval' => │ │ │ -00002a20: 2027 7965 7327 2c0a 0909 272d 6366 5f6b 'yes',...'-cf_k │ │ │ -00002a30: 6579 2720 3d3e 2024 702c 0a09 0927 2d70 ey' => $p,...'-p │ │ │ -00002a40: 6172 616d 2720 3d3e 2027 7965 7327 293b aram' => 'yes'); │ │ │ -00002a50: 0a7d 0a6d 7920 2443 6865 636b 5061 7220 .}.my $CheckPar │ │ │ -00002a60: 3d0a 2020 2020 4368 6563 6b50 6172 616d =. CheckParam │ │ │ -00002a70: 2d3e 6e65 7728 272d 616c 6c6f 774c 6973 ->new('-allowLis │ │ │ -00002a80: 7473 2720 3d3e 2027 7965 7327 2c0a 2020 ts' => 'yes',. │ │ │ -00002a90: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002aa0: 2020 272d 6c69 7374 4d61 7070 696e 6727 '-listMapping' │ │ │ -00002ab0: 203d 3e20 276d 6f75 6e74 506f 696e 7473 => 'mountPoints │ │ │ -00002ac0: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. │ │ │ -00002ad0: 2020 2020 2020 2027 2d63 6f6e 6669 6746 '-configF │ │ │ -00002ae0: 696c 6527 203d 3e20 272d 6627 2c0a 0909 ile' => '-f',... │ │ │ -00002af0: 2020 2020 272d 6c69 7374 2720 3d3e 205b '-list' => [ │ │ │ -00002b00: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00002b10: 6d65 2720 3d3e 2027 6865 6c70 272c 0a09 me' => 'help',.. │ │ │ -00002b20: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00002b30: 696f 6e27 203d 3e20 272d 2d68 656c 7027 ion' => '--help' │ │ │ -00002b40: 292c 0a0a 2020 2020 2020 2020 2020 2020 ),.. │ │ │ -00002b50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002b60: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ -00002b70: 272d 6e61 6d65 2720 3d3e 2027 636f 6e66 '-name' => 'conf │ │ │ -00002b80: 6967 4669 6c65 272c 0a09 0909 0909 2020 igFile',...... │ │ │ -00002b90: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00002ba0: 3e20 272d 6627 2c0a 0909 0909 0920 2020 > '-f',...... │ │ │ -00002bb0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -00002bc0: 272d 2d66 696c 6527 2c0a 0909 0909 0920 '--file',...... │ │ │ -00002bd0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -00002be0: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -00002bf0: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no │ │ │ -00002c00: 7420 5b67 656e 6572 6174 655d 2729 2c0a t [generate]'),. │ │ │ -00002c10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002c20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002c30: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00002c40: 6d65 2720 3d3e 2027 6765 6e65 7261 7465 me' => 'generate │ │ │ -00002c50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00002c60: 5f6f 7074 696f 6e27 203d 3e20 272d 6727 _option' => '-g' │ │ │ -00002c70: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00002c80: 616c 6961 7327 203d 3e20 272d 2d67 656e alias' => '--gen │ │ │ -00002c90: 6572 6174 6527 2c0a 0909 0909 0920 2020 erate',...... │ │ │ -00002ca0: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ -00002cb0: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o │ │ │ -00002cc0: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not │ │ │ -00002cd0: 5b63 6f6e 6669 6746 696c 655d 2729 2c0a [configFile]'),. │ │ │ -00002ce0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00002cf0: 272d 6e61 6d65 2720 3d3e 2027 7365 7276 '-name' => 'serv │ │ │ -00002d00: 6572 7327 2c0a 0909 0909 0920 2020 2027 ers',...... ' │ │ │ -00002d10: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00002d20: 2d73 272c 0a09 0909 0909 2020 2020 272d -s',...... '- │ │ │ -00002d30: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00002d40: 7365 7276 6572 7327 2c0a 0909 0909 0920 servers',...... │ │ │ -00002d50: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -00002d60: 2773 6572 7665 7273 272c 0a09 0909 0909 'servers',...... │ │ │ -00002d70: 2020 2020 272d 6d75 6c74 6970 6c65 2720 '-multiple' │ │ │ -00002d80: 3d3e 2027 7965 7327 2c0a 0909 0909 0920 => 'yes',...... │ │ │ -00002d90: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -00002da0: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -00002db0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00002dc0: 3e20 2764 6562 7567 272c 0a09 0909 0909 > 'debug',...... │ │ │ -00002dd0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00002de0: 203d 3e20 272d 6427 2c0a 0909 0909 0920 => '-d',...... │ │ │ -00002df0: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00002e00: 3e20 272d 2d64 6562 7567 272c 0a09 0909 > '--debug',.... │ │ │ -00002e10: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00002e20: 3d3e 2027 6465 6275 6727 2c0a 0909 0909 => 'debug',..... │ │ │ -00002e30: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ -00002e40: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ -00002e50: 6e6f 275d 292c 0a09 0909 094f 7074 696f no']),.....Optio │ │ │ -00002e60: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00002e70: 3e20 276c 6f67 4669 6c65 272c 0a09 0909 > 'logFile',.... │ │ │ -00002e80: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00002e90: 6e27 203d 3e20 272d 6c27 2c0a 0909 0909 n' => '-l',..... │ │ │ -00002ea0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -00002eb0: 203d 3e20 272d 2d6c 6f67 4669 6c65 272c => '--logFile', │ │ │ -00002ec0: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ -00002ed0: 6579 2720 3d3e 2027 6c6f 6746 696c 6527 ey' => 'logFile' │ │ │ -00002ee0: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ -00002ef0: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),.. │ │ │ -00002f00: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00002f10: 2d6e 616d 6527 203d 3e20 2773 7570 7072 -name' => 'suppr │ │ │ -00002f20: 6573 7354 696d 6527 2c0a 0909 0909 0920 essTime',...... │ │ │ -00002f30: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00002f40: 3d3e 2027 2d2d 7375 7070 7265 7373 5469 => '--suppressTi │ │ │ -00002f50: 6d65 272c 0a09 0909 0909 2020 2020 272d me',...... '- │ │ │ -00002f60: 6366 5f6b 6579 2720 3d3e 2027 7375 7070 cf_key' => 'supp │ │ │ -00002f70: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',...... │ │ │ -00002f80: 2020 2020 272d 6366 5f6e 6f4f 7074 5365 '-cf_noOptSe │ │ │ -00002f90: 7427 203d 3e20 5b27 7965 7327 2c20 276e t' => ['yes', 'n │ │ │ -00002fa0: 6f27 5d29 2c0a 0909 0909 4f70 7469 6f6e o']),.....Option │ │ │ -00002fb0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00002fc0: 2027 6d61 7846 696c 656c 656e 272c 0a09 'maxFilelen',.. │ │ │ -00002fd0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00002fe0: 696f 6e27 203d 3e20 272d 6d27 2c0a 0909 ion' => '-m',... │ │ │ -00002ff0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00003000: 7327 203d 3e20 272d 2d6d 6178 4669 6c65 s' => '--maxFile │ │ │ -00003010: 6c65 6e27 2c0a 0909 0909 0920 2020 2027 len',...... ' │ │ │ -00003020: 2d63 665f 6b65 7927 203d 3e20 276d 6178 -cf_key' => 'max │ │ │ -00003030: 4669 6c65 6c65 6e27 2c0a 0909 0909 0920 Filelen',...... │ │ │ -00003040: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -00003050: 2031 6536 2c0a 0909 0909 0920 2020 2027 1e6,...... ' │ │ │ -00003060: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\A │ │ │ -00003070: 5b65 5c64 5d2b 5c5a 272c 0a09 0909 0909 [e\d]+\Z',...... │ │ │ -00003080: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00003090: 3e20 225b 6c6f 6746 696c 655d 2229 2c0a > "[logFile]"),. │ │ │ -000030a0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -000030b0: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4f66 '-name' => 'noOf │ │ │ -000030c0: 4f6c 6446 696c 6573 272c 0a09 0909 0909 OldFiles',...... │ │ │ -000030d0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -000030e0: 203d 3e20 272d 6e27 2c0a 0909 0909 0920 => '-n',...... │ │ │ -000030f0: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00003100: 3e20 272d 2d6e 6f4f 664f 6c64 4669 6c65 > '--noOfOldFile │ │ │ -00003110: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ -00003120: 665f 6b65 7927 203d 3e20 276e 6f4f 664f f_key' => 'noOfO │ │ │ -00003130: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... │ │ │ -00003140: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -00003150: 2027 3527 2c0a 0909 0909 0920 2020 2027 '5',...... ' │ │ │ -00003160: 2d70 6174 7465 726e 2720 3d3e 2027 5c41 -pattern' => '\A │ │ │ -00003170: 5c64 2b5c 5a27 2c0a 0909 0909 0920 2020 \d+\Z',...... │ │ │ -00003180: 2027 2d6f 6e6c 795f 6966 2720 3d3e 225b '-only_if' =>"[ │ │ │ -00003190: 6c6f 6746 696c 655d 2229 2c0a 2020 2020 logFile]"),. │ │ │ -000031a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000031b0: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ -000031c0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -000031d0: 3d3e 2027 7361 7665 4c6f 6773 272c 0a09 => 'saveLogs',.. │ │ │ -000031e0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -000031f0: 696f 6e27 203d 3e20 272d 2d73 6176 654c ion' => '--saveL │ │ │ -00003200: 6f67 7327 2c0a 0909 0909 0920 2020 2027 ogs',...... ' │ │ │ -00003210: 2d63 665f 6b65 7927 203d 3e20 2773 6176 -cf_key' => 'sav │ │ │ -00003220: 654c 6f67 7327 2c0a 0909 0909 0920 2020 eLogs',...... │ │ │ -00003230: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2022 '-only_if' => " │ │ │ -00003240: 5b6c 6f67 4669 6c65 5d22 2c0a 0909 0909 [logFile]",..... │ │ │ -00003250: 0920 2020 2027 2d63 665f 6e6f 4f70 7453 . '-cf_noOptS │ │ │ -00003260: 6574 2720 3d3e 205b 2779 6573 272c 2027 et' => ['yes', ' │ │ │ -00003270: 6e6f 275d 292c 0a20 2020 2020 2020 2020 no']),. │ │ │ -00003280: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003290: 2020 2020 2020 204f 7074 696f 6e2d 3e6e Option->n │ │ │ -000032a0: 6577 2827 2d6e 616d 6527 203d 3e20 2763 ew('-name' => 'c │ │ │ -000032b0: 6f6d 7072 6573 7357 6974 6827 2c0a 0909 ompressWith',... │ │ │ -000032c0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -000032d0: 6f6e 2720 3d3e 2027 2d2d 636f 6d70 7265 on' => '--compre │ │ │ -000032e0: 7373 5769 7468 272c 0a09 0909 0909 2020 ssWith',...... │ │ │ -000032f0: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -00003300: 636f 6d70 7265 7373 5769 7468 272c 0a09 compressWith',.. │ │ │ -00003310: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -00003320: 7427 203d 3e20 2762 7a69 7032 272c 0a09 t' => 'bzip2',.. │ │ │ -00003330: 0909 0909 2020 2020 272d 7175 6f74 6545 .... '-quoteE │ │ │ -00003340: 7661 6c27 203d 3e20 2779 6573 272c 0a09 val' => 'yes',.. │ │ │ -00003350: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -00003360: 6627 203d 3e22 5b6c 6f67 4669 6c65 5d22 f' =>"[logFile]" │ │ │ -00003370: 292c 0a09 0909 0940 7072 6f67 4f70 7473 ),.....@progOpts │ │ │ -00003380: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00003390: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr │ │ │ -000033a0: 696e 7441 6e64 5374 6f70 272c 0a09 0909 intAndStop',.... │ │ │ -000033b0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -000033c0: 6e27 203d 3e20 272d 7027 2c0a 0909 0909 n' => '-p',..... │ │ │ -000033d0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -000033e0: 203d 3e20 272d 2d70 7269 6e74 416e 6453 => '--printAndS │ │ │ -000033f0: 746f 7027 292c 0a09 0909 094f 7074 696f top'),.....Optio │ │ │ -00003400: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00003410: 3e20 276b 696c 6c54 696d 6527 2c0a 0909 > 'killTime',... │ │ │ -00003420: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00003430: 6f6e 2720 3d3e 2027 2d6b 272c 0a09 0909 on' => '-k',.... │ │ │ -00003440: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -00003450: 2720 3d3e 2027 2d2d 6b69 6c6c 5469 6d65 ' => '--killTime │ │ │ -00003460: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -00003470: 5f6b 6579 2720 3d3e 2027 6b69 6c6c 5469 _key' => 'killTi │ │ │ -00003480: 6d65 272c 0a09 0909 0909 2020 2020 272d me',...... '- │ │ │ -00003490: 6465 6661 756c 7427 203d 3e20 2733 3635 default' => '365 │ │ │ -000034a0: 6427 292c 0a09 0909 094f 7074 696f 6e2d d'),.....Option- │ │ │ -000034b0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -000034c0: 2774 6d70 6469 7227 2c0a 0909 0909 0920 'tmpdir',...... │ │ │ -000034d0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000034e0: 3d3e 2027 2d54 272c 0a09 0909 0909 2020 => '-T',...... │ │ │ -000034f0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00003500: 2027 2d2d 746d 7064 6972 272c 0a09 0909 '--tmpdir',.... │ │ │ -00003510: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00003520: 3d3e 2027 746d 7044 6972 272c 0a09 0909 => 'tmpDir',.... │ │ │ -00003530: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -00003540: 203d 3e20 2474 6d70 6469 7229 2c0a 2020 => $tmpdir),. │ │ │ -00003550: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003560: 2020 2020 2020 2020 2020 2020 2020 4f70 Op │ │ │ -00003570: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00003580: 2720 3d3e 2027 6d6f 756e 7450 6f69 6e74 ' => 'mountPoint │ │ │ -00003590: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ -000035a0: 665f 6b65 7927 203d 3e20 276d 6f75 6e74 f_key' => 'mount │ │ │ -000035b0: 506f 696e 7473 272c 0a09 0909 0909 2020 Points',...... │ │ │ -000035c0: 2020 272d 6d75 6c74 6970 6c65 2720 3d3e '-multiple' => │ │ │ -000035d0: 2027 7965 7327 292c 0a20 2020 2020 2020 'yes'),. │ │ │ -000035e0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000035f0: 2020 2020 2020 2020 204f 7074 696f 6e2d Option- │ │ │ -00003600: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00003610: 276f 7264 6572 4f66 4578 6563 7574 696f 'orderOfExecutio │ │ │ -00003620: 6e27 2c0a 0909 0909 0920 2020 2027 2d63 n',...... '-c │ │ │ -00003630: 665f 6b65 7927 203d 3e20 276f 7264 6572 f_key' => 'order │ │ │ -00003640: 4f66 4578 6563 7574 696f 6e27 2c0a 0909 OfExecution',... │ │ │ -00003650: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -00003660: 2720 3d3e 205c 4070 726f 6773 2c0a 0909 ' => \@progs,... │ │ │ -00003670: 0909 0920 2020 2027 2d6d 756c 7469 706c ... '-multipl │ │ │ -00003680: 6527 203d 3e20 2779 6573 2729 0a09 0909 e' => 'yes').... │ │ │ -00003690: 095d 293b 0a24 4368 6563 6b50 6172 2d3e .]);.$CheckPar-> │ │ │ -000036a0: 6368 6563 6b28 272d 6172 6776 2720 3d3e check('-argv' => │ │ │ -000036b0: 205c 4041 5247 562c 0a20 2020 2020 2020 \@ARGV,. │ │ │ -000036c0: 2020 2020 2020 2020 2020 272d 6865 6c70 '-help │ │ │ -000036d0: 2720 3d3e 2024 4865 6c70 0a20 2020 2020 ' => $Help. │ │ │ -000036e0: 2020 2020 2020 2020 2020 2020 293b 0a0a );.. │ │ │ -000036f0: 6d79 2024 4865 6c70 203d 203c 3c45 4f48 my $Help = <ge │ │ │ -000037a0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ -000037b0: 6865 6c70 2729 3b0a 0a64 6965 2022 2446 help');..die "$F │ │ │ -000037c0: 756c 6c48 656c 7022 2069 6620 2468 656c ullHelp" if $hel │ │ │ -000037d0: 703b 0a0a 6d79 2028 2561 7267 466f 7250 p;..my (%argForP │ │ │ -000037e0: 726f 6773 293b 0a6d 7920 2463 6f6e 6669 rogs);.my $confi │ │ │ -000037f0: 6746 696c 6520 3d20 2443 6865 636b 5061 gFile = $CheckPa │ │ │ -00003800: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00003810: 2827 636f 6e66 6967 4669 6c65 2729 3b0a ('configFile');. │ │ │ -00003820: 6d79 2024 6765 6e65 7261 7465 436f 6e66 my $generateConf │ │ │ -00003830: 6967 4669 6c65 203d 2024 4368 6563 6b50 igFile = $CheckP │ │ │ -00003840: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00003850: 7228 2767 656e 6572 6174 6527 293b 0a6d r('generate');.m │ │ │ -00003860: 7920 2473 6572 7665 7273 203d 2024 4368 y $servers = $Ch │ │ │ -00003870: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00003880: 7468 5061 7228 2773 6572 7665 7273 2729 thPar('servers') │ │ │ -00003890: 3b0a 6d79 2024 6465 6275 6720 3d20 2443 ;.my $debug = $C │ │ │ -000038a0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -000038b0: 6974 686f 7574 5061 7228 2764 6562 7567 ithoutPar('debug │ │ │ -000038c0: 2729 3b0a 6d79 2024 6c6f 6746 696c 6520 ');.my $logFile │ │ │ -000038d0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000038e0: 4f70 7457 6974 6850 6172 2827 6c6f 6746 OptWithPar('logF │ │ │ -000038f0: 696c 6527 293b 0a6d 7920 2477 6974 6854 ile');.my $withT │ │ │ -00003900: 696d 6520 3d20 6e6f 7420 2443 6865 636b ime = not $Check │ │ │ -00003910: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00003920: 7574 5061 7228 2773 7570 7072 6573 7354 utPar('suppressT │ │ │ -00003930: 696d 6527 293b 0a24 7769 7468 5469 6d65 ime');.$withTime │ │ │ -00003940: 203d 2024 7769 7468 5469 6d65 203f 2027 = $withTime ? ' │ │ │ -00003950: 7965 7327 203a 2027 6e6f 273b 0a6d 7920 yes' : 'no';.my │ │ │ -00003960: 246d 6178 4669 6c65 6c65 6e20 3d20 2443 $maxFilelen = $C │ │ │ -00003970: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00003980: 6974 6850 6172 2827 6d61 7846 696c 656c ithPar('maxFilel │ │ │ -00003990: 656e 2729 3b0a 6d79 2024 6e6f 4f66 4f6c en');.my $noOfOl │ │ │ -000039a0: 6446 696c 6573 203d 2024 4368 6563 6b50 dFiles = $CheckP │ │ │ -000039b0: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -000039c0: 7228 276e 6f4f 664f 6c64 4669 6c65 7327 r('noOfOldFiles' │ │ │ -000039d0: 293b 0a6d 7920 2473 6176 654c 6f67 7320 );.my $saveLogs │ │ │ -000039e0: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -000039f0: 4f70 7457 6974 686f 7574 5061 7228 2773 OptWithoutPar('s │ │ │ -00003a00: 6176 654c 6f67 7327 293b 0a6d 7920 2463 aveLogs');.my $c │ │ │ -00003a10: 6f6d 7072 6573 7357 6974 6820 3d20 2443 ompressWith = $C │ │ │ -00003a20: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00003a30: 6974 6850 6172 2827 636f 6d70 7265 7373 ithPar('compress │ │ │ -00003a40: 5769 7468 2729 3b0a 666f 7265 6163 6820 With');.foreach │ │ │ -00003a50: 6d79 2024 6120 2840 7072 6f67 7329 0a7b my $a (@progs).{ │ │ │ -00003a60: 0a20 2020 2024 6172 6746 6f72 5072 6f67 . $argForProg │ │ │ -00003a70: 737b 2461 7d20 3d20 2443 6865 636b 5061 s{$a} = $CheckPa │ │ │ -00003a80: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00003a90: 2824 6129 3b0a 7d0a 6d79 2024 7072 696e ($a);.}.my $prin │ │ │ -00003aa0: 7441 6e64 5374 6f70 203d 2024 4368 6563 tAndStop = $Chec │ │ │ -00003ab0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00003ac0: 6f75 7450 6172 2827 7072 696e 7441 6e64 outPar('printAnd │ │ │ -00003ad0: 5374 6f70 2729 3b0a 6d79 2024 6b74 203d Stop');.my $kt = │ │ │ -00003ae0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003af0: 7074 5769 7468 5061 7228 276b 696c 6c54 ptWithPar('killT │ │ │ -00003b00: 696d 6527 293b 0a24 746d 7064 6972 203d ime');.$tmpdir = │ │ │ -00003b10: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003b20: 7074 5769 7468 5061 7228 2774 6d70 6469 ptWithPar('tmpdi │ │ │ -00003b30: 7227 293b 0a6d 7920 2840 6d6f 756e 7450 r');.my (@mountP │ │ │ -00003b40: 6f69 6e74 7329 203d 2024 4368 6563 6b50 oints) = $CheckP │ │ │ -00003b50: 6172 2d3e 6765 744c 6973 7450 6172 2829 ar->getListPar() │ │ │ -00003b60: 3b0a 6d79 2024 6f72 6465 724f 6645 7865 ;.my $orderOfExe │ │ │ -00003b70: 6375 7469 6f6e 203d 2024 4368 6563 6b50 cution = $CheckP │ │ │ -00003b80: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -00003b90: 7228 276f 7264 6572 4f66 4578 6563 7574 r('orderOfExecut │ │ │ -00003ba0: 696f 6e27 293b 0a0a 6966 2028 2467 656e ion');..if ($gen │ │ │ -00003bb0: 6572 6174 6543 6f6e 6669 6746 696c 6529 erateConfigFile) │ │ │ -00003bc0: 0a7b 0a20 2020 206d 7920 2461 6e73 7765 .{. my $answe │ │ │ -00003bd0: 7220 3d20 2779 6573 273b 0a20 2020 2069 r = 'yes';. i │ │ │ -00003be0: 6620 282d 6520 2467 656e 6572 6174 6543 f (-e $generateC │ │ │ -00003bf0: 6f6e 6669 6746 696c 6529 0a20 2020 207b onfigFile). { │ │ │ -00003c00: 0a09 646f 0a09 7b0a 0920 2020 2070 7269 ..do..{.. pri │ │ │ -00003c10: 6e74 2022 3c24 6765 6e65 7261 7465 436f nt "<$generateCo │ │ │ -00003c20: 6e66 6967 4669 6c65 3e20 616c 7265 6164 nfigFile> alread │ │ │ -00003c30: 7920 6578 6973 7473 2e20 4f76 6572 7772 y exists. Overwr │ │ │ -00003c40: 6974 653f 5c6e 222c 0a09 2020 2020 2279 ite?\n",.. "y │ │ │ -00003c50: 6573 202f 206e 6f20 2d3e 2022 3b0a 0920 es / no -> ";.. │ │ │ -00003c60: 2020 2024 616e 7377 6572 203d 203c 5354 $answer = ;.. chomp │ │ │ -00003c80: 2024 616e 7377 6572 3b0a 097d 2077 6869 $answer;..} whi │ │ │ -00003c90: 6c65 2028 2461 6e73 7765 7220 6e65 2027 le ($answer ne ' │ │ │ -00003ca0: 7965 7327 2061 6e64 2024 616e 7377 6572 yes' and $answer │ │ │ -00003cb0: 206e 6520 276e 6f27 293b 0a20 2020 207d ne 'no');. } │ │ │ -00003cc0: 0a20 2020 2065 7869 7420 3020 6966 2024 . exit 0 if $ │ │ │ -00003cd0: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';. │ │ │ -00003ce0: 0a20 2020 206c 6f63 616c 202a 4649 4c45 . local *FILE │ │ │ -00003cf0: 3b0a 2020 2020 6f70 656e 2846 494c 452c ;. open(FILE, │ │ │ -00003d00: 2022 3e20 2467 656e 6572 6174 6543 6f6e "> $generateCon │ │ │ -00003d10: 6669 6746 696c 6522 2920 6f72 0a09 6469 figFile") or..di │ │ │ -00003d20: 6520 2263 6f75 6c64 206e 6f74 2077 7269 e "could not wri │ │ │ -00003d30: 7465 2074 6f20 3c24 6765 6e65 7261 7465 te to <$generate │ │ │ -00003d40: 436f 6e66 6967 4669 6c65 3e22 3b0a 2020 ConfigFile>";. │ │ │ -00003d50: 2020 7072 696e 7420 4649 4c45 2024 7465 print FILE $te │ │ │ -00003d60: 6d70 6c61 7465 436f 6e66 6967 4669 6c65 mplateConfigFile │ │ │ -00003d70: 3b0a 2020 2020 636c 6f73 6528 4649 4c45 ;. close(FILE │ │ │ -00003d80: 293b 0a20 2020 2065 7869 7420 303b 0a7d );. exit 0;.} │ │ │ -00003d90: 0a0a 0a0a 2320 616e 616c 7973 6520 7061 ....# analyse pa │ │ │ -00003da0: 7261 6d65 7465 7220 6c69 7374 2066 6f72 rameter list for │ │ │ -00003db0: 2065 7874 6572 6e61 6c20 7072 6f67 7261 external progra │ │ │ -00003dc0: 6d73 0a6d 7920 2840 6f70 744f 7264 6572 ms.my (@optOrder │ │ │ -00003dd0: 2920 3d20 2829 3b0a 6966 2028 2463 6f6e ) = ();.if ($con │ │ │ -00003de0: 6669 6746 696c 6529 0a7b 0a20 2020 2028 figFile).{. ( │ │ │ -00003df0: 406f 7074 4f72 6465 7229 203d 2028 4024 @optOrder) = (@$ │ │ │ -00003e00: 6f72 6465 724f 6645 7865 6375 7469 6f6e orderOfExecution │ │ │ -00003e10: 290a 7d0a 656c 7365 0a7b 0a20 2020 2028 ).}.else.{. ( │ │ │ -00003e20: 406f 7074 4f72 6465 7229 203d 2024 4368 @optOrder) = $Ch │ │ │ -00003e30: 6563 6b50 6172 2d3e 6765 744f 7074 4f72 eckPar->getOptOr │ │ │ -00003e40: 6465 7228 293b 0a7d 0a0a 6d79 2028 4070 der();.}..my (@p │ │ │ -00003e50: 726f 6773 546f 5374 6172 7429 203d 2028 rogsToStart) = ( │ │ │ -00003e60: 293b 0a66 6f72 6561 6368 206d 7920 246f );.foreach my $o │ │ │ -00003e70: 2028 406f 7074 4f72 6465 7229 0a7b 0a20 (@optOrder).{. │ │ │ -00003e80: 2020 206e 6578 7420 756e 6c65 7373 2064 next unless d │ │ │ -00003e90: 6566 696e 6564 2024 6172 6746 6f72 5072 efined $argForPr │ │ │ -00003ea0: 6f67 737b 246f 7d3b 0a20 2020 2070 7573 ogs{$o};. pus │ │ │ -00003eb0: 6820 4070 726f 6773 546f 5374 6172 742c h @progsToStart, │ │ │ -00003ec0: 2024 6f3b 0a7d 0a0a 6966 2028 2470 7269 $o;.}..if ($pri │ │ │ -00003ed0: 6e74 416e 6453 746f 7029 0a7b 0a20 2020 ntAndStop).{. │ │ │ -00003ee0: 2024 4368 6563 6b50 6172 2d3e 7072 696e $CheckPar->prin │ │ │ -00003ef0: 7428 293b 0a20 2020 2070 7269 6e74 2022 t();. print " │ │ │ -00003f00: 6f72 6465 7220 6f66 2065 7865 6375 7469 order of executi │ │ │ -00003f10: 6f6e 5c6e 223b 0a20 2020 2066 6f72 6561 on\n";. forea │ │ │ -00003f20: 6368 206d 7920 2470 2028 4070 726f 6773 ch my $p (@progs │ │ │ -00003f30: 546f 5374 6172 7429 0a20 2020 207b 0a09 ToStart). {.. │ │ │ -00003f40: 7072 696e 7420 225c 7424 703a 203c 222c print "\t$p: <", │ │ │ -00003f50: 206a 6f69 6e28 273e 203c 272c 2040 7b24 join('> <', @{$ │ │ │ -00003f60: 6172 6746 6f72 5072 6f67 737b 2470 7d7d argForProgs{$p}} │ │ │ -00003f70: 292c 2022 3e5c 6e22 3b0a 2020 2020 7d0a ), ">\n";. }. │ │ │ -00003f80: 2020 2020 6578 6974 2030 3b0a 7d0a 0a64 exit 0;.}..d │ │ │ -00003f90: 6965 2022 2448 656c 7022 0a20 2020 2075 ie "$Help". u │ │ │ -00003fa0: 6e6c 6573 7320 4070 726f 6773 546f 5374 nless @progsToSt │ │ │ -00003fb0: 6172 743b 0a0a 0a6d 7920 2470 4c6f 6720 art;...my $pLog │ │ │ -00003fc0: 3d20 7072 696e 744c 6f67 2d3e 6e65 7728 = printLog->new( │ │ │ -00003fd0: 272d 746d 7064 6972 2720 3d3e 2024 746d '-tmpdir' => $tm │ │ │ -00003fe0: 7064 6972 293b 0a6d 7920 2466 6966 6f20 pdir);.my $fifo │ │ │ -00003ff0: 3d20 3a3a 756e 6971 4669 6c65 4e61 6d65 = ::uniqFileName │ │ │ -00004000: 2822 2474 6d70 6469 722f 7072 4c6f 672d ("$tmpdir/prLog- │ │ │ -00004010: 2229 3b0a 504f 5349 583a 3a6d 6b66 6966 ");.POSIX::mkfif │ │ │ -00004020: 6f28 2466 6966 6f2c 2030 3630 3029 206f o($fifo, 0600) o │ │ │ -00004030: 720a 2020 2020 2470 4c6f 672d 3e70 7269 r. $pLog->pri │ │ │ -00004040: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00004050: 272c 0a09 0920 272d 7374 7227 203d 3e20 ',... '-str' => │ │ │ -00004060: 5b22 6361 6e6e 6f74 206d 6b6e 6f64 203c ["cannot mknod < │ │ │ -00004070: 2466 6966 6f3e 2066 6f72 2073 746f 7265 $fifo> for store │ │ │ -00004080: 4261 636b 7570 4d6f 756e 742e 706c 225d BackupMount.pl"] │ │ │ -00004090: 2c0a 0909 2027 2d65 7869 7427 203d 3e20 ,... '-exit' => │ │ │ -000040a0: 3229 3b0a 0a6d 7920 2840 6c6f 6741 7267 2);..my (@logArg │ │ │ -000040b0: 7329 203d 2028 293b 0a69 6620 2824 6c6f s) = ();.if ($lo │ │ │ -000040c0: 6746 696c 6529 0a7b 0a23 2020 2020 2840 gFile).{.# (@ │ │ │ -000040d0: 6c6f 6741 7267 7329 203d 2028 272d 2d6f logArgs) = ('--o │ │ │ -000040e0: 7574 2720 3d3e 2024 6c6f 6746 696c 6529 ut' => $logFile) │ │ │ -000040f0: 3b0a 2020 2020 2840 6c6f 6741 7267 7329 ;. (@logArgs) │ │ │ -00004100: 203d 2028 272d 2d6f 7574 2720 3d3e 2024 = ('--out' => $ │ │ │ -00004110: 6c6f 6746 696c 652c 0a09 0920 2027 2d2d logFile,... '-- │ │ │ -00004120: 6d61 7846 696c 656c 656e 2720 3d3e 2024 maxFilelen' => $ │ │ │ -00004130: 6d61 7846 696c 656c 656e 2c0a 0909 2020 maxFilelen,... │ │ │ -00004140: 272d 2d6e 6f4f 664f 6c64 4669 6c65 7327 '--noOfOldFiles' │ │ │ -00004150: 203d 3e20 246e 6f4f 664f 6c64 4669 6c65 => $noOfOldFile │ │ │ -00004160: 732c 0a09 0920 2027 2d2d 636f 6d70 7265 s,... '--compre │ │ │ -00004170: 7373 5769 7468 2720 3d3e 2024 636f 6d70 ssWith' => $comp │ │ │ -00004180: 7265 7373 5769 7468 293b 0a20 2020 2070 ressWith);. p │ │ │ -00004190: 7573 6820 406c 6f67 4172 6773 2c20 272d ush @logArgs, '- │ │ │ -000041a0: 2d73 6176 654c 6f67 7327 0969 6620 2473 -saveLogs'.if $s │ │ │ -000041b0: 6176 654c 6f67 733b 0a7d 0a6d 7920 246c aveLogs;.}.my $l │ │ │ -000041c0: 6f67 4420 3d20 666f 726b 5072 6f63 2d3e ogD = forkProc-> │ │ │ -000041d0: 6e65 7728 272d 6578 6563 2720 3d3e 2022 new('-exec' => " │ │ │ -000041e0: 2472 6571 2f73 7462 754c 6f67 2e70 6c22 $req/stbuLog.pl" │ │ │ -000041f0: 2c0a 0909 0920 272d 7061 7261 6d27 203d ,.... '-param' = │ │ │ -00004200: 3e20 5b27 2d2d 7265 6164 4669 6c65 2720 > ['--readFile' │ │ │ -00004210: 3d3e 2024 6669 666f 2c0a 0909 0909 2020 => $fifo,..... │ │ │ -00004220: 2020 2020 406c 6f67 4172 6773 5d2c 0a09 @logArgs],.. │ │ │ -00004230: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $ │ │ │ -00004240: 704c 6f67 293b 0a0a 6d79 2024 7072 4c6f pLog);..my $prLo │ │ │ -00004250: 673b 0a6d 7920 2824 7072 4c6f 674b 696e g;.my ($prLogKin │ │ │ -00004260: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN', │ │ │ -00004270: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',.. │ │ │ -00004280: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION', │ │ │ -00004290: 0a09 0920 2020 2749 3a49 4e46 4f27 2c0a ... 'I:INFO',. │ │ │ -000042a0: 0909 2020 2027 443a 4445 4255 4727 2c0a .. 'D:DEBUG',. │ │ │ -000042b0: 0909 2020 2027 573a 5741 524e 494e 4727 .. 'W:WARNING' │ │ │ -000042c0: 2c0a 0909 2020 2027 453a 4552 524f 5227 ,... 'E:ERROR' │ │ │ -000042d0: 5d3b 0a0a 6966 2028 246c 6f67 4669 6c65 ];..if ($logFile │ │ │ -000042e0: 290a 7b0a 2020 2020 2470 724c 6f67 203d ).{. $prLog = │ │ │ -000042f0: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new(' │ │ │ -00004300: 2d66 696c 6527 203d 3e20 2466 6966 6f2c -file' => $fifo, │ │ │ -00004310: 0a09 0909 2020 2027 2d6b 696e 6427 203d .... '-kind' = │ │ │ -00004320: 3e20 2470 724c 6f67 4b69 6e64 2c0a 0909 > $prLogKind,... │ │ │ -00004330: 0920 2020 272d 7769 7468 5469 6d65 2720 . '-withTime' │ │ │ -00004340: 3d3e 2024 7769 7468 5469 6d65 2c0a 0909 => $withTime,... │ │ │ -00004350: 0920 2020 272d 746d 7064 6972 2720 3d3e . '-tmpdir' => │ │ │ -00004360: 2024 746d 7064 6972 293b 0a7d 0a65 6c73 $tmpdir);.}.els │ │ │ -00004370: 650a 7b0a 2020 2020 2470 724c 6f67 203d e.{. $prLog = │ │ │ -00004380: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new(' │ │ │ -00004390: 2d6b 696e 6427 203d 3e20 2470 724c 6f67 -kind' => $prLog │ │ │ -000043a0: 4b69 6e64 2c0a 0909 0920 2020 272d 7769 Kind,.... '-wi │ │ │ -000043b0: 7468 5469 6d65 2720 3d3e 2024 7769 7468 thTime' => $with │ │ │ -000043c0: 5469 6d65 2c0a 0909 0920 2020 272d 746d Time,.... '-tm │ │ │ -000043d0: 7064 6972 2720 3d3e 2024 746d 7064 6972 pdir' => $tmpdir │ │ │ -000043e0: 293b 0a7d 0a0a 0a24 7072 4c6f 672d 3e70 );.}...$prLog->p │ │ │ -000043f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00004400: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ -00004410: 7227 203d 3e20 5b22 796f 7520 6d75 7374 r' => ["you must │ │ │ -00004420: 2073 7065 6369 6679 2061 7420 6c65 6173 specify at leas │ │ │ -00004430: 7420 6f6e 6520 7072 6f67 7261 6d20 746f t one program to │ │ │ -00004440: 2065 7865 6375 7465 225d 290a 2020 2020 execute"]). │ │ │ -00004450: 756e 6c65 7373 2040 7072 6f67 7354 6f53 unless @progsToS │ │ │ -00004460: 7461 7274 3b0a 0a0a 2470 724c 6f67 2d3e tart;...$prLog-> │ │ │ -00004470: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00004480: 2027 4127 2c0a 0920 2020 2020 2027 2d73 'A',.. '-s │ │ │ -00004490: 7472 2720 3d3e 205b 2273 7461 7274 696e tr' => ["startin │ │ │ -000044a0: 6720 7374 6f72 6542 6163 6b75 704d 6f75 g storeBackupMou │ │ │ -000044b0: 6e74 2e70 6c22 5d29 3b0a 2470 724c 6f67 nt.pl"]);.$prLog │ │ │ -000044c0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000044d0: 3d3e 2027 5627 2c0a 0920 2020 2020 2027 => 'V',.. ' │ │ │ -000044e0: 2d73 7472 2720 3d3e 205b 2273 746f 7265 -str' => ["store │ │ │ -000044f0: 4261 636b 7570 4d6f 756e 742e 706c 2c20 BackupMount.pl, │ │ │ -00004500: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK │ │ │ -00004510: 5550 5645 5253 494f 4e22 5d29 3b0a 0a23 UPVERSION"]);..# │ │ │ -00004520: 206b 696c 6c54 696d 6520 696e 2073 6563 killTime in sec │ │ │ -00004530: 6f6e 6473 3a0a 6d79 2024 6b69 6c6c 5469 onds:.my $killTi │ │ │ -00004540: 6d65 203d 2026 6461 7465 546f 6f6c 733a me = &dateTools: │ │ │ -00004550: 3a73 7472 546f 5365 6328 272d 7374 7227 :strToSec('-str' │ │ │ -00004560: 203d 3e20 246b 7429 3b0a 756e 6c65 7373 => $kt);.unless │ │ │ -00004570: 2028 6465 6669 6e65 6420 246b 696c 6c54 (defined $killT │ │ │ -00004580: 696d 6529 0a7b 0a20 2020 2024 7072 4c6f ime).{. $prLo │ │ │ -00004590: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000045a0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -000045b0: 7472 2720 3d3e 205b 2277 726f 6e67 2066 tr' => ["wrong f │ │ │ -000045c0: 6f72 6d61 7420 6f66 2070 6172 616d 6574 ormat of paramet │ │ │ -000045d0: 6572 202d 2d6b 696c 6c54 696d 653a 203c er --killTime: < │ │ │ -000045e0: 246b 743e 225d 293b 0a20 2020 2065 7869 $kt>"]);. exi │ │ │ -000045f0: 7420 323b 0a7d 0a0a 230a 2320 6368 6563 t 2;.}..#.# chec │ │ │ -00004600: 6b69 6e67 2069 6620 7265 7175 6972 6564 king if required │ │ │ -00004610: 2070 726f 6772 616d 7320 6172 6520 7468 programs are th │ │ │ -00004620: 6572 650a 230a 6d79 2028 2470 6174 6854 ere.#.my ($pathT │ │ │ -00004630: 6f42 696e 2920 3d20 7370 6c69 7446 696c oBin) = splitFil │ │ │ -00004640: 6544 6972 2824 3029 3b0a 6d79 2028 2570 eDir($0);.my (%p │ │ │ -00004650: 726f 674e 616d 6529 203d 2028 293b 0a66 rogName) = ();.f │ │ │ -00004660: 6f72 6561 6368 206d 7920 2470 2028 4070 oreach my $p (@p │ │ │ -00004670: 726f 6773 546f 5374 6172 7429 0a7b 0a20 rogsToStart).{. │ │ │ -00004680: 2020 2069 6620 282d 6520 2224 7061 7468 if (-e "$path │ │ │ -00004690: 546f 4269 6e2f 2470 2229 0a20 2020 207b ToBin/$p"). { │ │ │ -000046a0: 0a09 2470 726f 674e 616d 657b 2470 7d20 ..$progName{$p} │ │ │ -000046b0: 3d20 2224 7061 7468 546f 4269 6e2f 2470 = "$pathToBin/$p │ │ │ -000046c0: 223b 2020 2020 2320 6465 6269 616e 2073 "; # debian s │ │ │ -000046d0: 7472 6970 7320 272e 706c 270a 2020 2020 trips '.pl'. │ │ │ -000046e0: 7d0a 2020 2020 656c 7369 6620 282d 6520 }. elsif (-e │ │ │ -000046f0: 2224 7061 7468 546f 4269 6e2f 2470 2e70 "$pathToBin/$p.p │ │ │ -00004700: 6c22 290a 2020 2020 7b0a 0924 7072 6f67 l"). {..$prog │ │ │ -00004710: 4e61 6d65 7b24 707d 203d 2022 2470 6174 Name{$p} = "$pat │ │ │ -00004720: 6854 6f42 696e 2f24 702e 706c 223b 0a20 hToBin/$p.pl";. │ │ │ -00004730: 2020 207d 0a20 2020 2065 6c73 650a 2020 }. else. │ │ │ -00004740: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri │ │ │ -00004750: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00004760: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -00004770: 2720 3d3e 205b 2263 616e 6e6f 7420 6669 ' => ["cannot fi │ │ │ -00004780: 6e64 2024 7b70 7d5b 2e70 6c5d 2061 7420 nd ${p}[.pl] at │ │ │ -00004790: 3c24 7061 7468 546f 4269 6e3e 225d 293b <$pathToBin>"]); │ │ │ -000047a0: 0a09 246d 6169 6e3a 3a65 7869 7420 3d20 ..$main::exit = │ │ │ -000047b0: 323b 0a20 2020 207d 0a7d 0a65 7869 7420 2;. }.}.exit │ │ │ -000047c0: 246d 6169 6e3a 3a65 7869 7420 6966 2024 $main::exit if $ │ │ │ -000047d0: 6d61 696e 3a3a 6578 6974 3b0a 0a23 0a23 main::exit;..#.# │ │ │ -000047e0: 2074 6573 7420 7069 6e67 2074 6f20 7365 test ping to se │ │ │ -000047f0: 7276 6572 730a 230a 6966 2028 2473 6572 rvers.#.if ($ser │ │ │ -00004800: 7665 7273 290a 7b0a 2020 2020 666f 7265 vers).{. fore │ │ │ -00004810: 6163 6820 6d79 2024 7365 7276 6572 2028 ach my $server ( │ │ │ -00004820: 4024 7365 7276 6572 7329 0a20 2020 207b @$servers). { │ │ │ -00004830: 0a09 6d79 2024 7020 3d20 4e65 743a 3a50 ..my $p = Net::P │ │ │ -00004840: 696e 672d 3e6e 6577 2827 7463 7027 2c20 ing->new('tcp', │ │ │ -00004850: 3529 3b20 2320 7761 6974 2061 206d 6178 5); # wait a max │ │ │ -00004860: 696d 756d 206f 6620 3520 7365 636f 6e64 imum of 5 second │ │ │ -00004870: 730a 0920 2020 2020 2020 2020 2020 2020 s.. │ │ │ -00004880: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00004890: 2020 2020 2023 2066 6f72 2072 6573 706f # for respo │ │ │ -000048a0: 6e73 650a 096d 7920 2472 6574 203d 2024 nse..my $ret = $ │ │ │ -000048b0: 702d 3e70 696e 6728 2473 6572 7665 7229 p->ping($server) │ │ │ -000048c0: 3b0a 0969 6620 2824 7265 7420 3d3d 2031 ;..if ($ret == 1 │ │ │ -000048d0: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog │ │ │ -000048e0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000048f0: 3d3e 2027 4927 2c0a 0909 0920 2027 2d73 => 'I',.... '-s │ │ │ -00004900: 7472 2720 3d3e 205b 2268 6f73 7420 3c24 tr' => ["host <$ │ │ │ -00004910: 7365 7276 6572 3e20 7265 6163 6861 626c server> reachabl │ │ │ -00004920: 6520 7669 6120 7463 702d 7069 6e67 225d e via tcp-ping"] │ │ │ -00004930: 293b 0a09 7d0a 0965 6c73 650a 097b 0a09 );..}..else..{.. │ │ │ -00004940: 2020 2020 246d 6169 6e3a 3a65 7869 7420 $main::exit │ │ │ -00004950: 7c3d 2032 3b0a 0920 2020 2024 7072 4c6f |= 2;.. $prLo │ │ │ -00004960: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00004970: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ -00004980: 7374 7227 203d 3e0a 0909 0920 205b 2268 str' =>.... ["h │ │ │ -00004990: 6f73 7420 3c24 7365 7276 6572 3e20 6e6f ost <$server> no │ │ │ -000049a0: 7420 7265 6163 6861 626c 6520 7669 6120 t reachable via │ │ │ -000049b0: 7463 702d 7069 6e67 225d 293b 0a09 7d0a tcp-ping"]);..}. │ │ │ -000049c0: 2020 2020 7d0a 2020 2020 2470 724c 6f67 }. $prLog │ │ │ -000049d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000049e0: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ -000049f0: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => ["exiting" │ │ │ -00004a00: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' = │ │ │ -00004a10: 3e20 246d 6169 6e3a 3a65 7869 7429 0a09 > $main::exit).. │ │ │ -00004a20: 6966 2028 246d 6169 6e3a 3a65 7869 7429 if ($main::exit) │ │ │ -00004a30: 3b0a 7d0a 0a23 0a23 2063 6865 636b 696e ;.}..#.# checkin │ │ │ -00004a40: 6720 666f 7220 616c 7265 6164 7920 6d6f g for already mo │ │ │ -00004a50: 756e 7465 6420 6669 6c65 7379 7374 656d unted filesystem │ │ │ -00004a60: 730a 230a 6d79 2028 4061 4d29 203d 2060 s.#.my (@aM) = ` │ │ │ -00004a70: 6d6f 756e 7460 3b0a 6d79 2028 2561 6c72 mount`;.my (%alr │ │ │ -00004a80: 6561 6479 4d6f 756e 7465 642c 2024 6d29 eadyMounted, $m) │ │ │ -00004a90: 3b0a 666f 7265 6163 6820 246d 2028 4061 ;.foreach $m (@a │ │ │ -00004aa0: 4d29 0a7b 0a20 2020 2024 6d20 3d7e 202f M).{. $m =~ / │ │ │ -00004ab0: 282e 2b3f 2920 6f6e 2028 2e2a 2920 7479 (.+?) on (.*) ty │ │ │ -00004ac0: 7065 202f 3b0a 2020 2020 2461 6c72 6561 pe /;. $alrea │ │ │ -00004ad0: 6479 4d6f 756e 7465 647b 2432 7d20 3d20 dyMounted{$2} = │ │ │ -00004ae0: 313b 0a7d 0a0a 230a 2320 6d6f 756e 7469 1;.}..#.# mounti │ │ │ -00004af0: 6e67 2074 6865 2066 696c 6520 7379 7374 ng the file syst │ │ │ -00004b00: 656d 730a 230a 6d79 2028 406d 6f75 6e74 ems.#.my (@mount │ │ │ -00004b10: 6564 2920 3d20 2829 3b0a 6d79 2024 6572 ed) = ();.my $er │ │ │ -00004b20: 726f 7220 3d20 303b 0a66 6f72 6561 6368 ror = 0;.foreach │ │ │ -00004b30: 2024 6d20 2840 6d6f 756e 7450 6f69 6e74 $m (@mountPoint │ │ │ -00004b40: 7329 0a7b 0a20 2020 206d 7920 2840 6f70 s).{. my (@op │ │ │ -00004b50: 7429 203d 2028 293b 0a20 2020 2069 6620 t) = ();. if │ │ │ -00004b60: 2824 6d20 3d7e 202f 5c41 2872 5b6f 775d ($m =~ /\A(r[ow] │ │ │ -00004b70: 292c 282e 2a29 2f29 0a20 2020 207b 0a09 ),(.*)/). {.. │ │ │ -00004b80: 2840 6f70 7429 203d 2028 272d 6f27 2c20 (@opt) = ('-o', │ │ │ -00004b90: 2431 293b 0a09 246d 203d 2024 323b 0a20 $1);..$m = $2;. │ │ │ -00004ba0: 2020 207d 0a0a 2020 2020 6966 2028 6578 }.. if (ex │ │ │ -00004bb0: 6973 7473 2024 616c 7265 6164 794d 6f75 ists $alreadyMou │ │ │ -00004bc0: 6e74 6564 7b24 6d7d 290a 2020 2020 7b0a nted{$m}). {. │ │ │ -00004bd0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00004be0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00004bf0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00004c00: 205b 223c 246d 3e20 6973 2061 6c72 6561 ["<$m> is alrea │ │ │ -00004c10: 6479 206d 6f75 6e74 6564 225d 293b 0a09 dy mounted"]);.. │ │ │ -00004c20: 6e65 7874 3b0a 2020 2020 7d0a 0a20 2020 next;. }.. │ │ │ -00004c30: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -00004c40: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00004c50: 0920 2027 2d73 7472 2720 3d3e 205b 2274 . '-str' => ["t │ │ │ -00004c60: 7279 696e 6720 746f 206d 6f75 6e74 2040 rying to mount @ │ │ │ -00004c70: 6f70 7420 246d 225d 293b 0a20 2020 206d opt $m"]);. m │ │ │ -00004c80: 7920 2466 7020 3d20 666f 726b 5072 6f63 y $fp = forkProc │ │ │ -00004c90: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' => │ │ │ -00004ca0: 2027 6d6f 756e 7427 2c0a 0909 0920 2020 'mount',.... │ │ │ -00004cb0: 272d 7061 7261 6d27 203d 3e20 5b40 6f70 '-param' => [@op │ │ │ -00004cc0: 742c 2024 6d5d 2c0a 0909 0920 2020 272d t, $m],.... '- │ │ │ -00004cd0: 6f75 7452 616e 646f 6d27 203d 3e20 2224 outRandom' => "$ │ │ │ -00004ce0: 746d 7064 6972 2f64 6f53 746f 7265 4261 tmpdir/doStoreBa │ │ │ -00004cf0: 636b 7570 2d66 6f72 6b4d 6f75 6e74 2d22 ckup-forkMount-" │ │ │ -00004d00: 2c0a 0909 0920 2020 272d 7072 4c6f 6727 ,.... '-prLog' │ │ │ -00004d10: 203d 3e20 2470 724c 6f67 293b 0a0a 2020 => $prLog);.. │ │ │ -00004d20: 2020 2320 7761 6974 2066 6f72 2061 206d # wait for a m │ │ │ -00004d30: 6178 696d 756d 206f 6620 3130 2073 6563 aximum of 10 sec │ │ │ -00004d40: 6f6e 6473 0a20 2020 2066 6f72 6561 6368 onds. foreach │ │ │ -00004d50: 2028 312e 2e32 3029 0a20 2020 207b 0a09 (1..20). {.. │ │ │ -00004d60: 7365 6c65 6374 2875 6e64 6566 2c20 756e select(undef, un │ │ │ -00004d70: 6465 662c 2075 6e64 6566 2c20 302e 3529 def, undef, 0.5) │ │ │ -00004d80: 3b0a 0969 6620 2824 6670 2d3e 7072 6f63 ;..if ($fp->proc │ │ │ -00004d90: 6573 7352 756e 7328 2920 3d3d 2030 290a essRuns() == 0). │ │ │ -00004da0: 097b 0a09 2020 2020 6c61 7374 3b0a 097d .{.. last;..} │ │ │ -00004db0: 0a09 656c 7365 0a09 7b0a 0920 2020 2024 ..else..{.. $ │ │ │ -00004dc0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00004dd0: 696e 6427 203d 3e20 2744 272c 0a09 0909 ind' => 'D',.... │ │ │ -00004de0: 2020 272d 7374 7227 203d 3e20 5b22 7761 '-str' => ["wa │ │ │ -00004df0: 6974 696e 6720 666f 7220 6d6f 756e 7420 iting for mount │ │ │ -00004e00: 636f 6d6d 616e 6420 2e2e 2e22 5d29 0a09 command ..."]).. │ │ │ -00004e10: 0969 6620 2464 6562 7567 3b0a 097d 0a20 .if $debug;..}. │ │ │ -00004e20: 2020 207d 0a20 2020 206d 7920 246f 7574 }. my $out │ │ │ -00004e30: 3120 3d20 2466 702d 3e67 6574 5354 444f 1 = $fp->getSTDO │ │ │ -00004e40: 5554 2829 3b0a 2020 2020 6d79 2024 6f75 UT();. my $ou │ │ │ -00004e50: 7432 203d 2024 6670 2d3e 6765 7453 5444 t2 = $fp->getSTD │ │ │ -00004e60: 4552 5228 293b 0a20 2020 2024 6670 2d3e ERR();. $fp-> │ │ │ -00004e70: 4445 5354 524f 5928 293b 0a20 2020 2069 DESTROY();. i │ │ │ -00004e80: 6620 2824 6670 2d3e 6765 7428 272d 7768 f ($fp->get('-wh │ │ │ -00004e90: 6174 2720 3d3e 2027 7374 6174 7573 2729 at' => 'status') │ │ │ -00004ea0: 2021 3d20 3020 2020 2023 206d 6f75 6e74 != 0 # mount │ │ │ -00004eb0: 206e 6f74 2073 7563 6365 7373 6675 6c6c not successfull │ │ │ -00004ec0: 0a09 6f72 2040 246f 7574 3220 3e20 3029 ..or @$out2 > 0) │ │ │ -00004ed0: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e │ │ │ -00004ee0: 7869 7420 7c3d 2032 3b0a 0924 6572 726f xit |= 2;..$erro │ │ │ -00004ef0: 7220 3d20 313b 0a0a 0924 7072 4c6f 672d r = 1;...$prLog- │ │ │ -00004f00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00004f10: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -00004f20: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => ["could │ │ │ -00004f30: 206e 6f74 206d 6f75 6e74 2040 6f70 7420 not mount @opt │ │ │ -00004f40: 246d 225d 293b 0a09 2466 702d 3e73 6967 $m"]);..$fp->sig │ │ │ -00004f50: 6e61 6c28 272d 7661 6c75 6527 203d 3e20 nal('-value' => │ │ │ -00004f60: 3929 3b0a 0a09 2675 6d6f 756e 7428 5c40 9);...&umount(\@ │ │ │ -00004f70: 6d6f 756e 7465 642c 205c 2561 6c72 6561 mounted, \%alrea │ │ │ -00004f80: 6479 4d6f 756e 7465 642c 2024 6465 6275 dyMounted, $debu │ │ │ -00004f90: 6729 3b0a 0a09 2470 724c 6f67 2d3e 7072 g);...$prLog->pr │ │ │ -00004fa0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00004fb0: 4527 2c0a 0909 2020 2020 2020 272d 7374 E',... '-st │ │ │ -00004fc0: 7227 203d 3e20 5b22 6578 6974 696e 6722 r' => ["exiting" │ │ │ -00004fd0: 5d29 3b0a 0967 6f74 6f20 656e 644f 6650 ]);..goto endOfP │ │ │ -00004fe0: 726f 6772 616d 3b0a 2020 2020 7d0a 2020 rogram;. }. │ │ │ -00004ff0: 2020 656c 7365 0a20 2020 207b 0a09 7075 else. {..pu │ │ │ -00005000: 7368 2040 6d6f 756e 7465 642c 2024 6d3b sh @mounted, $m; │ │ │ -00005010: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00005020: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00005030: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00005040: 3e20 5b22 3c6d 6f75 6e74 2024 6d3e 2073 > [" s │ │ │ -00005050: 7563 6365 7373 6675 6c6c 225d 293b 0a20 uccessfull"]);. │ │ │ -00005060: 2020 207d 0a0a 2020 2020 2470 724c 6f67 }.. $prLog │ │ │ -00005070: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00005080: 3d3e 2027 5727 2c0a 0909 2020 272d 7374 => 'W',... '-st │ │ │ -00005090: 7227 203d 3e20 5b22 5354 444f 5554 206f r' => ["STDOUT o │ │ │ -000050a0: 6620 3c6d 6f75 6e74 2024 6d3e 3a22 2c20 f :", │ │ │ -000050b0: 4024 6f75 7431 5d29 0a09 6966 2028 4024 @$out1])..if (@$ │ │ │ -000050c0: 6f75 7431 203e 2030 293b 0a20 2020 2024 out1 > 0);. $ │ │ │ -000050d0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -000050e0: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -000050f0: 2027 2d73 7472 2720 3d3e 205b 2253 5444 '-str' => ["STD │ │ │ -00005100: 4552 5220 6f66 203c 6d6f 756e 7420 246d ERR of :", @$out2])..i │ │ │ -00005120: 6620 2840 246f 7574 3220 3e20 3029 3b0a f (@$out2 > 0);. │ │ │ -00005130: 0a20 2020 2069 6620 2840 246f 7574 3229 . if (@$out2) │ │ │ -00005140: 0a20 2020 207b 0a09 246d 6169 6e3a 3a65 . {..$main::e │ │ │ -00005150: 7869 7420 7c3d 2032 3b0a 0924 7072 4c6f xit |= 2;..$prLo │ │ │ -00005160: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00005170: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ -00005180: 2027 2d73 7472 2720 3d3e 205b 2265 7869 '-str' => ["exi │ │ │ -00005190: 7469 6e67 225d 293b 0a09 676f 746f 2065 ting"]);..goto e │ │ │ -000051a0: 6e64 4f66 5072 6f67 7261 6d3b 0a20 2020 ndOfProgram;. │ │ │ -000051b0: 207d 0a7d 0a69 6620 2824 6572 726f 7220 }.}.if ($error │ │ │ -000051c0: 3d3d 2031 290a 7b0a 2020 2020 2470 724c == 1).{. $prL │ │ │ -000051d0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000051e0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '- │ │ │ -000051f0: 7374 7227 203d 3e20 5b22 6578 6974 696e str' => ["exitin │ │ │ -00005200: 6722 5d29 3b0a 2020 2020 676f 746f 2065 g"]);. goto e │ │ │ -00005210: 6e64 4f66 5072 6f67 7261 6d3b 0a7d 0a0a ndOfProgram;.}.. │ │ │ -00005220: 0a23 0a23 2073 7461 7274 2070 726f 6772 .#.# start progr │ │ │ -00005230: 616d 730a 230a 666f 7265 6163 6820 6d79 ams.#.foreach my │ │ │ -00005240: 2024 7020 2840 7072 6f67 7354 6f53 7461 $p (@progsToSta │ │ │ -00005250: 7274 290a 7b0a 2020 2020 6d79 2024 7072 rt).{. my $pr │ │ │ -00005260: 6f67 203d 2024 7072 6f67 4e61 6d65 7b24 og = $progName{$ │ │ │ -00005270: 707d 3b0a 2020 2020 6d79 2024 7061 7261 p};. my $para │ │ │ -00005280: 6d73 203d 2024 6172 6746 6f72 5072 6f67 ms = $argForProg │ │ │ -00005290: 737b 2470 7d3b 0a0a 2020 2020 2470 724c s{$p};.. $prL │ │ │ -000052a0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000052b0: 2720 3d3e 2027 4927 2c0a 0909 2020 272d ' => 'I',... '- │ │ │ -000052c0: 7374 7227 203d 3e20 5b22 7374 6172 7469 str' => ["starti │ │ │ -000052d0: 6e67 2024 7072 6f67 2040 2470 6172 616d ng $prog @$param │ │ │ -000052e0: 7322 5d29 3b0a 2020 2020 6d79 2024 7374 s"]);. my $st │ │ │ -000052f0: 6275 203d 2066 6f72 6b50 726f 632d 3e6e bu = forkProc->n │ │ │ -00005300: 6577 2827 2d65 7865 6327 203d 3e20 2224 ew('-exec' => "$ │ │ │ -00005310: 7072 6f67 222c 0a09 0909 2020 2020 2027 prog",.... ' │ │ │ -00005320: 2d70 6172 616d 2720 3d3e 205b 4024 7061 -param' => [@$pa │ │ │ -00005330: 7261 6d73 2c0a 0909 0909 0920 2027 2d2d rams,...... '-- │ │ │ -00005340: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -00005350: 2720 3d3e 2024 6669 666f 5d2c 0a09 0909 ' => $fifo],.... │ │ │ -00005360: 2020 2020 2027 2d6f 7574 5261 6e64 6f6d '-outRandom │ │ │ -00005370: 2720 3d3e 2022 2474 6d70 6469 722f 646f ' => "$tmpdir/do │ │ │ -00005380: 5374 6f72 6542 6163 6b75 702d 7374 6275 StoreBackup-stbu │ │ │ -00005390: 2d22 2c0a 0909 0920 2020 2020 272d 7072 -",.... '-pr │ │ │ -000053a0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -000053b0: 0a0a 2020 2020 6966 2028 246b 696c 6c54 .. if ($killT │ │ │ -000053c0: 696d 6529 0a20 2020 207b 0a09 6d79 2024 ime). {..my $ │ │ │ -000053d0: 7265 6164 7920 3d20 303b 0a09 666f 7265 ready = 0;..fore │ │ │ -000053e0: 6163 6820 2831 2e2e 246b 696c 6c54 696d ach (1..$killTim │ │ │ -000053f0: 6529 0a09 7b0a 0920 2020 2073 6c65 6570 e)..{.. sleep │ │ │ -00005400: 2031 3b0a 0920 2020 2069 6620 2824 7374 1;.. if ($st │ │ │ -00005410: 6275 2d3e 7072 6f63 6573 7352 756e 7328 bu->processRuns( │ │ │ -00005420: 2920 3d3d 2030 290a 0920 2020 207b 0a09 ) == 0).. {.. │ │ │ -00005430: 0924 7265 6164 7920 3d20 313b 0a09 096d .$ready = 1;...m │ │ │ -00005440: 7920 2473 7461 7475 733b 0a23 0909 6966 y $status;.#..if │ │ │ -00005450: 2028 2473 7461 7475 7320 3d20 2473 7462 ($status = $stb │ │ │ -00005460: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' = │ │ │ -00005470: 3e20 2773 7461 7475 7327 2929 0a09 0969 > 'status'))...i │ │ │ -00005480: 6620 2824 6d61 696e 3a3a 6578 6974 207c f ($main::exit | │ │ │ -00005490: 3d20 2473 7461 7475 7320 3d20 2473 7462 = $status = $stb │ │ │ -000054a0: 752d 3e67 6574 2827 2d77 6861 7427 203d u->get('-what' = │ │ │ -000054b0: 3e20 2773 7461 7475 7327 2929 0a09 097b > 'status'))...{ │ │ │ -000054c0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -000054d0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -000054e0: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str │ │ │ -000054f0: 2720 3d3e 0a09 0909 0920 205b 223c 2470 ' =>..... ["<$p │ │ │ -00005500: 726f 673e 2065 7869 7465 6420 7769 7468 rog> exited with │ │ │ -00005510: 2073 7461 7475 7320 3c24 7374 6174 7573 status <$status │ │ │ -00005520: 3e22 2c0a 0909 0909 2020 2022 6578 6974 >",..... "exit │ │ │ -00005530: 696e 6722 5d29 3b0a 0909 2020 2020 676f ing"]);... go │ │ │ -00005540: 746f 2065 6e64 4f66 5072 6f67 7261 6d3b to endOfProgram; │ │ │ -00005550: 0a09 097d 0a09 096c 6173 743b 0a09 2020 ...}...last;.. │ │ │ -00005560: 2020 7d0a 097d 0a09 6966 2028 2472 6561 }..}..if ($rea │ │ │ -00005570: 6479 203d 3d20 3029 2020 2020 2020 2320 dy == 0) # │ │ │ -00005580: 6475 7261 7469 6f6e 2074 6f6f 206c 6f6e duration too lon │ │ │ -00005590: 670a 097b 0a09 2020 2020 2470 724c 6f67 g..{.. $prLog │ │ │ -000055a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000055b0: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ -000055c0: 7472 2720 3d3e 205b 2274 696d 6520 6c69 tr' => ["time li │ │ │ -000055d0: 6d69 7420 3c24 6b74 3e20 6578 6365 6564 mit <$kt> exceed │ │ │ -000055e0: 6564 2066 6f72 2022 202e 0a09 0909 0920 ed for " ...... │ │ │ -000055f0: 2020 2020 223c 2470 726f 6720 4024 7061 "<$prog @$pa │ │ │ -00005600: 7261 6d73 3e22 5d29 3b0a 0920 2020 2024 rams>"]);.. $ │ │ │ -00005610: 7374 6275 2d3e 7369 676e 616c 2827 2d76 stbu->signal('-v │ │ │ -00005620: 616c 7565 2720 3d3e 2032 293b 2020 2020 alue' => 2); │ │ │ -00005630: 2023 2053 4947 494e 540a 0920 2020 2024 # SIGINT.. $ │ │ │ -00005640: 6d61 696e 3a3a 6578 6974 207c 3d20 313b main::exit |= 1; │ │ │ -00005650: 0a09 2020 2020 736c 6565 7020 3130 3b20 .. sleep 10; │ │ │ -00005660: 2020 2020 2020 2020 2023 2074 696d 6520 # time │ │ │ -00005670: 666f 7220 7072 6f67 7261 6d20 746f 2066 for program to f │ │ │ -00005680: 696e 6973 680a 0920 2020 2075 6e6c 696e inish.. unlin │ │ │ -00005690: 6b20 2466 6966 6f3b 0a09 2020 2020 2470 k $fifo;.. $p │ │ │ -000056a0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -000056b0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -000056c0: 2027 2d73 7472 2720 3d3e 205b 2274 6572 '-str' => ["ter │ │ │ -000056d0: 6d69 6e61 7469 6e67 2065 7865 6375 7469 minating executi │ │ │ -000056e0: 6f6e 225d 293b 0a09 2020 2020 676f 746f on"]);.. goto │ │ │ -000056f0: 2065 6e64 4f66 5072 6f67 7261 6d3b 0a09 endOfProgram;.. │ │ │ -00005700: 7d0a 2020 2020 7d0a 7d0a 0a65 6e64 4f66 }. }.}..endOf │ │ │ -00005710: 5072 6f67 7261 6d3a 3b0a 0a75 6e6c 696e Program:;..unlin │ │ │ -00005720: 6b20 2466 6966 6f3b 0a0a 2675 6d6f 756e k $fifo;..&umoun │ │ │ -00005730: 7428 5c40 6d6f 756e 7465 642c 205c 2561 t(\@mounted, \%a │ │ │ -00005740: 6c72 6561 6479 4d6f 756e 7465 642c 2024 lreadyMounted, $ │ │ │ -00005750: 6465 6275 6729 3b0a 0a24 7072 4c6f 672d debug);..$prLog- │ │ │ -00005760: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00005770: 3e20 275a 272c 0a09 2020 2020 2020 272d > 'Z',.. '- │ │ │ -00005780: 7374 7227 203d 3e20 5b22 6669 6e69 7368 str' => ["finish │ │ │ -00005790: 6564 2073 746f 7265 4261 636b 7570 4d6f ed storeBackupMo │ │ │ -000057a0: 756e 742e 706c 225d 293b 0a0a 2470 724c unt.pl"]);..$prL │ │ │ -000057b0: 6f67 2d3e 5f5f 7265 616c 6c79 5072 696e og->__reallyPrin │ │ │ -000057c0: 7428 5b27 5f5f 4649 4e49 5348 5f5f 275d t(['__FINISH__'] │ │ │ -000057d0: 290a 2020 2020 6966 2028 246c 6f67 4669 ). if ($logFi │ │ │ -000057e0: 6c65 293b 0a0a 736c 6565 7020 313b 0a0a le);..sleep 1;.. │ │ │ -000057f0: 6b69 6c6c 2031 392c 2024 6c6f 6744 2d3e kill 19, $logD-> │ │ │ -00005800: 6765 7428 272d 7768 6174 2720 3d3e 2027 get('-what' => ' │ │ │ -00005810: 7069 6427 293b 0a0a 6578 6974 2024 6d61 pid');..exit $ma │ │ │ -00005820: 696e 3a3a 6578 6974 3b0a 0a0a 0a0a 2323 in::exit;.....## │ │ │ -00005830: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005840: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005850: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005860: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005870: 2323 2323 0a73 7562 2075 6d6f 756e 740a ####.sub umount. │ │ │ -00005880: 7b0a 2020 2020 6d79 2028 246d 6f75 6e74 {. my ($mount │ │ │ -00005890: 6564 2c20 2461 6c72 6561 6479 4d6f 756e ed, $alreadyMoun │ │ │ -000058a0: 7465 642c 2024 6465 6275 6729 203d 2040 ted, $debug) = @ │ │ │ -000058b0: 5f3b 0a0a 2020 2020 666f 7265 6163 6820 _;.. foreach │ │ │ -000058c0: 246d 2028 7265 7665 7273 6520 4024 6d6f $m (reverse @$mo │ │ │ -000058d0: 756e 7465 6429 0a20 2020 207b 0a09 6966 unted). {..if │ │ │ -000058e0: 2028 6578 6973 7473 2024 616c 7265 6164 (exists $alread │ │ │ -000058f0: 794d 6f75 6e74 6564 7b24 6d7d 290a 097b yMounted{$m})..{ │ │ │ -00005900: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00005910: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005920: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' │ │ │ -00005930: 3d3e 0a09 0909 2020 5b22 646f 206e 6f74 =>.... ["do not │ │ │ -00005940: 2075 6d6f 756e 7420 3c24 6d3e 2c20 7761 umount <$m>, wa │ │ │ -00005950: 7320 616c 7265 6164 7920 6d6f 756e 7465 s already mounte │ │ │ -00005960: 6422 5d29 3b0a 0920 2020 206e 6578 743b d"]);.. next; │ │ │ -00005970: 0a09 7d0a 0924 7072 4c6f 672d 3e70 7269 ..}..$prLog->pri │ │ │ -00005980: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00005990: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -000059a0: 2720 3d3e 205b 2274 7279 696e 6720 746f ' => ["trying to │ │ │ -000059b0: 203c 756d 6f75 6e74 2024 6d3e 225d 293b "]); │ │ │ -000059c0: 0a09 736c 6565 7020 353b 0a09 6d79 2024 ..sleep 5;..my $ │ │ │ -000059d0: 756d 203d 2066 6f72 6b50 726f 632d 3e6e um = forkProc->n │ │ │ -000059e0: 6577 2827 2d65 7865 6327 203d 3e20 2775 ew('-exec' => 'u │ │ │ -000059f0: 6d6f 756e 7427 2c0a 0909 0920 2020 2020 mount',.... │ │ │ -00005a00: 2020 272d 7061 7261 6d27 203d 3e20 5b24 '-param' => [$ │ │ │ -00005a10: 6d5d 2c0a 0909 0920 2020 2020 2020 272d m],.... '- │ │ │ -00005a20: 6f75 7452 616e 646f 6d27 203d 3e0a 0909 outRandom' =>... │ │ │ -00005a30: 0920 2020 2020 2020 2224 746d 7064 6972 . "$tmpdir │ │ │ -00005a40: 2f64 6f53 746f 7265 4261 636b 7570 2d66 /doStoreBackup-f │ │ │ -00005a50: 6f72 6b4d 6f75 6e74 2d22 2c0a 0909 0920 orkMount-",.... │ │ │ -00005a60: 2020 2020 2020 272d 7072 4c6f 6727 203d '-prLog' = │ │ │ -00005a70: 3e20 2470 724c 6f67 293b 0a0a 0923 2077 > $prLog);...# w │ │ │ -00005a80: 6169 7420 666f 7220 6120 6d61 7869 6d75 ait for a maximu │ │ │ -00005a90: 6d20 6f66 2036 3020 7365 636f 6e64 730a m of 60 seconds. │ │ │ -00005aa0: 0966 6f72 6561 6368 2028 312e 2e31 3230 .foreach (1..120 │ │ │ -00005ab0: 290a 097b 0a09 2020 2020 7365 6c65 6374 )..{.. select │ │ │ -00005ac0: 2075 6e64 6566 2c20 756e 6465 662c 2075 undef, undef, u │ │ │ -00005ad0: 6e64 6566 2c20 302e 353b 0a09 2020 2020 ndef, 0.5;.. │ │ │ -00005ae0: 6966 2028 2475 6d2d 3e70 726f 6365 7373 if ($um->process │ │ │ -00005af0: 5275 6e73 2829 203d 3d20 3029 0a09 2020 Runs() == 0).. │ │ │ -00005b00: 2020 7b0a 0909 6c61 7374 3b0a 0920 2020 {...last;.. │ │ │ -00005b10: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00005b20: 2020 7b0a 0909 2470 724c 6f67 2d3e 7072 {...$prLog->pr │ │ │ -00005b30: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005b40: 4427 2c0a 0909 0920 2020 2020 2027 2d73 D',.... '-s │ │ │ -00005b50: 7472 2720 3d3e 205b 2277 6169 7469 6e67 tr' => ["waiting │ │ │ -00005b60: 2066 6f72 2075 6d6f 756e 7420 636f 6d6d for umount comm │ │ │ -00005b70: 616e 6420 2e2e 2e22 5d29 0a09 0920 2020 and ..."])... │ │ │ -00005b80: 2069 6620 2464 6562 7567 3b0a 0920 2020 if $debug;.. │ │ │ -00005b90: 207d 0a09 7d0a 0924 756d 2d3e 4445 5354 }..}..$um->DEST │ │ │ -00005ba0: 524f 5928 293b 0a09 6966 2028 2475 6d2d ROY();..if ($um- │ │ │ -00005bb0: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => │ │ │ -00005bc0: 2773 7461 7475 7327 2920 213d 2030 2920 'status') != 0) │ │ │ -00005bd0: 2020 2023 2075 6d6f 756e 7420 6e6f 7420 # umount not │ │ │ -00005be0: 7375 6363 6573 7366 756c 6c0a 097b 0a09 successfull..{.. │ │ │ -00005bf0: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -00005c00: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00005c10: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -00005c20: 205b 2263 6f75 6c64 206e 6f74 203c 756d ["could not "]);.. │ │ │ -00005c40: 2020 2475 6d2d 3e73 6967 6e61 6c28 272d $um->signal('- │ │ │ -00005c50: 7661 6c75 6527 203d 3e20 3929 3b0a 0920 value' => 9);.. │ │ │ -00005c60: 2020 2024 6d61 696e 3a3a 6578 6974 207c $main::exit | │ │ │ -00005c70: 3d20 323b 0a09 7d0a 0965 6c73 650a 097b = 2;..}..else..{ │ │ │ -00005c80: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00005c90: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00005ca0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' │ │ │ -00005cb0: 3d3e 205b 223c 756d 6f75 6e74 3e20 246d => [" $m │ │ │ -00005cc0: 2073 7563 6365 7373 6675 6c6c 225d 293b successfull"]); │ │ │ -00005cd0: 0a09 7d0a 2020 2020 7d0a 7d0a ..}. }.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 704d 6f75 6e74 0a pMount. │ │ ├── ./usr/bin/storeBackupRecover │ │ │ @@ -1,1704 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;. │ │ │ -00000330: 7573 6520 4663 6e74 6c3b 0a75 7365 2044 use Fcntl;.use D │ │ │ -00000340: 6967 6573 743a 3a4d 4435 2071 7728 6d64 igest::MD5 qw(md │ │ │ -00000350: 355f 6865 7829 3b0a 0a0a 7375 6220 6c69 5_hex);...sub li │ │ │ -00000360: 6250 6174 680a 7b0a 2020 2020 6d79 2024 bPath.{. my $ │ │ │ -00000370: 6669 6c65 203d 2073 6869 6674 3b0a 0a20 file = shift;.. │ │ │ -00000380: 2020 206d 7920 2464 6972 3b0a 0a20 2020 my $dir;.. │ │ │ -00000390: 2023 2046 616c 6c73 2044 6174 6569 2073 # Falls Datei s │ │ │ -000003a0: 656c 6273 7420 6569 6e20 7379 6d6c 696e elbst ein symlin │ │ │ -000003b0: 6b20 6973 742c 2073 6f6c 616e 6765 2066 k ist, solange f │ │ │ -000003c0: 6f6c 6765 6e2c 2062 6973 2061 7566 6765 olgen, bis aufge │ │ │ -000003d0: 6cc3 b673 740a 2020 2020 6966 2028 2d66 l..st. if (-f │ │ │ -000003e0: 2024 6669 6c65 290a 2020 2020 7b0a 0977 $file). {..w │ │ │ -000003f0: 6869 6c65 2028 2d6c 2024 6669 6c65 290a hile (-l $file). │ │ │ -00000400: 097b 0a09 2020 2020 6d79 2024 6c69 6e6b .{.. my $link │ │ │ -00000410: 203d 2072 6561 646c 696e 6b28 2466 696c = readlink($fil │ │ │ -00000420: 6529 3b0a 0a09 2020 2020 6966 2028 7375 e);... if (su │ │ │ -00000430: 6273 7472 2824 6c69 6e6b 2c20 302c 2031 bstr($link, 0, 1 │ │ │ -00000440: 2920 6e65 2022 2f22 290a 0920 2020 207b ) ne "/").. { │ │ │ -00000450: 0a09 0924 6669 6c65 203d 7e20 732f 5b5e ...$file =~ s/[^ │ │ │ -00000460: 5c2f 5d2b 242f 246c 696e 6b2f 3b0a 0920 \/]+$/$link/;.. │ │ │ -00000470: 2020 207d 0a09 2020 2020 656c 7365 0a09 }.. else.. │ │ │ -00000480: 2020 2020 7b0a 0909 2466 696c 6520 3d20 {...$file = │ │ │ -00000490: 246c 696e 6b3b 0a09 2020 2020 7d0a 097d $link;.. }..} │ │ │ -000004a0: 0a0a 0928 2464 6972 2c20 2466 696c 6529 ...($dir, $file) │ │ │ -000004b0: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir │ │ │ -000004c0: 2824 6669 6c65 293b 0a09 2466 696c 6520 ($file);..$file │ │ │ -000004d0: 3d20 222f 2466 696c 6522 3b0a 2020 2020 = "/$file";. │ │ │ -000004e0: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. { │ │ │ -000004f0: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR " │ │ │ -00000500: 3c24 6669 6c65 3e20 646f 6573 206e 6f74 <$file> does not │ │ │ -00000510: 2065 7869 7374 215c 6e22 3b0a 0965 7869 exist!\n";..exi │ │ │ -00000520: 7420 313b 0a20 2020 207d 0a0a 2020 2020 t 1;. }.. │ │ │ -00000530: 2464 6972 202e 3d20 222f 2e2e 2f6c 6962 $dir .= "/../lib │ │ │ -00000540: 223b 2020 2020 2020 2020 2020 2023 2050 "; # P │ │ │ -00000550: 6661 6420 7a75 2064 656e 2042 6962 6c69 fad zu den Bibli │ │ │ -00000560: 6f74 6865 6b65 6e0a 2020 2020 6d79 2024 otheken. my $ │ │ │ -00000570: 6f6c 6444 6972 203d 2060 2f62 696e 2f70 oldDir = `/bin/p │ │ │ -00000580: 7764 603b 0a20 2020 2063 686f 6d70 2024 wd`;. chomp $ │ │ │ -00000590: 6f6c 6444 6972 3b0a 2020 2020 6966 2028 oldDir;. if ( │ │ │ -000005a0: 6368 6469 7220 2464 6972 290a 2020 2020 chdir $dir). │ │ │ -000005b0: 7b0a 096d 7920 2461 6273 4469 7220 3d20 {..my $absDir = │ │ │ -000005c0: 602f 6269 6e2f 7077 6460 3b0a 0963 686f `/bin/pwd`;..cho │ │ │ -000005d0: 7020 2461 6273 4469 723b 0a09 6368 6469 p $absDir;..chdi │ │ │ -000005e0: 7220 246f 6c64 4469 723b 0a0a 0972 6574 r $oldDir;...ret │ │ │ -000005f0: 7572 6e20 2826 7370 6c69 7446 696c 6544 urn (&splitFileD │ │ │ -00000600: 6972 2822 2461 6273 4469 7224 6669 6c65 ir("$absDir$file │ │ │ -00000610: 2229 293b 0a20 2020 207d 0a20 2020 2065 "));. }. e │ │ │ -00000620: 6c73 650a 2020 2020 7b0a 0970 7269 6e74 lse. {..print │ │ │ -00000630: 2053 5444 4552 5220 223c 2464 6972 3e20 STDERR "<$dir> │ │ │ -00000640: 646f 6573 206e 6f74 2065 7869 7374 2c20 does not exist, │ │ │ -00000650: 6578 6974 696e 675c 6e22 3b0a 2020 2020 exiting\n";. │ │ │ -00000660: 7d0a 7d0a 7375 6220 7370 6c69 7446 696c }.}.sub splitFil │ │ │ -00000670: 6544 6972 0a7b 0a20 2020 206d 7920 246e eDir.{. my $n │ │ │ -00000680: 616d 6520 3d20 7368 6966 743b 0a0a 2020 ame = shift;.. │ │ │ -00000690: 2020 7265 7475 726e 2028 272e 272c 2024 return ('.', $ │ │ │ -000006a0: 6e61 6d65 2920 756e 6c65 7373 2028 246e name) unless ($n │ │ │ -000006b0: 616d 6520 3d7e 2f5c 2f2f 293b 2020 2020 ame =~/\//); │ │ │ -000006c0: 2320 6e75 7220 6569 6e66 6163 6865 7220 # nur einfacher │ │ │ -000006d0: 4461 7465 696e 616d 650a 0a20 2020 206d Dateiname.. m │ │ │ -000006e0: 7920 2824 6469 722c 2024 6669 6c65 2920 y ($dir, $file) │ │ │ -000006f0: 3d20 246e 616d 6520 3d7e 202f 5e28 2e2a = $name =~ /^(.* │ │ │ -00000700: 295c 2f28 2e2a 2924 2f73 3b0a 2020 2020 )\/(.*)$/s;. │ │ │ -00000710: 2464 6972 203d 2027 2f27 2069 6620 2824 $dir = '/' if ($ │ │ │ -00000720: 6469 7220 6571 2027 2729 3b20 2020 2020 dir eq ''); │ │ │ -00000730: 2020 2020 2020 2020 2020 2020 2020 2320 # │ │ │ -00000740: 6769 6c74 2c20 6661 6c6c 7320 7a2e 422e gilt, falls z.B. │ │ │ -00000750: 202f 6669 6c65 6e61 6d65 0a20 2020 2072 /filename. r │ │ │ -00000760: 6574 7572 6e20 2824 6469 722c 2024 6669 eturn ($dir, $fi │ │ │ -00000770: 6c65 293b 0a7d 0a6d 7920 2824 7265 712c le);.}.my ($req, │ │ │ -00000780: 2024 7072 6f67 2920 3d20 266c 6962 5061 $prog) = &libPa │ │ │ -00000790: 7468 2824 3029 3b0a 756e 7368 6966 7420 th($0);.unshift │ │ │ -000007a0: 4049 4e43 2c20 2224 7265 7122 3b0a 0a0a @INC, "$req";... │ │ │ -000007b0: 7265 7175 6972 6520 2773 746f 7265 4261 require 'storeBa │ │ │ -000007c0: 636b 7570 476c 6f62 2e70 6c27 3b0a 7265 ckupGlob.pl';.re │ │ │ -000007d0: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara │ │ │ -000007e0: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require │ │ │ -000007f0: 2763 6865 636b 4f62 6a50 6172 2e70 6c27 'checkObjPar.pl' │ │ │ -00000800: 3b0a 7265 7175 6972 6520 2770 724c 6f67 ;.require 'prLog │ │ │ -00000810: 2e70 6c27 3b0a 7265 7175 6972 6520 2776 .pl';.require 'v │ │ │ -00000820: 6572 7369 6f6e 2e70 6c27 3b0a 7265 7175 ersion.pl';.requ │ │ │ -00000830: 6972 6520 2766 696c 6544 6972 2e70 6c27 ire 'fileDir.pl' │ │ │ -00000840: 3b0a 7265 7175 6972 6520 2766 6f72 6b50 ;.require 'forkP │ │ │ -00000850: 726f 632e 706c 273b 0a72 6571 7569 7265 roc.pl';.require │ │ │ -00000860: 2027 7374 6f72 6542 6163 6b75 704c 6962 'storeBackupLib │ │ │ -00000870: 2e70 6c27 3b0a 0a0a 6d79 2024 6d64 3543 .pl';...my $md5C │ │ │ -00000880: 6865 636b 5375 6d56 6572 7369 6f6e 203d heckSumVersion = │ │ │ -00000890: 2027 312e 3127 3b0a 6d79 2024 6e6f 5265 '1.1';.my $noRe │ │ │ -000008a0: 7374 6f72 6550 6172 616c 6c65 6c20 3d20 storeParallel = │ │ │ -000008b0: 3132 3b0a 6d79 2024 6368 6563 6b53 756d 12;.my $checkSum │ │ │ -000008c0: 4669 6c65 203d 2027 2e6d 6435 4368 6563 File = '.md5Chec │ │ │ -000008d0: 6b53 756d 7327 3b0a 6d79 2024 6578 6974 kSums';.my $exit │ │ │ -000008e0: 203d 2030 3b0a 0a6d 7920 2474 6d70 6469 = 0;..my $tmpdi │ │ │ -000008f0: 7220 3d20 272f 746d 7027 3b20 2020 2020 r = '/tmp'; │ │ │ -00000900: 2020 2020 2020 2020 2023 2064 6566 6175 # defau │ │ │ -00000910: 6c74 2076 616c 7565 0a24 746d 7064 6972 lt value.$tmpdir │ │ │ -00000920: 203d 2024 454e 567b 2754 4d50 4449 5227 = $ENV{'TMPDIR' │ │ │ -00000930: 7d20 6966 2064 6566 696e 6564 2024 454e } if defined $EN │ │ │ -00000940: 567b 2754 4d50 4449 5227 7d3b 0a0a 3d68 V{'TMPDIR'};..=h │ │ │ -00000950: 6561 6431 204e 414d 450a 0a73 746f 7265 ead1 NAME..store │ │ │ -00000960: 4261 636b 7570 5265 636f 7665 722e 706c BackupRecover.pl │ │ │ -00000970: 202d 2072 6563 6f76 6572 7320 6669 6c65 - recovers file │ │ │ -00000980: 7320 7361 7665 6420 7769 7468 2073 746f s saved with sto │ │ │ -00000990: 7265 4261 636b 7570 2e70 6c2e 0a0a 3d68 reBackup.pl...=h │ │ │ -000009a0: 6561 6431 2053 594e 4f50 5349 530a 0a09 ead1 SYNOPSIS... │ │ │ -000009b0: 7374 6f72 6542 6163 6b75 7052 6563 6f76 storeBackupRecov │ │ │ -000009c0: 6572 2e70 6c20 2d72 2072 6573 746f 7265 er.pl -r restore │ │ │ -000009d0: 205b 2d62 2072 6f6f 745d 202d 7420 7461 [-b root] -t ta │ │ │ -000009e0: 7267 6574 4469 7220 5b2d 2d66 6c61 745d rgetDir [--flat] │ │ │ -000009f0: 0a09 095b 2d6f 5d20 5b2d 2d74 6d70 6469 ...[-o] [--tmpdi │ │ │ -00000a00: 725d 205b 2d2d 6e6f 4861 7264 4c69 6e6b r] [--noHardLink │ │ │ -00000a10: 735d 205b 2d70 206e 756d 6265 725d 205b s] [-p number] [ │ │ │ -00000a20: 2d76 5d20 5b2d 6e5d 0a09 095b 2d2d 6370 -v] [-n]...[--cp │ │ │ -00000a30: 4973 476e 755d 205b 2d2d 6e6f 476e 7543 IsGnu] [--noGnuC │ │ │ -00000a40: 705d 205b 2d73 5d0a 0a3d 6865 6164 3120 p] [-s]..=head1 │ │ │ -00000a50: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8 │ │ │ -00000a60: 0a0a 3d69 7465 6d20 423c 2d2d 7265 7374 ..=item B<--rest │ │ │ -00000a70: 6f72 6554 7265 653e 2c20 423c 2d72 3e0a oreTree>, B<-r>. │ │ │ -00000a80: 0a20 2020 2066 696c 6520 6f72 2028 7061 . file or (pa │ │ │ -00000a90: 7274 206f 6629 2074 6865 2074 7265 6520 rt of) the tree │ │ │ -00000aa0: 746f 2072 6573 746f 7265 0a20 2020 2077 to restore. w │ │ │ -00000ab0: 6865 6e20 7265 7374 6f72 696e 6720 6120 hen restoring a │ │ │ -00000ac0: 6669 6c65 2c20 7468 6520 6669 6c65 206e file, the file n │ │ │ -00000ad0: 616d 6520 696e 2074 6865 2062 6163 6b75 ame in the backu │ │ │ -00000ae0: 7020 6861 730a 2020 2020 746f 2062 6520 p has. to be │ │ │ -00000af0: 7573 6564 2028 6567 2e20 7769 7468 2063 used (eg. with c │ │ │ -00000b00: 6f6d 7072 6573 7369 6f6e 2073 7566 6669 ompression suffi │ │ │ -00000b10: 7829 0a0a 3d69 7465 6d20 423c 2d2d 6261 x)..=item B<--ba │ │ │ -00000b20: 636b 7570 526f 6f74 3e2c 2042 3c2d 623e ckupRoot>, B<-b> │ │ │ -00000b30: 0a0a 2020 2020 726f 6f74 206f 6620 7374 .. root of st │ │ │ -00000b40: 6f72 6542 6163 6b75 7020 7472 6565 2c20 oreBackup tree, │ │ │ -00000b50: 6e6f 726d 616c 6c79 206e 6f74 206e 6565 normally not nee │ │ │ -00000b60: 6465 640a 0a3d 6974 656d 2042 3c2d 2d74 ded..=item B<--t │ │ │ -00000b70: 6172 6765 7444 6972 3e2c 2042 3c2d 743e argetDir>, B<-t> │ │ │ -00000b80: 0a0a 2020 2020 6469 7265 6374 6f72 7920 .. directory │ │ │ -00000b90: 666f 7220 756e 7061 636b 696e 670a 0a3d for unpacking..= │ │ │ -00000ba0: 6974 656d 2042 3c2d 2d66 6c61 743e 0a0a item B<--flat>.. │ │ │ -00000bb0: 2020 2020 646f 206e 6f74 2063 7265 6174 do not creat │ │ │ -00000bc0: 6520 7375 6264 6972 6563 746f 7269 6573 e subdirectories │ │ │ -00000bd0: 0a0a 3d69 7465 6d20 423c 2d2d 6f76 6572 ..=item B<--over │ │ │ -00000be0: 7772 6974 653e 2c20 423c 2d6f 3e0a 0a20 write>, B<-o>.. │ │ │ -00000bf0: 2020 206f 7665 7277 7269 7465 2065 7869 overwrite exi │ │ │ -00000c00: 7374 696e 6720 6669 6c65 730a 0a3d 6974 sting files..=it │ │ │ -00000c10: 656d 2042 3c2d 2d74 6d70 6469 723e 2c20 em B<--tmpdir>, │ │ │ -00000c20: 423c 2d54 3e0a 0a20 2020 2064 6972 6563 B<-T>.. direc │ │ │ -00000c30: 746f 7279 2066 6f72 2074 656d 706f 7261 tory for tempora │ │ │ -00000c40: 7279 2066 696c 652c 2064 6566 6175 6c74 ry file, default │ │ │ -00000c50: 2069 7320 3c24 746d 7064 6972 3e0a 0a3d is <$tmpdir>..= │ │ │ -00000c60: 6974 656d 2042 3c2d 2d6e 6f48 6172 644c item B<--noHardL │ │ │ -00000c70: 696e 6b73 3e0a 0a20 2020 2064 6f20 6e6f inks>.. do no │ │ │ -00000c80: 7420 7265 636f 6e73 7472 7563 7420 6861 t reconstruct ha │ │ │ -00000c90: 7264 206c 696e 6b73 2069 6e20 7265 7374 rd links in rest │ │ │ -00000ca0: 6f72 6520 7472 6565 0a0a 3d69 7465 6d20 ore tree..=item │ │ │ -00000cb0: 423c 2d2d 6e6f 5265 7374 6f72 6550 6172 B<--noRestorePar │ │ │ -00000cc0: 616c 6c65 6c3e 2c20 423c 2d70 3e0a 0a20 allel>, B<-p>.. │ │ │ -00000cd0: 2020 206d 6178 206e 6f20 6f66 2070 6172 max no of par │ │ │ -00000ce0: 616c 656c 6c20 7072 6f67 7261 6d73 2074 alell programs t │ │ │ -00000cf0: 6f20 756e 7061 636b 2c20 6465 6661 756c o unpack, defaul │ │ │ -00000d00: 7420 6973 2031 320a 2020 2020 7265 6475 t is 12. redu │ │ │ -00000d10: 6365 2074 6869 7320 6e75 6d62 6572 2069 ce this number i │ │ │ -00000d20: 6620 796f 7520 6172 6520 7265 7374 6f72 f you are restor │ │ │ -00000d30: 696e 6720 626c 6f63 6b65 6420 6669 6c65 ing blocked file │ │ │ -00000d40: 730a 2020 2020 616e 6420 7468 6520 7379 s. and the sy │ │ │ -00000d50: 7374 656d 2068 6173 2069 6e73 7566 6669 stem has insuffi │ │ │ -00000d60: 6369 656e 7420 5241 4d0a 0a3d 6974 656d cient RAM..=item │ │ │ -00000d70: 2042 3c2d 2d76 6572 626f 7365 3e2c 2042 B<--verbose>, B │ │ │ -00000d80: 3c2d 763e 0a0a 2020 2020 7072 696e 7420 <-v>.. print │ │ │ -00000d90: 7665 7262 6f73 6520 6d65 7373 6167 6573 verbose messages │ │ │ -00000da0: 0a0a 3d69 7465 6d20 423c 2d2d 6e6f 5265 ..=item B<--noRe │ │ │ -00000db0: 7374 6f72 6564 3e2c 2042 3c2d 6e3e 0a0a stored>, B<-n>.. │ │ │ -00000dc0: 2020 2020 7072 696e 7420 6e75 6d62 6572 print number │ │ │ -00000dd0: 206f 6620 7265 7374 6f72 6564 2064 6972 of restored dir │ │ │ -00000de0: 732c 2068 6172 646c 696e 6b73 2c20 7379 s, hardlinks, sy │ │ │ -00000df0: 6d6c 696e 6b73 2c20 6669 6c65 732c 202e mlinks, files, . │ │ │ -00000e00: 2e2e 0a0a 3d69 7465 6d20 423c 2d2d 6e6f ....=item B<--no │ │ │ -00000e10: 476e 7543 703e 0a0a 2020 2020 6f76 6572 GnuCp>.. over │ │ │ -00000e20: 7772 6974 6520 696e 666f 726d 6174 696f write informatio │ │ │ -00000e30: 6e20 696e 2062 6163 6b75 703a 2079 6f75 n in backup: you │ │ │ -00000e40: 2064 6f20 6e6f 7420 6861 7665 2067 6e75 do not have gnu │ │ │ -00000e50: 6370 0a20 2020 2069 6e73 7461 6c6c 6564 cp. installed │ │ │ -00000e60: 0a20 2020 2028 6f6e 6c79 2072 656c 6576 . (only relev │ │ │ -00000e70: 616e 7420 666f 7220 736f 636b 6574 732c ant for sockets, │ │ │ -00000e80: 2062 6c6f 636b 2061 6e64 2063 6861 7261 block and chara │ │ │ -00000e90: 6374 6572 2064 6576 6963 6573 290a 0a3d cter devices)..= │ │ │ -00000ea0: 6974 656d 2042 3c2d 2d63 7265 6174 6553 item B<--createS │ │ │ -00000eb0: 7061 7273 6546 696c 6573 3e2c 2042 3c2d parseFiles>, B<- │ │ │ -00000ec0: 733e 0a0a 2020 2020 6372 6561 7465 7320 s>.. creates │ │ │ -00000ed0: 7370 6172 7365 2066 696c 6520 6672 6f6d sparse file from │ │ │ -00000ee0: 2062 6c6f 636b 6564 2066 696c 6573 2069 blocked files i │ │ │ -00000ef0: 6620 6675 6c6c 2062 6c6f 636b 6573 0a20 f full blockes. │ │ │ -00000f00: 2020 2061 7265 2066 696c 6c65 6420 7769 are filled wi │ │ │ -00000f10: 7468 207a 6572 6f73 0a0a 3d62 6163 6b0a th zeros..=back. │ │ │ -00000f20: 0a3d 6865 6164 3120 434f 5059 5249 4748 .=head1 COPYRIGH │ │ │ -00000f30: 540a 0a43 6f70 7972 6967 6874 2028 6329 T..Copyright (c) │ │ │ -00000f40: 2032 3030 322d 3230 3232 2062 7920 4865 2002-2022 by He │ │ │ -00000f50: 696e 7a2d 4a6f 7365 6620 436c 6165 7320 inz-Josef Claes │ │ │ -00000f60: 2873 6565 2052 4541 444d 4529 2e0a 5075 (see README)..Pu │ │ │ -00000f70: 626c 6973 6865 6420 756e 6465 7220 7468 blished under th │ │ │ -00000f80: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -00000f90: 626c 6963 204c 6963 656e 7365 2076 3320 blic License v3 │ │ │ -00000fa0: 6f72 2061 6e79 206c 6174 6572 2076 6572 or any later ver │ │ │ -00000fb0: 7369 6f6e 0a0a 3d63 7574 0a0a 6d79 2024 sion..=cut..my $ │ │ │ -00000fc0: 4865 6c70 203d 2026 3a3a 6765 7450 6f64 Help = &::getPod │ │ │ -00000fd0: 3254 6578 7428 2430 293b 0a0a 2670 7269 2Text($0);..&pri │ │ │ -00000fe0: 6e74 5665 7273 696f 6e28 5c40 4152 4756 ntVersion(\@ARGV │ │ │ -00000ff0: 2c20 272d 5627 2c20 272d 2d76 6572 7369 , '-V', '--versi │ │ │ -00001000: 6f6e 2729 3b0a 0a6d 7920 2443 6865 636b on');..my $Check │ │ │ -00001010: 5061 7220 3d0a 2020 2020 4368 6563 6b50 Par =. CheckP │ │ │ -00001020: 6172 616d 2d3e 6e65 7728 272d 616c 6c6f aram->new('-allo │ │ │ -00001030: 774c 6973 7473 2720 3d3e 2027 6e6f 272c wLists' => 'no', │ │ │ -00001040: 0a09 0920 2020 2027 2d6c 6973 7427 203d ... '-list' = │ │ │ -00001050: 3e20 5b4f 7074 696f 6e2d 3e6e 6577 2827 > [Option->new(' │ │ │ -00001060: 2d6e 616d 6527 203d 3e20 2772 6573 746f -name' => 'resto │ │ │ -00001070: 7265 5472 6565 272c 0a09 0909 0909 2020 reTree',...... │ │ │ -00001080: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00001090: 3e20 272d 7227 2c0a 0909 0909 0920 2020 > '-r',...... │ │ │ -000010a0: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -000010b0: 272d 2d72 6573 746f 7265 5472 6565 272c '--restoreTree', │ │ │ -000010c0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -000010d0: 6d27 203d 3e20 2779 6573 272c 0a09 0909 m' => 'yes',.... │ │ │ -000010e0: 0909 2020 2020 272d 6d75 7374 5f62 6527 .. '-must_be' │ │ │ -000010f0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -00001100: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001110: 6d65 2720 3d3e 2027 6261 636b 7570 526f me' => 'backupRo │ │ │ -00001120: 6f74 272c 0a09 0909 0909 2020 2020 272d ot',...... '- │ │ │ -00001130: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001140: 6227 2c0a 0909 0909 0920 2020 2027 2d63 b',...... '-c │ │ │ -00001150: 6c5f 616c 6961 7327 203d 3e20 272d 2d62 l_alias' => '--b │ │ │ -00001160: 6163 6b75 7052 6f6f 7427 2c0a 0909 0909 ackupRoot',..... │ │ │ -00001170: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ -00001180: 3d3e 2027 2729 2c0a 0909 0909 4f70 7469 => ''),.....Opti │ │ │ -00001190: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -000011a0: 3d3e 2027 7461 7267 6574 4469 7227 2c0a => 'targetDir',. │ │ │ -000011b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000011c0: 7469 6f6e 2720 3d3e 2027 2d74 272c 0a09 tion' => '-t',.. │ │ │ -000011d0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -000011e0: 6173 2720 3d3e 2027 2d2d 7461 7267 6574 as' => '--target │ │ │ -000011f0: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... ' │ │ │ -00001200: 2d70 6172 616d 2720 3d3e 2027 7965 7327 -param' => 'yes' │ │ │ -00001210: 2c0a 0909 0909 0920 2020 2027 2d6d 7573 ,...... '-mus │ │ │ -00001220: 745f 6265 2720 3d3e 2027 7965 7327 292c t_be' => 'yes'), │ │ │ -00001230: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001240: 2827 2d6e 616d 6527 203d 3e20 2766 6c61 ('-name' => 'fla │ │ │ -00001250: 7427 2c0a 0909 0909 0920 2020 2027 2d63 t',...... '-c │ │ │ -00001260: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00001270: 666c 6174 2729 2c0a 0909 0909 4f70 7469 flat'),.....Opti │ │ │ -00001280: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001290: 3d3e 2027 6f76 6572 7772 6974 6527 2c0a => 'overwrite',. │ │ │ -000012a0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000012b0: 7469 6f6e 2720 3d3e 2027 2d6f 272c 0a09 tion' => '-o',.. │ │ │ -000012c0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -000012d0: 6173 2720 3d3e 2027 2d2d 6f76 6572 7772 as' => '--overwr │ │ │ -000012e0: 6974 6527 292c 0a09 0909 094f 7074 696f ite'),.....Optio │ │ │ -000012f0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001300: 3e20 2774 6d70 4469 7227 2c0a 0909 0909 > 'tmpDir',..... │ │ │ -00001310: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00001320: 2720 3d3e 2027 2d54 272c 0a09 0909 0909 ' => '-T',...... │ │ │ -00001330: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ -00001340: 3d3e 2027 2d2d 746d 7064 6972 272c 0a09 => '--tmpdir',.. │ │ │ -00001350: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -00001360: 7427 203d 3e20 2474 6d70 6469 7229 2c0a t' => $tmpdir),. │ │ │ -00001370: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00001380: 272d 6e61 6d65 2720 3d3e 2027 6e6f 4861 '-name' => 'noHa │ │ │ -00001390: 7264 4c69 6e6b 7327 2c0a 0909 0909 0920 rdLinks',...... │ │ │ -000013a0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000013b0: 3d3e 2027 2d2d 6e6f 4861 7264 4c69 6e6b => '--noHardLink │ │ │ -000013c0: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option- │ │ │ -000013d0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -000013e0: 276e 6f52 6573 746f 7265 5061 7261 6c6c 'noRestoreParall │ │ │ -000013f0: 656c 272c 0a09 0909 0909 2020 2020 272d el',...... '- │ │ │ -00001400: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001410: 7027 2c0a 0909 0909 0920 2020 2027 2d63 p',...... '-c │ │ │ -00001420: 6c5f 616c 6961 7327 203d 3e20 272d 2d6e l_alias' => '--n │ │ │ -00001430: 6f52 6573 746f 7265 5061 7261 6c6c 656c oRestoreParallel │ │ │ -00001440: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00001450: 7474 6572 6e27 203d 3e20 275c 415c 642b ttern' => '\A\d+ │ │ │ -00001460: 5c5a 272c 0a09 0909 0909 2020 2020 272d \Z',...... '- │ │ │ -00001470: 6465 6661 756c 7427 203d 3e20 246e 6f52 default' => $noR │ │ │ -00001480: 6573 746f 7265 5061 7261 6c6c 656c 292c estoreParallel), │ │ │ -00001490: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -000014a0: 2827 2d6e 616d 6527 203d 3e20 2776 6572 ('-name' => 'ver │ │ │ -000014b0: 626f 7365 272c 0a09 0909 0909 2020 2020 bose',...... │ │ │ -000014c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000014d0: 272d 7627 2c0a 0909 0909 0920 2020 2027 '-v',...... ' │ │ │ -000014e0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -000014f0: 2d76 6572 626f 7365 2729 2c0a 0909 0909 -verbose'),..... │ │ │ -00001500: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001510: 6d65 2720 3d3e 2027 6e6f 5265 7374 6f72 me' => 'noRestor │ │ │ -00001520: 6564 272c 0a09 0909 0909 2020 2020 272d ed',...... '- │ │ │ -00001530: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001540: 6e27 2c0a 0909 0909 0920 2020 2027 2d63 n',...... '-c │ │ │ -00001550: 6c5f 616c 6961 7327 203d 3e20 272d 2d6e l_alias' => '--n │ │ │ -00001560: 6f52 6573 746f 7265 6427 292c 0a09 0909 oRestored'),.... │ │ │ -00001570: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00001580: 616d 6527 203d 3e20 276e 6f47 6e75 4370 ame' => 'noGnuCp │ │ │ -00001590: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -000015a0: 5f6f 7074 696f 6e27 203d 3e20 272d 2d6e _option' => '--n │ │ │ -000015b0: 6f47 6e75 4370 2729 2c0a 0909 0909 4f70 oGnuCp'),.....Op │ │ │ -000015c0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000015d0: 2720 3d3e 2027 6372 6561 7465 5370 6172 ' => 'createSpar │ │ │ -000015e0: 7365 4669 6c65 7327 2c0a 0909 0909 0920 seFiles',...... │ │ │ -000015f0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00001600: 3d3e 2027 2d2d 6372 6561 7465 5370 6172 => '--createSpar │ │ │ -00001610: 7365 4669 6c65 7327 2c0a 0909 0909 0920 seFiles',...... │ │ │ -00001620: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00001630: 3e20 272d 7327 290a 0909 0909 5d0a 0909 > '-s').....]... │ │ │ -00001640: 2020 2020 293b 0a0a 2443 6865 636b 5061 );..$CheckPa │ │ │ -00001650: 722d 3e63 6865 636b 2827 2d61 7267 7627 r->check('-argv' │ │ │ -00001660: 203d 3e20 5c40 4152 4756 2c0a 2020 2020 => \@ARGV,. │ │ │ -00001670: 2020 2020 2020 2020 2020 2020 2027 2d68 '-h │ │ │ -00001680: 656c 7027 203d 3e20 2448 656c 700a 2020 elp' => $Help. │ │ │ -00001690: 2020 2020 2020 2020 2020 2020 2020 2029 ) │ │ │ -000016a0: 3b0a 0a23 2041 7573 7765 7274 756e 6720 ;..# Auswertung │ │ │ -000016b0: 6465 7220 5061 7261 6d65 7465 720a 6d79 der Parameter.my │ │ │ -000016c0: 2024 7265 7374 6f72 6554 7265 6520 3d20 $restoreTree = │ │ │ -000016d0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -000016e0: 7457 6974 6850 6172 2827 7265 7374 6f72 tWithPar('restor │ │ │ -000016f0: 6554 7265 6527 293b 0a6d 7920 2462 6163 eTree');.my $bac │ │ │ -00001700: 6b75 7052 6f6f 7420 3d20 2443 6865 636b kupRoot = $Check │ │ │ -00001710: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00001720: 6172 2827 6261 636b 7570 526f 6f74 2729 ar('backupRoot') │ │ │ -00001730: 3b0a 6d79 2024 7461 7267 6574 4469 7220 ;.my $targetDir │ │ │ -00001740: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001750: 4f70 7457 6974 6850 6172 2827 7461 7267 OptWithPar('targ │ │ │ -00001760: 6574 4469 7227 293b 0a6d 7920 2466 6c61 etDir');.my $fla │ │ │ -00001770: 7420 3d20 2443 6865 636b 5061 722d 3e67 t = $CheckPar->g │ │ │ -00001780: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00001790: 2766 6c61 7427 293b 0a6d 7920 246f 7665 'flat');.my $ove │ │ │ -000017a0: 7277 7269 7465 203d 2024 4368 6563 6b50 rwrite = $CheckP │ │ │ -000017b0: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -000017c0: 7450 6172 2827 6f76 6572 7772 6974 6527 tPar('overwrite' │ │ │ -000017d0: 293b 0a24 746d 7064 6972 203d 2024 4368 );.$tmpdir = $Ch │ │ │ -000017e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000017f0: 7468 5061 7228 2774 6d70 4469 7227 293b thPar('tmpDir'); │ │ │ -00001800: 0a6d 7920 246e 6f48 6172 644c 696e 6b73 .my $noHardLinks │ │ │ -00001810: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00001820: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ -00001830: 6e6f 4861 7264 4c69 6e6b 7327 293b 0a6d noHardLinks');.m │ │ │ -00001840: 7920 246e 6f52 6573 746f 7265 5061 7261 y $noRestorePara │ │ │ -00001850: 6c6c 656c 203d 2024 4368 6563 6b50 6172 llel = $CheckPar │ │ │ -00001860: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00001870: 276e 6f52 6573 746f 7265 5061 7261 6c6c 'noRestoreParall │ │ │ -00001880: 656c 2729 3b0a 6d79 2024 7665 7262 6f73 el');.my $verbos │ │ │ -00001890: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ -000018a0: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -000018b0: 2776 6572 626f 7365 2729 3b0a 6d79 2024 'verbose');.my $ │ │ │ -000018c0: 6e6f 5265 7374 6f72 6564 203d 2024 4368 noRestored = $Ch │ │ │ -000018d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000018e0: 7468 6f75 7450 6172 2827 6e6f 5265 7374 thoutPar('noRest │ │ │ -000018f0: 6f72 6564 2729 3b0a 6d79 2024 6e6f 476e ored');.my $noGn │ │ │ -00001900: 7543 7020 3d20 2443 6865 636b 5061 722d uCp = $CheckPar- │ │ │ -00001910: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00001920: 7228 276e 6f47 6e75 4370 2729 3b0a 6d79 r('noGnuCp');.my │ │ │ -00001930: 2024 6372 6561 7465 5370 6172 7365 4669 $createSparseFi │ │ │ -00001940: 6c65 7320 3d20 2443 6865 636b 5061 722d les = $CheckPar- │ │ │ -00001950: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00001960: 7228 2763 7265 6174 6553 7061 7273 6546 r('createSparseF │ │ │ -00001970: 696c 6573 2729 3b0a 0a0a 6d79 2024 7072 iles');...my $pr │ │ │ -00001980: 4c6f 6720 3d20 7072 696e 744c 6f67 2d3e Log = printLog-> │ │ │ -00001990: 6e65 7728 272d 6b69 6e64 2720 3d3e 205b new('-kind' => [ │ │ │ -000019a0: 2749 3a49 4e46 4f27 2c20 2757 3a57 4152 'I:INFO', 'W:WAR │ │ │ -000019b0: 4e49 4e47 272c 2027 453a 4552 524f 5227 NING', 'E:ERROR' │ │ │ -000019c0: 2c0a 0909 0909 2020 2020 2020 2753 3a53 ,..... 'S:S │ │ │ -000019d0: 5441 5449 5354 4943 272c 2027 443a 4445 TATISTIC', 'D:DE │ │ │ -000019e0: 4255 4727 2c20 2756 3a56 4552 5349 4f4e BUG', 'V:VERSION │ │ │ -000019f0: 275d 2c0a 0909 0920 2027 2d74 6d70 6469 '],.... '-tmpdi │ │ │ -00001a00: 7227 203d 3e20 2474 6d70 6469 7229 3b0a r' => $tmpdir);. │ │ │ -00001a10: 2470 724c 6f67 2d3e 666f 726b 2824 7265 $prLog->fork($re │ │ │ -00001a20: 7129 3b0a 0a24 7072 4c6f 672d 3e70 7269 q);..$prLog->pri │ │ │ -00001a30: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00001a40: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -00001a50: 203d 3e20 5b22 7461 7267 6574 2064 6972 => ["target dir │ │ │ -00001a60: 6563 746f 7279 203c 2474 6172 6765 7444 ectory <$targetD │ │ │ -00001a70: 6972 3e20 646f 6573 206e 6f74 2065 7869 ir> does not exi │ │ │ -00001a80: 7374 225d 2c0a 0920 2020 2020 2027 2d65 st"],.. '-e │ │ │ -00001a90: 7869 7427 203d 3e20 3129 0a20 2020 2075 xit' => 1). u │ │ │ -00001aa0: 6e6c 6573 7320 282d 6420 2474 6172 6765 nless (-d $targe │ │ │ -00001ab0: 7444 6972 293b 0a0a 2470 724c 6f67 2d3e tDir);..$prLog-> │ │ │ -00001ac0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00001ad0: 2027 5627 2c0a 0920 2020 2020 2027 2d73 'V',.. '-s │ │ │ -00001ae0: 7472 2720 3d3e 205b 2273 746f 7265 4261 tr' => ["storeBa │ │ │ -00001af0: 636b 7570 5265 636f 7665 722e 706c 2c20 ckupRecover.pl, │ │ │ -00001b00: 246d 6169 6e3a 3a53 544f 5245 4241 434b $main::STOREBACK │ │ │ -00001b10: 5550 5645 5253 494f 4e22 5d29 0a20 2020 UPVERSION"]). │ │ │ -00001b20: 2069 6620 2476 6572 626f 7365 3b0a 0a65 if $verbose;..e │ │ │ -00001b30: 7661 6c20 2275 7365 2044 425f 4669 6c65 val "use DB_File │ │ │ -00001b40: 223b 0a69 6620 2824 4029 0a7b 0a20 2020 ";.if ($@).{. │ │ │ -00001b50: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -00001b60: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00001b70: 0920 2027 2d73 7472 2720 3d3e 205b 2270 . '-str' => ["p │ │ │ -00001b80: 6c65 6173 6520 696e 7374 616c 6c20 4442 lease install DB │ │ │ -00001b90: 5f46 696c 6520 6672 6f6d 2022 202e 0a09 _File from " ... │ │ │ -00001ba0: 0909 2020 2020 2022 4350 414e 2066 6f72 .. "CPAN for │ │ │ -00001bb0: 2062 6574 7465 7220 7065 7266 6f72 6d61 better performa │ │ │ -00001bc0: 6e63 6522 5d29 0a09 6966 2024 7665 7262 nce"])..if $verb │ │ │ -00001bd0: 6f73 653b 0a7d 0a0a 6d79 2024 7274 203d ose;.}..my $rt = │ │ │ -00001be0: 2024 7265 7374 6f72 6554 7265 653b 0a6d $restoreTree;.m │ │ │ -00001bf0: 7920 2472 6573 746f 7265 5472 6565 203d y $restoreTree = │ │ │ -00001c00: 2026 6162 736f 6c75 7465 5061 7468 2824 &absolutePath($ │ │ │ -00001c10: 7265 7374 6f72 6554 7265 6529 3b0a 2472 restoreTree);.$r │ │ │ -00001c20: 6573 746f 7265 5472 6565 203d 2024 3120 estoreTree = $1 │ │ │ -00001c30: 6966 2024 7265 7374 6f72 6554 7265 6520 if $restoreTree │ │ │ -00001c40: 3d7e 202f 282e 2a29 5c2f 242f 3b20 2023 =~ /(.*)\/$/; # │ │ │ -00001c50: 2072 656d 6f76 6520 7472 6169 6c69 6e67 remove trailing │ │ │ -00001c60: 2027 2f27 0a0a 230a 2320 6d64 3543 6865 '/'..#.# md5Che │ │ │ -00001c70: 636b 5375 6d20 2d20 4461 7465 6920 6669 ckSum - Datei fi │ │ │ -00001c80: 6e64 656e 0a24 7072 4c6f 672d 3e70 7269 nden.$prLog->pri │ │ │ -00001c90: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00001ca0: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -00001cb0: 203d 3e20 5b22 6469 7265 6374 6f72 7920 => ["directory │ │ │ -00001cc0: 6f72 2066 696c 6520 3c24 7274 3e20 646f or file <$rt> do │ │ │ -00001cd0: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist"],. │ │ │ -00001ce0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00001cf0: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless │ │ │ -00001d00: 282d 6520 2472 7429 3b0a 6d79 2024 6973 (-e $rt);.my $is │ │ │ -00001d10: 4669 6c65 203d 2031 2069 6620 282d 6620 File = 1 if (-f │ │ │ -00001d20: 2472 7429 3b0a 0a69 6620 2824 6261 636b $rt);..if ($back │ │ │ -00001d30: 7570 526f 6f74 290a 7b0a 2020 2020 2470 upRoot).{. $p │ │ │ -00001d40: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00001d50: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ -00001d60: 272d 7374 7227 203d 3e20 5b22 6469 7265 '-str' => ["dire │ │ │ -00001d70: 6374 6f72 7920 3c24 6261 636b 7570 526f ctory <$backupRo │ │ │ -00001d80: 6f74 3e20 646f 6573 206e 6f74 2065 7869 ot> does not exi │ │ │ -00001d90: 7422 5d2c 0a09 0920 2027 2d65 7869 7427 t"],... '-exit' │ │ │ -00001da0: 203d 3e20 3129 0a09 756e 6c65 7373 2028 => 1)..unless ( │ │ │ -00001db0: 2d64 2024 6261 636b 7570 526f 6f74 293b -d $backupRoot); │ │ │ -00001dc0: 0a20 2020 2024 6261 636b 7570 526f 6f74 . $backupRoot │ │ │ -00001dd0: 203d 2026 6162 736f 6c75 7465 5061 7468 = &absolutePath │ │ │ -00001de0: 2824 6261 636b 7570 526f 6f74 293b 0a7d ($backupRoot);.} │ │ │ -00001df0: 0a65 6c73 650a 7b0a 2020 2020 6d79 2024 .else.{. my $ │ │ │ -00001e00: 6469 7220 3d20 2472 6573 746f 7265 5472 dir = $restoreTr │ │ │ -00001e10: 6565 3b0a 2020 2020 2464 6972 203d 7e20 ee;. $dir =~ │ │ │ -00001e20: 732f 285c 2f5c 2e29 2a24 2f2f 3b20 2020 s/(\/\.)*$//; │ │ │ -00001e30: 2020 2023 2072 656d 6f76 6520 7472 6169 # remove trai │ │ │ -00001e40: 6c69 6e67 202f 2e0a 0a20 2020 2024 6261 ling /... $ba │ │ │ -00001e50: 636b 7570 526f 6f74 203d 2075 6e64 6566 ckupRoot = undef │ │ │ -00001e60: 3b0a 2020 2020 646f 0a20 2020 207b 0a09 ;. do. {.. │ │ │ -00001e70: 2464 6972 203d 7e20 732f 5c2f 5c2e 5c2f $dir =~ s/\/\.\/ │ │ │ -00001e80: 2f5c 2f2f 673b 2020 2023 2073 7562 7374 /\//g; # subst │ │ │ -00001e90: 6974 7574 6520 2f2e 2f20 2d3e 202f 0a0a itute /./ -> /.. │ │ │ -00001ea0: 0923 2066 6573 7473 7465 6c6c 656e 2c20 .# feststellen, │ │ │ -00001eb0: 6f62 2065 696e 6520 2e6d 6435 7375 6d20 ob eine .md5sum │ │ │ -00001ec0: 4461 7465 6920 766f 7268 616e 6465 6e20 Datei vorhanden │ │ │ -00001ed0: 6973 740a 0969 6620 282d 6620 2224 6469 ist..if (-f "$di │ │ │ -00001ee0: 722f 2463 6865 636b 5375 6d46 696c 6522 r/$checkSumFile" │ │ │ -00001ef0: 206f 7220 2d66 2022 2464 6972 2f24 6368 or -f "$dir/$ch │ │ │ -00001f00: 6563 6b53 756d 4669 6c65 2e62 7a32 2229 eckSumFile.bz2") │ │ │ -00001f10: 0a09 7b0a 0920 2020 2024 7072 4c6f 672d ..{.. $prLog- │ │ │ -00001f20: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00001f30: 3e20 2749 272c 0a09 0909 2020 272d 7374 > 'I',.... '-st │ │ │ -00001f40: 7227 203d 3e20 5b22 666f 756e 6420 696e r' => ["found in │ │ │ -00001f50: 666f 2066 696c 6520 3c24 6368 6563 6b53 fo file <$checkS │ │ │ -00001f60: 756d 4669 6c65 3e20 696e 2022 202e 0a09 umFile> in " ... │ │ │ -00001f70: 0909 0920 2020 2020 2264 6972 6563 746f ... "directo │ │ │ -00001f80: 7279 203c 2464 6972 3e22 5d29 0a09 0969 ry <$dir>"])...i │ │ │ -00001f90: 6620 2824 7665 7262 6f73 6529 3b0a 0920 f ($verbose);.. │ │ │ -00001fa0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00001fb0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00001fc0: 0a09 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -00001fd0: 0909 0920 205b 2266 6f75 6e64 2069 6e66 ... ["found inf │ │ │ -00001fe0: 6f20 6669 6c65 203c 2463 6865 636b 5375 o file <$checkSu │ │ │ -00001ff0: 6d46 696c 653e 2061 2073 6563 6f6e 6420 mFile> a second │ │ │ -00002000: 7469 6d65 2069 6e20 2220 2e0a 0909 0920 time in " ..... │ │ │ -00002010: 2020 223c 2464 6972 3e2c 2066 6972 7374 "<$dir>, first │ │ │ -00002020: 2074 696d 6520 666f 756e 6420 696e 203c time found in < │ │ │ -00002030: 2462 6163 6b75 7052 6f6f 743e 225d 2c0a $backupRoot>"],. │ │ │ -00002040: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -00002050: 3129 0a09 0969 6620 2824 6261 636b 7570 1)...if ($backup │ │ │ -00002060: 526f 6f74 293b 0a0a 0920 2020 2024 6261 Root);... $ba │ │ │ -00002070: 636b 7570 526f 6f74 203d 2024 6469 723b ckupRoot = $dir; │ │ │ -00002080: 0a09 7d0a 0a09 2824 6469 722c 2024 5f29 ..}...($dir, $_) │ │ │ -00002090: 203d 2026 7370 6c69 7446 696c 6544 6972 = &splitFileDir │ │ │ -000020a0: 2824 6469 7229 3b0a 2020 2020 7d20 7768 ($dir);. } wh │ │ │ -000020b0: 696c 6520 2824 6469 7220 6e65 2027 2f27 ile ($dir ne '/' │ │ │ -000020c0: 293b 0a0a 0a20 2020 2024 7072 4c6f 672d );... $prLog- │ │ │ -000020d0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000020e0: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ -000020f0: 2720 3d3e 205b 2264 6964 206e 6f74 2066 ' => ["did not f │ │ │ -00002100: 696e 6420 696e 666f 2066 696c 6520 3c24 ind info file <$ │ │ │ -00002110: 6368 6563 6b53 756d 4669 6c65 3e22 5d2c checkSumFile>"], │ │ │ -00002120: 0a09 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -00002130: 3129 0a09 756e 6c65 7373 2028 2462 6163 1)..unless ($bac │ │ │ -00002140: 6b75 7052 6f6f 7429 3b0a 7d0a 0a24 7265 kupRoot);.}..$re │ │ │ -00002150: 7374 6f72 6554 7265 6520 3d20 7375 6273 storeTree = subs │ │ │ -00002160: 7472 2824 7265 7374 6f72 6554 7265 652c tr($restoreTree, │ │ │ -00002170: 206c 656e 6774 6828 2462 6163 6b75 7052 length($backupR │ │ │ -00002180: 6f6f 7429 202b 2031 293b 0a0a 0a23 205e oot) + 1);...# ^ │ │ │ -00002190: 5e5e 0a23 2024 6261 636b 7570 526f 6f74 ^^.# $backupRoot │ │ │ -000021a0: 2062 6569 6e68 616c 7465 7420 6a65 747a beinhaltet jetz │ │ │ -000021b0: 7420 6465 6e20 5066 6164 207a 756d 2041 t den Pfad zum A │ │ │ -000021c0: 7263 6869 760a 2320 2472 6573 746f 7265 rchiv.# $restore │ │ │ -000021d0: 5472 6565 2062 6569 6e68 616c 7465 7420 Tree beinhaltet │ │ │ -000021e0: 6a65 747a 7420 6465 6e20 7265 6c61 7469 jetzt den relati │ │ │ -000021f0: 7665 6e20 5066 6164 2069 6e6e 6572 6861 ven Pfad innerha │ │ │ -00002200: 6c62 2064 6573 2041 7263 6869 7673 0a0a lb des Archivs.. │ │ │ -00002210: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00002220: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. │ │ │ -00002230: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00002240: 2263 616e 6e6f 7420 7265 7374 6f72 6520 "cannot restore │ │ │ -00002250: 3c24 6261 636b 7570 526f 6f74 3e20 6265 <$backupRoot> be │ │ │ -00002260: 6361 7573 6520 6f66 2075 6e72 6573 6f6c cause of unresol │ │ │ -00002270: 7665 6420 6c69 6e6b 7322 2c0a 0920 2020 ved links",.. │ │ │ -00002280: 2020 2022 7275 6e20 7374 6f72 6542 6163 "run storeBac │ │ │ -00002290: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup. │ │ │ -000022a0: 706c 2074 6f20 7265 736f 6c76 6522 5d2c pl to resolve"], │ │ │ -000022b0: 0a09 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ -000022c0: 3d3e 2031 290a 2020 2020 6966 202d 6520 => 1). if -e │ │ │ -000022d0: 2224 6261 636b 7570 526f 6f74 2f2e 7374 "$backupRoot/.st │ │ │ -000022e0: 6f72 6542 6163 6b75 704c 696e 6b73 2f6c oreBackupLinks/l │ │ │ -000022f0: 696e 6b46 696c 652e 627a 3222 3b0a 0a6d inkFile.bz2";..m │ │ │ -00002300: 7920 2825 7365 7450 6572 6d44 6972 7329 y (%setPermDirs) │ │ │ -00002310: 3b0a 756e 6c65 7373 2028 2466 6c61 7429 ;.unless ($flat) │ │ │ -00002320: 0a7b 0a20 2020 2023 2053 7562 7472 6565 .{. # Subtree │ │ │ -00002330: 2075 6e74 6572 2064 656d 205a 6965 6c64 unter dem Zield │ │ │ -00002340: 6972 6563 746f 7279 2065 727a 6575 6765 irectory erzeuge │ │ │ -00002350: 6e0a 2020 2020 263a 3a6d 616b 6546 696c n. &::makeFil │ │ │ -00002360: 6550 6174 6828 2224 7461 7267 6574 4469 ePath("$targetDi │ │ │ -00002370: 722f 2472 6573 746f 7265 5472 6565 222c r/$restoreTree", │ │ │ -00002380: 2024 7072 4c6f 6729 3b0a 0a20 2020 206d $prLog);.. m │ │ │ -00002390: 7920 2840 6429 203d 2073 706c 6974 282f y (@d) = split(/ │ │ │ -000023a0: 5c2f 2b2f 2c20 2472 6573 746f 7265 5472 \/+/, $restoreTr │ │ │ -000023b0: 6565 293b 0a20 2020 206d 7920 2469 3b0a ee);. my $i;. │ │ │ -000023c0: 2020 2020 666f 7220 2824 6920 3d20 3020 for ($i = 0 │ │ │ -000023d0: 3b20 2469 203c 2040 6420 3b20 2469 2b2b ; $i < @d ; $i++ │ │ │ -000023e0: 290a 2020 2020 7b0a 0924 7365 7450 6572 ). {..$setPer │ │ │ -000023f0: 6d44 6972 737b 6a6f 696e 2827 2f27 2c20 mDirs{join('/', │ │ │ -00002400: 4064 5b30 2e2e 2469 5d29 7d20 3d20 313b @d[0..$i])} = 1; │ │ │ -00002410: 0a20 2020 207d 0a7d 0a0a 230a 2320 4a65 . }.}..#.# Je │ │ │ -00002420: 7a74 2049 6e66 6f66 696c 6520 6569 6e6c zt Infofile einl │ │ │ -00002430: 6573 656e 2075 6e64 2064 6965 2067 6577 esen und die gew │ │ │ -00002440: c3bc 6e73 6368 7465 6e20 4461 7465 6965 ..nschten Dateie │ │ │ -00002450: 6e20 6175 7373 6f72 7469 6572 656e 0a23 n aussortieren.# │ │ │ -00002460: 0a0a 6d79 2024 7263 7366 203d 2072 6561 ..my $rcsf = rea │ │ │ -00002470: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n │ │ │ -00002480: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil │ │ │ -00002490: 6527 203d 3e0a 0909 0909 2022 2462 6163 e' =>..... "$bac │ │ │ -000024a0: 6b75 7052 6f6f 742f 2463 6865 636b 5375 kupRoot/$checkSu │ │ │ -000024b0: 6d46 696c 6522 2c0a 0909 0909 2027 2d70 mFile",..... '-p │ │ │ -000024c0: 724c 6f67 2720 3d3e 2024 7072 4c6f 672c rLog' => $prLog, │ │ │ -000024d0: 0a09 0909 0920 272d 746d 7064 6972 2720 ..... '-tmpdir' │ │ │ -000024e0: 3d3e 2024 746d 7064 6972 293b 0a0a 6d79 => $tmpdir);..my │ │ │ -000024f0: 2024 666f 726b 203d 2070 6172 616c 6c65 $fork = paralle │ │ │ -00002500: 6c46 6f72 6b2d 3e6e 6577 2827 2d6d 6178 lFork->new('-max │ │ │ -00002510: 5061 7261 6c6c 656c 2720 3d3e 2024 6e6f Parallel' => $no │ │ │ -00002520: 5265 7374 6f72 6550 6172 616c 6c65 6c2c RestoreParallel, │ │ │ -00002530: 0a09 0909 2020 2020 2027 2d70 724c 6f67 .... '-prLog │ │ │ -00002540: 2720 3d3e 2024 7072 4c6f 6729 3b0a 0a6d ' => $prLog);..m │ │ │ -00002550: 7920 2824 756e 636f 6d70 722c 2040 756e y ($uncompr, @un │ │ │ -00002560: 636f 6d70 7250 6172 2920 3d20 407b 2472 comprPar) = @{$r │ │ │ -00002570: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith │ │ │ -00002580: 5061 7228 2775 6e63 6f6d 7072 6573 7327 Par('uncompress' │ │ │ -00002590: 297d 3b0a 6d79 2028 2463 702c 2040 6370 )};.my ($cp, @cp │ │ │ -000025a0: 5061 7229 203d 2028 2763 7027 2c20 272d Par) = ('cp', '- │ │ │ -000025b0: 6450 5227 293b 0a6d 7920 2470 6f73 7466 dPR');.my $postf │ │ │ -000025c0: 6978 203d 2024 7263 7366 2d3e 6765 7449 ix = $rcsf->getI │ │ │ -000025d0: 6e66 6f57 6974 6850 6172 2827 706f 7374 nfoWithPar('post │ │ │ -000025e0: 6669 7827 293b 0a6d 7920 2467 6e75 6370 fix');.my $gnucp │ │ │ -000025f0: 203d 2024 7263 7366 2d3e 6765 7449 6e66 = $rcsf->getInf │ │ │ -00002600: 6f57 6974 6850 6172 2827 6370 4973 476e oWithPar('cpIsGn │ │ │ -00002610: 7527 293b 0a24 676e 7563 7020 3d20 2824 u');.$gnucp = ($ │ │ │ -00002620: 676e 7563 7020 6571 2027 7965 7327 2920 gnucp eq 'yes') │ │ │ -00002630: 3f20 3120 3a20 303b 0a24 676e 7563 7020 ? 1 : 0;.$gnucp │ │ │ -00002640: 3d20 3020 6966 2024 6e6f 476e 7543 703b = 0 if $noGnuCp; │ │ │ -00002650: 0a6d 7920 2461 7263 6869 7665 5479 7065 .my $archiveType │ │ │ -00002660: 7320 3d20 2472 6373 662d 3e67 6574 496e s = $rcsf->getIn │ │ │ -00002670: 666f 5769 7468 5061 7228 2761 7263 6869 foWithPar('archi │ │ │ -00002680: 7665 5479 7065 7327 293b 0a6d 7920 2473 veTypes');.my $s │ │ │ -00002690: 7065 6369 616c 5479 7065 4172 6368 6976 pecialTypeArchiv │ │ │ -000026a0: 6572 203d 2024 7263 7366 2d3e 6765 7449 er = $rcsf->getI │ │ │ -000026b0: 6e66 6f57 6974 6850 6172 2827 7370 6563 nfoWithPar('spec │ │ │ -000026c0: 6961 6c54 7970 6541 7263 6869 7665 7227 ialTypeArchiver' │ │ │ -000026d0: 293b 0a0a 246d 6169 6e3a 3a49 4f43 6f6d );..$main::IOCom │ │ │ -000026e0: 7072 6573 7344 6972 6563 7420 3d20 303b pressDirect = 0; │ │ │ -000026f0: 0a69 6620 2824 756e 636f 6d70 7220 6571 .if ($uncompr eq │ │ │ -00002700: 2027 627a 6970 3227 206f 7220 2475 6e63 'bzip2' or $unc │ │ │ -00002710: 6f6d 7072 2065 7120 2762 756e 7a69 7032 ompr eq 'bunzip2 │ │ │ -00002720: 2729 0a7b 0a20 2020 2065 7661 6c20 2275 ').{. eval "u │ │ │ -00002730: 7365 2049 4f3a 3a55 6e63 6f6d 7072 6573 se IO::Uncompres │ │ │ -00002740: 733a 3a42 756e 7a69 7032 2071 7728 6275 s::Bunzip2 qw(bu │ │ │ -00002750: 6e7a 6970 3229 223b 0a20 2020 2069 6620 nzip2)";. if │ │ │ -00002760: 2824 4029 0a20 2020 207b 0a09 2470 724c ($@). {..$prL │ │ │ -00002770: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002780: 2720 3d3e 2027 4927 2c0a 0909 2020 2020 ' => 'I',... │ │ │ -00002790: 2020 272d 7374 7227 203d 3e20 5b22 706c '-str' => ["pl │ │ │ -000027a0: 6561 7365 2069 6e73 7461 6c6c 2049 4f3a ease install IO: │ │ │ -000027b0: 3a55 6e63 6f6d 7072 6573 733a 3a42 756e :Uncompress::Bun │ │ │ -000027c0: 7a69 7032 2066 726f 6d20 2220 2e0a 0909 zip2 from " .... │ │ │ -000027d0: 0909 2022 4350 414e 2066 6f72 2062 6574 .. "CPAN for bet │ │ │ -000027e0: 7465 7220 7065 7266 6f72 6d61 6e63 6522 ter performance" │ │ │ -000027f0: 5d29 3b0a 2020 2020 7d0a 2020 2020 656c ]);. }. el │ │ │ -00002800: 7365 0a20 2020 207b 0a09 246d 6169 6e3a se. {..$main: │ │ │ -00002810: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec │ │ │ -00002820: 7420 3d20 313b 0a20 2020 207d 0a7d 0a0a t = 1;. }.}.. │ │ │ -00002830: 2320 6462 6d2d 4669 6c65 20c3 b666 666e # dbm-File ..ffn │ │ │ -00002840: 656e 0a6d 7920 2544 424d 4861 7264 4c69 en.my %DBMHardLi │ │ │ -00002850: 6e6b 3b20 2020 2020 2020 2023 206b 6579 nk; # key │ │ │ -00002860: 3a20 6465 762d 696e 6f64 6520 286f 6465 : dev-inode (ode │ │ │ -00002870: 7220 756e 6465 6629 2c20 7661 6c75 653a r undef), value: │ │ │ -00002880: 2066 696c 656e 616d 650a 6d79 2025 6861 filename.my %ha │ │ │ -00002890: 7354 6f42 654c 696e 6b65 6420 3d20 2829 sToBeLinked = () │ │ │ -000028a0: 3b20 2320 6869 6572 2077 6572 6465 6e20 ; # hier werden │ │ │ -000028b0: 6469 6520 7a75 206c 696e 6b65 6e64 656e die zu linkenden │ │ │ -000028c0: 2044 6174 6569 656e 2067 6573 616d 6d65 Dateien gesamme │ │ │ -000028d0: 6c74 2c0a 2020 2020 2020 2020 2020 2020 lt,. │ │ │ -000028e0: 2020 2020 2020 2020 2020 2020 2320 6269 # bi │ │ │ -000028f0: 7320 6469 6520 5265 6665 7265 6e7a 6461 s die Referenzda │ │ │ -00002900: 7465 6920 766f 6c6c 7374 c3a4 6e64 6967 tei vollst..ndig │ │ │ -00002910: 207a 7572 c3bc 636b 6765 7369 6368 6572 zur..ckgesicher │ │ │ -00002920: 7420 6973 740a 756e 6c65 7373 2028 246e t ist.unless ($n │ │ │ -00002930: 6f48 6172 644c 696e 6b73 290a 7b0a 2020 oHardLinks).{. │ │ │ -00002940: 2020 6462 6d6f 7065 6e28 2544 424d 4861 dbmopen(%DBMHa │ │ │ -00002950: 7264 4c69 6e6b 2c20 2224 746d 7064 6972 rdLink, "$tmpdir │ │ │ -00002960: 2f73 7462 7265 636f 7665 722e 2424 222c /stbrecover.$$", │ │ │ -00002970: 2030 3630 3029 3b0a 7d0a 0a6d 7920 246e 0600);.}..my $n │ │ │ -00002980: 6f46 696c 6573 436f 7079 203d 2030 3b0a oFilesCopy = 0;. │ │ │ -00002990: 6d79 2024 6e6f 4669 6c65 7343 6f6d 7072 my $noFilesCompr │ │ │ -000029a0: 203d 2030 3b0a 6d79 2024 6e6f 4669 6c65 = 0;.my $noFile │ │ │ -000029b0: 7342 6c6f 636b 6564 203d 2030 3b0a 6d79 sBlocked = 0;.my │ │ │ -000029c0: 2024 6e6f 5379 6d4c 696e 6b73 203d 2030 $noSymLinks = 0 │ │ │ -000029d0: 3b0a 6d79 2024 6e6f 4e61 6d65 6450 6970 ;.my $noNamedPip │ │ │ -000029e0: 6573 203d 2030 3b0a 6d79 2024 6e6f 536f es = 0;.my $noSo │ │ │ -000029f0: 636b 6574 7320 3d20 303b 0a6d 7920 246e ckets = 0;.my $n │ │ │ -00002a00: 6f42 6c6f 636b 4465 7673 203d 2030 3b0a oBlockDevs = 0;. │ │ │ -00002a10: 6d79 2024 6e6f 4368 6172 4465 7673 203d my $noCharDevs = │ │ │ -00002a20: 2030 3b0a 6d79 2024 6e6f 4469 7273 203d 0;.my $noDirs = │ │ │ -00002a30: 2030 3b0a 6d79 2024 6861 7264 4c69 6e6b 0;.my $hardLink │ │ │ -00002a40: 7320 3d20 303b 0a0a 2472 6573 746f 7265 s = 0;..$restore │ │ │ -00002a50: 5472 6565 203d 2027 2720 6966 2024 7265 Tree = '' if $re │ │ │ -00002a60: 7374 6f72 6554 7265 6520 6571 2027 2e27 storeTree eq '.' │ │ │ -00002a70: 3b0a 6d79 2024 6c72 6573 746f 7265 5472 ;.my $lrestoreTr │ │ │ -00002a80: 6565 203d 206c 656e 6774 6828 2472 6573 ee = length($res │ │ │ -00002a90: 746f 7265 5472 6565 293b 0a0a 6d79 2024 toreTree);..my $ │ │ │ -00002aa0: 746d 7044 6972 4669 6c65 203d 2026 3a3a tmpDirFile = &:: │ │ │ -00002ab0: 756e 6971 4669 6c65 4e61 6d65 2822 2474 uniqFileName("$t │ │ │ -00002ac0: 6d70 6469 722f 7374 6275 5265 632e 2229 mpdir/stbuRec.") │ │ │ -00002ad0: 3b0a 263a 3a63 6865 636b 4465 6c53 796d ;.&::checkDelSym │ │ │ -00002ae0: 4c69 6e6b 2824 746d 7044 6972 4669 6c65 Link($tmpDirFile │ │ │ -00002af0: 2c20 2470 724c 6f67 2c20 3078 3031 293b , $prLog, 0x01); │ │ │ -00002b00: 0a6c 6f63 616c 202a 4449 5246 494c 453b .local *DIRFILE; │ │ │ -00002b10: 0a6f 7065 6e28 4449 5246 494c 452c 2027 .open(DIRFILE, ' │ │ │ -00002b20: 3e27 2c20 2474 6d70 4469 7246 696c 6529 >', $tmpDirFile) │ │ │ -00002b30: 206f 720a 2020 2020 2470 724c 6f67 2d3e or. $prLog-> │ │ │ -00002b40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00002b50: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str' │ │ │ -00002b60: 203d 3e20 5b22 6361 6e6e 6f74 206f 7065 => ["cannot ope │ │ │ -00002b70: 6e20 3c24 746d 7044 6972 4669 6c65 3e2c n <$tmpDirFile>, │ │ │ -00002b80: 2065 7869 7469 6e67 225d 2c0a 0909 2020 exiting"],... │ │ │ -00002b90: 272d 6164 6427 203d 3e20 5b5f 5f46 494c '-add' => [__FIL │ │ │ -00002ba0: 455f 5f2c 205f 5f4c 494e 455f 5f5d 2c0a E__, __LINE__],. │ │ │ -00002bb0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ -00002bc0: 293b 0a63 686d 6f64 2030 3630 302c 2024 );.chmod 0600, $ │ │ │ -00002bd0: 746d 7044 6972 4669 6c65 3b0a 0a6d 7920 tmpDirFile;..my │ │ │ -00002be0: 2824 6d64 3573 756d 2c20 2463 6f6d 7072 ($md5sum, $compr │ │ │ -00002bf0: 2c20 2464 6576 496e 6f64 652c 2024 696e , $devInode, $in │ │ │ -00002c00: 6f64 6542 6163 6b75 702c 2024 6374 696d odeBackup, $ctim │ │ │ -00002c10: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim │ │ │ -00002c20: 652c 0a20 2020 2024 7369 7a65 2c20 2475 e,. $size, $u │ │ │ -00002c30: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode, │ │ │ -00002c40: 2024 6669 6c65 6e61 6d65 293b 0a23 7072 $filename);.#pr │ │ │ -00002c50: 696e 7420 2272 6573 746f 7265 5472 6565 int "restoreTree │ │ │ -00002c60: 203d 203c 2472 6573 746f 7265 5472 6565 = <$restoreTree │ │ │ -00002c70: 3e5c 6e22 3b0a 2370 7269 6e74 2022 6c72 >\n";.#print "lr │ │ │ -00002c80: 6573 746f 7265 5472 6565 203d 203c 246c estoreTree = <$l │ │ │ -00002c90: 7265 7374 6f72 6554 7265 653e 5c6e 223b restoreTree>\n"; │ │ │ -00002ca0: 0a23 7072 696e 7420 2269 7346 696c 6520 .#print "isFile │ │ │ -00002cb0: 3d20 3c24 6973 4669 6c65 3e5c 6e22 3b0a = <$isFile>\n";. │ │ │ -00002cc0: 7768 696c 6520 2828 2824 6d64 3573 756d while ((($md5sum │ │ │ -00002cd0: 2c20 2463 6f6d 7072 2c20 2464 6576 496e , $compr, $devIn │ │ │ -00002ce0: 6f64 652c 2024 696e 6f64 6542 6163 6b75 ode, $inodeBacku │ │ │ -00002cf0: 702c 2024 6374 696d 652c 2024 6d74 696d p, $ctime, $mtim │ │ │ -00002d00: 652c 2024 6174 696d 652c 0a09 2024 7369 e, $atime,.. $si │ │ │ -00002d10: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, │ │ │ -00002d20: 246d 6f64 652c 2024 6669 6c65 6e61 6d65 $mode, $filename │ │ │ -00002d30: 2920 3d20 2472 6373 662d 3e6e 6578 744c ) = $rcsf->nextL │ │ │ -00002d40: 696e 6528 2929 203e 2030 290a 7b0a 2020 ine()) > 0).{. │ │ │ -00002d50: 2020 6d79 2024 6620 3d20 2466 696c 656e my $f = $filen │ │ │ -00002d60: 616d 653b 0a20 2020 2069 6620 2865 7869 ame;. if (exi │ │ │ -00002d70: 7374 7328 2473 6574 5065 726d 4469 7273 sts($setPermDirs │ │ │ -00002d80: 7b24 667d 2929 0a20 2020 207b 0a09 6368 {$f})). {..ch │ │ │ -00002d90: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ -00002da0: 2224 7461 7267 6574 4469 722f 2466 223b "$targetDir/$f"; │ │ │ -00002db0: 0a09 6368 6d6f 6420 246d 6f64 652c 2022 ..chmod $mode, " │ │ │ -00002dc0: 2474 6172 6765 7444 6972 2f24 6622 3b0a $targetDir/$f";. │ │ │ -00002dd0: 0975 7469 6d65 2024 6174 696d 652c 2024 .utime $atime, $ │ │ │ -00002de0: 6d74 696d 652c 2022 2474 6172 6765 7444 mtime, "$targetD │ │ │ -00002df0: 6972 2f24 6622 3b0a 2020 2020 7d0a 2020 ir/$f";. }. │ │ │ -00002e00: 2020 6966 2028 2469 7346 696c 6520 616e if ($isFile an │ │ │ -00002e10: 6420 6c65 6e67 7468 2824 6d64 3573 756d d length($md5sum │ │ │ -00002e20: 2920 3d3d 2033 3229 0a20 2020 207b 0a09 ) == 32). {.. │ │ │ -00002e30: 2466 202e 3d20 2470 6f73 7466 6978 2069 $f .= $postfix i │ │ │ -00002e40: 6620 2824 636f 6d70 7220 6571 2027 6327 f ($compr eq 'c' │ │ │ -00002e50: 293b 0a20 2020 207d 0a23 7072 696e 7420 );. }.#print │ │ │ -00002e60: 2266 726f 6d20 2e6d 6435 4368 6563 6b53 "from .md5CheckS │ │ │ -00002e70: 756d 733a 203c 2466 3e20 3c24 7265 7374 ums: <$f> <$rest │ │ │ -00002e80: 6f72 6554 7265 653e 2024 6c72 6573 746f oreTree> $lresto │ │ │ -00002e90: 7265 5472 6565 5c6e 223b 0a20 2020 2069 reTree\n";. i │ │ │ -00002ea0: 6620 2824 7265 7374 6f72 6554 7265 6520 f ($restoreTree │ │ │ -00002eb0: 6571 2027 270a 096f 7220 2224 7265 7374 eq ''..or "$rest │ │ │ -00002ec0: 6f72 6554 7265 652f 2220 6571 2073 7562 oreTree/" eq sub │ │ │ -00002ed0: 7374 7228 2224 662f 222c 2030 2c20 246c str("$f/", 0, $l │ │ │ -00002ee0: 7265 7374 6f72 6554 7265 6520 2b20 3129 restoreTree + 1) │ │ │ -00002ef0: 0a09 6f72 2028 2469 7346 696c 6520 616e ..or ($isFile an │ │ │ -00002f00: 6420 2472 6573 746f 7265 5472 6565 2065 d $restoreTree e │ │ │ -00002f10: 7120 2466 2929 0a20 2020 207b 0a23 7072 q $f)). {.#pr │ │ │ -00002f20: 696e 7420 222d 2d2d 3e20 7265 7374 6f72 int "---> restor │ │ │ -00002f30: 6521 5c6e 223b 0a09 6d79 2024 7461 7267 e!\n";..my $targ │ │ │ -00002f40: 6574 4669 6c65 3b0a 0969 6620 2824 666c etFile;..if ($fl │ │ │ -00002f50: 6174 290a 097b 0a09 2020 2020 2824 5f2c at)..{.. ($_, │ │ │ -00002f60: 2024 7461 7267 6574 4669 6c65 2920 3d20 $targetFile) = │ │ │ -00002f70: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ -00002f80: 696c 656e 616d 6529 3b0a 0920 2020 2024 ilename);.. $ │ │ │ -00002f90: 7461 7267 6574 4669 6c65 203d 2022 2474 targetFile = "$t │ │ │ -00002fa0: 6172 6765 7444 6972 2f24 7461 7267 6574 argetDir/$target │ │ │ -00002fb0: 4669 6c65 223b 0a09 7d0a 0965 6c73 650a File";..}..else. │ │ │ -00002fc0: 097b 0a09 2020 2020 2474 6172 6765 7446 .{.. $targetF │ │ │ -00002fd0: 696c 6520 3d20 2224 7461 7267 6574 4469 ile = "$targetDi │ │ │ -00002fe0: 722f 2466 696c 656e 616d 6522 3b0a 097d r/$filename";..} │ │ │ -00002ff0: 0a09 2474 6172 6765 7446 696c 6520 3d7e ..$targetFile =~ │ │ │ -00003000: 2073 2f5c 2f2b 2f5c 2f2f 673b 2020 2020 s/\/+/\//g; │ │ │ -00003010: 2020 2020 2320 2f2f 202d 3e20 2f0a 0a09 # // -> /... │ │ │ -00003020: 6966 2028 6e6f 7420 246f 7665 7277 7269 if (not $overwri │ │ │ -00003030: 7465 2061 6e64 202d 6520 2474 6172 6765 te and -e $targe │ │ │ -00003040: 7446 696c 6529 0a09 7b0a 0920 2020 2024 tFile)..{.. $ │ │ │ -00003050: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003060: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ -00003070: 2020 272d 7374 7227 203d 3e20 5b22 7461 '-str' => ["ta │ │ │ -00003080: 7267 6574 3120 2474 6172 6765 7446 696c rget1 $targetFil │ │ │ -00003090: 6520 616c 7265 6164 7920 6578 6973 7473 e already exists │ │ │ -000030a0: 225d 293b 0a09 2020 2020 6e65 7874 3b0a "]);.. next;. │ │ │ -000030b0: 097d 0a0a 096d 7920 2475 7365 476e 7543 .}...my $useGnuC │ │ │ -000030c0: 7020 3d20 2467 6e75 6370 2061 6e64 2028 p = $gnucp and ( │ │ │ -000030d0: 246d 6435 7375 6d20 6571 2027 736f 636b $md5sum eq 'sock │ │ │ -000030e0: 6574 2720 6f72 0a09 0909 0920 2020 246d et' or..... $m │ │ │ -000030f0: 6435 7375 6d20 6571 2027 626c 6f63 6b64 d5sum eq 'blockd │ │ │ -00003100: 6576 2720 6f72 0a09 0909 0920 2020 246d ev' or..... $m │ │ │ -00003110: 6435 7375 6d20 6571 2027 6368 6172 6465 d5sum eq 'charde │ │ │ -00003120: 7627 293b 0a0a 0969 6620 2824 6d64 3573 v');...if ($md5s │ │ │ -00003130: 756d 2065 7120 2764 6972 2729 0a09 7b0a um eq 'dir')..{. │ │ │ -00003140: 0920 2020 2069 6620 286e 6f74 2024 666c . if (not $fl │ │ │ -00003150: 6174 2061 6e64 206e 6f74 202d 6520 2474 at and not -e $t │ │ │ -00003160: 6172 6765 7446 696c 6529 0a09 2020 2020 argetFile).. │ │ │ -00003170: 7b0a 0909 2b2b 246e 6f44 6972 733b 0a09 {...++$noDirs;.. │ │ │ -00003180: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00003190: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000031a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -000031b0: 3e0a 0909 0920 2020 2020 205b 2263 616e >.... ["can │ │ │ -000031c0: 6e6f 7420 6372 6561 7465 2064 6972 6563 not create direc │ │ │ -000031d0: 746f 7279 203c 2474 6172 6765 7446 696c tory <$targetFil │ │ │ -000031e0: 653e 225d 2c0a 0909 0920 2020 2020 2027 e>"],.... ' │ │ │ -000031f0: 2d65 7869 7427 203d 3e20 3129 0a09 0920 -exit' => 1)... │ │ │ -00003200: 2020 2075 6e6c 6573 7320 6d6b 6469 7220 unless mkdir │ │ │ -00003210: 2474 6172 6765 7446 696c 653b 0a09 0963 $targetFile;...c │ │ │ -00003220: 686f 776e 2024 7569 642c 2024 6769 642c hown $uid, $gid, │ │ │ -00003230: 2024 7461 7267 6574 4669 6c65 3b0a 2309 $targetFile;.#. │ │ │ -00003240: 0963 686d 6f64 2024 6d6f 6465 2c20 2474 .chmod $mode, $t │ │ │ -00003250: 6172 6765 7446 696c 653b 0a23 0909 7574 argetFile;.#..ut │ │ │ -00003260: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti │ │ │ -00003270: 6d65 2c20 2474 6172 6765 7446 696c 653b me, $targetFile; │ │ │ -00003280: 0a0a 0909 6d79 2024 7772 203d 2024 7461 ....my $wr = $ta │ │ │ -00003290: 7267 6574 4669 6c65 3b0a 0909 2477 7220 rgetFile;...$wr │ │ │ -000032a0: 3d7e 2073 2f5c 6e2f 5c30 2f6f 673b 0a09 =~ s/\n/\0/og;.. │ │ │ -000032b0: 0970 7269 6e74 2044 4952 4649 4c45 2022 .print DIRFILE " │ │ │ -000032c0: 2461 7469 6d65 2024 6d74 696d 6520 246d $atime $mtime $m │ │ │ -000032d0: 6f64 6520 2477 725c 6e22 3b0a 0a09 0924 ode $wr\n";....$ │ │ │ -000032e0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -000032f0: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',.... │ │ │ -00003300: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00003310: 5b22 6d6b 6469 7220 2474 6172 6765 7446 ["mkdir $targetF │ │ │ -00003320: 696c 6522 5d29 0a09 0920 2020 2069 6620 ile"])... if │ │ │ -00003330: 2824 7665 7262 6f73 6529 3b0a 0920 2020 ($verbose);.. │ │ │ -00003340: 207d 0a09 7d0a 0965 6c73 6966 2028 246d }..}..elsif ($m │ │ │ -00003350: 6435 7375 6d20 6571 2027 7379 6d6c 696e d5sum eq 'symlin │ │ │ -00003360: 6b27 290a 097b 0a09 2020 2020 756e 6c65 k')..{.. unle │ │ │ -00003370: 7373 2028 246e 6f48 6172 644c 696e 6b73 ss ($noHardLinks │ │ │ -00003380: 290a 0920 2020 207b 0a09 0969 6620 2864 ).. {...if (d │ │ │ -00003390: 6566 696e 6564 2824 4442 4d48 6172 644c efined($DBMHardL │ │ │ -000033a0: 696e 6b7b 2464 6576 496e 6f64 657d 2929 ink{$devInode})) │ │ │ -000033b0: 2020 2023 206d 7573 7320 6e75 7220 6765 # muss nur ge │ │ │ -000033c0: 6c69 6e6b 7420 7765 7264 656e 0a09 097b linkt werden...{ │ │ │ -000033d0: 0a09 0920 2020 2069 6620 286c 696e 6b20 ... if (link │ │ │ -000033e0: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de │ │ │ -000033f0: 7649 6e6f 6465 7d2c 2024 7461 7267 6574 vInode}, $target │ │ │ -00003400: 4669 6c65 290a 0909 2020 2020 7b0a 0909 File)... {... │ │ │ -00003410: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00003420: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00003430: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00003440: 3d3e 0a09 0909 0920 2020 2020 205b 226c =>..... ["l │ │ │ -00003450: 696e 6b20 2220 2e20 2444 424d 4861 7264 ink " . $DBMHard │ │ │ -00003460: 4c69 6e6b 7b24 6465 7649 6e6f 6465 7d20 Link{$devInode} │ │ │ -00003470: 2e0a 0909 0909 2020 2020 2020 2022 2024 ...... " $ │ │ │ -00003480: 7461 7267 6574 4669 6c65 225d 290a 0909 targetFile"])... │ │ │ -00003490: 0920 2020 2069 6620 2476 6572 626f 7365 . if $verbose │ │ │ -000034a0: 3b0a 2309 0909 7574 696d 6520 2461 7469 ;.#...utime $ati │ │ │ -000034b0: 6d65 2c20 246d 7469 6d65 2c20 2466 3b0a me, $mtime, $f;. │ │ │ -000034c0: 0909 092b 2b24 6861 7264 4c69 6e6b 733b ...++$hardLinks; │ │ │ -000034d0: 0a09 0920 2020 207d 0a09 0920 2020 2065 ... }... e │ │ │ -000034e0: 6c73 650a 0909 2020 2020 7b0a 0909 0924 lse... {....$ │ │ │ -000034f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003500: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00003510: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00003520: 0a09 0909 0920 2020 2020 205b 2266 6169 ..... ["fai │ │ │ -00003530: 6c65 643a 206c 696e 6b20 2220 2e0a 0909 led: link " .... │ │ │ -00003540: 0909 2020 2020 2020 2024 4442 4d48 6172 .. $DBMHar │ │ │ -00003550: 644c 696e 6b7b 2464 6576 496e 6f64 657d dLink{$devInode} │ │ │ -00003560: 202e 0a09 0909 0920 2020 2020 2020 2220 ...... " │ │ │ -00003570: 2474 6172 6765 7446 696c 6522 5d29 3b0a $targetFile"]);. │ │ │ -00003580: 0909 0924 6578 6974 203d 2031 3b0a 0909 ...$exit = 1;... │ │ │ -00003590: 2020 2020 7d0a 0909 2020 2020 676f 746f }... goto │ │ │ -000035a0: 2063 6f6e 744c 6f6f 703b 0a09 097d 0a09 contLoop;...}.. │ │ │ -000035b0: 0965 6c73 650a 0909 7b0a 0909 2020 2020 .else...{... │ │ │ -000035c0: 2444 424d 4861 7264 4c69 6e6b 7b24 6465 $DBMHardLink{$de │ │ │ -000035d0: 7649 6e6f 6465 7d20 3d20 2474 6172 6765 vInode} = $targe │ │ │ -000035e0: 7446 696c 653b 0a09 097d 0a09 2020 2020 tFile;...}.. │ │ │ -000035f0: 7d0a 0920 2020 206d 7920 246c 696e 6b54 }.. my $linkT │ │ │ -00003600: 6f20 3d20 7265 6164 6c69 6e6b 2022 2462 o = readlink "$b │ │ │ -00003610: 6163 6b75 7052 6f6f 742f 2466 696c 656e ackupRoot/$filen │ │ │ -00003620: 616d 6522 3b0a 0a09 2020 2020 2b2b 246e ame";... ++$n │ │ │ -00003630: 6f53 796d 4c69 6e6b 733b 0a09 2020 2020 oSymLinks;.. │ │ │ -00003640: 7379 6d6c 696e 6b20 246c 696e 6b54 6f2c symlink $linkTo, │ │ │ -00003650: 2024 7461 7267 6574 4669 6c65 3b0a 0a09 $targetFile;... │ │ │ -00003660: 2020 2020 2320 6265 6920 6569 6e69 6765 # bei einige │ │ │ -00003670: 6e20 4265 7472 6965 6273 7379 7374 656d n Betriebssystem │ │ │ -00003680: 2028 7a2e 422e 204c 696e 7578 2920 7769 (z.B. Linux) wi │ │ │ -00003690: 7264 2062 6569 2041 7566 7275 660a 0920 rd bei Aufruf.. │ │ │ -000036a0: 2020 2023 2064 6573 2053 7973 7465 6d63 # des Systemc │ │ │ -000036b0: 616c 6c73 2063 686d 6f64 2062 6569 2073 alls chmod bei s │ │ │ -000036c0: 796d 6c69 6e6b 7320 6e69 6368 7420 6465 ymlinks nicht de │ │ │ -000036d0: 7220 5379 6d6c 696e 6b20 7365 6c62 7374 r Symlink selbst │ │ │ -000036e0: 0a09 2020 2020 2320 6765 6165 6e64 6572 .. # geaender │ │ │ -000036f0: 742c 2073 6f6e 6465 726e 2064 6965 2044 t, sondern die D │ │ │ -00003700: 6174 6569 2c20 6175 6620 6469 6520 6572 atei, auf die er │ │ │ -00003710: 2076 6572 7765 6973 742e 0a09 2020 2020 verweist... │ │ │ -00003720: 2320 2864 616e 6e20 6d75 7373 206c 6368 # (dann muss lch │ │ │ -00003730: 6f77 6e20 6765 6e6f 6d6d 656e 2077 6572 own genommen wer │ │ │ -00003740: 6465 6e20 2d3e 2049 6e6b 6f6d 7061 7469 den -> Inkompati │ │ │ -00003750: 6269 6c69 7461 6574 656e 213f 290a 0920 bilitaeten!?).. │ │ │ -00003760: 2020 206d 7920 2463 686f 776e 203d 2066 my $chown = f │ │ │ -00003770: 6f72 6b50 726f 632d 3e6e 6577 2827 2d65 orkProc->new('-e │ │ │ -00003780: 7865 6327 203d 3e20 2763 686f 776e 272c xec' => 'chown', │ │ │ -00003790: 0a09 0909 0920 2020 2020 2027 2d70 6172 ..... '-par │ │ │ -000037a0: 616d 2720 3d3e 205b 272d 6827 2c20 2224 am' => ['-h', "$ │ │ │ -000037b0: 7569 643a 2467 6964 222c 0a09 0909 0909 uid:$gid",...... │ │ │ -000037c0: 0920 2020 2224 7461 7267 6574 4669 6c65 . "$targetFile │ │ │ -000037d0: 225d 2c0a 0909 0909 2020 2020 2020 272d "],..... '- │ │ │ -000037e0: 6f75 7452 616e 646f 6d27 203d 3e20 2224 outRandom' => "$ │ │ │ -000037f0: 746d 7064 6972 2f63 686f 776e 2d22 2c0a tmpdir/chown-",. │ │ │ -00003800: 0909 0909 2020 2020 2020 272d 7072 4c6f .... '-prLo │ │ │ -00003810: 6727 203d 3e20 2470 724c 6f67 293b 0a09 g' => $prLog);.. │ │ │ -00003820: 2020 2020 2463 686f 776e 2d3e 7761 6974 $chown->wait │ │ │ -00003830: 2829 3b0a 2309 2020 2020 7574 696d 6520 ();.#. utime │ │ │ -00003840: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, │ │ │ -00003850: 2474 6172 6765 7446 696c 653b 0a09 2020 $targetFile;.. │ │ │ -00003860: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00003870: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00003880: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00003890: 226c 6e20 2d73 2024 6c69 6e6b 546f 2024 "ln -s $linkTo $ │ │ │ -000038a0: 7461 7267 6574 4669 6c65 225d 290a 0909 targetFile"])... │ │ │ -000038b0: 6966 2028 2476 6572 626f 7365 293b 0a09 if ($verbose);.. │ │ │ -000038c0: 7d0a 0965 6c73 6966 2028 246d 6435 7375 }..elsif ($md5su │ │ │ -000038d0: 6d20 6571 2027 7069 7065 2729 0a09 7b0a m eq 'pipe')..{. │ │ │ -000038e0: 0920 2020 2069 6620 2824 7370 6563 6961 . if ($specia │ │ │ -000038f0: 6c54 7970 6541 7263 6869 7665 7220 616e lTypeArchiver an │ │ │ -00003900: 640a 0909 2461 7263 6869 7665 5479 7065 d...$archiveType │ │ │ -00003910: 7320 3d7e 202f 702f 290a 0920 2020 207b s =~ /p/).. { │ │ │ -00003920: 0a09 0926 3a3a 6578 7472 6163 7446 696c ...&::extractFil │ │ │ -00003930: 6546 726f 6d41 7263 6869 7665 2824 6669 eFromArchive($fi │ │ │ -00003940: 6c65 6e61 6d65 2c20 2474 6172 6765 7444 lename, $targetD │ │ │ -00003950: 6972 2c20 2462 6163 6b75 7052 6f6f 742c ir, $backupRoot, │ │ │ -00003960: 0a09 0920 2020 2024 7370 6563 6961 6c54 ... $specialT │ │ │ -00003970: 7970 6541 7263 6869 7665 722c 2024 7072 ypeArchiver, $pr │ │ │ -00003980: 4c6f 672c 2024 746d 7064 6972 293b 0a09 Log, $tmpdir);.. │ │ │ -00003990: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -000039a0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -000039b0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -000039c0: 3e0a 0920 2020 2020 5b22 2473 7065 6369 >.. ["$speci │ │ │ -000039d0: 616c 5479 7065 4172 6368 6976 6572 2024 alTypeArchiver $ │ │ │ -000039e0: 6261 636b 7570 526f 6f74 2f24 6669 6c65 backupRoot/$file │ │ │ -000039f0: 6e61 6d65 202d 3e20 2474 6172 6765 7446 name -> $targetF │ │ │ -00003a00: 696c 6522 5d29 0a09 0920 2020 2069 6620 ile"])... if │ │ │ -00003a10: 2824 7665 7262 6f73 6529 3b0a 0920 2020 ($verbose);.. │ │ │ -00003a20: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00003a30: 2020 7b0a 0909 6d79 2024 6d6b 6e6f 6420 {...my $mknod │ │ │ -00003a40: 3d20 666f 726b 5072 6f63 2d3e 6e65 7728 = forkProc->new( │ │ │ -00003a50: 272d 6578 6563 2720 3d3e 2027 6d6b 6e6f '-exec' => 'mkno │ │ │ -00003a60: 6427 2c0a 0909 0909 0920 2027 2d70 6172 d',...... '-par │ │ │ -00003a70: 616d 2720 3d3e 205b 2224 7461 7267 6574 am' => ["$target │ │ │ -00003a80: 4669 6c65 222c 2027 7027 5d2c 0a09 0909 File", 'p'],.... │ │ │ -00003a90: 0909 2020 272d 6f75 7452 616e 646f 6d27 .. '-outRandom' │ │ │ -00003aa0: 203d 3e20 2224 746d 7064 6972 2f6d 6b6e => "$tmpdir/mkn │ │ │ -00003ab0: 6f64 2d22 2c0a 0909 0909 0920 2027 2d70 od-",...... '-p │ │ │ -00003ac0: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -00003ad0: 3b0a 0909 246d 6b6e 6f64 2d3e 7761 6974 ;...$mknod->wait │ │ │ -00003ae0: 2829 3b0a 0909 6d79 2024 6f75 7420 3d20 ();...my $out = │ │ │ -00003af0: 246d 6b6e 6f64 2d3e 6765 7453 5444 4f55 $mknod->getSTDOU │ │ │ -00003b00: 5428 293b 0a09 0924 7072 4c6f 672d 3e70 T();...$prLog->p │ │ │ -00003b10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00003b20: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -00003b30: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ -00003b40: 205b 2253 5444 4f55 5420 6f66 203c 6d6b ["STDOUT of :", @$out])... │ │ │ -00003b70: 2020 2020 6966 2028 4024 6f75 7420 3e20 if (@$out > │ │ │ -00003b80: 3029 3b0a 0909 246f 7574 203d 2024 6d6b 0);...$out = $mk │ │ │ -00003b90: 6e6f 642d 3e67 6574 5354 4445 5252 2829 nod->getSTDERR() │ │ │ -00003ba0: 3b0a 0909 6966 2028 4024 6f75 7420 3e20 ;...if (@$out > │ │ │ -00003bb0: 3029 0a09 097b 0a09 0920 2020 2024 7072 0)...{... $pr │ │ │ -00003bc0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00003bd0: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -00003be0: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ -00003bf0: 205b 2253 5444 4552 5220 6f66 203c 6d6b ["STDERR of :", @$out]);.. │ │ │ -00003c20: 0909 2465 7869 7420 3d20 313b 0a09 097d ..$exit = 1;...} │ │ │ -00003c30: 0a09 0963 686f 776e 2024 7569 642c 2024 ...chown $uid, $ │ │ │ -00003c40: 6769 642c 2024 7461 7267 6574 4669 6c65 gid, $targetFile │ │ │ -00003c50: 3b0a 0909 6368 6d6f 6420 246d 6f64 652c ;...chmod $mode, │ │ │ -00003c60: 2024 7461 7267 6574 4669 6c65 3b0a 0909 $targetFile;... │ │ │ -00003c70: 7574 696d 6520 2461 7469 6d65 2c20 246d utime $atime, $m │ │ │ -00003c80: 7469 6d65 2c20 2474 6172 6765 7446 696c time, $targetFil │ │ │ -00003c90: 653b 0a09 0924 7072 4c6f 672d 3e70 7269 e;...$prLog->pri │ │ │ -00003ca0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00003cb0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00003cc0: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ -00003cd0: 226d 6b6e 6f64 2024 7461 7267 6574 4669 "mknod $targetFi │ │ │ -00003ce0: 6c65 2070 225d 290a 0909 2020 2020 6966 le p"])... if │ │ │ -00003cf0: 2028 2476 6572 626f 7365 293b 0a0a 0920 ($verbose);... │ │ │ -00003d00: 2020 207d 0a09 7d0a 0965 6c73 6966 2028 }..}..elsif ( │ │ │ -00003d10: 6c65 6e67 7468 2824 6d64 3573 756d 2920 length($md5sum) │ │ │ -00003d20: 3d3d 2033 3220 6f72 2020 2020 2020 2020 == 32 or │ │ │ -00003d30: 2020 2020 2320 6e6f 726d 616c 2066 696c # normal fil │ │ │ -00003d40: 650a 0920 2020 2020 2020 2475 7365 476e e.. $useGn │ │ │ -00003d50: 7543 7020 6f72 2024 7370 6563 6961 6c54 uCp or $specialT │ │ │ -00003d60: 7970 6541 7263 6869 7665 7229 2020 2320 ypeArchiver) # │ │ │ -00003d70: 7370 6563 6961 6c20 6669 6c65 0a09 7b0a special file..{. │ │ │ -00003d80: 2320 4964 6565 207a 7572 204c c3b6 7375 # Idee zur L..su │ │ │ -00003d90: 6e67 2064 6573 2070 6172 616c 6c65 6c69 ng des paralleli │ │ │ -00003da0: 74c3 a474 732d 5072 6f62 6c65 6d73 2062 t..ts-Problems b │ │ │ -00003db0: 6569 6d20 5a75 72c3 bc63 6b73 6963 6865 eim Zur..cksiche │ │ │ -00003dc0: 726e 0a23 2069 6e20 5665 7262 696e 6475 rn.# in Verbindu │ │ │ -00003dd0: 6e67 206d 6974 2064 656d 2053 6574 7a65 ng mit dem Setze │ │ │ -00003de0: 6e20 6465 7220 6861 7264 206c 696e 6b73 n der hard links │ │ │ -00003df0: 3a0a 2320 6572 7374 6520 4461 7465 693a :.# erste Datei: │ │ │ -00003e00: 0a23 2064 6576 2d69 6e6f 6465 203d 3e20 .# dev-inode => │ │ │ -00003e10: 272e 2720 696e 2064 626d 2d66 696c 6520 '.' in dbm-file │ │ │ -00003e20: 2825 4442 4d48 6172 644c 696e 6b29 0a23 (%DBMHardLink).# │ │ │ -00003e30: 2066 6f72 6b2d 3e61 6464 5f62 6c6f 636b fork->add_block │ │ │ -00003e40: 0a23 2077 656e 6e20 6665 7274 6967 2c20 .# wenn fertig, │ │ │ -00003e50: 6461 6e6e 2064 6576 2d69 6e6f 6465 203d dann dev-inode = │ │ │ -00003e60: 3e20 6669 6c65 6e61 6d65 2069 6e20 6462 > filename in db │ │ │ -00003e70: 6d2d 6669 6c65 0a23 0a23 207a 7765 6974 m-file.#.# zweit │ │ │ -00003e80: 6520 4461 7465 6920 2868 6172 6420 6c69 e Datei (hard li │ │ │ -00003e90: 6e6b 290a 2320 6e61 6368 7365 6865 6e20 nk).# nachsehen │ │ │ -00003ea0: 696e 2064 626d 2d66 696c 650a 2320 7765 in dbm-file.# we │ │ │ -00003eb0: 6e6e 2027 2e27 202d 3e20 696e 2057 6172 nn '.' -> in War │ │ │ -00003ec0: 7465 7363 686c 616e 6765 2068 c3a4 6e67 teschlange h..ng │ │ │ -00003ed0: 656e 2028 6861 7368 290a 2320 7765 6e6e en (hash).# wenn │ │ │ -00003ee0: 2066 696c 656e 616d 6520 2d3e 206c 696e filename -> lin │ │ │ -00003ef0: 6b65 6e0a 2320 756e 7465 6e20 696d 6d65 ken.# unten imme │ │ │ -00003f00: 7220 5761 7274 6573 6368 6c61 6e67 6520 r Warteschlange │ │ │ -00003f10: 696e 2064 626d 2d66 696c 6520 c3bc 6265 in dbm-file ..be │ │ │ -00003f20: 7270 72c3 bc66 656e 0a09 2020 2020 6d79 rpr..fen.. my │ │ │ -00003f30: 2028 246f 6c64 2c20 246e 6577 2920 3d20 ($old, $new) = │ │ │ -00003f40: 2875 6e64 6566 2c20 756e 6465 6629 3b0a (undef, undef);. │ │ │ -00003f50: 0a09 2020 2020 756e 6c65 7373 2028 246e .. unless ($n │ │ │ -00003f60: 6f48 6172 644c 696e 6b73 2920 2320 4861 oHardLinks) # Ha │ │ │ -00003f70: 7264 204c 696e 6b20 c3bc 6265 7270 72c3 rd Link ..berpr. │ │ │ -00003f80: bc66 656e 0a09 2020 2020 7b0a 0909 6966 .fen.. {...if │ │ │ -00003f90: 2028 6465 6669 6e65 6428 2444 424d 4861 (defined($DBMHa │ │ │ -00003fa0: 7264 4c69 6e6b 7b24 6465 7649 6e6f 6465 rdLink{$devInode │ │ │ -00003fb0: 7d29 2920 2020 2320 6d75 7373 206e 7572 })) # muss nur │ │ │ -00003fc0: 2067 656c 696e 6b74 2077 6572 6465 6e0a gelinkt werden. │ │ │ -00003fd0: 0909 7b0a 0909 2020 2020 2468 6173 546f ..{... $hasTo │ │ │ -00003fe0: 4265 4c69 6e6b 6564 7b24 7461 7267 6574 BeLinked{$target │ │ │ -00003ff0: 4669 6c65 7d20 3d20 5b24 6465 7649 6e6f File} = [$devIno │ │ │ -00004000: 6465 2c20 2475 6964 2c20 2467 6964 2c20 de, $uid, $gid, │ │ │ -00004010: 246d 6f64 652c 0a09 0909 0909 0920 2020 $mode,....... │ │ │ -00004020: 2461 7469 6d65 2c20 246d 7469 6d65 5d3b $atime, $mtime]; │ │ │ -00004030: 0a09 0920 2020 2024 6861 7264 4c69 6e6b ... $hardLink │ │ │ -00004040: 732b 2b3b 0a09 0920 2020 2067 6f74 6f20 s++;... goto │ │ │ -00004050: 636f 6e74 4c6f 6f70 3b0a 0909 7d0a 0909 contLoop;...}... │ │ │ -00004060: 656c 7365 0a09 097b 0a09 0920 2020 2024 else...{... $ │ │ │ -00004070: 4442 4d48 6172 644c 696e 6b7b 2464 6576 DBMHardLink{$dev │ │ │ -00004080: 496e 6f64 657d 203d 2027 2e27 3b20 2020 Inode} = '.'; │ │ │ -00004090: 2320 6973 7420 696e 2042 6561 7262 6569 # ist in Bearbei │ │ │ -000040a0: 7475 6e67 0a09 097d 0a09 2020 2020 7d0a tung...}.. }. │ │ │ -000040b0: 0920 2020 2069 6620 2824 636f 6d70 7220 . if ($compr │ │ │ -000040c0: 6571 2027 7527 2920 2020 2023 2077 6173 eq 'u') # was │ │ │ -000040d0: 206e 6f74 2063 6f6d 7072 6573 7365 642c not compressed, │ │ │ -000040e0: 2061 6c73 6f20 7661 6c69 6420 666f 7220 also valid for │ │ │ -000040f0: 736f 636b 6574 2c0a 0920 2020 207b 2020 socket,.. { │ │ │ -00004100: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00004110: 2020 2023 2062 6c6f 636b 6465 762c 2063 # blockdev, c │ │ │ -00004120: 6861 7264 6576 0a09 0969 6620 286e 6f74 hardev...if (not │ │ │ -00004130: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and │ │ │ -00004140: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile). │ │ │ -00004150: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog │ │ │ -00004160: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00004170: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ -00004180: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -00004190: 7461 7267 6574 3220 2474 6172 6765 7446 target2 $targetF │ │ │ -000041a0: 696c 6520 616c 7265 6164 7920 6578 6973 ile already exis │ │ │ -000041b0: 7473 3a22 2c0a 0909 0909 2020 2022 5c74 ts:",..... "\t │ │ │ -000041c0: 2463 7020 4063 7050 6172 2024 6261 636b $cp @cpPar $back │ │ │ -000041d0: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename │ │ │ -000041e0: 2022 202e 0a09 0909 0920 2020 2224 7461 " ...... "$ta │ │ │ -000041f0: 7267 6574 4669 6c65 225d 293b 0a09 097d rgetFile"]);...} │ │ │ -00004200: 0a09 0965 6c73 650a 0909 7b0a 0909 2020 ...else...{... │ │ │ -00004210: 2020 246e 6f46 696c 6573 436f 7079 2b2b $noFilesCopy++ │ │ │ -00004220: 2075 6e6c 6573 7320 2475 7365 476e 7543 unless $useGnuC │ │ │ -00004230: 703b 0a09 0920 2020 2024 6e6f 536f 636b p;... $noSock │ │ │ -00004240: 6574 732b 2b20 6966 2024 6d64 3573 756d ets++ if $md5sum │ │ │ -00004250: 2065 7120 2773 6f63 6b65 7427 3b0a 0909 eq 'socket';... │ │ │ -00004260: 2020 2020 246e 6f42 6c6f 636b 4465 7673 $noBlockDevs │ │ │ -00004270: 2b2b 2069 6620 246d 6435 7375 6d20 6571 ++ if $md5sum eq │ │ │ -00004280: 2027 626c 6f63 6b64 6576 273b 0a09 0920 'blockdev';... │ │ │ -00004290: 2020 2024 6e6f 4368 6172 4465 7673 2b2b $noCharDevs++ │ │ │ -000042a0: 2069 6620 246d 6435 7375 6d20 6571 2027 if $md5sum eq ' │ │ │ -000042b0: 6368 6172 6465 7627 3b0a 0a09 0920 2020 chardev';.... │ │ │ -000042c0: 2069 6620 2824 7370 6563 6961 6c54 7970 if ($specialTyp │ │ │ -000042d0: 6541 7263 6869 7665 7220 616e 640a 0909 eArchiver and... │ │ │ -000042e0: 096c 656e 6774 6828 246d 6435 7375 6d29 .length($md5sum) │ │ │ -000042f0: 203c 2033 3229 0a23 0909 0924 6172 6368 < 32).#...$arch │ │ │ -00004300: 6976 6554 7970 6573 203d 7e20 2f5b 5362 iveTypes =~ /[Sb │ │ │ -00004310: 635d 2f29 0a09 0920 2020 207b 0a09 0909 c]/)... {.... │ │ │ -00004320: 263a 3a65 7874 7261 6374 4669 6c65 4672 &::extractFileFr │ │ │ -00004330: 6f6d 4172 6368 6976 6528 2466 696c 656e omArchive($filen │ │ │ -00004340: 616d 652c 2024 7461 7267 6574 4469 722c ame, $targetDir, │ │ │ -00004350: 2024 6261 636b 7570 526f 6f74 2c0a 0909 $backupRoot,... │ │ │ -00004360: 0909 0909 2020 2473 7065 6369 616c 5479 .... $specialTy │ │ │ -00004370: 7065 4172 6368 6976 6572 2c20 2470 724c peArchiver, $prL │ │ │ -00004380: 6f67 2c0a 0909 0909 0909 2020 2474 6d70 og,....... $tmp │ │ │ -00004390: 6469 7229 3b0a 0a09 0909 2470 724c 6f67 dir);.....$prLog │ │ │ -000043a0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000043b0: 3d3e 2027 4927 2c0a 0909 0909 2020 2020 => 'I',..... │ │ │ -000043c0: 2020 272d 7374 7227 203d 3e0a 0909 2020 '-str' =>... │ │ │ -000043d0: 2020 2020 5b22 2473 7065 6369 616c 5479 ["$specialTy │ │ │ -000043e0: 7065 4172 6368 6976 6572 2024 6261 636b peArchiver $back │ │ │ -000043f0: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename │ │ │ -00004400: 202d 3e20 2474 6172 6765 7446 696c 6522 -> $targetFile" │ │ │ -00004410: 5d29 0a09 0909 2020 2020 6966 2028 2476 ]).... if ($v │ │ │ -00004420: 6572 626f 7365 293b 0a09 0920 2020 207d erbose);... } │ │ │ -00004430: 0a09 0920 2020 2065 6c73 650a 0909 2020 ... else... │ │ │ -00004440: 2020 7b0a 0909 096d 7920 2470 6172 203d {....my $par = │ │ │ -00004450: 205b 4063 7050 6172 2c20 2224 6261 636b [@cpPar, "$back │ │ │ -00004460: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename │ │ │ -00004470: 222c 2022 2474 6172 6765 7446 696c 6522 ", "$targetFile" │ │ │ -00004480: 5d3b 0a09 0909 2824 6f6c 642c 2024 6e65 ];....($old, $ne │ │ │ -00004490: 7729 203d 0a09 0909 2020 2020 2466 6f72 w) =.... $for │ │ │ -000044a0: 6b2d 3e61 6464 5f62 6c6f 636b 2827 2d65 k->add_block('-e │ │ │ -000044b0: 7865 6327 203d 3e20 2463 702c 0a09 0909 xec' => $cp,.... │ │ │ -000044c0: 0909 2020 2020 2027 2d70 6172 616d 2720 .. '-param' │ │ │ -000044d0: 3d3e 2024 7061 722c 0a09 0909 0909 2020 => $par,...... │ │ │ -000044e0: 2020 2027 2d6f 7574 5261 6e64 6f6d 2720 '-outRandom' │ │ │ -000044f0: 3d3e 2022 2474 6d70 6469 722f 7265 636f => "$tmpdir/reco │ │ │ -00004500: 7665 722d 222c 0a09 0909 0909 2020 2020 ver-",...... │ │ │ -00004510: 2027 2d69 6e66 6f27 203d 3e20 5b24 7461 '-info' => [$ta │ │ │ -00004520: 7267 6574 4669 6c65 2c20 2475 6964 2c20 rgetFile, $uid, │ │ │ -00004530: 2467 6964 2c20 246d 6f64 652c 0a09 0909 $gid, $mode,.... │ │ │ -00004540: 0909 0909 2024 6174 696d 652c 2024 6d74 .... $atime, $mt │ │ │ -00004550: 696d 652c 2024 6465 7649 6e6f 6465 2c0a ime, $devInode,. │ │ │ -00004560: 0909 0909 0909 0920 5b24 6370 2c20 4024 ....... [$cp, @$ │ │ │ -00004570: 7061 725d 5d29 3b0a 0909 0924 7072 4c6f par]]);....$prLo │ │ │ -00004580: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00004590: 203d 3e20 2749 272c 0a09 0909 0920 2020 => 'I',..... │ │ │ -000045a0: 2020 2027 2d73 7472 2720 3d3e 0a09 0909 '-str' =>.... │ │ │ -000045b0: 0920 2020 2020 205b 2263 7020 2462 6163 . ["cp $bac │ │ │ -000045c0: 6b75 7052 6f6f 742f 2466 696c 656e 616d kupRoot/$filenam │ │ │ -000045d0: 6520 2474 6172 6765 7446 696c 6522 5d29 e $targetFile"]) │ │ │ -000045e0: 0a09 0909 2020 2020 6966 2028 2476 6572 .... if ($ver │ │ │ -000045f0: 626f 7365 293b 0a09 0920 2020 207d 0a09 bose);... }.. │ │ │ -00004600: 097d 0a09 2020 2020 7d0a 0920 2020 2065 .}.. }.. e │ │ │ -00004610: 6c73 6966 2028 2463 6f6d 7072 2065 7120 lsif ($compr eq │ │ │ -00004620: 2763 2729 2020 2020 2020 2020 2020 2320 'c') # │ │ │ -00004630: 7761 7220 6b6f 6d70 7269 6d69 6572 740a war komprimiert. │ │ │ -00004640: 0920 2020 207b 0a09 0969 6620 286e 6f74 . {...if (not │ │ │ -00004650: 2024 6f76 6572 7772 6974 6520 616e 6420 $overwrite and │ │ │ -00004660: 2d65 2024 7461 7267 6574 4669 6c65 290a -e $targetFile). │ │ │ -00004670: 0909 7b0a 0909 2020 2020 2470 724c 6f67 ..{... $prLog │ │ │ -00004680: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00004690: 3d3e 2027 5727 2c0a 0909 0909 2020 272d => 'W',..... '- │ │ │ -000046a0: 7374 7227 203d 3e0a 0909 0909 2020 5b22 str' =>..... [" │ │ │ -000046b0: 7461 7267 6574 3320 2474 6172 6765 7446 target3 $targetF │ │ │ -000046c0: 696c 6520 616c 7265 6164 7920 6578 6973 ile already exis │ │ │ -000046d0: 7473 3a22 2c0a 0909 0909 2020 2022 5c74 ts:",..... "\t │ │ │ -000046e0: 2475 6e63 6f6d 7072 2040 756e 636f 6d70 $uncompr @uncomp │ │ │ -000046f0: 7250 6172 2022 202e 0a09 0909 0920 2020 rPar " ...... │ │ │ -00004700: 223c 2024 6261 636b 7570 526f 6f74 2f24 "< $backupRoot/$ │ │ │ -00004710: 6669 6c65 6e61 6d65 2470 6f73 7466 6978 filename$postfix │ │ │ -00004720: 2022 202e 0a09 0909 0920 2020 223e 2024 " ...... "> $ │ │ │ -00004730: 7461 7267 6574 4669 6c65 225d 293b 0a09 targetFile"]);.. │ │ │ -00004740: 097d 0a09 0965 6c73 650a 0909 7b0a 0909 .}...else...{... │ │ │ -00004750: 2020 2020 2b2b 246e 6f46 696c 6573 436f ++$noFilesCo │ │ │ -00004760: 6d70 723b 0a09 0920 2020 206d 7920 2463 mpr;... my $c │ │ │ -00004770: 6f6d 6d20 3d20 5b24 756e 636f 6d70 722c omm = [$uncompr, │ │ │ -00004780: 2040 756e 636f 6d70 7250 6172 2c20 273c @uncomprPar, '< │ │ │ -00004790: 272c 0a09 0909 0922 2462 6163 6b75 7052 ',....."$backupR │ │ │ -000047a0: 6f6f 742f 2466 696c 656e 616d 6524 706f oot/$filename$po │ │ │ -000047b0: 7374 6669 7822 2c20 273e 272c 0a09 0909 stfix", '>',.... │ │ │ -000047c0: 0924 7461 7267 6574 4669 6c65 5d3b 0a09 .$targetFile];.. │ │ │ -000047d0: 0920 2020 2028 246f 6c64 2c20 246e 6577 . ($old, $new │ │ │ -000047e0: 2920 3d0a 0909 0924 666f 726b 2d3e 6164 ) =....$fork->ad │ │ │ -000047f0: 645f 626c 6f63 6b28 272d 6578 6563 2720 d_block('-exec' │ │ │ -00004800: 3d3e 2024 756e 636f 6d70 722c 0a09 0909 => $uncompr,.... │ │ │ -00004810: 0920 2020 272d 7061 7261 6d27 203d 3e20 . '-param' => │ │ │ -00004820: 5c40 756e 636f 6d70 7250 6172 2c0a 0909 \@uncomprPar,... │ │ │ -00004830: 0909 2020 2027 2d73 7464 696e 2720 3d3e .. '-stdin' => │ │ │ -00004840: 2022 2462 6163 6b75 7052 6f6f 742f 2466 "$backupRoot/$f │ │ │ -00004850: 696c 656e 616d 6524 706f 7374 6669 7822 ilename$postfix" │ │ │ -00004860: 2c0a 0909 0909 2020 2027 2d73 7464 6f75 ,..... '-stdou │ │ │ -00004870: 7427 203d 3e20 2224 7461 7267 6574 4669 t' => "$targetFi │ │ │ -00004880: 6c65 222c 0a09 0909 0920 2020 272d 6465 le",..... '-de │ │ │ -00004890: 6c53 7464 6f75 7427 203d 3e20 276e 6f27 lStdout' => 'no' │ │ │ -000048a0: 2c0a 0909 0909 2020 2027 2d6f 7574 5261 ,..... '-outRa │ │ │ -000048b0: 6e64 6f6d 2720 3d3e 2022 2474 6d70 6469 ndom' => "$tmpdi │ │ │ -000048c0: 722f 7265 636f 7665 722d 222c 0a09 0909 r/recover-",.... │ │ │ -000048d0: 0920 2020 272d 696e 666f 2720 3d3e 205b . '-info' => [ │ │ │ -000048e0: 2474 6172 6765 7446 696c 652c 2024 7569 $targetFile, $ui │ │ │ -000048f0: 642c 2024 6769 642c 2024 6d6f 6465 2c0a d, $gid, $mode,. │ │ │ -00004900: 0909 0909 0920 2020 2020 2020 2461 7469 ..... $ati │ │ │ -00004910: 6d65 2c20 246d 7469 6d65 2c20 2464 6576 me, $mtime, $dev │ │ │ -00004920: 496e 6f64 652c 2024 636f 6d6d 5d29 3b0a Inode, $comm]);. │ │ │ -00004930: 0909 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00004940: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00004950: 4927 2c0a 0909 0909 2020 272d 7374 7227 I',..... '-str' │ │ │ -00004960: 203d 3e20 5b22 2475 6e63 6f6d 7072 2040 => ["$uncompr @ │ │ │ -00004970: 756e 636f 6d70 7250 6172 203c 2022 202e uncomprPar < " . │ │ │ -00004980: 0a09 0909 0909 2020 2020 2022 2462 6163 ...... "$bac │ │ │ -00004990: 6b75 7052 6f6f 742f 2466 696c 656e 616d kupRoot/$filenam │ │ │ -000049a0: 6524 706f 7374 6669 7820 3e20 2220 2e0a e$postfix > " .. │ │ │ -000049b0: 0909 0909 0920 2020 2020 2224 7461 7267 ..... "$targ │ │ │ -000049c0: 6574 4669 6c65 225d 290a 0909 0969 6620 etFile"])....if │ │ │ -000049d0: 2824 7665 7262 6f73 6529 3b0a 0909 7d0a ($verbose);...}. │ │ │ -000049e0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi │ │ │ -000049f0: 6620 2824 636f 6d70 7220 6571 2027 6227 f ($compr eq 'b' │ │ │ -00004a00: 2920 2020 2020 2020 2320 626c 6f63 6b65 ) # blocke │ │ │ -00004a10: 6420 6669 6c65 0a09 2020 2020 7b0a 2309 d file.. {.#. │ │ │ -00004a20: 0970 7269 6e74 2022 2464 6576 496e 6f64 .print "$devInod │ │ │ -00004a30: 6520 2d20 2474 6172 6765 7446 696c 6520 e - $targetFile │ │ │ -00004a40: 2d20 2466 696c 656e 616d 655c 6e22 3b0a - $filename\n";. │ │ │ -00004a50: 2309 0969 6620 2824 6465 7649 6e6f 6465 #..if ($devInode │ │ │ -00004a60: 203d 7e20 2f5c 4144 4556 4943 452d 5c64 =~ /\ADEVICE-\d │ │ │ -00004a70: 2b2f 290a 2309 097b 0a23 0909 2020 2020 +/).#..{.#.. │ │ │ -00004a80: 6d79 2028 2464 2c20 2466 2920 3d20 263a my ($d, $f) = &: │ │ │ -00004a90: 3a73 706c 6974 4669 6c65 4469 7228 2224 :splitFileDir("$ │ │ │ -00004aa0: 7461 7267 6574 4469 722f 2466 696c 656e targetDir/$filen │ │ │ -00004ab0: 616d 6522 293b 0a23 0909 2020 2020 263a ame");.#.. &: │ │ │ -00004ac0: 3a6d 616b 6544 6972 5061 7468 2824 642c :makeDirPath($d, │ │ │ -00004ad0: 2024 7072 4c6f 6729 3b0a 2309 097d 0a09 $prLog);.#..}.. │ │ │ -00004ae0: 092b 2b24 6e6f 4669 6c65 7342 6c6f 636b .++$noFilesBlock │ │ │ -00004af0: 6564 3b0a 0909 6d79 2024 636f 6d6d 203d ed;...my $comm = │ │ │ -00004b00: 205b 2263 7020 2862 6c6f 636b 222c 2022 ["cp (block", " │ │ │ -00004b10: 2462 6163 6b75 7052 6f6f 742f 2466 696c $backupRoot/$fil │ │ │ -00004b20: 656e 616d 6524 706f 7374 6669 7822 2c0a ename$postfix",. │ │ │ -00004b30: 0909 0920 2020 2022 2474 6172 6765 7446 ... "$targetF │ │ │ -00004b40: 696c 6522 5d3b 0a09 0928 246f 6c64 2c20 ile"];...($old, │ │ │ -00004b50: 246e 6577 2920 3d0a 0909 2020 2020 2466 $new) =... $f │ │ │ -00004b60: 6f72 6b2d 3e61 6464 5f62 6c6f 636b 2827 ork->add_block(' │ │ │ -00004b70: 2d66 756e 6374 696f 6e27 203d 3e20 5c26 -function' => \& │ │ │ -00004b80: 756e 636f 6d70 7265 7373 4361 7442 6c6f uncompressCatBlo │ │ │ -00004b90: 636b 2c0a 0909 0909 2020 2020 2027 2d66 ck,..... '-f │ │ │ -00004ba0: 756e 6350 6172 2720 3d3e 205b 2224 6261 uncPar' => ["$ba │ │ │ -00004bb0: 636b 7570 526f 6f74 2f24 6669 6c65 6e61 ckupRoot/$filena │ │ │ -00004bc0: 6d65 222c 0a09 0909 0920 2020 2020 2462 me",..... $b │ │ │ -00004bd0: 6163 6b75 7052 6f6f 742c 2024 6372 6561 ackupRoot, $crea │ │ │ -00004be0: 7465 5370 6172 7365 4669 6c65 732c 0a09 teSparseFiles,.. │ │ │ -00004bf0: 0909 0920 2020 2020 2474 6172 6765 7446 ... $targetF │ │ │ -00004c00: 696c 652c 2027 5c41 5c64 2e2a 272c 2024 ile, '\A\d.*', $ │ │ │ -00004c10: 756e 636f 6d70 722c 205c 4075 6e63 6f6d uncompr, \@uncom │ │ │ -00004c20: 7072 5061 722c 0a09 0909 0920 2020 2020 prPar,..... │ │ │ -00004c30: 2470 6f73 7466 6978 2c20 2473 697a 652c $postfix, $size, │ │ │ -00004c40: 2024 7072 4c6f 675d 2c0a 0909 0909 2020 $prLog],..... │ │ │ -00004c50: 2020 2027 2d69 6e66 6f27 203d 3e20 5b24 '-info' => [$ │ │ │ -00004c60: 7461 7267 6574 4669 6c65 2c20 2475 6964 targetFile, $uid │ │ │ -00004c70: 2c20 2467 6964 2c20 246d 6f64 652c 0a09 , $gid, $mode,.. │ │ │ -00004c80: 0909 0909 0920 2461 7469 6d65 2c20 246d ..... $atime, $m │ │ │ -00004c90: 7469 6d65 2c20 2464 6576 496e 6f64 652c time, $devInode, │ │ │ -00004ca0: 2024 636f 6d6d 5d29 3b0a 0909 2470 724c $comm]);...$prL │ │ │ -00004cb0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00004cc0: 2720 3d3e 2027 4927 2c0a 0909 0920 2020 ' => 'I',.... │ │ │ -00004cd0: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -00004ce0: 7020 2862 6c6f 636b 6564 2920 2220 2e0a p (blocked) " .. │ │ │ -00004cf0: 0909 0909 0920 2020 2020 2224 6261 636b ..... "$back │ │ │ -00004d00: 7570 526f 6f74 2f24 6669 6c65 6e61 6d65 upRoot/$filename │ │ │ -00004d10: 2470 6f73 7466 6978 2022 202e 0a09 0909 $postfix " ..... │ │ │ -00004d20: 0909 2020 2020 2022 2474 6172 6765 7446 .. "$targetF │ │ │ -00004d30: 696c 6522 5d29 0a09 0909 6966 2028 2476 ile"])....if ($v │ │ │ -00004d40: 6572 626f 7365 293b 0a09 2020 2020 7d0a erbose);.. }. │ │ │ -00004d50: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. { │ │ │ -00004d60: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00004d70: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00004d80: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -00004d90: 203d 3e0a 0909 0920 2020 2020 205b 2275 =>.... ["u │ │ │ -00004da0: 6e6b 6e6f 7720 636f 6d70 7220 666c 6167 nknow compr flag │ │ │ -00004db0: 203c 2463 6f6d 7072 3e20 696e 202e 6d64 <$compr> in .md │ │ │ -00004dc0: 3543 6865 636b 5375 6d73 2022 202e 0a09 5CheckSums " ... │ │ │ -00004dd0: 0909 2020 2020 2020 2022 666f 7220 6669 .. "for fi │ │ │ -00004de0: 6c65 203c 2462 6163 6b75 7052 6f6f 742f le <$backupRoot/ │ │ │ -00004df0: 2466 696c 656e 616d 653e 225d 293b 0a09 $filename>"]);.. │ │ │ -00004e00: 0924 6578 6974 203d 2031 3b0a 0920 2020 .$exit = 1;.. │ │ │ -00004e10: 207d 0a09 2020 2020 6966 2028 246f 6c64 }.. if ($old │ │ │ -00004e20: 290a 0920 2020 207b 0a09 096d 7920 2824 ).. {...my ($ │ │ │ -00004e30: 662c 2024 6f55 6964 2c20 246f 4769 642c f, $oUid, $oGid, │ │ │ -00004e40: 2024 6f4d 6f64 652c 2024 6f41 7469 6d65 $oMode, $oAtime │ │ │ -00004e50: 2c20 246f 4d74 696d 652c 2024 6f44 6576 , $oMtime, $oDev │ │ │ -00004e60: 496e 6f64 6529 203d 0a09 0920 2020 2040 Inode) =... @ │ │ │ -00004e70: 7b24 6f6c 642d 3e67 6574 2827 2d77 6861 {$old->get('-wha │ │ │ -00004e80: 7427 203d 3e20 2769 6e66 6f27 297d 3b0a t' => 'info')};. │ │ │ -00004e90: 0909 756e 6c65 7373 2028 246e 6f48 6172 ..unless ($noHar │ │ │ -00004ea0: 644c 696e 6b73 290a 0909 7b20 2020 2020 dLinks)...{ │ │ │ -00004eb0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00004ec0: 2020 2020 2020 2020 2020 2020 2320 4669 # Fi │ │ │ -00004ed0: 6c65 2069 6e20 4442 4d20 7665 726d 6572 le in DBM vermer │ │ │ -00004ee0: 6b65 6e0a 0909 2020 2020 2444 424d 4861 ken... $DBMHa │ │ │ -00004ef0: 7264 4c69 6e6b 7b24 6f44 6576 496e 6f64 rdLink{$oDevInod │ │ │ -00004f00: 657d 203d 2024 663b 0a09 097d 0a09 0963 e} = $f;...}...c │ │ │ -00004f10: 686f 776e 2024 6f55 6964 2c20 246f 4769 hown $oUid, $oGi │ │ │ -00004f20: 642c 2024 663b 0a09 0963 686d 6f64 2024 d, $f;...chmod $ │ │ │ -00004f30: 6f4d 6f64 652c 2024 663b 0a09 0975 7469 oMode, $f;...uti │ │ │ -00004f40: 6d65 2024 6f41 7469 6d65 2c20 246f 4d74 me $oAtime, $oMt │ │ │ -00004f50: 696d 652c 2024 663b 0a09 2020 2020 7d0a ime, $f;.. }. │ │ │ -00004f60: 0a09 2020 2020 676f 746f 2066 696e 6973 .. goto finis │ │ │ -00004f70: 6820 6966 2024 6973 4669 6c65 3b20 2020 h if $isFile; │ │ │ -00004f80: 2023 2061 7566 68c3 b672 656e 2c20 6973 # aufh..ren, is │ │ │ -00004f90: 7420 6e75 7220 5f65 696e 655f 2044 6174 t nur _eine_ Dat │ │ │ -00004fa0: 6569 0a09 7d0a 0965 6c73 6520 2020 2023 ei..}..else # │ │ │ -00004fb0: 2075 6e6b 6e6f 776e 2074 7970 650a 097b unknown type..{ │ │ │ -00004fc0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -00004fd0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00004fe0: 4527 2c0a 0909 0920 2027 2d73 7472 2720 E',.... '-str' │ │ │ -00004ff0: 3d3e 0a09 0909 2020 5b22 756e 6b6e 6f77 =>.... ["unknow │ │ │ -00005000: 6e20 656e 7472 7920 3c24 6d64 3573 756d n entry <$md5sum │ │ │ -00005010: 3e20 666f 7220 6669 6c65 203c 2466 696c > for file <$fil │ │ │ -00005020: 656e 616d 653e 3a22 5d29 3b0a 0920 2020 ename>:"]);.. │ │ │ -00005030: 2024 6578 6974 203d 2031 3b0a 097d 0a20 $exit = 1;..}. │ │ │ -00005040: 2020 207d 0a0a 636f 6e74 4c6f 6f70 3a3b }..contLoop:; │ │ │ -00005050: 0a23 206e 6163 6873 6568 656e 2c20 6f62 .# nachsehen, ob │ │ │ -00005060: 206f 6666 656e 6520 4c69 6e6b 7320 6765 offene Links ge │ │ │ -00005070: 7365 747a 7420 7765 7264 656e 206b c3b6 setzt werden k.. │ │ │ -00005080: 6e6e 656e 0a20 2020 2026 7365 7448 6172 nnen. &setHar │ │ │ -00005090: 644c 696e 6b73 285c 2568 6173 546f 4265 dLinks(\%hasToBe │ │ │ -000050a0: 4c69 6e6b 6564 2c20 5c25 4442 4d48 6172 Linked, \%DBMHar │ │ │ -000050b0: 644c 696e 6b2c 2024 7072 4c6f 672c 2024 dLink, $prLog, $ │ │ │ -000050c0: 7665 7262 6f73 6529 0a09 756e 6c65 7373 verbose)..unless │ │ │ -000050d0: 2024 6e6f 4861 7264 4c69 6e6b 733b 0a0a $noHardLinks;.. │ │ │ -000050e0: 7d0a 0a66 696e 6973 683a 3b0a 0a6d 7920 }..finish:;..my │ │ │ -000050f0: 246a 6f62 3b0a 7768 696c 6520 2824 6a6f $job;.while ($jo │ │ │ -00005100: 6220 3d20 2466 6f72 6b2d 3e77 6169 7446 b = $fork->waitF │ │ │ -00005110: 6f72 416c 6c4a 6f62 7328 2929 0a7b 0a20 orAllJobs()).{. │ │ │ -00005120: 2020 206d 7920 2824 662c 2024 6f55 6964 my ($f, $oUid │ │ │ -00005130: 2c20 246f 4769 642c 2024 6f4d 6f64 652c , $oGid, $oMode, │ │ │ -00005140: 2024 6f41 7469 6d65 2c20 246f 4d74 696d $oAtime, $oMtim │ │ │ -00005150: 652c 2024 6f44 6576 496e 6f64 652c 2024 e, $oDevInode, $ │ │ │ -00005160: 636f 6d6d 2920 3d0a 0940 7b24 6a6f 622d comm) =..@{$job- │ │ │ -00005170: 3e67 6574 2827 2d77 6861 7427 203d 3e20 >get('-what' => │ │ │ -00005180: 2769 6e66 6f27 297d 3b0a 0a20 2020 2069 'info')};.. i │ │ │ -00005190: 6620 2872 6566 2824 6a6f 6229 2065 7120 f (ref($job) eq │ │ │ -000051a0: 2766 6f72 6b50 726f 6327 290a 2020 2020 'forkProc'). │ │ │ -000051b0: 7b0a 096d 7920 246f 7574 203d 2024 6a6f {..my $out = $jo │ │ │ -000051c0: 622d 3e67 6574 5354 4445 5252 2829 3b0a b->getSTDERR();. │ │ │ -000051d0: 0969 6620 2840 246f 7574 203e 2030 290a .if (@$out > 0). │ │ │ -000051e0: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog-> │ │ │ -000051f0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00005200: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -00005210: 2720 3d3e 205b 2253 5444 4552 5220 6f66 ' => ["STDERR of │ │ │ -00005220: 3a20 4024 636f 6d6d 222c 2040 246f 7574 : @$comm", @$out │ │ │ -00005230: 5d29 3b0a 0920 2020 2024 6578 6974 203d ]);.. $exit = │ │ │ -00005240: 2031 3b0a 097d 0a09 6966 2028 246a 6f62 1;..}..if ($job │ │ │ -00005250: 2d3e 6765 7428 272d 7768 6174 2720 3d3e ->get('-what' => │ │ │ -00005260: 2027 7374 6174 7573 2729 290a 097b 0a09 'status'))..{.. │ │ │ -00005270: 2020 2020 2465 7869 7420 3d20 313b 0a09 $exit = 1;.. │ │ │ -00005280: 7d0a 2020 2020 7d0a 0a20 2020 2075 6e6c }. }.. unl │ │ │ -00005290: 6573 7320 2824 6e6f 4861 7264 4c69 6e6b ess ($noHardLink │ │ │ -000052a0: 7329 0a20 2020 207b 2020 2020 2020 2020 s). { │ │ │ -000052b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000052c0: 2020 2020 2020 2020 2023 2046 696c 6520 # File │ │ │ -000052d0: 696e 2044 424d 2076 6572 6d65 726b 656e in DBM vermerken │ │ │ -000052e0: 0a09 2444 424d 4861 7264 4c69 6e6b 7b24 ..$DBMHardLink{$ │ │ │ -000052f0: 6f44 6576 496e 6f64 657d 203d 2024 663b oDevInode} = $f; │ │ │ -00005300: 0a20 2020 207d 0a20 2020 2063 686f 776e . }. chown │ │ │ -00005310: 2024 6f55 6964 2c20 246f 4769 642c 2024 $oUid, $oGid, $ │ │ │ -00005320: 663b 0a20 2020 2063 686d 6f64 2024 6f4d f;. chmod $oM │ │ │ -00005330: 6f64 652c 2024 663b 0a20 2020 2075 7469 ode, $f;. uti │ │ │ -00005340: 6d65 2024 6f41 7469 6d65 2c20 246f 4d74 me $oAtime, $oMt │ │ │ -00005350: 696d 652c 2024 660a 7d0a 0a75 6e6c 6573 ime, $f.}..unles │ │ │ -00005360: 7320 2824 6e6f 4861 7264 4c69 6e6b 7329 s ($noHardLinks) │ │ │ -00005370: 0a7b 0a20 2020 2026 7365 7448 6172 644c .{. &setHardL │ │ │ -00005380: 696e 6b73 285c 2568 6173 546f 4265 4c69 inks(\%hasToBeLi │ │ │ -00005390: 6e6b 6564 2c20 5c25 4442 4d48 6172 644c nked, \%DBMHardL │ │ │ -000053a0: 696e 6b2c 2024 7072 4c6f 672c 2024 7665 ink, $prLog, $ve │ │ │ -000053b0: 7262 6f73 6529 3b0a 2020 2020 6462 6d63 rbose);. dbmc │ │ │ -000053c0: 6c6f 7365 2825 4442 4d48 6172 644c 696e lose(%DBMHardLin │ │ │ -000053d0: 6b29 3b0a 2020 2020 756e 6c69 6e6b 2022 k);. unlink " │ │ │ -000053e0: 2474 6d70 6469 722f 7374 6272 6563 6f76 $tmpdir/stbrecov │ │ │ -000053f0: 6572 2e24 2422 3b0a 7d0a 0a23 2073 6574 er.$$";.}..# set │ │ │ -00005400: 2061 7469 6d65 2c20 6d74 696d 652c 206d atime, mtime, m │ │ │ -00005410: 6f64 6520 6f66 2064 6972 6563 746f 7269 ode of directori │ │ │ -00005420: 6573 0a63 6c6f 7365 2844 4952 4649 4c45 es.close(DIRFILE │ │ │ -00005430: 293b 0a75 6e6c 6573 7320 286f 7065 6e28 );.unless (open( │ │ │ -00005440: 4449 5246 494c 452c 2027 3c27 2c20 2474 DIRFILE, '<', $t │ │ │ -00005450: 6d70 4469 7246 696c 6529 290a 7b0a 2020 mpDirFile)).{. │ │ │ -00005460: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00005470: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00005480: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -00005490: 6361 6e6e 6f74 2072 6561 6420 3c24 746d cannot read <$tm │ │ │ -000054a0: 7044 6972 4669 6c65 3e2c 2063 616e 6e6f pDirFile>, canno │ │ │ -000054b0: 7420 7365 7420 2220 2e0a 0909 0920 2020 t set " ..... │ │ │ -000054c0: 2020 2261 7469 6d65 2061 6e64 206d 7469 "atime and mti │ │ │ -000054d0: 6d65 2066 6f72 2064 6972 6563 746f 7269 me for directori │ │ │ -000054e0: 6573 225d 293b 0a20 2020 2024 6578 6974 es"]);. $exit │ │ │ -000054f0: 203d 2031 3b0a 7d0a 656c 7365 0a7b 0a20 = 1;.}.else.{. │ │ │ -00005500: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00005510: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00005520: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00005530: 2273 6574 7469 6e67 2061 7469 6d65 2c20 "setting atime, │ │ │ -00005540: 6d74 696d 6520 6f66 2064 6972 6563 746f mtime of directo │ │ │ -00005550: 7269 6573 202e 2e2e 225d 290a 0969 6620 ries ..."])..if │ │ │ -00005560: 2476 6572 626f 7365 3b0a 0a20 2020 206d $verbose;.. m │ │ │ -00005570: 7920 246c 696e 653b 0a20 2020 2077 6869 y $line;. whi │ │ │ -00005580: 6c65 2028 246c 696e 6520 3d20 3c44 4952 le ($line = ). {..ch │ │ │ -000055a0: 6f70 2024 6c69 6e65 3b0a 096d 7920 2824 op $line;..my ($ │ │ │ -000055b0: 6174 696d 652c 2024 6d74 696d 652c 2024 atime, $mtime, $ │ │ │ -000055c0: 6d6f 6465 2c20 2464 6629 203d 2073 706c mode, $df) = spl │ │ │ -000055d0: 6974 282f 5c73 2f2c 2024 6c69 6e65 2c20 it(/\s/, $line, │ │ │ -000055e0: 3429 3b0a 0924 6466 203d 7e20 732f 5c30 4);..$df =~ s/\0 │ │ │ -000055f0: 2f5c 6e2f 6f67 3b0a 0963 686d 6f64 2024 /\n/og;..chmod $ │ │ │ -00005600: 6d6f 6465 2c20 2464 663b 0a09 7574 696d mode, $df;..utim │ │ │ -00005610: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ -00005620: 2c20 2464 663b 0a09 7574 696d 6520 2461 , $df;..utime $a │ │ │ -00005630: 7469 6d65 2c20 246d 7469 6d65 2c20 2464 time, $mtime, $d │ │ │ -00005640: 663b 0a20 2020 207d 0a20 2020 2063 6c6f f;. }. clo │ │ │ -00005650: 7365 2844 4952 4649 4c45 293b 0a7d 0a75 se(DIRFILE);.}.u │ │ │ -00005660: 6e6c 696e 6b20 2474 6d70 4469 7246 696c nlink $tmpDirFil │ │ │ -00005670: 653b 0a0a 2470 724c 6f67 2d3e 7072 696e e;..$prLog->prin │ │ │ -00005680: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ -00005690: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -000056a0: 3d3e 0a09 2020 2020 2020 5b6a 6f69 6e28 =>.. [join( │ │ │ -000056b0: 272c 2027 2c0a 0909 2020 2020 2824 6e6f ', ',... ($no │ │ │ -000056c0: 4469 7273 203f 2022 246e 6f44 6972 7320 Dirs ? "$noDirs │ │ │ -000056d0: 6469 7273 2220 3a20 2829 292c 0a09 0920 dirs" : ()),... │ │ │ -000056e0: 2020 2028 2468 6172 644c 696e 6b73 203f ($hardLinks ? │ │ │ -000056f0: 2022 2468 6172 644c 696e 6b73 2068 6172 "$hardLinks har │ │ │ -00005700: 646c 696e 6b73 2220 3a20 2829 292c 0a09 dlinks" : ()),.. │ │ │ -00005710: 0920 2020 2028 246e 6f53 796d 4c69 6e6b . ($noSymLink │ │ │ -00005720: 7320 3f20 2224 6e6f 5379 6d4c 696e 6b73 s ? "$noSymLinks │ │ │ -00005730: 2073 796d 6c69 6e6b 7322 203a 2028 2929 symlinks" : ()) │ │ │ -00005740: 2c0a 0909 2020 2020 2824 6e6f 4e61 6d65 ,... ($noName │ │ │ -00005750: 6450 6970 6573 203f 2022 246e 6f4e 616d dPipes ? "$noNam │ │ │ -00005760: 6564 5069 7065 7320 6e61 6d65 6420 7069 edPipes named pi │ │ │ -00005770: 7065 7322 203a 2028 2929 2c0a 0909 2020 pes" : ()),... │ │ │ -00005780: 2020 2824 6e6f 536f 636b 6574 7320 3f20 ($noSockets ? │ │ │ -00005790: 2224 6e6f 536f 636b 6574 7320 736f 636b "$noSockets sock │ │ │ -000057a0: 6574 7322 203a 2028 2929 2c0a 0909 2020 ets" : ()),... │ │ │ -000057b0: 2020 2824 6e6f 426c 6f63 6b44 6576 7320 ($noBlockDevs │ │ │ -000057c0: 3f20 2224 6e6f 426c 6f63 6b44 6576 7320 ? "$noBlockDevs │ │ │ -000057d0: 626c 6f63 6b20 6465 7673 2220 3a20 2829 block devs" : () │ │ │ -000057e0: 292c 0a09 0920 2020 2028 246e 6f43 6861 ),... ($noCha │ │ │ -000057f0: 7244 6576 7320 3f20 2224 6e6f 4368 6172 rDevs ? "$noChar │ │ │ -00005800: 4465 7673 2063 6861 7220 6465 7673 2220 Devs char devs" │ │ │ -00005810: 3a20 2829 292c 0a09 0920 2020 2028 246e : ()),... ($n │ │ │ -00005820: 6f46 696c 6573 436f 7079 203f 2022 246e oFilesCopy ? "$n │ │ │ -00005830: 6f46 696c 6573 436f 7079 2063 6f70 6965 oFilesCopy copie │ │ │ -00005840: 6422 203a 2028 2929 2c0a 0909 2020 2020 d" : ()),... │ │ │ -00005850: 2824 6e6f 4669 6c65 7343 6f6d 7072 203f ($noFilesCompr ? │ │ │ -00005860: 2022 246e 6f46 696c 6573 436f 6d70 7220 "$noFilesCompr │ │ │ -00005870: 756e 636f 6d70 7265 7373 6564 2220 3a20 uncompressed" : │ │ │ -00005880: 2829 292c 0a09 0920 2020 2028 246e 6f46 ()),... ($noF │ │ │ -00005890: 696c 6573 426c 6f63 6b65 6420 3f20 2224 ilesBlocked ? "$ │ │ │ -000058a0: 6e6f 4669 6c65 7342 6c6f 636b 6564 2063 noFilesBlocked c │ │ │ -000058b0: 6174 2062 6c6f 636b 6564 2066 696c 6573 at blocked files │ │ │ -000058c0: 2220 3a20 2829 2929 5d0a 2020 2020 290a " : ()))]. ). │ │ │ -000058d0: 2020 2020 6966 2028 246e 6f52 6573 746f if ($noResto │ │ │ -000058e0: 7265 6429 3b0a 0a65 7869 7420 2465 7869 red);..exit $exi │ │ │ -000058f0: 743b 0a0a 0a23 2323 2323 2323 2323 2323 t;...########### │ │ │ -00005900: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005910: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005920: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005930: 230a 7375 6220 7365 7448 6172 644c 696e #.sub setHardLin │ │ │ -00005940: 6b73 0a7b 0a20 2020 206d 7920 2824 6861 ks.{. my ($ha │ │ │ -00005950: 7354 6f42 654c 696e 6b65 642c 2024 4442 sToBeLinked, $DB │ │ │ -00005960: 4d48 6172 644c 696e 6b2c 2024 7072 4c6f MHardLink, $prLo │ │ │ -00005970: 672c 2024 7665 7262 6f73 6529 203d 2040 g, $verbose) = @ │ │ │ -00005980: 5f3b 0a0a 2020 2020 6d79 2024 663b 0a20 _;.. my $f;. │ │ │ -00005990: 2020 2066 6f72 6561 6368 2024 6620 286b foreach $f (k │ │ │ -000059a0: 6579 7320 2524 6861 7354 6f42 654c 696e eys %$hasToBeLin │ │ │ -000059b0: 6b65 6429 0a20 2020 207b 0a09 6d79 2028 ked). {..my ( │ │ │ -000059c0: 2464 692c 2024 7569 642c 2024 6769 642c $di, $uid, $gid, │ │ │ -000059d0: 2024 6d6f 6465 2c20 2461 7469 6d65 2c20 $mode, $atime, │ │ │ -000059e0: 246d 7469 6d65 2920 3d20 407b 2424 6861 $mtime) = @{$$ha │ │ │ -000059f0: 7354 6f42 654c 696e 6b65 647b 2466 7d7d sToBeLinked{$f}} │ │ │ -00005a00: 3b0a 0969 6620 2864 6566 696e 6564 2824 ;..if (defined($ │ │ │ -00005a10: 2444 424d 4861 7264 4c69 6e6b 7b24 6469 $DBMHardLink{$di │ │ │ -00005a20: 7d29 2061 6e64 2024 2444 424d 4861 7264 }) and $$DBMHard │ │ │ -00005a30: 4c69 6e6b 7b24 6469 7d20 6e65 2027 2e27 Link{$di} ne '.' │ │ │ -00005a40: 290a 097b 0a09 2020 2020 6d79 2024 6f6c )..{.. my $ol │ │ │ -00005a50: 6446 203d 2024 2444 424d 4861 7264 4c69 dF = $$DBMHardLi │ │ │ -00005a60: 6e6b 7b24 6469 7d3b 0a09 2020 2020 6966 nk{$di};.. if │ │ │ -00005a70: 2028 2d65 2024 6629 0a09 2020 2020 7b0a (-e $f).. {. │ │ │ -00005a80: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00005a90: 272d 6b69 6e64 2720 3d3e 2027 5727 2c0a '-kind' => 'W',. │ │ │ -00005aa0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00005ab0: 3d3e 205b 2263 616e 6e6f 7420 6c69 6e6b => ["cannot link │ │ │ -00005ac0: 203c 2466 3e20 746f 2069 7473 656c 6622 <$f> to itself" │ │ │ -00005ad0: 5d29 3b0a 0920 2020 207d 0a09 2020 2020 ]);.. }.. │ │ │ -00005ae0: 656c 7365 0a09 2020 2020 7b09 090a 0909 else.. {..... │ │ │ -00005af0: 6966 2028 6c69 6e6b 2024 6f6c 6446 2c20 if (link $oldF, │ │ │ -00005b00: 2466 290a 0909 7b0a 0909 2020 2020 2470 $f)...{... $p │ │ │ -00005b10: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00005b20: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',..... │ │ │ -00005b30: 2020 272d 7374 7227 203d 3e20 5b22 6c69 '-str' => ["li │ │ │ -00005b40: 6e6b 2024 6f6c 6446 2024 6622 5d29 0a09 nk $oldF $f"]).. │ │ │ -00005b50: 0909 6966 2028 2476 6572 626f 7365 293b ..if ($verbose); │ │ │ -00005b60: 0a09 0920 2020 2063 686f 776e 2024 7569 ... chown $ui │ │ │ -00005b70: 642c 2024 6769 642c 2024 663b 0a09 0920 d, $gid, $f;... │ │ │ -00005b80: 2020 2063 686d 6f64 2024 6d6f 6465 2c20 chmod $mode, │ │ │ -00005b90: 2466 3b0a 0909 2020 2020 7574 696d 6520 $f;... utime │ │ │ -00005ba0: 2461 7469 6d65 2c20 246d 7469 6d65 2c20 $atime, $mtime, │ │ │ -00005bb0: 2466 3b0a 0909 7d0a 0909 656c 7365 0a09 $f;...}...else.. │ │ │ -00005bc0: 097b 0a09 0920 2020 2024 7072 4c6f 672d .{... $prLog- │ │ │ -00005bd0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00005be0: 3e20 2745 272c 0a09 0909 0920 2027 2d73 > 'E',..... '-s │ │ │ -00005bf0: 7472 2720 3d3e 205b 2266 6169 6c65 643a tr' => ["failed: │ │ │ -00005c00: 206c 696e 6b20 246f 6c64 4620 2466 225d link $oldF $f"] │ │ │ -00005c10: 293b 0a09 097d 0a09 2020 2020 7d0a 0920 );...}.. }.. │ │ │ -00005c20: 2020 2064 656c 6574 6520 2424 6861 7354 delete $$hasT │ │ │ -00005c30: 6f42 654c 696e 6b65 647b 2466 7d3b 0a09 oBeLinked{$f};.. │ │ │ -00005c40: 7d0a 2020 2020 7d0a 7d0a 0a0a 2323 2323 }. }.}...#### │ │ │ -00005c50: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005c60: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00005c70: 2323 2323 0a73 7562 2075 6e63 6f6d 7072 ####.sub uncompr │ │ │ -00005c80: 6573 7343 6174 426c 6f63 6b0a 7b0a 2020 essCatBlock.{. │ │ │ -00005c90: 2020 6d79 2024 6672 6f6d 4469 7220 3d20 my $fromDir = │ │ │ -00005ca0: 7368 6966 743b 0a20 2020 206d 7920 2462 shift;. my $b │ │ │ -00005cb0: 6163 6b75 7052 6f6f 7420 3d20 7368 6966 ackupRoot = shif │ │ │ -00005cc0: 743b 0a20 2020 206d 7920 2463 7265 6174 t;. my $creat │ │ │ -00005cd0: 6553 7061 7273 6546 696c 6573 203d 2073 eSparseFiles = s │ │ │ -00005ce0: 6869 6674 3b0a 2020 2020 6d79 2024 746f hift;. my $to │ │ │ -00005cf0: 4669 6c65 203d 2073 6869 6674 3b0a 2020 File = shift;. │ │ │ -00005d00: 2020 6d79 2024 6d61 736b 203d 2073 6869 my $mask = shi │ │ │ -00005d10: 6674 3b0a 2020 2020 6d79 2024 756d 636f ft;. my $umco │ │ │ -00005d20: 6d70 7220 3d20 7368 6966 743b 0a20 2020 mpr = shift;. │ │ │ -00005d30: 206d 7920 2475 6e63 6f6d 7072 5061 7220 my $uncomprPar │ │ │ -00005d40: 3d20 7368 6966 743b 0a20 2020 206d 7920 = shift;. my │ │ │ -00005d50: 2470 6f73 7466 6978 203d 2073 6869 6674 $postfix = shift │ │ │ -00005d60: 3b0a 2020 2020 6d79 2024 7369 7a65 203d ;. my $size = │ │ │ -00005d70: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $ │ │ │ -00005d80: 7072 4c6f 6720 3d20 7368 6966 743b 0a0a prLog = shift;.. │ │ │ -00005d90: 2020 2020 6d79 2024 6e42 6c6f 636b 7320 my $nBlocks │ │ │ -00005da0: 3d20 303b 0a20 2020 206d 7920 2840 656e = 0;. my (@en │ │ │ -00005db0: 7472 6965 732c 2040 6d64 352c 2040 636f tries, @md5, @co │ │ │ -00005dc0: 6d70 7229 3b0a 0a20 2020 206d 7920 2466 mpr);.. my $f │ │ │ -00005dd0: 696c 6549 6e20 3d0a 0970 6970 6546 726f ileIn =..pipeFro │ │ │ -00005de0: 6d46 6f72 6b2d 3e6e 6577 2827 2d65 7865 mFork->new('-exe │ │ │ -00005df0: 6327 203d 3e20 2762 7a69 7032 272c 0a09 c' => 'bzip2',.. │ │ │ -00005e00: 0909 2020 272d 7061 7261 6d27 203d 3e20 .. '-param' => │ │ │ -00005e10: 5b27 2d64 275d 2c0a 0909 0920 2027 2d73 ['-d'],.... '-s │ │ │ -00005e20: 7464 696e 2720 3d3e 2022 2466 726f 6d44 tdin' => "$fromD │ │ │ -00005e30: 6972 2f2e 6d64 3542 6c6f 636b 4368 6563 ir/.md5BlockChec │ │ │ -00005e40: 6b53 756d 732e 627a 3222 2c0a 0909 0920 kSums.bz2",.... │ │ │ -00005e50: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ -00005e60: 2022 2474 6d70 6469 722f 7374 6275 5069 "$tmpdir/stbuPi │ │ │ -00005e70: 7065 4672 6f6d 3131 2d22 2c0a 0909 0920 peFrom11-",.... │ │ │ -00005e80: 2027 2d70 724c 6f67 2720 3d3e 2024 7072 '-prLog' => $pr │ │ │ -00005e90: 4c6f 6729 3b0a 2020 2020 6d79 2024 6c3b Log);. my $l; │ │ │ -00005ea0: 0a20 2020 2077 6869 6c65 2028 246c 203d . while ($l = │ │ │ -00005eb0: 2024 6669 6c65 496e 2d3e 7265 6164 2829 $fileIn->read() │ │ │ -00005ec0: 290a 2020 2020 7b0a 096d 7920 2824 6c5f ). {..my ($l_ │ │ │ -00005ed0: 6d64 352c 2024 6c5f 636f 6d70 722c 2024 md5, $l_compr, $ │ │ │ -00005ee0: 6c5f 662c 2024 6e29 3b0a 0963 686f 6d70 l_f, $n);..chomp │ │ │ -00005ef0: 2024 6c3b 0a09 246e 203d 2028 246c 5f6d $l;..$n = ($l_m │ │ │ -00005f00: 6435 2c20 246c 5f63 6f6d 7072 2c20 246c d5, $l_compr, $l │ │ │ -00005f10: 5f66 2920 3d20 7370 6c69 7428 2f5c 732f _f) = split(/\s/ │ │ │ -00005f20: 2c20 246c 2c20 3329 3b0a 0969 6620 2824 , $l, 3);..if ($ │ │ │ -00005f30: 6e20 213d 2033 290a 097b 0a09 2020 2020 n != 3)..{.. │ │ │ -00005f40: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00005f50: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00005f60: 0920 2027 2d73 7472 2720 3d3e 0a09 0909 . '-str' =>.... │ │ │ -00005f70: 2020 5b22 7374 7261 6e67 6520 6c69 6e65 ["strange line │ │ │ -00005f80: 2069 6e20 3c24 6672 6f6d 4469 722f 2e6d in <$fromDir/.m │ │ │ -00005f90: 6435 426c 6f63 6b43 6865 636b 5375 6d73 d5BlockCheckSums │ │ │ -00005fa0: 2e62 7a32 3e20 2220 2e0a 0909 0920 2020 .bz2> " ..... │ │ │ -00005fb0: 2269 6e20 6c69 6e65 2022 202e 2024 6669 "in line " . $fi │ │ │ -00005fc0: 6c65 496e 2d3e 6765 7428 272d 7768 6174 leIn->get('-what │ │ │ -00005fd0: 2720 3d3e 2027 6c69 6e65 4e72 2729 202e ' => 'lineNr') . │ │ │ -00005fe0: 0a09 0909 2020 2022 3a22 2c20 225c 743c .... ":", "\t< │ │ │ -00005ff0: 246c 3e22 5d29 3b0a 0920 2020 2072 6574 $l>"]);.. ret │ │ │ -00006000: 7572 6e20 313b 0a09 7d0a 092b 2b24 6e42 urn 1;..}..++$nB │ │ │ -00006010: 6c6f 636b 733b 0a09 7075 7368 2040 6d64 locks;..push @md │ │ │ -00006020: 352c 2024 6c5f 6d64 353b 0a09 7075 7368 5, $l_md5;..push │ │ │ -00006030: 2040 636f 6d70 722c 2024 6c5f 636f 6d70 @compr, $l_comp │ │ │ -00006040: 723b 0a09 7075 7368 2040 656e 7472 6965 r;..push @entrie │ │ │ -00006050: 732c 2024 6c5f 663b 0a20 2020 207d 0a20 s, $l_f;. }. │ │ │ -00006060: 2020 2024 6669 6c65 496e 2d3e 636c 6f73 $fileIn->clos │ │ │ -00006070: 6528 293b 0a20 2020 2024 6669 6c65 496e e();. $fileIn │ │ │ -00006080: 203d 2075 6e64 6566 3b0a 0a20 2020 2026 = undef;.. & │ │ │ -00006090: 3a3a 6372 6561 7465 5370 6172 7365 4669 ::createSparseFi │ │ │ -000060a0: 6c65 2824 746f 4669 6c65 2c20 2473 697a le($toFile, $siz │ │ │ -000060b0: 652c 2024 7072 4c6f 6729 206f 7220 6578 e, $prLog) or ex │ │ │ -000060c0: 6974 2031 3b0a 0a20 2020 206d 7920 246d it 1;.. my $m │ │ │ -000060d0: 6435 6e75 6c6c 203d 2027 273b 0a0a 2020 d5null = '';.. │ │ │ -000060e0: 2020 6d79 2024 7265 7420 3d20 303b 0a20 my $ret = 0;. │ │ │ -000060f0: 2020 206c 6f63 616c 202a 544f 3b0a 2020 local *TO;. │ │ │ -00006100: 2020 756e 6c65 7373 2028 7379 736f 7065 unless (sysope │ │ │ -00006110: 6e28 544f 2c20 2474 6f46 696c 652c 204f n(TO, $toFile, O │ │ │ -00006120: 5f43 5245 4154 207c 204f 5f57 524f 4e4c _CREAT | O_WRONL │ │ │ -00006130: 5929 290a 2020 2020 7b0a 0924 7072 4c6f Y)). {..$prLo │ │ │ -00006140: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00006150: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ -00006160: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -00006170: 6e6f 7420 7772 6974 6520 746f 203c 2474 not write to <$t │ │ │ -00006180: 6f46 696c 653e 225d 293b 0a09 2472 6574 oFile>"]);..$ret │ │ │ -00006190: 203d 2031 3b0a 2020 2020 7d0a 0a20 2020 = 1;. }.. │ │ │ -000061a0: 206d 7920 2462 6c6f 636b 5369 7a65 203d my $blockSize = │ │ │ -000061b0: 2030 3b0a 2020 2020 666f 7220 286d 7920 0;. for (my │ │ │ -000061c0: 2469 426c 6f63 6b20 3d20 3020 3b20 2469 $iBlock = 0 ; $i │ │ │ -000061d0: 426c 6f63 6b20 3c20 4065 6e74 7269 6573 Block < @entries │ │ │ -000061e0: 203b 202b 2b24 6942 6c6f 636b 290a 2020 ; ++$iBlock). │ │ │ -000061f0: 2020 7b0a 096d 7920 2465 6e74 7279 203d {..my $entry = │ │ │ -00006200: 2024 656e 7472 6965 735b 2469 426c 6f63 $entries[$iBloc │ │ │ -00006210: 6b5d 3b0a 096d 7920 246d 6435 203d 2024 k];..my $md5 = $ │ │ │ -00006220: 6d64 355b 2469 426c 6f63 6b5d 3b0a 096d md5[$iBlock];..m │ │ │ -00006230: 7920 2463 6f6d 7072 203d 2024 636f 6d70 y $compr = $comp │ │ │ -00006240: 725b 2469 426c 6f63 6b5d 3b0a 096d 7920 r[$iBlock];..my │ │ │ -00006250: 2461 6374 5365 656b 506f 7320 3d20 2462 $actSeekPos = $b │ │ │ -00006260: 6c6f 636b 5369 7a65 202a 2024 6942 6c6f lockSize * $iBlo │ │ │ -00006270: 636b 3b0a 0a09 7379 7373 6565 6b28 544f ck;...sysseek(TO │ │ │ -00006280: 2c20 2461 6374 5365 656b 506f 732c 2030 , $actSeekPos, 0 │ │ │ -00006290: 293b 0a0a 096e 6578 7420 6966 2028 246d );...next if ($m │ │ │ -000062a0: 6435 2065 7120 246d 6435 6e75 6c6c 293b d5 eq $md5null); │ │ │ -000062b0: 0a0a 096d 7920 2462 7566 6665 723b 0a09 ...my $buffer;.. │ │ │ -000062c0: 6c6f 6361 6c20 2a46 524f 4d3b 0a09 6d79 local *FROM;..my │ │ │ -000062d0: 2024 6669 6c65 496e 203d 2075 6e64 6566 $fileIn = undef │ │ │ -000062e0: 3b0a 0969 6620 2824 636f 6d70 7220 6571 ;..if ($compr eq │ │ │ -000062f0: 2027 6327 2920 2020 2020 2020 2320 636f 'c') # co │ │ │ -00006300: 6d70 7265 7373 6564 2062 6c6f 636b 0a09 mpressed block.. │ │ │ -00006310: 7b0a 0920 2020 2069 6620 2824 6d61 696e {.. if ($main │ │ │ -00006320: 3a3a 494f 436f 6d70 7265 7373 4469 7265 ::IOCompressDire │ │ │ -00006330: 6374 290a 0920 2020 207b 0a09 096d 7920 ct).. {...my │ │ │ -00006340: 2469 6e70 7574 203d 2022 2462 6163 6b75 $input = "$backu │ │ │ -00006350: 7052 6f6f 742f 2465 6e74 7279 223b 0a09 pRoot/$entry";.. │ │ │ -00006360: 096d 7920 2475 6320 3d20 6e65 7720 494f .my $uc = new IO │ │ │ -00006370: 3a3a 556e 636f 6d70 7265 7373 3a3a 4275 ::Uncompress::Bu │ │ │ -00006380: 6e7a 6970 3220 2469 6e70 7574 3b0a 0909 nzip2 $input;... │ │ │ -00006390: 7768 696c 6520 2824 7563 2d3e 7265 6164 while ($uc->read │ │ │ -000063a0: 2824 6275 6666 6572 2c20 3130 2a31 3032 ($buffer, 10*102 │ │ │ -000063b0: 342a 2a32 2929 0a09 097b 0a09 0920 2020 4**2))...{... │ │ │ -000063c0: 206d 7920 246e 3b0a 0909 2020 2020 756e my $n;... un │ │ │ -000063d0: 6c65 7373 2028 246e 203d 2073 7973 7772 less ($n = syswr │ │ │ -000063e0: 6974 6528 544f 2c20 2462 7566 6665 7229 ite(TO, $buffer) │ │ │ -000063f0: 290a 0909 2020 2020 7b0a 0909 0924 7072 )... {....$pr │ │ │ -00006400: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00006410: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -00006420: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00006430: 2277 7269 7469 6e67 2074 6f20 3c24 746f "writing to <$to │ │ │ -00006440: 4669 6c65 3e20 6661 696c 6564 225d 293b File> failed"]); │ │ │ -00006450: 0a09 0909 2472 6574 203d 2031 3b0a 0909 ....$ret = 1;... │ │ │ -00006460: 2020 2020 7d0a 0909 2020 2020 2462 6c6f }... $blo │ │ │ -00006470: 636b 5369 7a65 202b 3d20 246e 2069 6620 ckSize += $n if │ │ │ -00006480: 2469 426c 6f63 6b20 3d3d 2030 3b0a 0909 $iBlock == 0;... │ │ │ -00006490: 7d0a 0920 2020 207d 0a09 2020 2020 656c }.. }.. el │ │ │ -000064a0: 7365 0a09 2020 2020 7b0a 0909 2466 696c se.. {...$fil │ │ │ -000064b0: 6549 6e20 3d0a 0909 2020 2020 7069 7065 eIn =... pipe │ │ │ -000064c0: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('- │ │ │ -000064d0: 6578 6563 2720 3d3e 2024 756e 636f 6d70 exec' => $uncomp │ │ │ -000064e0: 722c 0a09 0909 0920 2020 2020 2027 2d70 r,..... '-p │ │ │ -000064f0: 6172 616d 2720 3d3e 205c 4075 6e63 6f6d aram' => \@uncom │ │ │ -00006500: 7072 5061 722c 0a09 0909 0920 2020 2020 prPar,..... │ │ │ -00006510: 2027 2d73 7464 696e 2720 3d3e 2022 2462 '-stdin' => "$b │ │ │ -00006520: 6163 6b75 7052 6f6f 742f 2465 6e74 7279 ackupRoot/$entry │ │ │ -00006530: 222c 0a09 0909 0920 2020 2020 2027 2d6f ",..... '-o │ │ │ -00006540: 7574 5261 6e64 6f6d 2720 3d3e 2022 2474 utRandom' => "$t │ │ │ -00006550: 6d70 6469 722f 7374 6275 5069 7065 4672 mpdir/stbuPipeFr │ │ │ -00006560: 6f6d 3131 2d22 2c0a 0909 0909 2020 2020 om11-",..... │ │ │ -00006570: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ -00006580: 724c 6f67 293b 0a09 0977 6869 6c65 2028 rLog);...while ( │ │ │ -00006590: 2466 696c 6549 6e2d 3e73 7973 7265 6164 $fileIn->sysread │ │ │ -000065a0: 285c 2462 7566 6665 722c 2031 302a 3130 (\$buffer, 10*10 │ │ │ -000065b0: 3234 2a2a 3229 290a 0909 7b0a 0909 2020 24**2))...{... │ │ │ -000065c0: 2020 6d79 2024 6e3b 0a09 0920 2020 2075 my $n;... u │ │ │ -000065d0: 6e6c 6573 7320 2824 6e20 3d20 7379 7377 nless ($n = sysw │ │ │ -000065e0: 7269 7465 2854 4f2c 2024 6275 6666 6572 rite(TO, $buffer │ │ │ -000065f0: 2929 0a09 0920 2020 207b 0a09 0909 2470 ))... {....$p │ │ │ -00006600: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00006610: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ -00006620: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00006630: 5b22 7772 6974 696e 6720 746f 203c 2474 ["writing to <$t │ │ │ -00006640: 6f46 696c 653e 2066 6169 6c65 6422 5d29 oFile> failed"]) │ │ │ -00006650: 3b0a 0909 0924 7265 7420 3d20 313b 0a09 ;....$ret = 1;.. │ │ │ -00006660: 0920 2020 207d 0a09 0920 2020 2024 626c . }... $bl │ │ │ -00006670: 6f63 6b53 697a 6520 2b3d 2024 6e20 6966 ockSize += $n if │ │ │ -00006680: 2024 6942 6c6f 636b 203d 3d20 303b 0a09 $iBlock == 0;.. │ │ │ -00006690: 097d 0a09 2020 2020 7d0a 097d 0a09 656c .}.. }..}..el │ │ │ -000066a0: 7365 2020 2020 2020 2020 2020 2023 2062 se # b │ │ │ -000066b0: 6c6f 636b 206e 6f74 2063 6f6d 7072 6573 lock not compres │ │ │ -000066c0: 7365 640a 097b 0a09 2020 2020 756e 6c65 sed..{.. unle │ │ │ -000066d0: 7373 2028 7379 736f 7065 6e28 4652 4f4d ss (sysopen(FROM │ │ │ -000066e0: 2c20 2224 6261 636b 7570 526f 6f74 2f24 , "$backupRoot/$ │ │ │ -000066f0: 656e 7472 7922 2c20 4f5f 5244 4f4e 4c59 entry", O_RDONLY │ │ │ -00006700: 2929 0a09 2020 2020 7b0a 0909 2470 724c )).. {...$prL │ │ │ -00006710: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00006720: 2720 3d3e 2027 4527 2c0a 0909 0920 2020 ' => 'E',.... │ │ │ -00006730: 2020 2027 2d73 7472 2720 3d3e 205b 2263 '-str' => ["c │ │ │ -00006740: 616e 6e6f 7420 7265 6164 203c 2462 6163 annot read <$bac │ │ │ -00006750: 6b75 7052 6f6f 742f 2465 6e74 7279 3e22 kupRoot/$entry>" │ │ │ -00006760: 5d29 3b0a 0909 7265 7475 726e 2031 3b0a ]);...return 1;. │ │ │ -00006770: 0920 2020 207d 0a09 2020 2020 7768 696c . }.. whil │ │ │ -00006780: 6520 2873 7973 7265 6164 2846 524f 4d2c e (sysread(FROM, │ │ │ -00006790: 2024 6275 6666 6572 2c20 3130 2a31 3032 $buffer, 10*102 │ │ │ -000067a0: 342a 2a32 2929 0a09 2020 2020 7b0a 0909 4**2)).. {... │ │ │ -000067b0: 6d79 2024 6e3b 0a09 0975 6e6c 6573 7320 my $n;...unless │ │ │ -000067c0: 2824 6e20 3d20 7379 7377 7269 7465 2854 ($n = syswrite(T │ │ │ -000067d0: 4f2c 2024 6275 6666 6572 2929 0a09 097b O, $buffer))...{ │ │ │ -000067e0: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -000067f0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00006800: 2745 272c 0a09 0909 0920 2027 2d73 7472 'E',..... '-str │ │ │ -00006810: 2720 3d3e 205b 2277 7269 7469 6e67 2074 ' => ["writing t │ │ │ -00006820: 6f20 3c24 746f 4669 6c65 3e20 6661 696c o <$toFile> fail │ │ │ -00006830: 6564 225d 293b 0a09 0920 2020 2024 7265 ed"]);... $re │ │ │ -00006840: 7420 3d20 313b 0a09 097d 0a09 0924 626c t = 1;...}...$bl │ │ │ -00006850: 6f63 6b53 697a 6520 2b3d 2024 6e20 6966 ockSize += $n if │ │ │ -00006860: 2024 6942 6c6f 636b 203d 3d20 303b 0a09 $iBlock == 0;.. │ │ │ -00006870: 2020 2020 7d0a 097d 0a0a 0969 6620 2824 }..}...if ($ │ │ │ -00006880: 6669 6c65 496e 290a 097b 0a09 2020 2020 fileIn)..{.. │ │ │ -00006890: 2466 696c 6549 6e2d 3e63 6c6f 7365 2829 $fileIn->close() │ │ │ -000068a0: 3b0a 0920 2020 2024 6669 6c65 496e 203d ;.. $fileIn = │ │ │ -000068b0: 2075 6e64 6566 3b0a 097d 0a09 656c 7365 undef;..}..else │ │ │ -000068c0: 0a09 7b0a 0920 2020 2063 6c6f 7365 2846 ..{.. close(F │ │ │ -000068d0: 524f 4d29 3b0a 097d 0a0a 0969 6620 2824 ROM);..}...if ($ │ │ │ -000068e0: 6942 6c6f 636b 203d 3d20 3029 0a09 7b0a iBlock == 0)..{. │ │ │ -000068f0: 0920 2020 2024 6d64 356e 756c 6c20 3d20 . $md5null = │ │ │ -00006900: 263a 3a63 616c 634d 4435 6e75 6c6c 2824 &::calcMD5null($ │ │ │ -00006910: 626c 6f63 6b53 697a 6529 0a09 0969 6620 blockSize)...if │ │ │ -00006920: 2463 7265 6174 6553 7061 7273 6546 696c $createSparseFil │ │ │ -00006930: 6573 3b0a 097d 0a20 2020 207d 0a20 2020 es;..}. }. │ │ │ -00006940: 2063 6c6f 7365 2854 4f29 3b0a 2020 2020 close(TO);. │ │ │ -00006950: 7265 7475 726e 2024 7265 743b 0a7d 0a0a return $ret;.}.. │ │ │ -00006960: 0a23 2323 2323 2323 2323 2323 2323 2323 .############### │ │ │ -00006970: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006980: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00006990: 2323 2323 2323 2323 2323 2323 230a 2320 #############.# │ │ │ -000069a0: 6361 6c63 206d 6435 2073 756d 206f 6620 calc md5 sum of │ │ │ -000069b0: 626c 6f63 6b20 7769 7468 2024 7369 7a65 block with $size │ │ │ -000069c0: 2074 696d 6520 7a65 726f 0a73 7562 2063 time zero.sub c │ │ │ -000069d0: 616c 634d 4435 6e75 6c6c 0a7b 0a20 2020 alcMD5null.{. │ │ │ -000069e0: 206d 7920 2473 697a 6520 3d20 7368 6966 my $size = shif │ │ │ -000069f0: 743b 0a0a 2020 2020 6d79 2024 6e75 6c6c t;.. my $null │ │ │ -00006a00: 203d 2070 6163 6b28 2743 272c 2030 2920 = pack('C', 0) │ │ │ -00006a10: 7820 2473 697a 653b 0a0a 2020 2020 6d79 x $size;.. my │ │ │ -00006a20: 2024 6d64 3520 3d20 4469 6765 7374 3a3a $md5 = Digest:: │ │ │ -00006a30: 4d44 352d 3e6e 6577 2829 3b0a 2020 2020 MD5->new();. │ │ │ -00006a40: 246d 6435 2d3e 6164 6428 246e 756c 6c29 $md5->add($null) │ │ │ -00006a50: 3b0a 2020 2020 7265 7475 726e 2024 6d64 ;. return $md │ │ │ -00006a60: 352d 3e68 6578 6469 6765 7374 2829 3b0a 5->hexdigest();. │ │ │ -00006a70: 7d0a }. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7052 6563 6f76 6572 0a pRecover. │ │ ├── ./usr/bin/storeBackupReplicationWizard │ │ │ @@ -1,1217 +1,5 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a75 7365 2073 7472 6963 743b 0a75 ;..use strict;.u │ │ │ -00000330: 7365 204e 6574 3a3a 5069 6e67 3b0a 7573 se Net::Ping;.us │ │ │ -00000340: 6520 504f 5349 583b 0a0a 0a73 7562 206c e POSIX;...sub l │ │ │ -00000350: 6962 5061 7468 0a7b 0a20 2020 206d 7920 ibPath.{. my │ │ │ -00000360: 2466 696c 6520 3d20 7368 6966 743b 0a0a $file = shift;.. │ │ │ -00000370: 2020 2020 6d79 2024 6469 723b 0a0a 2020 my $dir;.. │ │ │ -00000380: 2020 2320 4661 6c6c 7320 4461 7465 6920 # Falls Datei │ │ │ -00000390: 7365 6c62 7374 2065 696e 2073 796d 6c69 selbst ein symli │ │ │ -000003a0: 6e6b 2069 7374 2c20 736f 6c61 6e67 6520 nk ist, solange │ │ │ -000003b0: 666f 6c67 656e 2c20 6269 7320 6175 6667 folgen, bis aufg │ │ │ -000003c0: 656c c3b6 7374 0a20 2020 2069 6620 282d el..st. if (- │ │ │ -000003d0: 6620 2466 696c 6529 0a20 2020 207b 0a09 f $file). {.. │ │ │ -000003e0: 7768 696c 6520 282d 6c20 2466 696c 6529 while (-l $file) │ │ │ -000003f0: 0a09 7b0a 0920 2020 206d 7920 246c 696e ..{.. my $lin │ │ │ -00000400: 6b20 3d20 7265 6164 6c69 6e6b 2824 6669 k = readlink($fi │ │ │ -00000410: 6c65 293b 0a0a 0920 2020 2069 6620 2873 le);... if (s │ │ │ -00000420: 7562 7374 7228 246c 696e 6b2c 2030 2c20 ubstr($link, 0, │ │ │ -00000430: 3129 206e 6520 222f 2229 0a09 2020 2020 1) ne "/").. │ │ │ -00000440: 7b0a 0909 2466 696c 6520 3d7e 2073 2f5b {...$file =~ s/[ │ │ │ -00000450: 5e5c 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a09 ^\/]+$/$link/;.. │ │ │ -00000460: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else. │ │ │ -00000470: 0920 2020 207b 0a09 0924 6669 6c65 203d . {...$file = │ │ │ -00000480: 2024 6c69 6e6b 3b0a 0920 2020 207d 0a09 $link;.. }.. │ │ │ -00000490: 7d0a 0a09 2824 6469 722c 2024 6669 6c65 }...($dir, $file │ │ │ -000004a0: 2920 3d20 2673 706c 6974 4669 6c65 4469 ) = &splitFileDi │ │ │ -000004b0: 7228 2466 696c 6529 3b0a 0924 6669 6c65 r($file);..$file │ │ │ -000004c0: 203d 2022 2f24 6669 6c65 223b 0a20 2020 = "/$file";. │ │ │ -000004d0: 207d 0a20 2020 2065 6c73 650a 2020 2020 }. else. │ │ │ -000004e0: 7b0a 0970 7269 6e74 2053 5444 4552 5220 {..print STDERR │ │ │ -000004f0: 223c 2466 696c 653e 2064 6f65 7320 6e6f "<$file> does no │ │ │ -00000500: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting │ │ │ -00000510: 215c 6e22 3b0a 2020 2020 2020 2020 504f !\n";. PO │ │ │ -00000520: 5349 583a 3a5f 6578 6974 2032 3b0a 2020 SIX::_exit 2;. │ │ │ -00000530: 2020 7d0a 0a20 2020 2024 6469 7220 2e3d }.. $dir .= │ │ │ -00000540: 2022 2f2e 2e2f 6c69 6222 3b20 2020 2020 "/../lib"; │ │ │ -00000550: 2020 2020 2020 2320 5066 6164 207a 7520 # Pfad zu │ │ │ -00000560: 6465 6e20 4269 626c 696f 7468 656b 656e den Bibliotheken │ │ │ -00000570: 0a20 2020 206d 7920 246f 6c64 4469 7220 . my $oldDir │ │ │ -00000580: 3d20 602f 6269 6e2f 7077 6460 3b0a 2020 = `/bin/pwd`;. │ │ │ -00000590: 2020 6368 6f6d 7020 246f 6c64 4469 723b chomp $oldDir; │ │ │ -000005a0: 0a20 2020 2069 6620 2863 6864 6972 2024 . if (chdir $ │ │ │ -000005b0: 6469 7229 0a20 2020 207b 0a09 6d79 2024 dir). {..my $ │ │ │ -000005c0: 6162 7344 6972 203d 2060 2f62 696e 2f70 absDir = `/bin/p │ │ │ -000005d0: 7764 603b 0a09 6368 6f70 2024 6162 7344 wd`;..chop $absD │ │ │ -000005e0: 6972 3b0a 0963 6864 6972 2024 6f6c 6444 ir;..chdir $oldD │ │ │ -000005f0: 6972 3b0a 0a09 7265 7475 726e 2028 2673 ir;...return (&s │ │ │ -00000600: 706c 6974 4669 6c65 4469 7228 2224 6162 plitFileDir("$ab │ │ │ -00000610: 7344 6972 2466 696c 6522 2929 3b0a 2020 sDir$file"));. │ │ │ -00000620: 2020 7d0a 2020 2020 656c 7365 0a20 2020 }. else. │ │ │ -00000630: 207b 0a09 7072 696e 7420 5354 4445 5252 {..print STDERR │ │ │ -00000640: 2022 3c24 6469 723e 2064 6f65 7320 6e6f "<$dir> does no │ │ │ -00000650: 7420 6578 6973 742c 2065 7869 7469 6e67 t exist, exiting │ │ │ -00000660: 5c6e 223b 0a20 2020 2020 2020 2050 4f53 \n";. POS │ │ │ -00000670: 4958 3a3a 5f65 7869 7420 323b 0a20 2020 IX::_exit 2;. │ │ │ -00000680: 207d 0a7d 0a73 7562 2073 706c 6974 4669 }.}.sub splitFi │ │ │ -00000690: 6c65 4469 720a 7b0a 2020 2020 6d79 2024 leDir.{. my $ │ │ │ -000006a0: 6e61 6d65 203d 2073 6869 6674 3b0a 0a20 name = shift;.. │ │ │ -000006b0: 2020 2072 6574 7572 6e20 2827 2e27 2c20 return ('.', │ │ │ -000006c0: 246e 616d 6529 2075 6e6c 6573 7320 2824 $name) unless ($ │ │ │ -000006d0: 6e61 6d65 203d 7e2f 5c2f 2f29 3b20 2020 name =~/\//); │ │ │ -000006e0: 2023 206e 7572 2065 696e 6661 6368 6572 # nur einfacher │ │ │ -000006f0: 2044 6174 6569 6e61 6d65 0a0a 2020 2020 Dateiname.. │ │ │ -00000700: 6d79 2028 2464 6972 2c20 2466 696c 6529 my ($dir, $file) │ │ │ -00000710: 203d 2024 6e61 6d65 203d 7e20 2f5e 282e = $name =~ /^(. │ │ │ -00000720: 2a29 5c2f 282e 2a29 242f 733b 0a20 2020 *)\/(.*)$/s;. │ │ │ -00000730: 2024 6469 7220 3d20 272f 2720 6966 2028 $dir = '/' if ( │ │ │ -00000740: 2464 6972 2065 7120 2727 293b 2020 2020 $dir eq ''); │ │ │ -00000750: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00000760: 2067 696c 742c 2066 616c 6c73 207a 2e42 gilt, falls z.B │ │ │ -00000770: 2e20 2f66 696c 656e 616d 650a 2020 2020 . /filename. │ │ │ -00000780: 7265 7475 726e 2028 2464 6972 2c20 2466 return ($dir, $f │ │ │ -00000790: 696c 6529 3b0a 7d0a 6d79 2028 2472 6571 ile);.}.my ($req │ │ │ -000007a0: 2c20 2470 726f 6729 203d 2026 6c69 6250 , $prog) = &libP │ │ │ -000007b0: 6174 6828 2430 293b 0a75 6e73 6869 6674 ath($0);.unshift │ │ │ -000007c0: 2040 494e 432c 2022 2472 6571 223b 0a0a @INC, "$req";.. │ │ │ -000007d0: 0a72 6571 7569 7265 2027 7370 6c69 744c .require 'splitL │ │ │ -000007e0: 696e 652e 706c 273b 0a72 6571 7569 7265 ine.pl';.require │ │ │ -000007f0: 2027 6368 6563 6b50 6172 616d 322e 706c 'checkParam2.pl │ │ │ -00000800: 273b 0a72 6571 7569 7265 2027 6368 6563 ';.require 'chec │ │ │ -00000810: 6b4f 626a 5061 722e 706c 273b 0a72 6571 kObjPar.pl';.req │ │ │ -00000820: 7569 7265 2027 7072 4c6f 672e 706c 273b uire 'prLog.pl'; │ │ │ -00000830: 0a72 6571 7569 7265 2027 666f 726b 5072 .require 'forkPr │ │ │ -00000840: 6f63 2e70 6c27 3b0a 7265 7175 6972 6520 oc.pl';.require │ │ │ -00000850: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';. │ │ │ -00000860: 7265 7175 6972 6520 2776 6572 7369 6f6e require 'version │ │ │ -00000870: 2e70 6c27 3b0a 7265 7175 6972 6520 2774 .pl';.require 't │ │ │ -00000880: 6169 6c2e 706c 273b 0a72 6571 7569 7265 ail.pl';.require │ │ │ -00000890: 2027 6669 6c65 4469 722e 706c 273b 0a0a 'fileDir.pl';.. │ │ │ -000008a0: 6d79 2024 746d 7064 6972 203d 2027 2f74 my $tmpdir = '/t │ │ │ -000008b0: 6d70 273b 2020 2020 2020 2020 2020 2020 mp'; │ │ │ -000008c0: 2020 2320 6465 6661 756c 7420 7661 6c75 # default valu │ │ │ -000008d0: 650a 2474 6d70 6469 7220 3d20 2445 4e56 e.$tmpdir = $ENV │ │ │ -000008e0: 7b27 544d 5044 4952 277d 2069 6620 6465 {'TMPDIR'} if de │ │ │ -000008f0: 6669 6e65 6420 2445 4e56 7b27 544d 5044 fined $ENV{'TMPD │ │ │ -00000900: 4952 277d 3b0a 0a0a 6d79 2024 636f 6d6d IR'};...my $comm │ │ │ -00000910: 656e 744d 6173 7465 7242 6163 6b75 7020 entMasterBackup │ │ │ -00000920: 3d0a 2020 2020 2254 6865 206d 6173 7465 =. "The maste │ │ │ -00000930: 7220 6261 636b 7570 2069 7320 7468 6520 r backup is the │ │ │ -00000940: 6261 636b 7570 2079 6f75 2073 7065 6369 backup you speci │ │ │ -00000950: 6679 2077 6974 6820 6f70 7469 6f6e 2027 fy with option ' │ │ │ -00000960: 736f 7572 6365 4469 7227 206f 6620 2220 sourceDir' of " │ │ │ -00000970: 2e0a 2020 2020 2273 746f 7265 4261 636b .. "storeBack │ │ │ -00000980: 7570 2e70 6c20 286f 7220 6d61 7962 6520 up.pl (or maybe │ │ │ -00000990: 272d 7327 206f 6e20 7468 6520 636f 6d6d '-s' on the comm │ │ │ -000009a0: 616e 6420 6c69 6e65 292e 5c6e 4974 2069 and line).\nIt i │ │ │ -000009b0: 7320 7468 6520 6261 7365 2022 202e 0a20 s the base " .. │ │ │ -000009c0: 2020 2022 6469 7265 6374 6f72 7920 666f "directory fo │ │ │ -000009d0: 7220 7265 706c 6963 6174 696f 6e28 7329 r replication(s) │ │ │ -000009e0: 3b20 7468 6973 206d 6561 6e73 2061 6674 ; this means aft │ │ │ -000009f0: 6572 2072 6570 6c69 6361 7469 6f6e 2074 er replication t │ │ │ -00000a00: 6f20 7468 6520 6465 6c74 6120 2220 2e0a o the delta " .. │ │ │ -00000a10: 2020 2020 2263 6163 6865 2064 6972 6563 "cache direc │ │ │ -00000a20: 746f 7279 2079 6f75 2062 6163 6b75 7073 tory you backups │ │ │ -00000a30: 2077 696c 6c20 7468 6520 7374 6f72 6564 will the stored │ │ │ -00000a40: 2061 7420 7468 6973 2070 6c61 6365 206c at this place l │ │ │ -00000a50: 696b 6520 7769 7468 6f75 7420 2220 2e0a ike without " .. │ │ │ -00000a60: 2020 2020 2261 6e79 2072 6570 6c69 6361 "any replica │ │ │ -00000a70: 7469 6f6e 2e22 3b0a 6d79 2024 636f 6d6d tion.";.my $comm │ │ │ -00000a80: 656e 7442 6163 6b75 7043 6f70 7920 3d0a entBackupCopy =. │ │ │ -00000a90: 2020 2020 2254 6865 2062 6163 6b75 7020 "The backup │ │ │ -00000aa0: 636f 7079 2069 7320 6120 636f 7079 2072 copy is a copy r │ │ │ -00000ab0: 6561 6c69 7a65 6420 7669 6120 7265 706c ealized via repl │ │ │ -00000ac0: 6963 6174 696f 6e20 6672 6f6d 2074 6865 ication from the │ │ │ -00000ad0: 206d 6173 7465 7220 2220 2e0a 2020 2020 master " .. │ │ │ -00000ae0: 2262 6163 6b75 7020 6469 7265 6374 6f72 "backup director │ │ │ -00000af0: 792e 2054 6865 2064 656c 7461 7320 286e y. The deltas (n │ │ │ -00000b00: 6577 2066 696c 6573 2920 636f 6d70 6172 ew files) compar │ │ │ -00000b10: 6564 2074 6f20 7468 6520 7072 6576 696f ed to the previo │ │ │ -00000b20: 7573 2022 202e 0a20 2020 2022 6261 636b us " .. "back │ │ │ -00000b30: 7570 2873 2920 6973 2072 6570 6c69 6361 up(s) is replica │ │ │ -00000b40: 7465 6420 746f 2074 6865 2064 656c 7461 ted to the delta │ │ │ -00000b50: 2063 6163 6865 2064 6972 6563 746f 7279 cache directory │ │ │ -00000b60: 2061 6e64 2074 6865 6e20 746f 2074 6865 and then to the │ │ │ -00000b70: 2022 202e 0a20 2020 2022 6261 636b 7570 " .. "backup │ │ │ -00000b80: 2063 6f70 7920 6469 7265 6374 6f72 7920 copy directory │ │ │ -00000b90: 6d65 6e74 696f 6e65 6420 6865 7265 2e22 mentioned here." │ │ │ -00000ba0: 3b0a 6d79 2024 636f 6d6d 656e 7443 6163 ;.my $commentCac │ │ │ -00000bb0: 6865 4469 7220 3d0a 2020 2020 2254 6865 heDir =. "The │ │ │ -00000bc0: 2064 656c 7461 2063 6163 6865 2064 6972 delta cache dir │ │ │ -00000bd0: 6563 746f 7279 2069 7320 7468 6520 706c ectory is the pl │ │ │ -00000be0: 6163 6520 746f 2074 656d 706f 7261 7269 ace to temporari │ │ │ -00000bf0: 6c79 2073 746f 7265 2079 6f75 7220 2220 ly store your " │ │ │ -00000c00: 2e0a 2020 2020 2263 6861 6e67 6573 2066 .. "changes f │ │ │ -00000c10: 726f 6d20 6261 636b 7570 2074 6f20 6261 rom backup to ba │ │ │ -00000c20: 636b 7570 2062 6566 6f72 6520 7468 6579 ckup before they │ │ │ -00000c30: 2077 696c 6c20 6265 2063 6f70 6965 6420 will be copied │ │ │ -00000c40: 746f 2079 6f75 7220 2220 2e0a 2020 2020 to your " .. │ │ │ -00000c50: 2262 6163 6b75 7020 636f 7079 2028 6f6e "backup copy (on │ │ │ -00000c60: 2061 6e20 6578 7465 726e 616c 2064 6973 an external dis │ │ │ -00000c70: 6b29 223b 0a0a 3d68 6561 6431 204e 414d k)";..=head1 NAM │ │ │ -00000c80: 450a 0a73 746f 7265 4261 636b 7570 5265 E..storeBackupRe │ │ │ -00000c90: 706c 6963 6174 696f 6e57 697a 6172 642e plicationWizard. │ │ │ -00000ca0: 706c 202d 2063 7265 6174 6573 2063 6f6e pl - creates con │ │ │ -00000cb0: 6669 6775 7261 7469 6f6e 2066 696c 6573 figuration files │ │ │ -00000cc0: 2066 6f72 2072 6570 6c69 6361 7469 6f6e for replication │ │ │ -00000cd0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI │ │ │ -00000ce0: 530a 0a20 2020 2073 746f 7265 4261 636b S.. storeBack │ │ │ -00000cf0: 7570 5265 706c 6963 6174 696f 6e57 697a upReplicationWiz │ │ │ -00000d00: 6172 642e 706c 205b 2d6d 206d 6173 7465 ard.pl [-m maste │ │ │ -00000d10: 7242 6163 6b75 7044 6972 5d0a 2020 2020 rBackupDir]. │ │ │ -00000d20: 2020 2020 2020 5b2d 6320 6261 636b 7570 [-c backup │ │ │ -00000d30: 436f 7079 4469 725d 205b 2d64 2064 656c CopyDir] [-d del │ │ │ -00000d40: 7461 4361 6368 6544 6972 5d20 5b2d 5320 taCacheDir] [-S │ │ │ -00000d50: 7365 7269 6573 5d20 5b2d 5420 746d 7064 series] [-T tmpd │ │ │ -00000d60: 6972 5d0a 0a3d 6865 6164 3120 4445 5343 ir]..=head1 DESC │ │ │ -00000d70: 5249 5054 494f 4e0a 0a49 6620 796f 7520 RIPTION..If you │ │ │ -00000d80: 646f 206e 6f74 2073 7065 6369 6679 206f do not specify o │ │ │ -00000d90: 6e65 206f 6620 7468 6520 6469 7265 6374 ne of the direct │ │ │ -00000da0: 6f72 6965 732c 2074 6865 7920 7769 6c6c ories, they will │ │ │ -00000db0: 2062 6520 6173 6b65 6420 696e 7465 7261 be asked intera │ │ │ -00000dc0: 6374 6976 652e 0a54 6869 7320 2277 697a ctive..This "wiz │ │ │ -00000dd0: 6172 6422 2063 616e 2062 6520 7573 6564 ard" can be used │ │ │ -00000de0: 2066 6f72 2073 696d 706c 6520 636f 6e66 for simple conf │ │ │ -00000df0: 6967 7572 6174 696f 6e73 206f 6e6c 792e igurations only. │ │ │ -00000e00: 2049 7420 616c 6c6f 7773 2074 6f20 6372 It allows to cr │ │ │ -00000e10: 6561 7465 0a63 6f6e 6669 6775 7261 7469 eate.configurati │ │ │ -00000e20: 6f6e 2066 696c 6573 2066 6f72 202a 6f6e on files for *on │ │ │ -00000e30: 652a 2072 6570 6c69 6361 7469 6f6e 206f e* replication o │ │ │ -00000e40: 6620 6d75 6c74 6970 6c65 2073 6572 6965 f multiple serie │ │ │ -00000e50: 7320 746f 2065 672e 202a 6f6e 652a 0a65 s to eg. *one*.e │ │ │ -00000e60: 7874 6572 6e61 6c20 6469 736b 2e0a 0a49 xternal disk...I │ │ │ -00000e70: 6620 7468 6520 6469 7265 6374 6f72 6965 f the directorie │ │ │ -00000e80: 7320 7370 6563 6966 6965 6420 646f 206e s specified do n │ │ │ -00000e90: 6f74 2065 7869 7374 2c20 6974 2077 696c ot exist, it wil │ │ │ -00000ea0: 6c20 6173 6b20 7768 6574 6865 7220 796f l ask whether yo │ │ │ -00000eb0: 7520 7761 6e74 2074 6f0a 6372 6561 7465 u want to.create │ │ │ -00000ec0: 2074 6865 6d0a 0a3d 6865 6164 3120 4f50 them..=head1 OP │ │ │ -00000ed0: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8.. │ │ │ -00000ee0: 3d69 7465 6d20 423c 2d2d 6d61 7374 6572 =item B<--master │ │ │ -00000ef0: 4261 636b 7570 4469 723e 2c20 423c 2d6d BackupDir>, B<-m │ │ │ -00000f00: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level │ │ │ -00000f10: 2064 6972 6563 746f 7279 206f 6620 7468 directory of th │ │ │ -00000f20: 6520 6d61 7374 6572 2062 6163 6b75 700a e master backup. │ │ │ -00000f30: 0a3d 6974 656d 2042 3c2d 2d62 6163 6b75 .=item B<--backu │ │ │ -00000f40: 7043 6f70 7944 6972 3e2c 2042 3c2d 633e pCopyDir>, B<-c> │ │ │ -00000f50: 0a0a 2020 2020 746f 7020 6c65 7665 6c20 .. top level │ │ │ -00000f60: 6469 7265 6374 6f72 7920 6f66 2074 6865 directory of the │ │ │ -00000f70: 2062 6163 6b75 7020 636f 7079 2028 6567 backup copy (eg │ │ │ -00000f80: 2e20 6578 7465 726e 616c 2064 6973 6b29 . external disk) │ │ │ -00000f90: 0a0a 3d69 7465 6d20 423c 2d2d 6465 6c74 ..=item B<--delt │ │ │ -00000fa0: 6143 6163 6865 4469 723e 2c20 423c 2d64 aCacheDir>, B<-d │ │ │ -00000fb0: 3e0a 0a20 2020 2074 6f70 206c 6576 656c >.. top level │ │ │ -00000fc0: 2064 6972 6563 746f 7279 206f 6620 7468 directory of th │ │ │ -00000fd0: 6520 6465 6c74 6120 6361 6368 650a 0a3d e delta cache..= │ │ │ -00000fe0: 6974 656d 2042 3c2d 2d73 6572 6965 733e item B<--series> │ │ │ -00000ff0: 2c20 423c 2d53 3e0a 0a20 2020 2073 6572 , B<-S>.. ser │ │ │ -00001000: 6965 7320 746f 2062 6520 7265 706c 6963 ies to be replic │ │ │ -00001010: 6174 6564 0a20 2020 2075 7365 2074 6869 ated. use thi │ │ │ -00001020: 7320 7061 7261 6d65 7465 7220 6d75 6c74 s parameter mult │ │ │ -00001030: 6970 6c65 2074 696d 6573 2066 6f72 206d iple times for m │ │ │ -00001040: 756c 7469 706c 6520 7365 7269 6573 0a0a ultiple series.. │ │ │ -00001050: 3d69 7465 6d20 423c 2d2d 746d 7064 6972 =item B<--tmpdir │ │ │ -00001060: 3e2c 2042 3c2d 543e 0a0a 2020 2020 6469 >, B<-T>.. di │ │ │ -00001070: 7265 6374 6f72 7920 666f 7220 7465 6d70 rectory for temp │ │ │ -00001080: 6f72 6172 7920 6669 6c65 732c 2064 6566 orary files, def │ │ │ -00001090: 6175 6c74 2069 7320 3c2f 746d 703e 0a0a ault is .. │ │ │ -000010a0: 3d62 6163 6b0a 0a3d 6865 6164 3120 434f =back..=head1 CO │ │ │ -000010b0: 5059 5249 4748 540a 0a43 6f70 7972 6967 PYRIGHT..Copyrig │ │ │ -000010c0: 6874 2028 6329 2032 3031 322d 3230 3232 ht (c) 2012-2022 │ │ │ -000010d0: 2062 7920 4865 696e 7a2d 4a6f 7365 6620 by Heinz-Josef │ │ │ -000010e0: 436c 6165 7320 2873 6565 2052 4541 444d Claes (see READM │ │ │ -000010f0: 4529 2e0a 5075 626c 6973 6865 6420 756e E)..Published un │ │ │ -00001100: 6465 7220 7468 6520 474e 5520 4765 6e65 der the GNU Gene │ │ │ -00001110: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ -00001120: 7365 2076 3320 6f72 2061 6e79 206c 6174 se v3 or any lat │ │ │ -00001130: 6572 2076 6572 7369 6f6e 0a0a 3d63 7574 er version..=cut │ │ │ -00001140: 0a0a 6d79 2024 6269 6e50 6174 6820 3d20 ..my $binPath = │ │ │ -00001150: 263a 3a61 6273 6f6c 7574 6550 6174 6828 &::absolutePath( │ │ │ -00001160: 2224 7265 712f 2e2e 2f62 696e 2229 3b0a "$req/../bin");. │ │ │ -00001170: 0a6d 7920 2448 656c 7020 3d20 263a 3a67 .my $Help = &::g │ │ │ -00001180: 6574 506f 6432 5465 7874 2824 3029 3b0a etPod2Text($0);. │ │ │ -00001190: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\ │ │ │ -000011a0: 4041 5247 562c 2027 2d56 272c 2027 2d2d @ARGV, '-V', '-- │ │ │ -000011b0: 7665 7273 696f 6e27 293b 0a0a 6d79 2024 version');..my $ │ │ │ -000011c0: 4368 6563 6b50 6172 203d 0a20 2020 2043 CheckPar =. C │ │ │ -000011d0: 6865 636b 5061 7261 6d2d 3e6e 6577 2827 heckParam->new(' │ │ │ -000011e0: 2d6c 6973 7427 203d 3e0a 0909 2020 2020 -list' =>... │ │ │ -000011f0: 5b4f 7074 696f 6e2d 3e6e 6577 2827 2d6e [Option->new('-n │ │ │ -00001200: 616d 6527 203d 3e20 276d 6173 7465 7242 ame' => 'masterB │ │ │ -00001210: 6163 6b75 7044 6972 272c 0a09 0909 0920 ackupDir',..... │ │ │ -00001220: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001230: 272d 6d27 2c0a 0909 0909 2027 2d63 6c5f '-m',..... '-cl_ │ │ │ -00001240: 616c 6961 7327 203d 3e20 272d 2d6d 6173 alias' => '--mas │ │ │ -00001250: 7465 7242 6163 6b75 7044 6972 272c 0a09 terBackupDir',.. │ │ │ -00001260: 0909 0920 272d 7061 7261 6d27 203d 3e20 ... '-param' => │ │ │ -00001270: 2779 6573 2729 2c0a 0909 2020 2020 204f 'yes'),... O │ │ │ -00001280: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001290: 6527 203d 3e20 2762 6163 6b75 7043 6f70 e' => 'backupCop │ │ │ -000012a0: 7944 6972 272c 0a09 0909 0920 272d 636c yDir',..... '-cl │ │ │ -000012b0: 5f6f 7074 696f 6e27 203d 3e20 272d 6327 _option' => '-c' │ │ │ -000012c0: 2c0a 0909 0909 2027 2d63 6c5f 616c 6961 ,..... '-cl_alia │ │ │ -000012d0: 7327 203d 3e20 272d 2d62 6163 6b75 7043 s' => '--backupC │ │ │ -000012e0: 6f70 7944 6972 272c 0a09 0909 0920 272d opyDir',..... '- │ │ │ -000012f0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ -00001300: 2c0a 0909 2020 2020 204f 7074 696f 6e2d ,... Option- │ │ │ -00001310: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00001320: 2764 656c 7461 4361 6368 6544 6972 272c 'deltaCacheDir', │ │ │ -00001330: 0a09 0909 0920 272d 636c 5f6f 7074 696f ..... '-cl_optio │ │ │ -00001340: 6e27 203d 3e20 272d 6427 2c0a 0909 0909 n' => '-d',..... │ │ │ -00001350: 2027 2d63 6c5f 616c 6961 7327 203d 3e20 '-cl_alias' => │ │ │ -00001360: 272d 2d64 656c 7461 4361 6368 6544 6972 '--deltaCacheDir │ │ │ -00001370: 272c 0a09 0909 0920 272d 7061 7261 6d27 ',..... '-param' │ │ │ -00001380: 203d 3e20 2779 6573 2729 2c0a 0909 2020 => 'yes'),... │ │ │ -00001390: 2020 204f 7074 696f 6e2d 3e6e 6577 2827 Option->new(' │ │ │ -000013a0: 2d6e 616d 6527 203d 3e20 2773 6572 6965 -name' => 'serie │ │ │ -000013b0: 7327 2c0a 0909 0909 2027 2d63 6c5f 6f70 s',..... '-cl_op │ │ │ -000013c0: 7469 6f6e 2720 3d3e 2027 2d53 272c 0a09 tion' => '-S',.. │ │ │ -000013d0: 0909 0920 272d 636c 5f61 6c69 6173 2720 ... '-cl_alias' │ │ │ -000013e0: 3d3e 2027 2d2d 7365 7269 6573 272c 0a09 => '--series',.. │ │ │ -000013f0: 0909 0920 272d 7061 7261 6d27 203d 3e20 ... '-param' => │ │ │ -00001400: 2779 6573 272c 0a09 0909 0920 272d 6d75 'yes',..... '-mu │ │ │ -00001410: 6c74 6970 6c65 2720 3d3e 2027 7965 7327 ltiple' => 'yes' │ │ │ -00001420: 292c 0a09 0920 2020 2020 4f70 7469 6f6e ),... Option │ │ │ -00001430: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001440: 2027 746d 7064 6972 272c 0a09 0909 0920 'tmpdir',..... │ │ │ -00001450: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001460: 272d 5427 2c0a 0909 0909 2027 2d63 6c5f '-T',..... '-cl_ │ │ │ -00001470: 616c 6961 7327 203d 3e20 272d 2d74 6d70 alias' => '--tmp │ │ │ -00001480: 6469 7227 2c0a 0909 0909 2027 2d64 6566 dir',..... '-def │ │ │ -00001490: 6175 6c74 2720 3d3e 2024 746d 7064 6972 ault' => $tmpdir │ │ │ -000014a0: 290a 0909 2020 2020 5d0a 2020 2020 293b )... ]. ); │ │ │ -000014b0: 0a0a 2443 6865 636b 5061 722d 3e63 6865 ..$CheckPar->che │ │ │ -000014c0: 636b 2827 2d61 7267 7627 203d 3e20 5c40 ck('-argv' => \@ │ │ │ -000014d0: 4152 4756 2c0a 2020 2020 2020 2020 2020 ARGV,. │ │ │ -000014e0: 2020 2020 2020 2027 2d68 656c 7027 203d '-help' = │ │ │ -000014f0: 3e20 2448 656c 700a 2020 2020 2020 2020 > $Help. │ │ │ -00001500: 2020 2020 2020 2020 2029 3b0a 0a6d 7920 );..my │ │ │ -00001510: 2470 724c 6f67 3b0a 6d79 2028 2470 724c $prLog;.my ($prL │ │ │ -00001520: 6f67 4b69 6e64 2920 3d20 5b27 413a 4245 ogKind) = ['A:BE │ │ │ -00001530: 4749 4e27 2c0a 0909 2020 2027 5a3a 454e GIN',... 'Z:EN │ │ │ -00001540: 4427 2c0a 0909 2020 2027 563a 5645 5253 D',... 'V:VERS │ │ │ -00001550: 494f 4e27 2c0a 0909 2020 2027 493a 494e ION',... 'I:IN │ │ │ -00001560: 464f 272c 0a09 0920 2020 2744 3a44 4542 FO',... 'D:DEB │ │ │ -00001570: 5547 272c 0a09 0920 2020 2757 3a57 4152 UG',... 'W:WAR │ │ │ -00001580: 4e49 4e47 272c 0a09 0920 2020 2745 3a45 NING',... 'E:E │ │ │ -00001590: 5252 4f52 275d 3b0a 2470 724c 6f67 203d RROR'];.$prLog = │ │ │ -000015a0: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new(' │ │ │ -000015b0: 2d6b 696e 6427 203d 3e20 2470 724c 6f67 -kind' => $prLog │ │ │ -000015c0: 4b69 6e64 293b 0a0a 0a23 2041 7573 7765 Kind);...# Auswe │ │ │ -000015d0: 7274 756e 6720 6465 7220 5061 7261 6d65 rtung der Parame │ │ │ -000015e0: 7465 720a 6d79 2024 6d61 7374 6572 4261 ter.my $masterBa │ │ │ -000015f0: 636b 7570 4469 7220 3d20 2443 6865 636b ckupDir = $Check │ │ │ -00001600: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00001610: 6172 2827 6d61 7374 6572 4261 636b 7570 ar('masterBackup │ │ │ -00001620: 4469 7227 293b 0a6d 7920 246d 6173 7465 Dir');.my $maste │ │ │ -00001630: 7242 6163 6b75 7044 6972 5072 6573 6574 rBackupDirPreset │ │ │ -00001640: 203d 2031 2069 6620 246d 6173 7465 7242 = 1 if $masterB │ │ │ -00001650: 6163 6b75 7044 6972 3b0a 6d79 2024 6261 ackupDir;.my $ba │ │ │ -00001660: 636b 7570 436f 7079 4469 7220 3d20 2443 ckupCopyDir = $C │ │ │ -00001670: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00001680: 6974 6850 6172 2827 6261 636b 7570 436f ithPar('backupCo │ │ │ -00001690: 7079 4469 7227 293b 0a6d 7920 2464 656c pyDir');.my $del │ │ │ -000016a0: 7461 4361 6368 6544 6972 203d 2024 4368 taCacheDir = $Ch │ │ │ -000016b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000016c0: 7468 5061 7228 2764 656c 7461 4361 6368 thPar('deltaCach │ │ │ -000016d0: 6544 6972 2729 3b0a 6d79 2024 7365 7269 eDir');.my $seri │ │ │ -000016e0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -000016f0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s │ │ │ -00001700: 6572 6965 7327 293b 0a28 4024 7365 7269 eries');.(@$seri │ │ │ -00001710: 6573 2920 3d20 736f 7274 2028 4024 7365 es) = sort (@$se │ │ │ -00001720: 7269 6573 2920 6966 2024 7365 7269 6573 ries) if $series │ │ │ -00001730: 3b0a 2474 6d70 6469 7220 3d20 2443 6865 ;.$tmpdir = $Che │ │ │ -00001740: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00001750: 6850 6172 2827 746d 7064 6972 2729 3b0a hPar('tmpdir');. │ │ │ -00001760: 0a23 0a23 2063 6865 636b 2069 6620 7061 .#.# check if pa │ │ │ -00001770: 7261 6d65 7465 7273 2061 7265 2073 6574 rameters are set │ │ │ -00001780: 0a23 0a24 6d61 7374 6572 4261 636b 7570 .#.$masterBackup │ │ │ -00001790: 4469 7220 3d20 263a 3a63 6865 636b 4469 Dir = &::checkDi │ │ │ -000017a0: 7228 246d 6173 7465 7242 6163 6b75 7044 r($masterBackupD │ │ │ -000017b0: 6972 2c20 276d 6173 7465 7220 6261 636b ir, 'master back │ │ │ -000017c0: 7570 2064 6972 6563 746f 7279 272c 0a09 up directory',.. │ │ │ -000017d0: 0909 2020 2020 2020 2024 636f 6d6d 656e .. $commen │ │ │ -000017e0: 744d 6173 7465 7242 6163 6b75 702c 2024 tMasterBackup, $ │ │ │ -000017f0: 7072 4c6f 6729 3b0a 2462 6163 6b75 7043 prLog);.$backupC │ │ │ -00001800: 6f70 7944 6972 203d 2026 3a3a 6368 6563 opyDir = &::chec │ │ │ -00001810: 6b44 6972 2824 6261 636b 7570 436f 7079 kDir($backupCopy │ │ │ -00001820: 4469 722c 2027 6261 636b 7570 2063 6f70 Dir, 'backup cop │ │ │ -00001830: 7920 6469 7265 6374 6f72 7927 2c0a 0909 y directory',... │ │ │ -00001840: 0920 2020 2020 2463 6f6d 6d65 6e74 4261 . $commentBa │ │ │ -00001850: 636b 7570 436f 7079 2c20 2470 724c 6f67 ckupCopy, $prLog │ │ │ -00001860: 293b 0a24 6465 6c74 6143 6163 6865 4469 );.$deltaCacheDi │ │ │ -00001870: 7220 3d20 263a 3a63 6865 636b 4469 7228 r = &::checkDir( │ │ │ -00001880: 2464 656c 7461 4361 6368 6544 6972 2c20 $deltaCacheDir, │ │ │ -00001890: 2764 656c 7461 2063 6163 6865 2064 6972 'delta cache dir │ │ │ -000018a0: 6563 746f 7279 272c 0a09 0909 2020 2020 ectory',.... │ │ │ -000018b0: 2024 636f 6d6d 656e 7443 6163 6865 4469 $commentCacheDi │ │ │ -000018c0: 722c 2024 7072 4c6f 6729 3b0a 0a24 6d61 r, $prLog);..$ma │ │ │ -000018d0: 7374 6572 4261 636b 7570 4469 7220 3d20 sterBackupDir = │ │ │ -000018e0: 263a 3a61 6273 6f6c 7574 6550 6174 6828 &::absolutePath( │ │ │ -000018f0: 246d 6173 7465 7242 6163 6b75 7044 6972 $masterBackupDir │ │ │ -00001900: 293b 0a24 6261 636b 7570 436f 7079 4469 );.$backupCopyDi │ │ │ -00001910: 7220 3d20 263a 3a61 6273 6f6c 7574 6550 r = &::absoluteP │ │ │ -00001920: 6174 6828 2462 6163 6b75 7043 6f70 7944 ath($backupCopyD │ │ │ -00001930: 6972 293b 0a24 6465 6c74 6143 6163 6865 ir);.$deltaCache │ │ │ -00001940: 4469 7220 3d20 263a 3a61 6273 6f6c 7574 Dir = &::absolut │ │ │ -00001950: 6550 6174 6828 2464 656c 7461 4361 6368 ePath($deltaCach │ │ │ -00001960: 6544 6972 293b 0a0a 6d79 2024 7772 6974 eDir);..my $writ │ │ │ -00001970: 7465 6e43 6f6e 6646 696c 6573 203d 2030 tenConfFiles = 0 │ │ │ -00001980: 3b0a 0a28 406d 6169 6e3a 3a63 6c65 616e ;..(@main::clean │ │ │ -00001990: 7570 2920 3d20 2824 7072 4c6f 672c 2075 up) = ($prLog, u │ │ │ -000019a0: 6e64 6566 293b 0a24 5349 477b 494e 547d ndef);.$SIG{INT} │ │ │ -000019b0: 203d 205c 2663 6c65 616e 7570 3b0a 2453 = \&cleanup;.$S │ │ │ -000019c0: 4947 7b54 4552 4d7d 203d 205c 2663 6c65 IG{TERM} = \&cle │ │ │ -000019d0: 616e 7570 3b0a 0a23 0a23 2063 6865 636b anup;..#.# check │ │ │ -000019e0: 2069 6620 6261 636b 7570 2064 6972 6563 if backup direc │ │ │ -000019f0: 746f 7269 6573 2061 7265 2064 6966 6665 tories are diffe │ │ │ -00001a00: 7265 6e74 0a23 0a24 7072 4c6f 672d 3e70 rent.#.$prLog->p │ │ │ -00001a10: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00001a20: 2745 272c 0a09 2020 2020 2020 272d 7374 'E',.. '-st │ │ │ -00001a30: 7227 203d 3e0a 0920 2020 2020 205b 2273 r' =>.. ["s │ │ │ -00001a40: 616d 6520 7061 7468 2066 6f72 206d 6173 ame path for mas │ │ │ -00001a50: 7465 7220 6261 636b 7570 2064 6972 2c20 ter backup dir, │ │ │ -00001a60: 6261 636b 7570 2063 6f70 7920 6469 7220 backup copy dir │ │ │ -00001a70: 616e 6420 2220 2e0a 0920 2020 2020 2020 and " ... │ │ │ -00001a80: 2264 656c 7461 2063 6163 6865 2064 6972 "delta cache dir │ │ │ -00001a90: 2077 6572 6520 7370 6563 6966 6965 642e were specified. │ │ │ -00001aa0: 222c 0a09 2020 2020 2020 2022 506c 6561 ",.. "Plea │ │ │ -00001ab0: 7365 2065 6e74 6572 2075 6e69 7175 6520 se enter unique │ │ │ -00001ac0: 7061 7468 7320 666f 7220 6561 6368 206f paths for each o │ │ │ -00001ad0: 6620 7468 656d 225d 2c0a 0920 2020 2020 f them"],.. │ │ │ -00001ae0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). │ │ │ -00001af0: 2020 2069 6620 2824 6d61 7374 6572 4261 if ($masterBa │ │ │ -00001b00: 636b 7570 4469 7220 6571 2024 6261 636b ckupDir eq $back │ │ │ -00001b10: 7570 436f 7079 4469 7220 616e 640a 0924 upCopyDir and..$ │ │ │ -00001b20: 6d61 7374 6572 4261 636b 7570 4469 7220 masterBackupDir │ │ │ -00001b30: 6571 2024 6465 6c74 6143 6163 6865 4469 eq $deltaCacheDi │ │ │ -00001b40: 7229 3b0a 2470 724c 6f67 2d3e 7072 696e r);.$prLog->prin │ │ │ -00001b50: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00001b60: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -00001b70: 3d3e 0a09 2020 2020 2020 5b22 7361 6d65 =>.. ["same │ │ │ -00001b80: 2070 6174 6820 666f 7220 6d61 7374 6572 path for master │ │ │ -00001b90: 2062 6163 6b75 7020 6469 7220 616e 6420 backup dir and │ │ │ -00001ba0: 6261 636b 7570 2063 6f70 7920 6469 7220 backup copy dir │ │ │ -00001bb0: 2220 2e0a 0920 2020 2020 2020 2277 6572 " ... "wer │ │ │ -00001bc0: 6520 7370 6563 6966 6965 642e 222c 0a09 e specified.",.. │ │ │ -00001bd0: 2020 2020 2020 2022 506c 6561 7365 2065 "Please e │ │ │ -00001be0: 6e74 6572 2075 6e69 7175 6520 7061 7468 nter unique path │ │ │ -00001bf0: 7320 666f 7220 6561 6368 206f 6620 7468 s for each of th │ │ │ -00001c00: 656d 225d 2c0a 0920 2020 2020 2027 2d65 em"],.. '-e │ │ │ -00001c10: 7869 7427 203d 3e20 3129 0a20 2020 2069 xit' => 1). i │ │ │ -00001c20: 6620 2824 6d61 7374 6572 4261 636b 7570 f ($masterBackup │ │ │ -00001c30: 4469 7220 6571 2024 6261 636b 7570 436f Dir eq $backupCo │ │ │ -00001c40: 7079 4469 7229 3b0a 2470 724c 6f67 2d3e pyDir);.$prLog-> │ │ │ -00001c50: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00001c60: 2027 4527 2c0a 0920 2020 2020 2027 2d73 'E',.. '-s │ │ │ -00001c70: 7472 2720 3d3e 0a09 2020 2020 2020 5b22 tr' =>.. [" │ │ │ -00001c80: 7361 6d65 2070 6174 6820 666f 7220 6d61 same path for ma │ │ │ -00001c90: 7374 6572 2062 6163 6b75 7020 6469 7220 ster backup dir │ │ │ -00001ca0: 616e 6420 6465 6c74 6120 6361 6368 6520 and delta cache │ │ │ -00001cb0: 6469 7220 2220 2e0a 0920 2020 2020 2020 dir " ... │ │ │ -00001cc0: 2277 6572 6520 7370 6563 6966 6965 642e "were specified. │ │ │ -00001cd0: 222c 0a09 2020 2020 2020 2022 506c 6561 ",.. "Plea │ │ │ -00001ce0: 7365 2065 6e74 6572 2075 6e69 7175 6520 se enter unique │ │ │ -00001cf0: 7061 7468 7320 666f 7220 6561 6368 206f paths for each o │ │ │ -00001d00: 6620 7468 656d 225d 2c0a 0920 2020 2020 f them"],.. │ │ │ -00001d10: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). │ │ │ -00001d20: 2020 2069 6620 2824 6d61 7374 6572 4261 if ($masterBa │ │ │ -00001d30: 636b 7570 4469 7220 6571 2024 6465 6c74 ckupDir eq $delt │ │ │ -00001d40: 6143 6163 6865 4469 7229 3b0a 2470 724c aCacheDir);.$prL │ │ │ -00001d50: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00001d60: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. │ │ │ -00001d70: 2027 2d73 7472 2720 3d3e 0a09 2020 2020 '-str' =>.. │ │ │ -00001d80: 2020 5b22 7361 6d65 2070 6174 6820 666f ["same path fo │ │ │ -00001d90: 7220 6261 636b 7570 2063 6f70 7920 6469 r backup copy di │ │ │ -00001da0: 7220 616e 6420 6465 6c74 6120 6361 6368 r and delta cach │ │ │ -00001db0: 6520 6469 7220 2220 2e0a 0920 2020 2020 e dir " ... │ │ │ -00001dc0: 2020 2277 6572 6520 7370 6563 6966 6965 "were specifie │ │ │ -00001dd0: 642e 222c 0a09 2020 2020 2020 2022 506c d.",.. "Pl │ │ │ -00001de0: 6561 7365 2065 6e74 6572 2075 6e69 7175 ease enter uniqu │ │ │ -00001df0: 6520 7061 7468 7320 666f 7220 6561 6368 e paths for each │ │ │ -00001e00: 206f 6620 7468 656d 225d 2c0a 0920 2020 of them"],.. │ │ │ -00001e10: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ -00001e20: 0a20 2020 2069 6620 2824 6261 636b 7570 . if ($backup │ │ │ -00001e30: 436f 7079 4469 7220 6571 2024 6465 6c74 CopyDir eq $delt │ │ │ -00001e40: 6143 6163 6865 4469 7229 3b0a 0a23 0a23 aCacheDir);..#.# │ │ │ -00001e50: 2063 6865 636b 2069 6620 7468 6572 6527 check if there' │ │ │ -00001e60: 7320 6120 6261 636b 7570 2061 7420 246d s a backup at $m │ │ │ -00001e70: 6173 7465 7242 6163 6b75 7044 6972 0a23 asterBackupDir.# │ │ │ -00001e80: 0a6d 7920 2840 7365 7269 6573 466f 756e .my (@seriesFoun │ │ │ -00001e90: 6429 203d 2028 293b 0a7b 0a20 2020 2023 d) = ();.{. # │ │ │ -00001ea0: 2074 7279 2074 6f20 7265 6164 2073 6572 try to read ser │ │ │ -00001eb0: 6965 7320 6672 6f6d 206d 6173 7465 7220 ies from master │ │ │ -00001ec0: 6261 636b 7570 0a20 2020 206d 7920 2473 backup. my $s │ │ │ -00001ed0: 3b0a 2020 2020 6c6f 6361 6c20 2a44 4952 ;. local *DIR │ │ │ -00001ee0: 3b0a 2020 2020 6f70 656e 6469 7228 4449 ;. opendir(DI │ │ │ -00001ef0: 522c 2024 6d61 7374 6572 4261 636b 7570 R, $masterBackup │ │ │ -00001f00: 4469 7229 206f 720a 0924 7072 4c6f 672d Dir) or..$prLog- │ │ │ -00001f10: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00001f20: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -00001f30: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -00001f40: 205b 2263 616e 6e6f 7420 6f70 656e 6469 ["cannot opendi │ │ │ -00001f50: 7220 3c24 6d61 7374 6572 4261 636b 7570 r <$masterBackup │ │ │ -00001f60: 4469 723e 225d 2c0a 0909 2020 2020 2020 Dir>"],... │ │ │ -00001f70: 272d 6578 6974 2720 3d3e 2031 293b 0a20 '-exit' => 1);. │ │ │ -00001f80: 2020 2077 6869 6c65 2028 2473 203d 2072 while ($s = r │ │ │ -00001f90: 6561 6464 6972 2044 4952 290a 2020 2020 eaddir DIR). │ │ │ -00001fa0: 7b0a 096d 7920 2465 6e74 7279 203d 2022 {..my $entry = " │ │ │ -00001fb0: 246d 6173 7465 7242 6163 6b75 7044 6972 $masterBackupDir │ │ │ -00001fc0: 2f24 7322 3b0a 096e 6578 7420 6966 2028 /$s";..next if ( │ │ │ -00001fd0: 2473 2065 7120 272e 2720 6f72 2024 7320 $s eq '.' or $s │ │ │ -00001fe0: 6571 2027 2e2e 2729 3b0a 096e 6578 7420 eq '..');..next │ │ │ -00001ff0: 6966 202d 6c20 2465 6e74 7279 2061 6e64 if -l $entry and │ │ │ -00002000: 206e 6f74 202d 6420 2465 6e74 7279 3b20 not -d $entry; │ │ │ -00002010: 2023 206f 6e6c 7920 6469 7265 6374 6f72 # only director │ │ │ -00002020: 6965 730a 096e 6578 7420 756e 6c65 7373 ies..next unless │ │ │ -00002030: 202d 6420 2465 6e74 7279 3b0a 0a09 7075 -d $entry;...pu │ │ │ -00002040: 7368 2040 7365 7269 6573 466f 756e 642c sh @seriesFound, │ │ │ -00002050: 2024 733b 0a20 2020 207d 0a20 2020 2063 $s;. }. c │ │ │ -00002060: 6c6f 7365 6469 7228 4449 5229 3b0a 2020 losedir(DIR);. │ │ │ -00002070: 2020 2840 7365 7269 6573 466f 756e 6429 (@seriesFound) │ │ │ -00002080: 203d 2073 6f72 7420 2840 7365 7269 6573 = sort (@series │ │ │ -00002090: 466f 756e 6429 3b0a 0a20 2020 2023 2063 Found);.. # c │ │ │ -000020a0: 6865 636b 2066 6f72 2065 7869 7374 696e heck for existin │ │ │ -000020b0: 6720 6261 636b 7570 730a 2020 2020 6d79 g backups. my │ │ │ -000020c0: 2028 4070 2920 3d20 2822 246d 6173 7465 (@p) = ("$maste │ │ │ -000020d0: 7242 6163 6b75 7044 6972 2f2a 2f2a 2f2e rBackupDir/*/*/. │ │ │ -000020e0: 7374 6f72 6542 6163 6b75 704c 696e 6b73 storeBackupLinks │ │ │ -000020f0: 2229 3b0a 2020 2020 6d79 2028 4062 2920 ");. my (@b) │ │ │ -00002100: 3d20 3c40 703e 3b0a 0a20 2020 2075 6e6c = <@p>;.. unl │ │ │ -00002110: 6573 7320 2840 6229 0a20 2020 207b 0a09 ess (@b). {.. │ │ │ -00002120: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00002130: 6b69 6e64 2720 3d3e 2027 5727 2c0a 0909 kind' => 'W',... │ │ │ -00002140: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ -00002150: 0909 2020 2020 2020 5b22 6361 6e6e 6f74 .. ["cannot │ │ │ -00002160: 2066 696e 6420 616e 7920 6578 6973 7469 find any existi │ │ │ -00002170: 6e67 2062 6163 6b75 7020 6174 2022 202e ng backup at " . │ │ │ -00002180: 0a09 0920 2020 2020 2020 226d 6173 7465 ... "maste │ │ │ -00002190: 7220 6261 636b 7570 2064 6972 6563 746f r backup directo │ │ │ -000021a0: 7279 203c 246d 6173 7465 7242 6163 6b75 ry <$masterBacku │ │ │ -000021b0: 7044 6972 3e22 5d29 3b0a 0975 6e6c 6573 pDir>"]);..unles │ │ │ -000021c0: 7320 2824 6d61 7374 6572 4261 636b 7570 s ($masterBackup │ │ │ -000021d0: 4469 7250 7265 7365 7429 0a09 7b0a 0920 DirPreset)..{.. │ │ │ -000021e0: 2020 206d 7920 2461 6e73 7765 7220 3d20 my $answer = │ │ │ -000021f0: 756e 6465 663b 0a09 2020 2020 646f 0a09 undef;.. do.. │ │ │ -00002200: 2020 2020 7b0a 0909 7072 696e 7420 225c {...print "\ │ │ │ -00002210: 6e69 7320 7468 6973 206f 6b3f 5c6e 222c nis this ok?\n", │ │ │ -00002220: 0a09 0922 7965 7320 2f20 6e6f 202d 3e20 ..."yes / no -> │ │ │ -00002230: 223b 0a09 0924 616e 7377 6572 203d 203c ";...$answer = < │ │ │ -00002240: 5354 4449 4e3e 3b0a 0909 6368 6f6d 7020 STDIN>;...chomp │ │ │ -00002250: 2461 6e73 7765 723b 0a09 2020 2020 7d20 $answer;.. } │ │ │ -00002260: 7768 696c 6520 2824 616e 7377 6572 206e while ($answer n │ │ │ -00002270: 6520 2779 6573 2720 616e 6420 2461 6e73 e 'yes' and $ans │ │ │ -00002280: 7765 7220 6e65 2027 6e6f 2729 3b0a 0920 wer ne 'no');.. │ │ │ -00002290: 2020 2065 7869 7420 3120 6966 2024 616e exit 1 if $an │ │ │ -000022a0: 7377 6572 2065 7120 276e 6f27 3b0a 097d swer eq 'no';..} │ │ │ -000022b0: 0a20 2020 207d 0a20 2020 2065 6c73 6520 . }. else │ │ │ -000022c0: 2020 2320 7468 6572 6520 6973 2073 6f6d # there is som │ │ │ -000022d0: 6574 6869 6e67 2069 6e20 7468 6520 6d61 ething in the ma │ │ │ -000022e0: 7374 6572 2062 6163 6b75 700a 2020 2020 ster backup. │ │ │ -000022f0: 7b0a 0975 6e6c 6573 7320 2824 7365 7269 {..unless ($seri │ │ │ -00002300: 6573 290a 097b 0a0a 0920 2020 206d 7920 es)..{... my │ │ │ -00002310: 2461 6e73 7765 7220 3d20 756e 6465 663b $answer = undef; │ │ │ -00002320: 0a09 2020 2020 646f 0a09 2020 2020 7b0a .. do.. {. │ │ │ -00002330: 0909 7072 696e 7420 225c 6e66 6f75 6e64 ..print "\nfound │ │ │ -00002340: 2073 6572 6965 7320 3c22 2c20 6a6f 696e series <", join │ │ │ -00002350: 2827 3e20 3c27 2c20 4073 6572 6965 7346 ('> <', @seriesF │ │ │ -00002360: 6f75 6e64 292c 2022 3e5c 6e22 2c0a 0909 ound), ">\n",... │ │ │ -00002370: 2840 7365 7269 6573 466f 756e 6420 3d3d (@seriesFound == │ │ │ -00002380: 2031 203f 2022 7265 706c 6963 6174 6520 1 ? "replicate │ │ │ -00002390: 6974 3f5c 6e22 203a 2272 6570 6c69 6361 it?\n" :"replica │ │ │ -000023a0: 7465 2074 6865 6d20 616c 6c3f 5c6e 2229 te them all?\n") │ │ │ -000023b0: 2c0a 0909 2279 6573 202f 206e 6f20 2d3e ,..."yes / no -> │ │ │ -000023c0: 2022 3b0a 0909 2461 6e73 7765 7220 3d20 ";...$answer = │ │ │ -000023d0: 3c53 5444 494e 3e3b 0a09 0963 686f 6d70 ;...chomp │ │ │ -000023e0: 2024 616e 7377 6572 3b0a 0920 2020 207d $answer;.. } │ │ │ -000023f0: 2077 6869 6c65 2028 2461 6e73 7765 7220 while ($answer │ │ │ -00002400: 6e65 2027 7965 7327 2061 6e64 2024 616e ne 'yes' and $an │ │ │ -00002410: 7377 6572 206e 6520 276e 6f27 293b 0a0a swer ne 'no');.. │ │ │ -00002420: 0920 2020 2069 6620 2824 616e 7377 6572 . if ($answer │ │ │ -00002430: 2065 7120 2779 6573 2729 0a09 2020 2020 eq 'yes').. │ │ │ -00002440: 7b0a 0909 2840 2473 6572 6965 7329 203d {...(@$series) = │ │ │ -00002450: 2040 7365 7269 6573 466f 756e 643b 0a09 @seriesFound;.. │ │ │ -00002460: 2020 2020 7d0a 0920 2020 2065 6c73 650a }.. else. │ │ │ -00002470: 0920 2020 207b 0a09 0970 7269 6e74 2022 . {...print " │ │ │ -00002480: 5c6e 7479 7065 2073 6572 6965 7320 6e61 \ntype series na │ │ │ -00002490: 6d65 7320 7365 7061 7261 7465 6420 6279 mes separated by │ │ │ -000024a0: 2062 6c61 6e6b 735c 6e22 2c0a 0909 2228 blanks\n",..."( │ │ │ -000024b0: 7573 6520 7175 6f74 6573 2069 6620 7468 use quotes if th │ │ │ -000024c0: 6572 6520 6973 2061 2062 6c61 6e6b 2069 ere is a blank i │ │ │ -000024d0: 6e20 6120 6e61 6d65 295c 6e22 2c0a 0909 n a name)\n",... │ │ │ -000024e0: 222d 3e20 223b 0a09 096d 7920 2473 203d "-> ";...my $s = │ │ │ -000024f0: 203c 5354 4449 4e3e 3b0a 0909 6368 6f6d ;...chom │ │ │ -00002500: 7020 2473 3b0a 0909 2473 6572 6965 7320 p $s;...$series │ │ │ -00002510: 3d20 2643 6f6e 6669 6746 696c 653a 3a73 = &ConfigFile::s │ │ │ -00002520: 706c 6974 5175 6f74 6564 4c69 6e65 2824 plitQuotedLine($ │ │ │ -00002530: 732c 2027 272c 2031 293b 0a09 0928 4024 s, '', 1);...(@$ │ │ │ -00002540: 7365 7269 6573 2920 3d20 736f 7274 2028 series) = sort ( │ │ │ -00002550: 4024 7365 7269 6573 293b 0a09 2020 2020 @$series);.. │ │ │ -00002560: 7d0a 097d 0a20 2020 207d 0a7d 0a0a 2470 }..}. }.}..$p │ │ │ -00002570: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00002580: 6e64 2720 3d3e 2027 4927 2c0a 0920 2020 nd' => 'I',.. │ │ │ -00002590: 2020 2027 2d73 7472 2720 3d3e 205b 7363 '-str' => [sc │ │ │ -000025a0: 616c 6172 2040 2473 6572 6965 7320 2e20 alar @$series . │ │ │ -000025b0: 2220 7365 7269 6573 2063 686f 7365 6e3a " series chosen: │ │ │ -000025c0: 222c 0a09 0909 2022 5c74 3c22 202e 206a ",.... "\t<" . j │ │ │ -000025d0: 6f69 6e28 273e 203c 272c 2040 2473 6572 oin('> <', @$ser │ │ │ -000025e0: 6965 7329 202e 2022 3e22 5d29 0a20 2020 ies) . ">"]). │ │ │ -000025f0: 2069 6620 2824 7365 7269 6573 293b 0a0a if ($series);.. │ │ │ -00002600: 230a 2320 6368 6563 6b20 6966 2073 6572 #.# check if ser │ │ │ -00002610: 6965 7320 7370 6563 6966 6965 6420 6578 ies specified ex │ │ │ -00002620: 6973 740a 230a 7b0a 2020 2020 6d79 2028 ist.#.{. my ( │ │ │ -00002630: 2573 6572 6965 7346 6f75 6e64 293b 0a20 %seriesFound);. │ │ │ -00002640: 2020 2066 6f72 6561 6368 206d 7920 2473 foreach my $s │ │ │ -00002650: 2028 4073 6572 6965 7346 6f75 6e64 290a (@seriesFound). │ │ │ -00002660: 2020 2020 7b0a 0924 7365 7269 6573 466f {..$seriesFo │ │ │ -00002670: 756e 647b 2473 7d20 3d20 313b 0a20 2020 und{$s} = 1;. │ │ │ -00002680: 207d 0a20 2020 206d 7920 2840 7346 6f75 }. my (@sFou │ │ │ -00002690: 6e64 2c20 4073 4e6f 7446 6f75 6e64 293b nd, @sNotFound); │ │ │ -000026a0: 0a20 2020 2066 6f72 6561 6368 206d 7920 . foreach my │ │ │ -000026b0: 2473 2028 4024 7365 7269 6573 290a 2020 $s (@$series). │ │ │ -000026c0: 2020 7b0a 0969 6620 2865 7869 7374 7320 {..if (exists │ │ │ -000026d0: 2473 6572 6965 7346 6f75 6e64 7b24 737d $seriesFound{$s} │ │ │ -000026e0: 290a 097b 0a09 2020 2020 7075 7368 2040 )..{.. push @ │ │ │ -000026f0: 7346 6f75 6e64 2c20 2473 3b0a 097d 0a09 sFound, $s;..}.. │ │ │ -00002700: 656c 7365 0a09 7b0a 0920 2020 2070 7573 else..{.. pus │ │ │ -00002710: 6820 4073 4e6f 7446 6f75 6e64 2c20 2473 h @sNotFound, $s │ │ │ -00002720: 3b0a 097d 0a20 2020 207d 0a20 2020 2069 ;..}. }. i │ │ │ -00002730: 6620 2840 2473 6572 6965 7320 3d3d 2030 f (@$series == 0 │ │ │ -00002740: 290a 2020 2020 7b0a 0970 7269 6e74 2022 ). {..print " │ │ │ -00002750: 5c6e 7479 7065 2073 6572 6965 7320 6e61 \ntype series na │ │ │ -00002760: 6d65 7320 796f 7520 7761 6e74 2074 6f20 mes you want to │ │ │ -00002770: 7265 706c 6963 6174 6520 7365 7061 7261 replicate separa │ │ │ -00002780: 7465 6420 6279 2062 6c61 6e6b 735c 6e22 ted by blanks\n" │ │ │ -00002790: 2c0a 0922 2875 7365 2071 756f 7465 7320 ,.."(use quotes │ │ │ -000027a0: 6966 2074 6865 7265 2069 7320 6120 626c if there is a bl │ │ │ -000027b0: 616e 6b20 696e 2061 206e 616d 6529 5c6e ank in a name)\n │ │ │ -000027c0: 222c 0a09 222d 3e20 223b 0a09 6d79 2024 ",.."-> ";..my $ │ │ │ -000027d0: 7320 3d20 3c53 5444 494e 3e3b 0a09 6368 s = ;..ch │ │ │ -000027e0: 6f6d 7020 2473 3b0a 0924 7365 7269 6573 omp $s;..$series │ │ │ -000027f0: 203d 2026 436f 6e66 6967 4669 6c65 3a3a = &ConfigFile:: │ │ │ -00002800: 7370 6c69 7451 756f 7465 644c 696e 6528 splitQuotedLine( │ │ │ -00002810: 2473 2c20 2727 2c20 3129 3b0a 0928 4024 $s, '', 1);..(@$ │ │ │ -00002820: 7365 7269 6573 2920 3d20 736f 7274 2028 series) = sort ( │ │ │ -00002830: 4024 7365 7269 6573 293b 0a20 2020 207d @$series);. } │ │ │ -00002840: 0a20 2020 2065 6c73 6966 2028 4073 4e6f . elsif (@sNo │ │ │ -00002850: 7446 6f75 6e64 290a 2020 2020 7b0a 096d tFound). {..m │ │ │ -00002860: 7920 2461 6e73 7765 7220 3d20 756e 6465 y $answer = unde │ │ │ -00002870: 663b 0a09 646f 0a09 7b0a 0920 2020 2070 f;..do..{.. p │ │ │ -00002880: 7269 6e74 0a09 2020 2020 225c 6e74 6865 rint.. "\nthe │ │ │ -00002890: 2066 6f6c 6c6f 7769 6e67 2073 656c 6563 following selec │ │ │ -000028a0: 7465 6420 7365 7269 6573 2077 6572 6520 ted series were │ │ │ -000028b0: 666f 756e 6420 6174 203c 246d 6173 7465 found at <$maste │ │ │ -000028c0: 7242 6163 6b75 7044 6972 3e3a 5c6e 222c rBackupDir>:\n", │ │ │ -000028d0: 0a09 2020 2020 225c 743c 222c 206a 6f69 .. "\t<", joi │ │ │ -000028e0: 6e28 273e 203c 272c 2073 6f72 7420 4073 n('> <', sort @s │ │ │ -000028f0: 466f 756e 6429 2c20 223e 5c6e 222c 0a09 Found), ">\n",.. │ │ │ -00002900: 2020 2020 2262 7574 2074 6865 2066 6f6c "but the fol │ │ │ -00002910: 6c6f 7769 6e67 2073 656c 6563 7465 6420 lowing selected │ │ │ -00002920: 7365 7269 6573 2077 6572 6520 2a6e 6f74 series were *not │ │ │ -00002930: 2a20 666f 756e 643a 5c6e 222c 0a09 2020 * found:\n",.. │ │ │ -00002940: 2020 225c 743c 222c 206a 6f69 6e28 273e "\t<", join('> │ │ │ -00002950: 203c 272c 2073 6f72 7420 4073 4e6f 7446 <', sort @sNotF │ │ │ -00002960: 6f75 6e64 292c 2022 3e5c 6e22 2c0a 0920 ound), ">\n",.. │ │ │ -00002970: 2020 2022 636f 6e74 696e 7565 2077 6974 "continue wit │ │ │ -00002980: 6820 7468 6520 7365 6c65 6374 696f 6e2c h the selection, │ │ │ -00002990: 2073 746f 702c 2063 6861 6e67 653a 5c6e stop, change:\n │ │ │ -000029a0: 222c 0a09 2020 2020 2263 6f6e 7469 6e75 ",.. "continu │ │ │ -000029b0: 6520 2f20 7374 6f70 202f 2063 6861 6e67 e / stop / chang │ │ │ -000029c0: 6520 2d3e 2022 3b0a 0920 2020 2024 616e e -> ";.. $an │ │ │ -000029d0: 7377 6572 203d 203c 5354 4449 4e3e 3b0a swer = ;. │ │ │ -000029e0: 0920 2020 2063 686f 6d70 2024 616e 7377 . chomp $answ │ │ │ -000029f0: 6572 3b0a 097d 2077 6869 6c65 2028 2461 er;..} while ($a │ │ │ -00002a00: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin │ │ │ -00002a10: 7565 2720 616e 6420 2461 6e73 7765 7220 ue' and $answer │ │ │ -00002a20: 6e65 2027 7374 6f70 2720 616e 640a 0909 ne 'stop' and... │ │ │ -00002a30: 2024 616e 7377 6572 206e 6520 2763 6861 $answer ne 'cha │ │ │ -00002a40: 6e67 6527 293b 0a09 6966 2028 2461 6e73 nge');..if ($ans │ │ │ -00002a50: 7765 7220 6571 2027 7374 6f70 2729 0a09 wer eq 'stop').. │ │ │ -00002a60: 7b0a 0920 2020 2065 7869 7420 313b 0a09 {.. exit 1;.. │ │ │ -00002a70: 7d0a 0965 6c73 6966 2028 2461 6e73 7765 }..elsif ($answe │ │ │ -00002a80: 7220 6571 2027 6368 616e 6765 2729 0a09 r eq 'change').. │ │ │ -00002a90: 7b0a 0920 2020 206d 7920 2461 6e73 7765 {.. my $answe │ │ │ -00002aa0: 7220 3d20 756e 6465 663b 0a09 2020 2020 r = undef;.. │ │ │ -00002ab0: 646f 0a09 2020 2020 7b0a 0909 7072 696e do.. {...prin │ │ │ -00002ac0: 7420 225c 6e66 6f75 6e64 2073 6572 6965 t "\nfound serie │ │ │ -00002ad0: 7320 3c22 2c20 6a6f 696e 2827 3e20 3c27 s <", join('> <' │ │ │ -00002ae0: 2c20 4073 6572 6965 7346 6f75 6e64 292c , @seriesFound), │ │ │ -00002af0: 2022 3e5c 6e22 2c0a 0909 2272 6570 6c69 ">\n",..."repli │ │ │ -00002b00: 6361 7465 2074 6865 6d20 616c 6c3f 5c6e cate them all?\n │ │ │ -00002b10: 222c 0a09 0922 7965 7320 2f20 6e6f 202d ",..."yes / no - │ │ │ -00002b20: 3e20 223b 0a09 0924 616e 7377 6572 203d > ";...$answer = │ │ │ -00002b30: 203c 5354 4449 4e3e 3b0a 0909 6368 6f6d ;...chom │ │ │ -00002b40: 7020 2461 6e73 7765 723b 0a09 2020 2020 p $answer;.. │ │ │ -00002b50: 7d20 7768 696c 6520 2824 616e 7377 6572 } while ($answer │ │ │ -00002b60: 206e 6520 2779 6573 2720 616e 6420 2461 ne 'yes' and $a │ │ │ -00002b70: 6e73 7765 7220 6e65 2027 6e6f 2729 3b0a nswer ne 'no');. │ │ │ -00002b80: 0a09 2020 2020 6966 2028 2461 6e73 7765 .. if ($answe │ │ │ -00002b90: 7220 6571 2027 7965 7327 290a 0920 2020 r eq 'yes').. │ │ │ -00002ba0: 207b 0a09 0928 4024 7365 7269 6573 2920 {...(@$series) │ │ │ -00002bb0: 3d20 4073 6572 6965 7346 6f75 6e64 3b0a = @seriesFound;. │ │ │ -00002bc0: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ -00002bd0: 0a09 2020 2020 7b0a 0909 7072 696e 740a .. {...print. │ │ │ -00002be0: 0909 225c 6e74 7970 6520 7365 7269 6573 .."\ntype series │ │ │ -00002bf0: 206e 616d 6573 2079 6f75 2077 616e 7420 names you want │ │ │ -00002c00: 746f 2072 6570 6c69 6361 7465 2073 6570 to replicate sep │ │ │ -00002c10: 6172 6174 6564 2062 7920 626c 616e 6b73 arated by blanks │ │ │ -00002c20: 5c6e 222c 0a09 0922 2875 7365 2071 756f \n",..."(use quo │ │ │ -00002c30: 7465 7320 6966 2074 6865 7265 2069 7320 tes if there is │ │ │ -00002c40: 6120 626c 616e 6b20 696e 2061 206e 616d a blank in a nam │ │ │ -00002c50: 6529 5c6e 222c 0a09 0922 2d3e 2022 3b0a e)\n",..."-> ";. │ │ │ -00002c60: 0909 6d79 2024 7320 3d20 3c53 5444 494e ..my $s = ;...chomp $s;.. │ │ │ -00002c80: 0924 7365 7269 6573 203d 2026 436f 6e66 .$series = &Conf │ │ │ -00002c90: 6967 4669 6c65 3a3a 7370 6c69 7451 756f igFile::splitQuo │ │ │ -00002ca0: 7465 644c 696e 6528 2473 2c20 2727 2c20 tedLine($s, '', │ │ │ -00002cb0: 3129 3b0a 0909 2840 2473 6572 6965 7329 1);...(@$series) │ │ │ -00002cc0: 203d 2073 6f72 7420 2840 2473 6572 6965 = sort (@$serie │ │ │ -00002cd0: 7329 3b0a 0920 2020 207d 0a09 7d0a 2020 s);.. }..}. │ │ │ -00002ce0: 2020 7d0a 7d0a 0a23 0a23 2067 656e 6572 }.}..#.# gener │ │ │ -00002cf0: 6174 6520 636f 6e66 6967 7572 6174 696f ate configuratio │ │ │ -00002d00: 6e20 6669 6c65 730a 230a 6d79 2024 746d n files.#.my $tm │ │ │ -00002d10: 7044 6972 203d 2026 3a3a 756e 6971 4669 pDir = &::uniqFi │ │ │ -00002d20: 6c65 4e61 6d65 2822 2474 6d70 6469 722f leName("$tmpdir/ │ │ │ -00002d30: 7374 6275 5257 2d22 293b 0a6d 6b64 6972 stbuRW-");.mkdir │ │ │ -00002d40: 2024 746d 7044 6972 2c20 3037 3030 206f $tmpDir, 0700 o │ │ │ -00002d50: 720a 2020 2020 2470 724c 6f67 2d3e 7072 r. $prLog->pr │ │ │ -00002d60: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00002d70: 4527 2c0a 0909 2020 272d 7374 7227 203d E',... '-str' = │ │ │ -00002d80: 3e20 5b22 6361 6e6e 6f74 2063 7265 6174 > ["cannot creat │ │ │ -00002d90: 6520 7465 6d70 6f72 6172 7920 6469 7265 e temporary dire │ │ │ -00002da0: 6374 6f72 7920 3c24 746d 7044 6972 3e22 ctory <$tmpDir>" │ │ │ -00002db0: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' = │ │ │ -00002dc0: 3e20 3129 3b0a 0a28 406d 6169 6e3a 3a63 > 1);..(@main::c │ │ │ -00002dd0: 6c65 616e 7570 2920 3d20 2824 7072 4c6f leanup) = ($prLo │ │ │ -00002de0: 672c 2024 746d 7044 6972 293b 0a0a 7b0a g, $tmpDir);..{. │ │ │ -00002df0: 2020 2020 6d79 2024 6620 3d20 666f 726b my $f = fork │ │ │ -00002e00: 5072 6f63 2d3e 6e65 7728 272d 6578 6563 Proc->new('-exec │ │ │ -00002e10: 2720 3d3e 2022 2462 696e 5061 7468 2f73 ' => "$binPath/s │ │ │ -00002e20: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate │ │ │ -00002e30: 4261 636b 7570 2e70 6c22 2c0a 0909 0920 Backup.pl",.... │ │ │ -00002e40: 2027 2d70 6172 616d 2720 3d3e 205b 272d '-param' => ['- │ │ │ -00002e50: 2d67 656e 4261 636b 7570 4261 7365 5472 -genBackupBaseTr │ │ │ -00002e60: 6565 436f 6e66 272c 2024 746d 7044 6972 eeConf', $tmpDir │ │ │ -00002e70: 5d2c 0a09 0909 2020 272d 6f75 7452 616e ],.... '-outRan │ │ │ -00002e80: 646f 6d27 203d 3e20 2224 746d 7044 6972 dom' => "$tmpDir │ │ │ -00002e90: 2f73 7462 7555 7064 6174 652d 222c 0a09 /stbuUpdate-",.. │ │ │ -00002ea0: 0909 2020 272d 7072 4c6f 6727 203d 3e20 .. '-prLog' => │ │ │ -00002eb0: 2470 724c 6f67 293b 0a20 2020 2024 662d $prLog);. $f- │ │ │ -00002ec0: 3e77 6169 7428 293b 0a20 2020 206d 7920 >wait();. my │ │ │ -00002ed0: 246f 7574 203d 2024 662d 3e67 6574 5354 $out = $f->getST │ │ │ -00002ee0: 444f 5554 2829 3b0a 2020 2020 2470 724c DOUT();. $prL │ │ │ -00002ef0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002f00: 2720 3d3e 2027 5727 2c0a 0909 2020 272d ' => 'W',... '- │ │ │ -00002f10: 7374 7227 203d 3e0a 0909 2020 5b22 5354 str' =>... ["ST │ │ │ -00002f20: 444f 5554 206f 6620 3c24 6269 6e50 6174 DOUT of <$binPat │ │ │ -00002f30: 682f 7374 6f72 6542 6163 6b75 7055 7064 h/storeBackupUpd │ │ │ -00002f40: 6174 6542 6163 6b75 702e 706c 2022 202e ateBackup.pl " . │ │ │ -00002f50: 0a09 0920 2020 222d 2d67 656e 4261 636b ... "--genBack │ │ │ -00002f60: 7570 4261 7365 5472 6565 436f 6e66 3e3a upBaseTreeConf>: │ │ │ -00002f70: 222c 2040 246f 7574 5d29 0a09 6966 2028 ", @$out])..if ( │ │ │ -00002f80: 4024 6f75 7420 3e20 3029 3b0a 2020 2020 @$out > 0);. │ │ │ -00002f90: 246f 7574 203d 2024 662d 3e67 6574 5354 $out = $f->getST │ │ │ -00002fa0: 4445 5252 2829 3b0a 2020 2020 2470 724c DERR();. $prL │ │ │ -00002fb0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002fc0: 2720 3d3e 2027 4527 2c0a 0909 2020 272d ' => 'E',... '- │ │ │ -00002fd0: 7374 7227 203d 3e0a 0909 2020 5b22 5354 str' =>... ["ST │ │ │ -00002fe0: 4445 5252 206f 6620 3c24 6269 6e50 6174 DERR of <$binPat │ │ │ -00002ff0: 682f 7374 6f72 6542 6163 6b75 7055 7064 h/storeBackupUpd │ │ │ -00003000: 6174 6542 6163 6b75 702e 706c 2022 202e ateBackup.pl " . │ │ │ -00003010: 0a09 0920 2020 222d 2d67 656e 4261 636b ... "--genBack │ │ │ -00003020: 7570 4261 7365 5472 6565 436f 6e66 3e3a upBaseTreeConf>: │ │ │ -00003030: 222c 2040 246f 7574 5d2c 0a09 0920 2027 ", @$out],... ' │ │ │ -00003040: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if │ │ │ -00003050: 2028 4024 6f75 7420 3e20 3029 3b0a 0a20 (@$out > 0);.. │ │ │ -00003060: 2020 2024 6620 3d20 666f 726b 5072 6f63 $f = forkProc │ │ │ -00003070: 2d3e 6e65 7728 272d 6578 6563 2720 3d3e ->new('-exec' => │ │ │ -00003080: 2022 2462 696e 5061 7468 2f73 746f 7265 "$binPath/store │ │ │ -00003090: 4261 636b 7570 5570 6461 7465 4261 636b BackupUpdateBack │ │ │ -000030a0: 7570 2e70 6c22 2c0a 0909 2020 2020 2020 up.pl",... │ │ │ -000030b0: 2027 2d70 6172 616d 2720 3d3e 205b 272d '-param' => ['- │ │ │ -000030c0: 2d67 656e 4465 6c74 6143 6163 6865 436f -genDeltaCacheCo │ │ │ -000030d0: 6e66 272c 2024 746d 7044 6972 5d2c 0a09 nf', $tmpDir],.. │ │ │ -000030e0: 0920 2020 2020 2020 272d 6f75 7452 616e . '-outRan │ │ │ -000030f0: 646f 6d27 203d 3e20 2224 746d 7044 6972 dom' => "$tmpDir │ │ │ -00003100: 2f73 7462 7555 7064 6174 652d 222c 0a09 /stbuUpdate-",.. │ │ │ -00003110: 0920 2020 2020 2020 272d 7072 4c6f 6727 . '-prLog' │ │ │ -00003120: 203d 3e20 2470 724c 6f67 293b 0a20 2020 => $prLog);. │ │ │ -00003130: 2024 662d 3e77 6169 7428 293b 0a20 2020 $f->wait();. │ │ │ -00003140: 2024 6f75 7420 3d20 2466 2d3e 6765 7453 $out = $f->getS │ │ │ -00003150: 5444 4f55 5428 293b 0a20 2020 2024 7072 TDOUT();. $pr │ │ │ -00003160: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00003170: 6427 203d 3e20 2757 272c 0a09 0920 2027 d' => 'W',... ' │ │ │ -00003180: 2d73 7472 2720 3d3e 0a09 0920 205b 2253 -str' =>... ["S │ │ │ -00003190: 5444 4f55 5420 6f66 203c 2462 696e 5061 TDOUT of <$binPa │ │ │ -000031a0: 7468 2f73 746f 7265 4261 636b 7570 5570 th/storeBackupUp │ │ │ -000031b0: 6461 7465 4261 636b 7570 2e70 6c20 2220 dateBackup.pl " │ │ │ -000031c0: 2e0a 0909 2020 2022 2d2d 6765 6e44 656c .... "--genDel │ │ │ -000031d0: 7461 4361 6368 6543 6f6e 663e 3a22 2c20 taCacheConf>:", │ │ │ -000031e0: 4024 6f75 745d 290a 0969 6620 2840 246f @$out])..if (@$o │ │ │ -000031f0: 7574 203e 2030 293b 0a20 2020 2024 6f75 ut > 0);. $ou │ │ │ -00003200: 7420 3d20 2466 2d3e 6765 7453 5444 4552 t = $f->getSTDER │ │ │ -00003210: 5228 293b 0a20 2020 2024 7072 4c6f 672d R();. $prLog- │ │ │ -00003220: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003230: 3e20 2745 272c 0a09 0920 2027 2d73 7472 > 'E',... '-str │ │ │ -00003240: 2720 3d3e 0a09 0920 205b 2253 5444 4552 ' =>... ["STDER │ │ │ -00003250: 5220 6f66 203c 2462 696e 5061 7468 2f73 R of <$binPath/s │ │ │ -00003260: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate │ │ │ -00003270: 4261 636b 7570 2e70 6c20 2220 2e0a 0909 Backup.pl " .... │ │ │ -00003280: 2020 2022 2d2d 6765 6e44 656c 7461 4361 "--genDeltaCa │ │ │ -00003290: 6368 6543 6f6e 663e 3a22 2c20 4024 6f75 cheConf>:", @$ou │ │ │ -000032a0: 745d 2c0a 0909 2020 272d 6578 6974 2720 t],... '-exit' │ │ │ -000032b0: 3d3e 2031 290a 0969 6620 2840 246f 7574 => 1)..if (@$out │ │ │ -000032c0: 203e 2030 293b 0a7d 0a0a 230a 2320 636f > 0);.}..#.# co │ │ │ -000032d0: 7079 202f 2063 7265 6174 6520 636f 6e66 py / create conf │ │ │ -000032e0: 6967 7572 6174 696f 6e20 6669 6c65 7320 iguration files │ │ │ -000032f0: 6672 6f6d 2024 746d 7044 6972 2074 6f20 from $tmpDir to │ │ │ -00003300: 7468 6569 7220 6c6f 6361 7469 6f6e 0a23 their location.# │ │ │ -00003310: 0a23 2067 656e 6572 6174 6520 6d61 7374 .# generate mast │ │ │ -00003320: 6572 2062 6163 6b75 7020 636f 6e66 6967 er backup config │ │ │ -00003330: 7572 6174 696f 6e20 6669 6c65 0a7b 0a20 uration file.{. │ │ │ -00003340: 2020 206d 7920 2466 496e 203d 2022 2474 my $fIn = "$t │ │ │ -00003350: 6d70 4469 722f 7374 6f72 6542 6163 6b75 mpDir/storeBacku │ │ │ -00003360: 7042 6173 6554 7265 652e 636f 6e66 223b pBaseTree.conf"; │ │ │ -00003370: 0a20 2020 206d 7920 2466 4f75 7420 3d20 . my $fOut = │ │ │ -00003380: 2224 6d61 7374 6572 4261 636b 7570 4469 "$masterBackupDi │ │ │ -00003390: 722f 7374 6f72 6542 6163 6b75 7042 6173 r/storeBackupBas │ │ │ -000033a0: 6554 7265 652e 636f 6e66 223b 0a20 2020 eTree.conf";. │ │ │ -000033b0: 206d 7920 2477 7269 7465 436f 6e66 6967 my $writeConfig │ │ │ -000033c0: 4669 6c65 203d 2031 3b0a 2020 2020 6966 File = 1;. if │ │ │ -000033d0: 2028 2d65 2024 664f 7574 290a 2020 2020 (-e $fOut). │ │ │ -000033e0: 7b0a 096d 7920 2461 6e73 7765 7220 3d20 {..my $answer = │ │ │ -000033f0: 756e 6465 663b 0a09 646f 0a09 7b0a 0920 undef;..do..{.. │ │ │ -00003400: 2020 2070 7269 6e74 2022 5c6e 436f 6e66 print "\nConf │ │ │ -00003410: 6967 7572 6174 696f 6e20 6669 6c65 2066 iguration file f │ │ │ -00003420: 6f72 206d 6173 7465 7220 6261 636b 7570 or master backup │ │ │ -00003430: 2064 6972 6563 746f 7279 5c6e 222c 0a09 directory\n",.. │ │ │ -00003440: 2020 2020 223c 246d 6173 7465 7242 6163 "<$masterBac │ │ │ -00003450: 6b75 7044 6972 3e20 616c 7265 6164 7920 kupDir> already │ │ │ -00003460: 6578 6973 7473 2e20 486f 7720 746f 2070 exists. How to p │ │ │ -00003470: 726f 6365 6564 3a5c 6e22 2c0a 0920 2020 roceed:\n",.. │ │ │ -00003480: 2022 6f76 6572 7772 6974 6520 2f20 636f "overwrite / co │ │ │ -00003490: 6e74 696e 7565 202f 2073 746f 7020 2d3e ntinue / stop -> │ │ │ -000034a0: 2022 3b0a 0920 2020 2024 616e 7377 6572 ";.. $answer │ │ │ -000034b0: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. │ │ │ -000034c0: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;. │ │ │ -000034d0: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe │ │ │ -000034e0: 7220 6e65 2027 6f76 6572 7772 6974 6527 r ne 'overwrite' │ │ │ -000034f0: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne │ │ │ -00003500: 2773 746f 7027 2061 6e64 0a09 0920 2461 'stop' and... $a │ │ │ -00003510: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin │ │ │ -00003520: 7565 2729 3b0a 0969 6620 2824 616e 7377 ue');..if ($answ │ │ │ -00003530: 6572 2065 7120 2773 746f 7027 290a 097b er eq 'stop')..{ │ │ │ -00003540: 0a09 2020 2020 6578 6974 2031 3b0a 097d .. exit 1;..} │ │ │ -00003550: 0a09 656c 7369 6620 2824 616e 7377 6572 ..elsif ($answer │ │ │ -00003560: 2065 7120 2763 6f6e 7469 6e75 6527 290a eq 'continue'). │ │ │ -00003570: 097b 0a09 2020 2020 2477 7269 7465 436f .{.. $writeCo │ │ │ -00003580: 6e66 6967 4669 6c65 203d 2030 3b0a 097d nfigFile = 0;..} │ │ │ -00003590: 0a20 2020 207d 0a0a 2020 2020 6966 2028 . }.. if ( │ │ │ -000035a0: 2477 7269 7465 436f 6e66 6967 4669 6c65 $writeConfigFile │ │ │ -000035b0: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;. │ │ │ -000035c0: 096c 6f63 616c 202a 494e 2c20 2a4f 5554 .local *IN, *OUT │ │ │ -000035d0: 3b0a 096f 7065 6e28 494e 2c20 273c 272c ;..open(IN, '<', │ │ │ -000035e0: 2024 6649 6e29 206f 720a 0920 2020 2024 $fIn) or.. $ │ │ │ -000035f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003600: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00003610: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00003620: 2263 616e 6e6f 7420 6f70 656e 2074 656d "cannot open tem │ │ │ -00003630: 706f 7261 7279 2066 696c 6520 3c24 6649 porary file <$fI │ │ │ -00003640: 6e3e 225d 2c0a 0909 0920 2027 2d65 7869 n>"],.... '-exi │ │ │ -00003650: 7427 203d 3e20 3129 3b0a 096f 7065 6e28 t' => 1);..open( │ │ │ -00003660: 4f55 542c 2027 3e27 2c20 2466 4f75 7429 OUT, '>', $fOut) │ │ │ -00003670: 206f 720a 0920 2020 2024 7072 4c6f 672d or.. $prLog- │ │ │ -00003680: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003690: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ -000036a0: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => ["cannot o │ │ │ -000036b0: 7065 6e20 6669 6c65 203c 2466 4f75 743e pen file <$fOut> │ │ │ -000036c0: 225d 2c0a 0909 0920 2027 2d65 7869 7427 "],.... '-exit' │ │ │ -000036d0: 203d 3e20 3129 3b0a 0977 6869 6c65 2028 => 1);..while ( │ │ │ -000036e0: 246c 203d 203c 494e 3e29 0a09 7b0a 0920 $l = )..{.. │ │ │ -000036f0: 2020 2063 686f 6d70 2024 6c3b 0a09 2020 chomp $l;.. │ │ │ -00003700: 2020 6966 2028 246c 203d 7e20 2f5c 413b if ($l =~ /\A; │ │ │ -00003710: 2862 6163 6b75 7054 7265 654e 616d 6529 (backupTreeName) │ │ │ -00003720: 3d5c 732a 5c5a 2f29 0a09 2020 2020 7b0a =\s*\Z/).. {. │ │ │ -00003730: 0909 7072 696e 7420 4f55 5420 2224 313d ..print OUT "$1= │ │ │ -00003740: 274d 6173 7465 7220 4261 636b 7570 275c 'Master Backup'\ │ │ │ -00003750: 6e22 3b0a 0920 2020 207d 0a09 2020 2020 n";.. }.. │ │ │ -00003760: 656c 7369 6620 2824 6c20 3d7e 202f 5c41 elsif ($l =~ /\A │ │ │ -00003770: 3b28 6261 636b 7570 5479 7065 293d 5c73 ;(backupType)=\s │ │ │ -00003780: 2a5c 5a2f 290a 0920 2020 207b 0a09 0970 *\Z/).. {...p │ │ │ -00003790: 7269 6e74 204f 5554 2022 2431 3d6d 6173 rint OUT "$1=mas │ │ │ -000037a0: 7465 725c 6e22 3b0a 0920 2020 207d 0a09 ter\n";.. }.. │ │ │ -000037b0: 2020 2020 656c 7369 6620 2824 6c20 3d7e elsif ($l =~ │ │ │ -000037c0: 202f 5c41 3b28 7365 7269 6573 546f 4469 /\A;(seriesToDi │ │ │ -000037d0: 7374 7269 6275 7465 293d 5c73 2a5c 5a2f stribute)=\s*\Z/ │ │ │ -000037e0: 290a 0920 2020 207b 0a09 0970 7269 6e74 ).. {...print │ │ │ -000037f0: 204f 5554 2022 2431 3d27 222c 206a 6f69 OUT "$1='", joi │ │ │ -00003800: 6e28 275c 2720 5c27 272c 2040 2473 6572 n('\' \'', @$ser │ │ │ -00003810: 6965 7329 2c20 2227 5c6e 223b 0a09 2020 ies), "'\n";.. │ │ │ -00003820: 2020 7d0a 0920 2020 2065 6c73 6966 2028 }.. elsif ( │ │ │ -00003830: 246c 203d 7e20 2f5c 413b 2864 656c 7461 $l =~ /\A;(delta │ │ │ -00003840: 4361 6368 6529 3d5c 732a 5c5a 2f29 0a09 Cache)=\s*\Z/).. │ │ │ -00003850: 2020 2020 7b0a 0909 7072 696e 7420 4f55 {...print OU │ │ │ -00003860: 5420 2224 313d 2464 656c 7461 4361 6368 T "$1=$deltaCach │ │ │ -00003870: 6544 6972 5c6e 223b 0a09 2020 2020 7d0a eDir\n";.. }. │ │ │ -00003880: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. { │ │ │ -00003890: 0a09 0970 7269 6e74 204f 5554 2022 246c ...print OUT "$l │ │ │ -000038a0: 5c6e 223b 0a09 2020 2020 7d0a 097d 0a09 \n";.. }..}.. │ │ │ -000038b0: 636c 6f73 6528 494e 293b 0a09 636c 6f73 close(IN);..clos │ │ │ -000038c0: 6528 4f55 5429 3b0a 0924 7772 6974 7465 e(OUT);..$writte │ │ │ -000038d0: 6e43 6f6e 6646 696c 6573 207c 3d20 313b nConfFiles |= 1; │ │ │ -000038e0: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -000038f0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00003900: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00003910: 3e0a 0909 2020 2020 2020 5b22 7772 6f74 >... ["wrot │ │ │ -00003920: 6520 6d61 7374 6572 2062 6163 6b75 7020 e master backup │ │ │ -00003930: 636f 6e66 6967 7572 6174 696f 6e20 6669 configuration fi │ │ │ -00003940: 6c65 2022 202e 0a09 0920 2020 2020 2020 le " .... │ │ │ -00003950: 223c 2466 4f75 743e 225d 293b 0a20 2020 "<$fOut>"]);. │ │ │ -00003960: 207d 0a7d 0a23 2067 656e 6572 6174 6520 }.}.# generate │ │ │ -00003970: 6261 636b 7570 2063 6f70 7920 636f 6e66 backup copy conf │ │ │ -00003980: 6967 7572 6174 696f 6e20 6669 6c65 0a7b iguration file.{ │ │ │ -00003990: 0a20 2020 206d 7920 2466 496e 203d 2022 . my $fIn = " │ │ │ -000039a0: 2474 6d70 4469 722f 7374 6f72 6542 6163 $tmpDir/storeBac │ │ │ -000039b0: 6b75 7042 6173 6554 7265 652e 636f 6e66 kupBaseTree.conf │ │ │ -000039c0: 223b 0a20 2020 206d 7920 2466 4f75 7420 ";. my $fOut │ │ │ -000039d0: 3d20 2224 6261 636b 7570 436f 7079 4469 = "$backupCopyDi │ │ │ -000039e0: 722f 7374 6f72 6542 6163 6b75 7042 6173 r/storeBackupBas │ │ │ -000039f0: 6554 7265 652e 636f 6e66 223b 0a20 2020 eTree.conf";. │ │ │ -00003a00: 206d 7920 2477 7269 7465 436f 6e66 6967 my $writeConfig │ │ │ -00003a10: 4669 6c65 203d 2031 3b0a 2020 2020 6966 File = 1;. if │ │ │ -00003a20: 2028 2d65 2024 664f 7574 290a 2020 2020 (-e $fOut). │ │ │ -00003a30: 7b0a 096d 7920 2461 6e73 7765 7220 3d20 {..my $answer = │ │ │ -00003a40: 756e 6465 663b 0a09 646f 0a09 7b0a 0920 undef;..do..{.. │ │ │ -00003a50: 2020 2070 7269 6e74 2022 5c6e 436f 6e66 print "\nConf │ │ │ -00003a60: 6967 7572 6174 696f 6e20 6669 6c65 2066 iguration file f │ │ │ -00003a70: 6f72 2062 6163 6b75 7020 636f 7079 2064 or backup copy d │ │ │ -00003a80: 6972 6563 746f 7279 5c6e 222c 0a09 2020 irectory\n",.. │ │ │ -00003a90: 2020 223c 2462 6163 6b75 7043 6f70 7944 "<$backupCopyD │ │ │ -00003aa0: 6972 3e20 616c 7265 6164 7920 6578 6973 ir> already exis │ │ │ -00003ab0: 7473 2e20 486f 7720 746f 2070 726f 6365 ts. How to proce │ │ │ -00003ac0: 6564 3a5c 6e22 2c0a 0920 2020 2022 6f76 ed:\n",.. "ov │ │ │ -00003ad0: 6572 7772 6974 6520 2f20 636f 6e74 696e erwrite / contin │ │ │ -00003ae0: 7565 202f 2073 746f 7020 2d3e 2022 3b0a ue / stop -> ";. │ │ │ -00003af0: 0920 2020 2024 616e 7377 6572 203d 203c . $answer = < │ │ │ -00003b00: 5354 4449 4e3e 3b0a 0920 2020 2063 686f STDIN>;.. cho │ │ │ -00003b10: 6d70 2024 616e 7377 6572 3b0a 097d 2077 mp $answer;..} w │ │ │ -00003b20: 6869 6c65 2028 2461 6e73 7765 7220 6e65 hile ($answer ne │ │ │ -00003b30: 2027 6f76 6572 7772 6974 6527 2061 6e64 'overwrite' and │ │ │ -00003b40: 2024 616e 7377 6572 206e 6520 2773 746f $answer ne 'sto │ │ │ -00003b50: 7027 2061 6e64 0a09 0920 2461 6e73 7765 p' and... $answe │ │ │ -00003b60: 7220 6e65 2027 636f 6e74 696e 7565 2729 r ne 'continue') │ │ │ -00003b70: 3b0a 0969 6620 2824 616e 7377 6572 2065 ;..if ($answer e │ │ │ -00003b80: 7120 2773 746f 7027 290a 097b 0a09 2020 q 'stop')..{.. │ │ │ -00003b90: 2020 6578 6974 2031 3b0a 097d 0a09 656c exit 1;..}..el │ │ │ -00003ba0: 7369 6620 2824 616e 7377 6572 2065 7120 sif ($answer eq │ │ │ -00003bb0: 2763 6f6e 7469 6e75 6527 290a 097b 0a09 'continue')..{.. │ │ │ -00003bc0: 2020 2020 2477 7269 7465 436f 6e66 6967 $writeConfig │ │ │ -00003bd0: 4669 6c65 203d 2030 3b0a 097d 0a20 2020 File = 0;..}. │ │ │ -00003be0: 207d 0a0a 2020 2020 6966 2028 2477 7269 }.. if ($wri │ │ │ -00003bf0: 7465 436f 6e66 6967 4669 6c65 290a 2020 teConfigFile). │ │ │ -00003c00: 2020 7b0a 096d 7920 246c 3b0a 096c 6f63 {..my $l;..loc │ │ │ -00003c10: 616c 202a 494e 2c20 2a4f 5554 3b0a 096f al *IN, *OUT;..o │ │ │ -00003c20: 7065 6e28 494e 2c20 273c 272c 2024 6649 pen(IN, '<', $fI │ │ │ -00003c30: 6e29 206f 720a 0920 2020 2024 7072 4c6f n) or.. $prLo │ │ │ -00003c40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00003c50: 203d 3e20 2745 272c 0a09 0920 2020 2020 => 'E',... │ │ │ -00003c60: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -00003c70: 6e6f 7420 6f70 656e 2074 656d 706f 7261 not open tempora │ │ │ -00003c80: 7279 2066 696c 6520 3c24 6649 6e3e 225d ry file <$fIn>"] │ │ │ -00003c90: 2c0a 0909 0920 2027 2d65 7869 7427 203d ,.... '-exit' = │ │ │ -00003ca0: 3e20 3129 3b0a 096f 7065 6e28 4f55 542c > 1);..open(OUT, │ │ │ -00003cb0: 2027 3e27 2c20 2466 4f75 7429 206f 720a '>', $fOut) or. │ │ │ -00003cc0: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00003cd0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00003ce0: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ -00003cf0: 3e20 5b22 6361 6e6e 6f74 206f 7065 6e20 > ["cannot open │ │ │ -00003d00: 6669 6c65 203c 2466 4f75 743e 225d 2c0a file <$fOut>"],. │ │ │ -00003d10: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -00003d20: 3129 3b0a 0977 6869 6c65 2028 246c 203d 1);..while ($l = │ │ │ -00003d30: 203c 494e 3e29 0a09 7b0a 0920 2020 2063 )..{.. c │ │ │ -00003d40: 686f 6d70 2024 6c3b 0a09 2020 2020 6966 homp $l;.. if │ │ │ -00003d50: 2028 246c 203d 7e20 2f5c 413b 2862 6163 ($l =~ /\A;(bac │ │ │ -00003d60: 6b75 7054 7265 654e 616d 6529 3d5c 732a kupTreeName)=\s* │ │ │ -00003d70: 5c5a 2f29 0a09 2020 2020 7b0a 0909 7072 \Z/).. {...pr │ │ │ -00003d80: 696e 7420 4f55 5420 2224 313d 2742 6163 int OUT "$1='Bac │ │ │ -00003d90: 6b75 7020 436f 7079 275c 6e22 3b0a 0920 kup Copy'\n";.. │ │ │ -00003da0: 2020 207d 0a09 2020 2020 656c 7369 6620 }.. elsif │ │ │ -00003db0: 2824 6c20 3d7e 202f 5c41 3b28 6261 636b ($l =~ /\A;(back │ │ │ -00003dc0: 7570 5479 7065 293d 5c73 2a5c 5a2f 290a upType)=\s*\Z/). │ │ │ -00003dd0: 0920 2020 207b 0a09 0970 7269 6e74 204f . {...print O │ │ │ -00003de0: 5554 2022 2431 3d63 6f70 795c 6e22 3b0a UT "$1=copy\n";. │ │ │ -00003df0: 0920 2020 207d 0a09 2020 2020 656c 7369 . }.. elsi │ │ │ -00003e00: 6620 2824 6c20 3d7e 202f 5c41 3b28 7365 f ($l =~ /\A;(se │ │ │ -00003e10: 7269 6573 546f 4469 7374 7269 6275 7465 riesToDistribute │ │ │ -00003e20: 293d 5c73 2a5c 5a2f 290a 0920 2020 207b )=\s*\Z/).. { │ │ │ -00003e30: 0a09 0970 7269 6e74 204f 5554 2022 2431 ...print OUT "$1 │ │ │ -00003e40: 3d27 222c 206a 6f69 6e28 275c 2720 5c27 ='", join('\' \' │ │ │ -00003e50: 272c 2040 2473 6572 6965 7329 2c20 2227 ', @$series), "' │ │ │ -00003e60: 5c6e 223b 0a09 2020 2020 7d0a 0920 2020 \n";.. }.. │ │ │ -00003e70: 2065 6c73 6966 2028 246c 203d 7e20 2f5c elsif ($l =~ /\ │ │ │ -00003e80: 413b 2864 656c 7461 4361 6368 6529 3d5c A;(deltaCache)=\ │ │ │ -00003e90: 732a 5c5a 2f29 0a09 2020 2020 7b0a 0909 s*\Z/).. {... │ │ │ -00003ea0: 7072 696e 7420 4f55 5420 2224 313d 2464 print OUT "$1=$d │ │ │ -00003eb0: 656c 7461 4361 6368 6544 6972 5c6e 223b eltaCacheDir\n"; │ │ │ -00003ec0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -00003ed0: 650a 0920 2020 207b 0a09 0970 7269 6e74 e.. {...print │ │ │ -00003ee0: 204f 5554 2022 246c 5c6e 223b 0a09 2020 OUT "$l\n";.. │ │ │ -00003ef0: 2020 7d0a 097d 0a09 636c 6f73 6528 494e }..}..close(IN │ │ │ -00003f00: 293b 0a09 636c 6f73 6528 4f55 5429 3b0a );..close(OUT);. │ │ │ -00003f10: 0924 7772 6974 7465 6e43 6f6e 6646 696c .$writtenConfFil │ │ │ -00003f20: 6573 207c 3d20 323b 0a09 2470 724c 6f67 es |= 2;..$prLog │ │ │ -00003f30: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00003f40: 3d3e 2027 4927 2c0a 0909 2020 2020 2020 => 'I',... │ │ │ -00003f50: 272d 7374 7227 203d 3e0a 0909 2020 2020 '-str' =>... │ │ │ -00003f60: 2020 5b22 7772 6f74 6520 6261 636b 7570 ["wrote backup │ │ │ -00003f70: 2063 6f70 7920 636f 6e66 6967 7572 6174 copy configurat │ │ │ -00003f80: 696f 6e20 6669 6c65 2022 202e 0a09 0920 ion file " .... │ │ │ -00003f90: 2020 2020 2020 223c 2466 4f75 743e 225d "<$fOut>"] │ │ │ -00003fa0: 293b 0a20 2020 207d 0a7d 0a23 2067 656e );. }.}.# gen │ │ │ -00003fb0: 6572 6174 6520 6261 636b 7570 2063 6f70 erate backup cop │ │ │ -00003fc0: 7920 636f 6e66 6967 7572 6174 696f 6e20 y configuration │ │ │ -00003fd0: 6669 6c65 0a7b 0a20 2020 206d 7920 2466 file.{. my $f │ │ │ -00003fe0: 496e 203d 2022 2474 6d70 4469 722f 6465 In = "$tmpDir/de │ │ │ -00003ff0: 6c74 6143 6163 6865 2e63 6f6e 6622 3b0a ltaCache.conf";. │ │ │ -00004000: 2020 2020 6d79 2024 664f 7574 203d 2022 my $fOut = " │ │ │ -00004010: 2464 656c 7461 4361 6368 6544 6972 2f64 $deltaCacheDir/d │ │ │ -00004020: 656c 7461 4361 6368 652e 636f 6e66 223b eltaCache.conf"; │ │ │ -00004030: 0a20 2020 206d 7920 2477 7269 7465 436f . my $writeCo │ │ │ -00004040: 6e66 6967 4669 6c65 203d 2031 3b0a 2020 nfigFile = 1;. │ │ │ -00004050: 2020 6966 2028 2d65 2024 664f 7574 290a if (-e $fOut). │ │ │ -00004060: 2020 2020 7b0a 096d 7920 2461 6e73 7765 {..my $answe │ │ │ -00004070: 7220 3d20 756e 6465 663b 0a09 646f 0a09 r = undef;..do.. │ │ │ -00004080: 7b0a 0920 2020 2070 7269 6e74 2022 5c6e {.. print "\n │ │ │ -00004090: 436f 6e66 6967 7572 6174 696f 6e20 6669 Configuration fi │ │ │ -000040a0: 6c65 2066 6f72 2064 656c 7461 2063 6163 le for delta cac │ │ │ -000040b0: 6865 2064 6972 6563 746f 7279 5c6e 222c he directory\n", │ │ │ -000040c0: 0a09 2020 2020 223c 2464 656c 7461 4361 .. "<$deltaCa │ │ │ -000040d0: 6368 6544 6972 3e20 616c 7265 6164 7920 cheDir> already │ │ │ -000040e0: 6578 6973 7473 2e20 486f 7720 746f 2070 exists. How to p │ │ │ -000040f0: 726f 6365 6564 3a5c 6e22 2c0a 0920 2020 roceed:\n",.. │ │ │ -00004100: 2022 6f76 6572 7772 6974 6520 2f20 636f "overwrite / co │ │ │ -00004110: 6e74 696e 7565 202f 2073 746f 7020 2d3e ntinue / stop -> │ │ │ -00004120: 2022 3b0a 0920 2020 2024 616e 7377 6572 ";.. $answer │ │ │ -00004130: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. │ │ │ -00004140: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;. │ │ │ -00004150: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe │ │ │ -00004160: 7220 6e65 2027 6f76 6572 7772 6974 6527 r ne 'overwrite' │ │ │ -00004170: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne │ │ │ -00004180: 2773 746f 7027 2061 6e64 0a09 0920 2461 'stop' and... $a │ │ │ -00004190: 6e73 7765 7220 6e65 2027 636f 6e74 696e nswer ne 'contin │ │ │ -000041a0: 7565 2729 3b0a 0969 6620 2824 616e 7377 ue');..if ($answ │ │ │ -000041b0: 6572 2065 7120 2773 746f 7027 290a 097b er eq 'stop')..{ │ │ │ -000041c0: 0a09 2020 2020 6578 6974 2031 3b0a 097d .. exit 1;..} │ │ │ -000041d0: 0a09 656c 7369 6620 2824 616e 7377 6572 ..elsif ($answer │ │ │ -000041e0: 2065 7120 2763 6f6e 7469 6e75 6527 290a eq 'continue'). │ │ │ -000041f0: 097b 0a09 2020 2020 2477 7269 7465 436f .{.. $writeCo │ │ │ -00004200: 6e66 6967 4669 6c65 203d 2030 3b0a 097d nfigFile = 0;..} │ │ │ -00004210: 0a20 2020 207d 0a0a 2020 2020 6966 2028 . }.. if ( │ │ │ -00004220: 2477 7269 7465 436f 6e66 6967 4669 6c65 $writeConfigFile │ │ │ -00004230: 290a 2020 2020 7b0a 096d 7920 246c 3b0a ). {..my $l;. │ │ │ -00004240: 096c 6f63 616c 202a 494e 2c20 2a4f 5554 .local *IN, *OUT │ │ │ -00004250: 3b0a 096f 7065 6e28 494e 2c20 273c 272c ;..open(IN, '<', │ │ │ -00004260: 2024 6649 6e29 206f 720a 0920 2020 2024 $fIn) or.. $ │ │ │ -00004270: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00004280: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00004290: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -000042a0: 2263 616e 6e6f 7420 6f70 656e 2074 656d "cannot open tem │ │ │ -000042b0: 706f 7261 7279 2066 696c 6520 3c24 6649 porary file <$fI │ │ │ -000042c0: 6e3e 225d 2c0a 0909 0920 2027 2d65 7869 n>"],.... '-exi │ │ │ -000042d0: 7427 203d 3e20 3129 3b0a 096f 7065 6e28 t' => 1);..open( │ │ │ -000042e0: 4f55 542c 2027 3e27 2c20 2466 4f75 7429 OUT, '>', $fOut) │ │ │ -000042f0: 206f 720a 0920 2020 2024 7072 4c6f 672d or.. $prLog- │ │ │ -00004300: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00004310: 3e20 2745 272c 0a09 0909 2020 272d 7374 > 'E',.... '-st │ │ │ -00004320: 7227 203d 3e20 5b22 6361 6e6e 6f74 206f r' => ["cannot o │ │ │ -00004330: 7065 6e20 6669 6c65 203c 2466 4f75 743e pen file <$fOut> │ │ │ -00004340: 225d 2c0a 0909 0920 2027 2d65 7869 7427 "],.... '-exit' │ │ │ -00004350: 203d 3e20 3129 3b0a 0977 6869 6c65 2028 => 1);..while ( │ │ │ -00004360: 246c 203d 203c 494e 3e29 0a09 7b0a 0920 $l = )..{.. │ │ │ -00004370: 2020 2063 686f 6d70 2024 6c3b 0a09 2020 chomp $l;.. │ │ │ -00004380: 2020 6966 2028 246c 203d 7e20 2f5c 413b if ($l =~ /\A; │ │ │ -00004390: 2862 6163 6b75 7043 6f70 7930 293d 5c73 (backupCopy0)=\s │ │ │ -000043a0: 2a5c 5a2f 290a 0920 2020 207b 0a09 0970 *\Z/).. {...p │ │ │ -000043b0: 7269 6e74 204f 5554 2022 2431 3d27 4261 rint OUT "$1='Ba │ │ │ -000043c0: 636b 7570 2043 6f70 7927 2220 2e0a 0909 ckup Copy'" .... │ │ │ -000043d0: 2020 2020 2220 2722 2c20 6a6f 696e 2827 " '", join(' │ │ │ -000043e0: 5c27 205c 2727 2c20 4024 7365 7269 6573 \' \'', @$series │ │ │ -000043f0: 292c 2022 275c 6e22 3b0a 0920 2020 207d ), "'\n";.. } │ │ │ -00004400: 0a09 2020 2020 656c 7365 0a09 2020 2020 .. else.. │ │ │ -00004410: 7b0a 0909 7072 696e 7420 4f55 5420 2224 {...print OUT "$ │ │ │ -00004420: 6c5c 6e22 3b0a 0920 2020 207d 0a09 7d0a l\n";.. }..}. │ │ │ -00004430: 0963 6c6f 7365 2849 4e29 3b0a 0963 6c6f .close(IN);..clo │ │ │ -00004440: 7365 284f 5554 293b 0a09 2477 7269 7474 se(OUT);..$writt │ │ │ -00004450: 656e 436f 6e66 4669 6c65 7320 7c3d 2034 enConfFiles |= 4 │ │ │ -00004460: 3b0a 0924 7072 4c6f 672d 3e70 7269 6e74 ;..$prLog->print │ │ │ -00004470: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00004480: 0a09 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00004490: 3d3e 0a09 0920 2020 2020 205b 2277 726f =>... ["wro │ │ │ -000044a0: 7465 2064 656c 7461 2063 6163 6865 2063 te delta cache c │ │ │ -000044b0: 6f6e 6669 6775 7261 7469 6f6e 2066 696c onfiguration fil │ │ │ -000044c0: 6520 2220 2e0a 0909 2020 2020 2020 2022 e " .... " │ │ │ -000044d0: 3c24 664f 7574 3e22 5d29 3b0a 2020 2020 <$fOut>"]);. │ │ │ -000044e0: 7d0a 7d0a 0a24 7072 4c6f 672d 3e70 7269 }.}..$prLog->pri │ │ │ -000044f0: 6e74 2827 2d6b 696e 6427 203d 3e20 2757 nt('-kind' => 'W │ │ │ -00004500: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -00004510: 203d 3e20 5b22 6e6f 7420 616c 6c20 636f => ["not all co │ │ │ -00004520: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file │ │ │ -00004530: 7320 7765 7265 2077 7269 7474 656e 2c22 s were written," │ │ │ -00004540: 2c0a 0909 0920 2273 6f20 7468 6579 206d ,.... "so they m │ │ │ -00004550: 6967 6874 2062 6520 696e 636f 6e73 6973 ight be inconsis │ │ │ -00004560: 7465 6e74 202d 2070 6c65 6173 6520 6368 tent - please ch │ │ │ -00004570: 6563 6b22 5d29 0a20 2020 2075 6e6c 6573 eck"]). unles │ │ │ -00004580: 7320 2477 7269 7474 656e 436f 6e66 4669 s $writtenConfFi │ │ │ -00004590: 6c65 7320 3d3d 2028 317c 327c 3429 3b0a les == (1|2|4);. │ │ │ -000045a0: 0a23 2064 656c 6574 6520 7465 6d70 6f72 .# delete tempor │ │ │ -000045b0: 6172 7920 6669 6c65 7320 2f20 6469 7265 ary files / dire │ │ │ -000045c0: 6374 6f72 790a 756e 6c69 6e6b 2022 2474 ctory.unlink "$t │ │ │ -000045d0: 6d70 4469 722f 7374 6f72 6542 6163 6b75 mpDir/storeBacku │ │ │ -000045e0: 7042 6173 6554 7265 652e 636f 6e66 222c pBaseTree.conf", │ │ │ -000045f0: 2022 2474 6d70 4469 722f 6465 6c74 6143 "$tmpDir/deltaC │ │ │ -00004600: 6163 6865 2e63 6f6e 6622 3b0a 726d 6469 ache.conf";.rmdi │ │ │ -00004610: 7220 2474 6d70 4469 723b 0a0a 6578 6974 r $tmpDir;..exit │ │ │ -00004620: 2030 3b0a 0a0a 0a23 2323 2323 2323 2323 0;....######### │ │ │ -00004630: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004640: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004650: 2323 2323 2323 2323 230a 7375 6220 6368 #########.sub ch │ │ │ -00004660: 6563 6b44 6972 0a7b 0a20 2020 206d 7920 eckDir.{. my │ │ │ -00004670: 2824 6469 722c 2024 6e61 6d65 2c20 2463 ($dir, $name, $c │ │ │ -00004680: 6f6d 6d65 6e74 2c20 2470 724c 6f67 2920 omment, $prLog) │ │ │ -00004690: 3d20 405f 3b0a 0a20 2020 206d 7920 2463 = @_;.. my $c │ │ │ -000046a0: 203d 2022 5c6e 223b 0a20 2020 2066 6f72 = "\n";. for │ │ │ -000046b0: 6561 6368 206d 7920 246c 2028 263a 3a73 each my $l (&::s │ │ │ -000046c0: 706c 6974 4c69 6e65 2824 636f 6d6d 656e plitLine($commen │ │ │ -000046d0: 742c 2037 392c 2027 5c73 2b27 2c20 225c t, 79, '\s+', "\ │ │ │ -000046e0: 6e22 2929 0a20 2020 207b 0a09 2463 202e n")). {..$c . │ │ │ -000046f0: 3d20 2224 6c5c 6e22 3b0a 2020 2020 7d0a = "$l\n";. }. │ │ │ -00004700: 0a20 2020 2075 6e6c 6573 7320 2824 6469 . unless ($di │ │ │ -00004710: 7229 0a20 2020 207b 0a09 7072 696e 7420 r). {..print │ │ │ -00004720: 2463 3b0a 0924 6320 3d20 756e 6465 663b $c;..$c = undef; │ │ │ -00004730: 0a09 6d79 2024 616e 7377 6572 203d 2027 ..my $answer = ' │ │ │ -00004740: 273b 0a09 646f 0a09 7b0a 0920 2020 2070 ';..do..{.. p │ │ │ -00004750: 7269 6e74 2022 5c6e 246e 616d 6520 6973 rint "\n$name is │ │ │ -00004760: 206e 6f74 2079 6574 2064 6566 696e 6564 not yet defined │ │ │ -00004770: 2c20 706c 6561 7365 2065 6e74 6572 2070 , please enter p │ │ │ -00004780: 6174 685c 6e22 2c0a 0920 2020 2022 2d3e ath\n",.. "-> │ │ │ -00004790: 2022 3b0a 0920 2020 2024 616e 7377 6572 ";.. $answer │ │ │ -000047a0: 203d 203c 5354 4449 4e3e 3b0a 0920 2020 = ;.. │ │ │ -000047b0: 2063 686f 6d70 2024 616e 7377 6572 3b0a chomp $answer;. │ │ │ -000047c0: 097d 2077 6869 6c65 2028 2461 6e73 7765 .} while ($answe │ │ │ -000047d0: 7220 3d7e 202f 5c41 5c73 2a5c 5a2f 293b r =~ /\A\s*\Z/); │ │ │ -000047e0: 0a0a 0924 6469 7220 3d20 2461 6e73 7765 ...$dir = $answe │ │ │ -000047f0: 723b 0a20 2020 207d 0a0a 2020 2020 756e r;. }.. un │ │ │ -00004800: 6c65 7373 2028 2d65 2024 6469 7229 0a20 less (-e $dir). │ │ │ -00004810: 2020 207b 0a09 7072 696e 7420 2463 2069 {..print $c i │ │ │ -00004820: 6620 2463 3b0a 096d 7920 2461 6e73 7765 f $c;..my $answe │ │ │ -00004830: 7220 3d20 756e 6465 663b 0a09 646f 0a09 r = undef;..do.. │ │ │ -00004840: 7b0a 0920 2020 2070 7269 6e74 2022 5c6e {.. print "\n │ │ │ -00004850: 246e 616d 6520 646f 6573 206e 6f74 2065 $name does not e │ │ │ -00004860: 7869 7374 2061 7420 3c24 6469 723e 5c6e xist at <$dir>\n │ │ │ -00004870: 222c 0a09 2020 2020 2273 686f 756c 6420 ",.. "should │ │ │ -00004880: 4920 6372 6561 7465 2069 743f 5c6e 222c I create it?\n", │ │ │ -00004890: 0a09 2020 2020 2279 6573 202f 206e 6f20 .. "yes / no │ │ │ -000048a0: 2d3e 2022 3b0a 0920 2020 2024 616e 7377 -> ";.. $answ │ │ │ -000048b0: 6572 203d 203c 5354 4449 4e3e 3b0a 0920 er = ;.. │ │ │ -000048c0: 2020 2063 686f 6d70 2024 616e 7377 6572 chomp $answer │ │ │ -000048d0: 3b0a 097d 2077 6869 6c65 2028 2461 6e73 ;..} while ($ans │ │ │ -000048e0: 7765 7220 6e65 2027 7965 7327 2061 6e64 wer ne 'yes' and │ │ │ -000048f0: 2024 616e 7377 6572 206e 6520 276e 6f27 $answer ne 'no' │ │ │ -00004900: 293b 0a0a 0965 7869 7420 3120 6966 2024 );...exit 1 if $ │ │ │ -00004910: 616e 7377 6572 2065 7120 276e 6f27 3b0a answer eq 'no';. │ │ │ -00004920: 0a09 263a 3a6d 616b 6544 6972 5061 7468 ..&::makeDirPath │ │ │ -00004930: 2824 6469 722c 2024 7072 4c6f 6729 206f ($dir, $prLog) o │ │ │ -00004940: 720a 0920 2020 2024 7072 4c6f 672d 3e70 r.. $prLog->p │ │ │ -00004950: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00004960: 2745 272c 0a09 0909 2020 272d 7374 7227 'E',.... '-str' │ │ │ -00004970: 203d 3e20 5b22 6361 6e6e 6f74 2063 7265 => ["cannot cre │ │ │ -00004980: 6174 6520 246e 616d 6520 3c24 6469 723e ate $name <$dir> │ │ │ -00004990: 225d 2c0a 0909 0920 2027 2d65 7869 7427 "],.... '-exit' │ │ │ -000049a0: 203d 3e20 3129 3b0a 0924 7072 4c6f 672d => 1);..$prLog- │ │ │ -000049b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000049c0: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ -000049d0: 2d73 7472 2720 3d3e 205b 2263 7265 6174 -str' => ["creat │ │ │ -000049e0: 6564 2024 6e61 6d65 203c 2464 6972 3e22 ed $name <$dir>" │ │ │ -000049f0: 5d29 3b0a 2020 2020 7d0a 0a20 2020 2072 ]);. }.. r │ │ │ -00004a00: 6574 7572 6e20 2464 6972 3b0a 7d0a 0a0a eturn $dir;.}... │ │ │ -00004a10: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004a20: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004a30: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004a40: 2323 0a73 7562 2063 6c65 616e 7570 0a7b ##.sub cleanup.{ │ │ │ -00004a50: 0a20 2020 206d 7920 2473 6967 6e61 6d65 . my $signame │ │ │ -00004a60: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -00004a70: 2024 6578 6974 203d 2028 7368 6966 7428 $exit = (shift( │ │ │ -00004a80: 2920 7c7c 2031 293b 0a0a 2020 2020 6d79 ) || 1);.. my │ │ │ -00004a90: 2028 2470 724c 6f67 2c20 2474 6d70 4469 ($prLog, $tmpDi │ │ │ -00004aa0: 7229 203d 2028 406d 6169 6e3a 3a63 6c65 r) = (@main::cle │ │ │ -00004ab0: 616e 7570 293b 0a0a 2020 2020 7072 696e anup);.. prin │ │ │ -00004ac0: 7420 225c 6e22 3b0a 2020 2020 6966 2028 t "\n";. if ( │ │ │ -00004ad0: 2473 6967 6e61 6d65 290a 2020 2020 7b0a $signame). {. │ │ │ -00004ae0: 2020 2020 2020 2020 2470 724c 6f67 2d3e $prLog-> │ │ │ -00004af0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00004b00: 2027 4527 2c0a 2020 2020 2020 2020 2020 'E',. │ │ │ -00004b10: 2020 2020 2020 2020 2020 2020 272d 7374 '-st │ │ │ -00004b20: 7227 203d 3e20 5b22 6361 7567 6874 2073 r' => ["caught s │ │ │ -00004b30: 6967 6e61 6c20 2473 6967 6e61 6d65 2c20 ignal $signame, │ │ │ -00004b40: 7465 726d 696e 6174 696e 6722 5d29 3b0a terminating"]);. │ │ │ -00004b50: 2020 2020 7d0a 0a20 2020 2023 2064 656c }.. # del │ │ │ -00004b60: 6574 6520 7465 6d70 6f72 6172 7920 6669 ete temporary fi │ │ │ -00004b70: 6c65 7320 2f20 6469 7265 6374 6f72 790a les / directory. │ │ │ -00004b80: 2020 2020 6966 2028 2474 6d70 4469 7229 if ($tmpDir) │ │ │ -00004b90: 0a20 2020 207b 0a09 756e 6c69 6e6b 2022 . {..unlink " │ │ │ -00004ba0: 2474 6d70 4469 722f 7374 6f72 6542 6163 $tmpDir/storeBac │ │ │ -00004bb0: 6b75 7042 6173 6554 7265 652e 636f 6e66 kupBaseTree.conf │ │ │ -00004bc0: 222c 2022 2474 6d70 4469 722f 6465 6c74 ", "$tmpDir/delt │ │ │ -00004bd0: 6143 6163 6865 2e63 6f6e 6622 3b0a 0972 aCache.conf";..r │ │ │ -00004be0: 6d64 6972 2024 746d 7044 6972 3b0a 2020 mdir $tmpDir;. │ │ │ -00004bf0: 2020 7d0a 0a20 2020 2065 7869 7420 2465 }.. exit $e │ │ │ -00004c00: 7869 743b 0a7d 0a xit;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7052 6570 6c69 6361 7469 6f6e 5769 7a61 pReplicationWiza │ │ │ +00000040: 7264 0a rd. │ │ ├── ./usr/bin/storeBackupSearch │ │ │ @@ -1,1121 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 382d 3230 3232 290a 2320 2020 2020 2020 8-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a0a 7573 6520 7374 7269 6374 3b0a ;...use strict;. │ │ │ -00000330: 0a0a 7375 6220 6c69 6250 6174 680a 7b0a ..sub libPath.{. │ │ │ -00000340: 2020 2020 6d79 2024 6669 6c65 203d 2073 my $file = s │ │ │ -00000350: 6869 6674 3b0a 0a20 2020 206d 7920 2464 hift;.. my $d │ │ │ -00000360: 6972 3b0a 0a20 2020 2023 2046 616c 6c73 ir;.. # Falls │ │ │ -00000370: 2044 6174 6569 2073 656c 6273 7420 6569 Datei selbst ei │ │ │ -00000380: 6e20 7379 6d6c 696e 6b20 6973 742c 2073 n symlink ist, s │ │ │ -00000390: 6f6c 616e 6765 2066 6f6c 6765 6e2c 2062 olange folgen, b │ │ │ -000003a0: 6973 2061 7566 6765 6cf6 7374 0a20 2020 is aufgel.st. │ │ │ -000003b0: 2069 6620 282d 6620 2466 696c 6529 0a20 if (-f $file). │ │ │ -000003c0: 2020 207b 0a09 7768 696c 6520 282d 6c20 {..while (-l │ │ │ -000003d0: 2466 696c 6529 0a09 7b0a 0920 2020 206d $file)..{.. m │ │ │ -000003e0: 7920 246c 696e 6b20 3d20 7265 6164 6c69 y $link = readli │ │ │ -000003f0: 6e6b 2824 6669 6c65 293b 0a0a 0920 2020 nk($file);... │ │ │ -00000400: 2069 6620 2873 7562 7374 7228 246c 696e if (substr($lin │ │ │ -00000410: 6b2c 2030 2c20 3129 206e 6520 222f 2229 k, 0, 1) ne "/") │ │ │ -00000420: 0a09 2020 2020 7b0a 0909 2466 696c 6520 .. {...$file │ │ │ -00000430: 3d7e 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 =~ s/[^\/]+$/$li │ │ │ -00000440: 6e6b 2f3b 0a09 2020 2020 7d0a 0920 2020 nk/;.. }.. │ │ │ -00000450: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$ │ │ │ -00000460: 6669 6c65 203d 2024 6c69 6e6b 3b0a 0920 file = $link;.. │ │ │ -00000470: 2020 207d 0a09 7d0a 0a09 2824 6469 722c }..}...($dir, │ │ │ -00000480: 2024 6669 6c65 2920 3d20 2673 706c 6974 $file) = &split │ │ │ -00000490: 4669 6c65 4469 7228 2466 696c 6529 3b0a FileDir($file);. │ │ │ -000004a0: 0924 6669 6c65 203d 2022 2f24 6669 6c65 .$file = "/$file │ │ │ -000004b0: 223b 0a20 2020 207d 0a20 2020 2065 6c73 ";. }. els │ │ │ -000004c0: 650a 2020 2020 7b0a 0970 7269 6e74 2053 e. {..print S │ │ │ -000004d0: 5444 4552 5220 223c 2466 696c 653e 2064 TDERR "<$file> d │ │ │ -000004e0: 6f65 7320 6e6f 7420 6578 6973 7421 5c6e oes not exist!\n │ │ │ -000004f0: 223b 0a09 6578 6974 2031 3b0a 2020 2020 ";..exit 1;. │ │ │ -00000500: 7d0a 0a20 2020 2024 6469 7220 2e3d 2022 }.. $dir .= " │ │ │ -00000510: 2f2e 2e2f 6c69 6222 3b20 2020 2020 2020 /../lib"; │ │ │ -00000520: 2020 2020 2320 5066 6164 207a 7520 6465 # Pfad zu de │ │ │ -00000530: 6e20 4269 626c 696f 7468 656b 656e 0a20 n Bibliotheken. │ │ │ -00000540: 2020 206d 7920 246f 6c64 4469 7220 3d20 my $oldDir = │ │ │ -00000550: 602f 6269 6e2f 7077 6460 3b0a 2020 2020 `/bin/pwd`;. │ │ │ -00000560: 6368 6f6d 7020 246f 6c64 4469 723b 0a20 chomp $oldDir;. │ │ │ -00000570: 2020 2069 6620 2863 6864 6972 2024 6469 if (chdir $di │ │ │ -00000580: 7229 0a20 2020 207b 0a09 6d79 2024 6162 r). {..my $ab │ │ │ -00000590: 7344 6972 203d 2060 2f62 696e 2f70 7764 sDir = `/bin/pwd │ │ │ -000005a0: 603b 0a09 6368 6f70 2024 6162 7344 6972 `;..chop $absDir │ │ │ -000005b0: 3b0a 0963 6864 6972 2024 6f6c 6444 6972 ;..chdir $oldDir │ │ │ -000005c0: 3b0a 0a09 7265 7475 726e 2028 2673 706c ;...return (&spl │ │ │ -000005d0: 6974 4669 6c65 4469 7228 2224 6162 7344 itFileDir("$absD │ │ │ -000005e0: 6972 2466 696c 6522 2929 3b0a 2020 2020 ir$file"));. │ │ │ -000005f0: 7d0a 2020 2020 656c 7365 0a20 2020 207b }. else. { │ │ │ -00000600: 0a09 7072 696e 7420 5354 4445 5252 2022 ..print STDERR " │ │ │ -00000610: 3c24 6469 723e 2064 6f65 7320 6e6f 7420 <$dir> does not │ │ │ -00000620: 6578 6973 742c 2065 7869 7469 6e67 5c6e exist, exiting\n │ │ │ -00000630: 223b 0a20 2020 207d 0a7d 0a73 7562 2073 ";. }.}.sub s │ │ │ -00000640: 706c 6974 4669 6c65 4469 720a 7b0a 2020 plitFileDir.{. │ │ │ -00000650: 2020 6d79 2024 6e61 6d65 203d 2073 6869 my $name = shi │ │ │ -00000660: 6674 3b0a 0a20 2020 2072 6574 7572 6e20 ft;.. return │ │ │ -00000670: 2827 2e27 2c20 246e 616d 6529 2075 6e6c ('.', $name) unl │ │ │ -00000680: 6573 7320 2824 6e61 6d65 203d 7e2f 5c2f ess ($name =~/\/ │ │ │ -00000690: 2f29 3b20 2020 2023 206e 7572 2065 696e /); # nur ein │ │ │ -000006a0: 6661 6368 6572 2044 6174 6569 6e61 6d65 facher Dateiname │ │ │ -000006b0: 0a0a 2020 2020 6d79 2028 2464 6972 2c20 .. my ($dir, │ │ │ -000006c0: 2466 696c 6529 203d 2024 6e61 6d65 203d $file) = $name = │ │ │ -000006d0: 7e20 2f5e 282e 2a29 5c2f 282e 2a29 242f ~ /^(.*)\/(.*)$/ │ │ │ -000006e0: 733b 0a20 2020 2024 6469 7220 3d20 272f s;. $dir = '/ │ │ │ -000006f0: 2720 6966 2028 2464 6972 2065 7120 2727 ' if ($dir eq '' │ │ │ -00000700: 293b 2020 2020 2020 2020 2020 2020 2020 ); │ │ │ -00000710: 2020 2020 2023 2067 696c 742c 2066 616c # gilt, fal │ │ │ -00000720: 6c73 207a 2e42 2e20 2f66 696c 656e 616d ls z.B. /filenam │ │ │ -00000730: 650a 2020 2020 7265 7475 726e 2028 2464 e. return ($d │ │ │ -00000740: 6972 2c20 2466 696c 6529 3b0a 7d0a 6d79 ir, $file);.}.my │ │ │ -00000750: 2028 2472 6571 2c20 2470 726f 6729 203d ($req, $prog) = │ │ │ -00000760: 2026 6c69 6250 6174 6828 2430 293b 0a75 &libPath($0);.u │ │ │ -00000770: 6e73 6869 6674 2040 494e 432c 2022 2472 nshift @INC, "$r │ │ │ -00000780: 6571 223b 0a0a 0a72 6571 7569 7265 2027 eq";...require ' │ │ │ -00000790: 6368 6563 6b50 6172 616d 322e 706c 273b checkParam2.pl'; │ │ │ -000007a0: 0a72 6571 7569 7265 2027 6368 6563 6b4f .require 'checkO │ │ │ -000007b0: 626a 5061 722e 706c 273b 0a72 6571 7569 bjPar.pl';.requi │ │ │ -000007c0: 7265 2027 7072 4c6f 672e 706c 273b 0a72 re 'prLog.pl';.r │ │ │ -000007d0: 6571 7569 7265 2027 7665 7273 696f 6e2e equire 'version. │ │ │ -000007e0: 706c 273b 0a72 6571 7569 7265 2027 6669 pl';.require 'fi │ │ │ -000007f0: 6c65 4469 722e 706c 273b 0a72 6571 7569 leDir.pl';.requi │ │ │ -00000800: 7265 2027 666f 726b 5072 6f63 2e70 6c27 re 'forkProc.pl' │ │ │ -00000810: 3b0a 7265 7175 6972 6520 2768 756d 616e ;.require 'human │ │ │ -00000820: 5265 6164 2e70 6c27 3b0a 7265 7175 6972 Read.pl';.requir │ │ │ -00000830: 6520 2764 6174 6554 6f6f 6c73 2e70 6c27 e 'dateTools.pl' │ │ │ -00000840: 3b0a 7265 7175 6972 6520 2765 7661 6c54 ;.require 'evalT │ │ │ -00000850: 6f6f 6c73 2e70 6c27 3b0a 7265 7175 6972 ools.pl';.requir │ │ │ -00000860: 6520 2773 746f 7265 4261 636b 7570 4c69 e 'storeBackupLi │ │ │ -00000870: 622e 706c 273b 0a0a 6d79 2024 6368 6563 b.pl';..my $chec │ │ │ -00000880: 6b53 756d 4669 6c65 203d 2027 2e6d 6435 kSumFile = '.md5 │ │ │ -00000890: 4368 6563 6b53 756d 7327 3b0a 0a6d 7920 CheckSums';..my │ │ │ -000008a0: 2474 6d70 6469 7220 3d20 272f 746d 7027 $tmpdir = '/tmp' │ │ │ -000008b0: 3b20 2020 2020 2020 2020 2020 2020 2023 ; # │ │ │ -000008c0: 2064 6566 6175 6c74 2076 616c 7565 0a24 default value.$ │ │ │ -000008d0: 746d 7064 6972 203d 2024 454e 567b 2754 tmpdir = $ENV{'T │ │ │ -000008e0: 4d50 4449 5227 7d20 6966 2064 6566 696e MPDIR'} if defin │ │ │ -000008f0: 6564 2024 454e 567b 2754 4d50 4449 5227 ed $ENV{'TMPDIR' │ │ │ -00000900: 7d3b 0a0a 3d68 6561 6431 204e 414d 450a };..=head1 NAME. │ │ │ -00000910: 0a73 746f 7265 4261 636b 7570 5365 6172 .storeBackupSear │ │ │ -00000920: 6368 2e70 6c20 2d20 6c6f 6361 7465 7320 ch.pl - locates │ │ │ -00000930: 6469 6666 6572 656e 7420 7665 7273 696f different versio │ │ │ -00000940: 6e73 206f 6620 6120 6669 6c65 2073 6176 ns of a file sav │ │ │ -00000950: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac │ │ │ -00000960: 6b75 702e 706c 2e0a 0a3d 6865 6164 3120 kup.pl...=head1 │ │ │ -00000970: 5359 4e4f 5053 4953 0a0a 0973 746f 7265 SYNOPSIS...store │ │ │ -00000980: 4261 636b 7570 5365 6172 6368 2e70 6c20 BackupSearch.pl │ │ │ -00000990: 2d67 2063 6f6e 6669 6746 696c 650a 0a09 -g configFile... │ │ │ -000009a0: 7374 6f72 6542 6163 6b75 7053 6561 7263 storeBackupSearc │ │ │ -000009b0: 682e 706c 202d 6220 6261 636b 7570 4469 h.pl -b backupDi │ │ │ -000009c0: 7244 6972 205b 2d66 2063 6f6e 6669 6746 rDir [-f configF │ │ │ -000009d0: 696c 655d 0a09 2020 2020 2020 5b2d 7320 ile].. [-s │ │ │ -000009e0: 7275 6c65 5d20 205b 2d2d 6162 7350 6174 rule] [--absPat │ │ │ -000009f0: 685d 205b 2d77 2066 696c 655d 205b 2d2d h] [-w file] [-- │ │ │ -00000a00: 7061 724a 6f62 7320 6e75 6d62 6572 5d0a parJobs number]. │ │ │ -00000a10: 0920 2020 2020 205b 2d64 206c 6576 656c . [-d level │ │ │ -00000a20: 5d20 5b2d 2d6f 6e63 655d 205b 2d2d 7072 ] [--once] [--pr │ │ │ -00000a30: 696e 745d 205b 2d54 2074 6d70 6469 725d int] [-T tmpdir] │ │ │ -00000a40: 205b 6261 636b 7570 526f 6f74 202e 202e [backupRoot . . │ │ │ -00000a50: 202e 5d0a 0a3d 6865 6164 3120 4445 5343 .]..=head1 DESC │ │ │ -00000a60: 5249 5054 494f 4e0a 0a59 6f75 206e 6565 RIPTION..You nee │ │ │ -00000a70: 6420 736f 6d65 2062 6173 6963 2075 6e64 d some basic und │ │ │ -00000a80: 6572 7374 616e 6469 6e67 206f 6620 6c69 erstanding of li │ │ │ -00000a90: 6e75 7820 616e 6420 7065 726c 2074 6f20 nux and perl to │ │ │ -00000aa0: 7573 6520 6974 2e0a 0a3d 6865 6164 3120 use it...=head1 │ │ │ -00000ab0: 4f50 5449 4f4e 530a 0a3d 6f76 6572 2038 OPTIONS..=over 8 │ │ │ -00000ac0: 0a0a 3d69 7465 6d20 423c 2d2d 6765 6e65 ..=item B<--gene │ │ │ -00000ad0: 7261 7465 3e2c 2042 3c2d 673e 0a0a 2020 rate>, B<-g>.. │ │ │ -00000ae0: 2020 6765 6e65 7261 7465 2061 2063 6f6e generate a con │ │ │ -00000af0: 6669 6720 6669 6c65 0a0a 3d69 7465 6d20 fig file..=item │ │ │ -00000b00: 423c 2d2d 7072 696e 743e 0a0a 2020 2020 B<--print>.. │ │ │ -00000b10: 7072 696e 7420 636f 6e66 6967 7572 6174 print configurat │ │ │ -00000b20: 696f 6e20 7265 6164 2066 726f 6d20 636f ion read from co │ │ │ -00000b30: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file │ │ │ -00000b40: 2061 6e64 2073 746f 700a 0a3d 6974 656d and stop..=item │ │ │ -00000b50: 2042 3c2d 2d63 6f6e 6669 6746 696c 653e B<--configFile> │ │ │ -00000b60: 2c20 423c 2d66 3e0a 0a20 2020 2063 6f6e , B<-f>.. con │ │ │ -00000b70: 6669 6775 7261 7469 6f6e 2066 696c 6520 figuration file │ │ │ -00000b80: 2869 6e73 7465 6164 206f 6620 6f72 0a20 (instead of or. │ │ │ -00000b90: 2020 2061 6464 6974 696f 6e61 6c6c 7920 additionally │ │ │ -00000ba0: 746f 2070 6172 616d 6574 6572 7329 0a0a to parameters).. │ │ │ -00000bb0: 3d69 7465 6d20 423c 2d2d 6261 636b 7570 =item B<--backup │ │ │ -00000bc0: 4469 723e 2042 3c2d 623e 0a0a 0909 2020 Dir> B<-b>.... │ │ │ -00000bd0: 2020 746f 7020 6c65 7665 6c20 6469 7265 top level dire │ │ │ -00000be0: 6374 6f72 7920 6f66 2061 6c6c 2062 6163 ctory of all bac │ │ │ -00000bf0: 6b75 7073 0a0a 3d69 7465 6d20 423c 2d2d kups..=item B<-- │ │ │ -00000c00: 7365 6172 6368 5275 6c65 3e2c 2042 3c2d searchRule>, B<- │ │ │ -00000c10: 733e 0a0a 0909 2020 2020 7275 6c65 2066 s>.... rule f │ │ │ -00000c20: 6f72 2073 6561 7263 6869 6e67 0a09 0920 or searching... │ │ │ -00000c30: 2020 2073 6565 2052 4541 444d 453a 2027 see README: ' │ │ │ -00000c40: 696e 636c 7564 696e 6720 2f20 6578 636c including / excl │ │ │ -00000c50: 7564 696e 6720 6669 6c65 7320 616e 6420 uding files and │ │ │ -00000c60: 6469 7265 6374 6f72 6965 7327 0a0a 3d69 directories'..=i │ │ │ -00000c70: 7465 6d20 423c 2d2d 6162 7350 6174 683e tem B<--absPath> │ │ │ -00000c80: 2c20 423c 2d61 3e0a 0a20 2020 2077 7269 , B<-a>.. wri │ │ │ -00000c90: 7465 2072 6573 756c 7420 7769 7468 2061 te result with a │ │ │ -00000ca0: 6273 6f6c 7574 6520 7061 7468 206e 616d bsolute path nam │ │ │ -00000cb0: 6573 0a0a 3d69 7465 6d20 423c 2d2d 7772 es..=item B<--wr │ │ │ -00000cc0: 6974 6554 6f46 696c 653e 2c20 423c 2d77 iteToFile>, B<-w │ │ │ -00000cd0: 3e0a 0a20 2020 2077 7269 7465 2073 6561 >.. write sea │ │ │ -00000ce0: 7263 6820 7265 7375 6c74 2061 6c73 6f20 rch result also │ │ │ -00000cf0: 746f 2066 696c 650a 0a3d 6974 656d 2042 to file..=item B │ │ │ -00000d00: 3c2d 2d70 6172 4a6f 6273 3e2c 2042 3c2d <--parJobs>, B<- │ │ │ -00000d10: 703e 0a0a 2020 2020 6e75 6d62 6572 206f p>.. number o │ │ │ -00000d20: 6620 7061 7261 6c6c 656c 206a 6f62 732c f parallel jobs, │ │ │ -00000d30: 2064 6566 6175 6c74 203d 2063 686f 7365 default = chose │ │ │ -00000d40: 6e20 6175 746f 6d61 7469 6361 6c6c 790a n automatically. │ │ │ -00000d50: 0a3d 6974 656d 2042 3c2d 2d64 6562 7567 .=item B<--debug │ │ │ -00000d60: 3e2c 2042 3c2d 643e 0a0a 2020 2020 6465 >, B<-d>.. de │ │ │ -00000d70: 6275 6720 6c65 7665 6c2c 2070 6f73 7369 bug level, possi │ │ │ -00000d80: 626c 6520 7661 6c75 6573 2061 7265 2030 ble values are 0 │ │ │ -00000d90: 2c20 312c 2032 2c20 6465 6661 756c 7420 , 1, 2, default │ │ │ -00000da0: 3d20 300a 0a3d 6974 656d 2042 3c2d 2d6f = 0..=item B<--o │ │ │ -00000db0: 6e63 653e 2c20 423c 2d6f 3e0a 0a20 2020 nce>, B<-o>.. │ │ │ -00000dc0: 2073 686f 7720 6576 6572 7920 6669 6c65 show every file │ │ │ -00000dd0: 2066 6f75 6e64 206f 6e6c 7920 6f6e 6365 found only once │ │ │ -00000de0: 2028 6465 7065 6e64 696e 6720 6f6e 206d (depending on m │ │ │ -00000df0: 6435 2073 756d 290a 0a3d 6974 656d 2042 d5 sum)..=item B │ │ │ -00000e00: 3c2d 2d74 6d70 6469 723e 2c20 423c 2d54 <--tmpdir>, B<-T │ │ │ -00000e10: 3e0a 0a20 2020 2064 6972 6563 746f 7279 >.. directory │ │ │ -00000e20: 2066 6f72 2074 656d 706f 7261 7279 2066 for temporary f │ │ │ -00000e30: 696c 6573 2c20 6465 6661 756c 7420 6973 iles, default is │ │ │ -00000e40: 203c 2f74 6d70 3e0a 0a3d 6974 656d 2062 ..=item b │ │ │ -00000e50: 6163 6b75 7052 6f6f 740a 0a20 2020 2052 ackupRoot.. R │ │ │ -00000e60: 6f6f 7420 6469 7265 6374 6f72 6965 7320 oot directories │ │ │ -00000e70: 6f66 2062 6163 6b75 7073 2077 6865 7265 of backups where │ │ │ -00000e80: 2074 6f20 7365 6172 6368 2072 656c 6174 to search relat │ │ │ -00000e90: 6976 650a 2020 2020 746f 2062 6163 6b75 ive. to backu │ │ │ -00000ea0: 7044 6972 2e20 4966 206e 6f20 6469 7265 pDir. If no dire │ │ │ -00000eb0: 6374 6f72 6965 7320 6172 6520 7370 6563 ctories are spec │ │ │ -00000ec0: 6966 6965 642c 2061 6c6c 0a20 2020 2062 ified, all. b │ │ │ -00000ed0: 6163 6b75 7073 2062 656c 6f77 2062 6163 ackups below bac │ │ │ -00000ee0: 6b75 7044 6972 2061 7265 2063 686f 7365 kupDir are chose │ │ │ -00000ef0: 6e2e 0a0a 3d62 6163 6b0a 0a3d 6865 6164 n...=back..=head │ │ │ -00000f00: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop │ │ │ -00000f10: 7972 6967 6874 2028 6329 2032 3030 382d yright (c) 2008- │ │ │ -00000f20: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo │ │ │ -00000f30: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R │ │ │ -00000f40: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe │ │ │ -00000f50: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU │ │ │ -00000f60: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000f70: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any │ │ │ -00000f80: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version.. │ │ │ -00000f90: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help = │ │ │ -00000fa0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text( │ │ │ -00000fb0: 2430 293b 0a0a 6d79 2024 7465 6d70 6c61 $0);..my $templa │ │ │ -00000fc0: 7465 436f 6e66 6967 4669 6c65 203d 203c teConfigFile = < │ │ │ -00000fd0: 3c45 4f43 3b0a 2320 636f 6e66 6967 7572 & │ │ │ -00001560: 3a3a 5349 5a45 2822 334d 2229 2720 616e ::SIZE("3M")' an │ │ │ -00001570: 6420 275c 2475 6964 2065 7120 2268 6a63 d '\$uid eq "hjc │ │ │ -00001580: 2227 2029 206f 720a 2320 2020 2028 2027 "' ) or.# ( ' │ │ │ -00001590: 5c24 6d74 696d 6520 3e20 263a 3a44 4154 \$mtime > &::DAT │ │ │ -000015a0: 4528 2233 6434 6822 2927 2061 6e64 206e E("3d4h")' and n │ │ │ -000015b0: 6f74 2027 5c24 6669 6c65 203d 7e20 6d23 ot '\$file =~ m# │ │ │ -000015c0: 2f74 6d70 2f23 2720 2927 0a3b 7365 6172 /tmp/#' )'.;sear │ │ │ -000015d0: 6368 5275 6c65 3d0a 0a23 2072 6f6f 7420 chRule=..# root │ │ │ -000015e0: 6469 7265 6374 6f72 7920 6f66 2062 6163 directory of bac │ │ │ -000015f0: 6b75 7020 7265 6c61 7469 7665 2074 6f20 kup relative to │ │ │ -00001600: 6261 636b 7570 4469 7220 6469 7265 6374 backupDir direct │ │ │ -00001610: 6f72 790a 3b62 6163 6b75 7052 6f6f 743d ory.;backupRoot= │ │ │ -00001620: 0a0a 2320 6469 7265 6374 6f72 7920 666f ..# directory fo │ │ │ -00001630: 7220 7465 6d70 6f72 6172 7920 6669 6c65 r temporary file │ │ │ -00001640: 2c20 6465 6661 756c 7420 6973 202f 746d , default is /tm │ │ │ -00001650: 700a 3b74 6d70 4469 723d 0a0a 2320 7772 p.;tmpDir=..# wr │ │ │ -00001660: 6974 6520 7265 7375 6c74 2077 6974 6820 ite result with │ │ │ -00001670: 6162 736f 6c75 7465 2070 6174 6820 6e61 absolute path na │ │ │ -00001680: 6d65 730a 2320 6465 6661 756c 7420 6973 mes.# default is │ │ │ -00001690: 2027 6e6f 272c 2070 6f73 7369 626c 6520 'no', possible │ │ │ -000016a0: 7661 6c75 6573 2061 7265 2027 7965 7327 values are 'yes' │ │ │ -000016b0: 2061 6e64 2027 6e6f 270a 3b61 6273 5061 and 'no'.;absPa │ │ │ -000016c0: 7468 3d0a 0a23 2077 7269 7465 2073 6561 th=..# write sea │ │ │ -000016d0: 7263 6820 7265 7375 6c74 2061 6c73 6f20 rch result also │ │ │ -000016e0: 746f 2066 696c 650a 3b77 7269 7465 546f to file.;writeTo │ │ │ -000016f0: 4669 6c65 3d0a 0a23 206e 756d 6265 7220 File=..# number │ │ │ -00001700: 6f66 2070 6172 616c 6c65 6c20 6a6f 6273 of parallel jobs │ │ │ -00001710: 2c20 6465 6661 756c 7420 3d20 6368 6f73 , default = chos │ │ │ -00001720: 656e 2061 7574 6f6d 6174 6963 616c 6c79 en automatically │ │ │ -00001730: 0a3b 7061 724a 6f62 733d 0a0a 2320 6465 .;parJobs=..# de │ │ │ -00001740: 6275 6720 6c65 7665 6c2c 2070 6f73 7369 bug level, possi │ │ │ -00001750: 626c 6520 7661 6c75 6573 2061 7265 2030 ble values are 0 │ │ │ -00001760: 2c20 312c 2032 2c20 6465 6661 756c 7420 , 1, 2, default │ │ │ -00001770: 3d20 300a 3b64 6562 7567 3d0a 0a23 2073 = 0.;debug=..# s │ │ │ -00001780: 686f 7720 6576 6572 7920 666f 756e 6420 how every found │ │ │ -00001790: 6669 6c65 206f 6e6c 7920 6f6e 6365 2028 file only once ( │ │ │ -000017a0: 6465 7065 6e64 696e 6720 6f6e 206d 6435 depending on md5 │ │ │ -000017b0: 2073 756d 290a 2320 6465 6661 756c 7420 sum).# default │ │ │ -000017c0: 6973 2027 6e6f 272c 2070 6f73 7369 626c is 'no', possibl │ │ │ -000017d0: 6520 7661 6c75 6573 2061 7265 2027 7965 e values are 'ye │ │ │ -000017e0: 7327 2061 6e64 2027 6e6f 270a 3b6f 6e63 s' and 'no'.;onc │ │ │ -000017f0: 653d 0a45 4f43 0a20 2020 203b 0a0a 0a26 e=.EOC. ;...& │ │ │ -00001800: 7072 696e 7456 6572 7369 6f6e 285c 4041 printVersion(\@A │ │ │ -00001810: 5247 562c 2027 2d56 272c 2027 2d2d 7665 RGV, '-V', '--ve │ │ │ -00001820: 7273 696f 6e27 293b 0a0a 6d79 2024 4368 rsion');..my $Ch │ │ │ -00001830: 6563 6b50 6172 203d 0a20 2020 2043 6865 eckPar =. Che │ │ │ -00001840: 636b 5061 7261 6d2d 3e6e 6577 2827 2d63 ckParam->new('-c │ │ │ -00001850: 6f6e 6669 6746 696c 6527 203d 3e20 272d onfigFile' => '- │ │ │ -00001860: 6627 2c0a 0909 2020 2020 272d 616c 6c6f f',... '-allo │ │ │ -00001870: 774c 6973 7473 2720 3d3e 2027 7965 7327 wLists' => 'yes' │ │ │ -00001880: 2c0a 2309 0920 2020 2027 2d6c 6973 744d ,.#.. '-listM │ │ │ -00001890: 6170 7069 6e67 2720 3d3e 2027 6261 636b apping' => 'back │ │ │ -000018a0: 7570 526f 6f74 272c 0a09 0920 2020 2027 upRoot',... ' │ │ │ -000018b0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio │ │ │ -000018c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000018d0: 3e20 2763 6f6e 6669 6746 696c 6527 2c0a > 'configFile',. │ │ │ -000018e0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000018f0: 7469 6f6e 2720 3d3e 2027 2d66 272c 0a09 tion' => '-f',.. │ │ │ -00001900: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00001910: 6173 2720 3d3e 2027 2d2d 636f 6e66 6967 as' => '--config │ │ │ -00001920: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ -00001930: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00001940: 2729 2c0a 2020 2020 2020 2020 2020 2020 '),. │ │ │ -00001950: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001960: 2020 2020 4f70 7469 6f6e 2d3e 6e65 7728 Option->new( │ │ │ -00001970: 272d 6e61 6d65 2720 3d3e 2027 6765 6e65 '-name' => 'gene │ │ │ -00001980: 7261 7465 272c 0a09 0909 0909 2020 2020 rate',...... │ │ │ -00001990: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000019a0: 272d 6727 2c0a 0909 0909 0920 2020 2027 '-g',...... ' │ │ │ -000019b0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -000019c0: 2d67 656e 6572 6174 6527 2c0a 0909 0909 -generate',..... │ │ │ -000019d0: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -000019e0: 2027 7965 7327 2c0a 0909 0909 0920 2020 'yes',...... │ │ │ -000019f0: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a27 '-only_if' =>.' │ │ │ -00001a00: 6e6f 7420 5b63 6f6e 6669 6746 696c 655d not [configFile] │ │ │ -00001a10: 2061 6e64 206e 6f74 205b 6261 636b 7570 and not [backup │ │ │ -00001a20: 4469 725d 2061 6e64 206e 6f74 205b 6261 Dir] and not [ba │ │ │ -00001a30: 636b 7570 526f 6f74 5d20 616e 6420 6e6f ckupRoot] and no │ │ │ -00001a40: 7420 5b73 6561 7263 6852 756c 655d 2729 t [searchRule]') │ │ │ -00001a50: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00001a60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001a70: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ -00001a80: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup │ │ │ -00001a90: 4469 7227 2c0a 0909 0909 0920 2020 2027 Dir',...... ' │ │ │ -00001aa0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001ab0: 2d62 272c 0a09 0909 0909 2020 2020 272d -b',...... '- │ │ │ -00001ac0: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001ad0: 6261 636b 7570 4469 7227 2c0a 0909 0909 backupDir',..... │ │ │ -00001ae0: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00001af0: 3e20 2762 6163 6b75 7044 6972 272c 0a09 > 'backupDir',.. │ │ │ -00001b00: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00001b10: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -00001b20: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001b30: 6d65 2720 3d3e 2027 7365 6172 6368 5275 me' => 'searchRu │ │ │ -00001b40: 6c65 272c 0a09 0909 0909 2020 2020 272d le',...... '- │ │ │ -00001b50: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00001b60: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ -00001b70: 6c5f 616c 6961 7327 203d 3e20 272d 2d73 l_alias' => '--s │ │ │ -00001b80: 6561 7263 6852 756c 6527 2c0a 0909 0909 earchRule',..... │ │ │ -00001b90: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00001ba0: 3e20 2773 6561 7263 6852 756c 6527 2c0a > 'searchRule',. │ │ │ -00001bb0: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param │ │ │ -00001bc0: 2720 3d3e 2027 7965 7327 2c0a 0909 0909 ' => 'yes',..... │ │ │ -00001bd0: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ -00001be0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ -00001bf0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00001c00: 616d 6527 203d 3e20 2777 7269 7465 4162 ame' => 'writeAb │ │ │ -00001c10: 7350 6174 6827 2c0a 0909 0909 0920 2020 sPath',...... │ │ │ -00001c20: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001c30: 2027 2d61 272c 0a09 0909 0909 2020 2020 '-a',...... │ │ │ -00001c40: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001c50: 2d2d 6162 7350 6174 6827 2c0a 0909 0909 --absPath',..... │ │ │ -00001c60: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00001c70: 3e20 2761 6273 5061 7468 272c 0a09 0909 > 'absPath',.... │ │ │ -00001c80: 0909 2020 2020 272d 6366 5f6e 6f4f 7074 .. '-cf_noOpt │ │ │ -00001c90: 5365 7427 203d 3e20 5b27 7965 7327 2c20 Set' => ['yes', │ │ │ -00001ca0: 276e 6f27 5d29 2c0a 0909 0909 4f70 7469 'no']),.....Opti │ │ │ -00001cb0: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001cc0: 3d3e 2027 7772 6974 6554 6f46 696c 6527 => 'writeToFile' │ │ │ -00001cd0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001ce0: 6f70 7469 6f6e 2720 3d3e 2027 2d77 272c option' => '-w', │ │ │ -00001cf0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00001d00: 6c69 6173 2720 3d3e 2027 2d2d 7772 6974 lias' => '--writ │ │ │ -00001d10: 6554 6f46 696c 6527 2c0a 0909 0909 0920 eToFile',...... │ │ │ -00001d20: 2020 2027 2d63 665f 6b65 7927 203d 3e20 '-cf_key' => │ │ │ -00001d30: 2777 7269 7465 546f 4669 6c65 272c 0a09 'writeToFile',.. │ │ │ -00001d40: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00001d50: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -00001d60: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001d70: 6d65 2720 3d3e 2027 7061 724a 6f62 7327 me' => 'parJobs' │ │ │ -00001d80: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001d90: 6f70 7469 6f6e 2720 3d3e 2027 2d70 272c option' => '-p', │ │ │ -00001da0: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00001db0: 6c69 6173 2720 3d3e 2027 2d2d 7061 724a lias' => '--parJ │ │ │ -00001dc0: 6f62 7327 2c0a 0909 0909 0920 2020 2027 obs',...... ' │ │ │ -00001dd0: 2d63 665f 6b65 7927 203d 3e20 2770 6172 -cf_key' => 'par │ │ │ -00001de0: 4a6f 6273 272c 0a09 0909 0909 2020 2020 Jobs',...... │ │ │ -00001df0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00001e00: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00001e10: 7474 6572 6e27 203d 3e20 275c 415b 312d ttern' => '\A[1- │ │ │ -00001e20: 395d 5c64 2a5c 5a27 292c 0a09 0909 094f 9]\d*\Z'),.....O │ │ │ -00001e30: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001e40: 6527 203d 3e20 2764 6562 7567 272c 0a09 e' => 'debug',.. │ │ │ -00001e50: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00001e60: 696f 6e27 203d 3e20 272d 6427 2c0a 0909 ion' => '-d',... │ │ │ -00001e70: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00001e80: 7327 203d 3e20 272d 2d64 6562 7567 272c s' => '--debug', │ │ │ -00001e90: 0a09 0909 0909 2020 2020 272d 6366 5f6b ...... '-cf_k │ │ │ -00001ea0: 6579 2720 3d3e 2027 6465 6275 6727 2c0a ey' => 'debug',. │ │ │ -00001eb0: 0909 0909 0920 2020 2027 2d64 6566 6175 ..... '-defau │ │ │ -00001ec0: 6c74 2720 3d3e 2030 2c0a 0909 0909 0920 lt' => 0,...... │ │ │ -00001ed0: 2020 2027 2d70 6174 7465 726e 2720 3d3e '-pattern' => │ │ │ -00001ee0: 2027 5c41 5b30 3132 5d5c 5a27 292c 0a09 '\A[012]\Z'),.. │ │ │ -00001ef0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001f00: 2d6e 616d 6527 203d 3e20 276f 6e63 6527 -name' => 'once' │ │ │ -00001f10: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001f20: 6f70 7469 6f6e 2720 3d3e 2027 2d6f 272c option' => '-o', │ │ │ -00001f30: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -00001f40: 6c69 6173 2720 3d3e 2027 2d2d 6f6e 6365 lias' => '--once │ │ │ -00001f50: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -00001f60: 5f6b 6579 2720 3d3e 2027 6f6e 6365 272c _key' => 'once', │ │ │ -00001f70: 0a09 0909 0909 2020 2020 272d 6366 5f6e ...... '-cf_n │ │ │ -00001f80: 6f4f 7074 5365 7427 203d 3e20 5b27 7965 oOptSet' => ['ye │ │ │ -00001f90: 7327 2c20 276e 6f27 5d29 2c0a 0909 0909 s', 'no']),..... │ │ │ -00001fa0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001fb0: 6d65 2720 3d3e 2027 7072 696e 7427 2c0a me' => 'print',. │ │ │ -00001fc0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001fd0: 7469 6f6e 2720 3d3e 2027 2d2d 7072 696e tion' => '--prin │ │ │ -00001fe0: 7427 292c 0a09 0909 094f 7074 696f 6e2d t'),.....Option- │ │ │ -00001ff0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00002000: 2774 6d70 6469 7227 2c0a 0909 0909 0920 'tmpdir',...... │ │ │ -00002010: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00002020: 3d3e 2027 2d54 272c 0a09 0909 0909 2020 => '-T',...... │ │ │ -00002030: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00002040: 2027 2d2d 746d 7064 6972 272c 0a09 0909 '--tmpdir',.... │ │ │ -00002050: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00002060: 3d3e 2027 746d 7044 6972 272c 0a09 0909 => 'tmpDir',.... │ │ │ -00002070: 0909 2020 2020 272d 6465 6661 756c 7427 .. '-default' │ │ │ -00002080: 203d 3e20 2474 6d70 6469 7229 2c0a 0909 => $tmpdir),... │ │ │ -00002090: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000020a0: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup │ │ │ -000020b0: 526f 6f74 272c 0a09 0909 0909 2020 2020 Root',...... │ │ │ -000020c0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000020d0: 272d 2d62 6163 6b75 7052 6f6f 7427 2c0a '--backupRoot',. │ │ │ -000020e0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -000020f0: 7927 203d 3e20 2762 6163 6b75 7052 6f6f y' => 'backupRoo │ │ │ -00002100: 7427 2c0a 0909 0909 0920 2020 2027 2d70 t',...... '-p │ │ │ -00002110: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'), │ │ │ -00002120: 0a23 2068 6964 6465 6e20 6f70 7469 6f6e .# hidden option │ │ │ -00002130: 730a 0909 0909 4f70 7469 6f6e 2d3e 6e65 s.....Option->ne │ │ │ -00002140: 7728 272d 6e61 6d65 2720 3d3e 2027 7072 w('-name' => 'pr │ │ │ -00002150: 696e 7441 6c6c 272c 0a09 0909 0909 2020 intAll',...... │ │ │ -00002160: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00002170: 3e20 272d 2d70 7269 6e74 416c 6c27 2c0a > '--printAll',. │ │ │ -00002180: 0909 0909 0920 2020 2027 2d68 6964 6465 ..... '-hidde │ │ │ -00002190: 6e27 203d 3e20 2779 6573 2729 2c0a 0909 n' => 'yes'),... │ │ │ -000021a0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000021b0: 6e61 6d65 2720 3d3e 2027 7265 6164 4e6f name' => 'readNo │ │ │ -000021c0: 4c69 6e65 7327 2c0a 0909 0909 0920 2020 Lines',...... │ │ │ -000021d0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -000021e0: 2027 2d2d 7265 6164 4e6f 4c69 6e65 7327 '--readNoLines' │ │ │ -000021f0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00002200: 6b65 7927 203d 3e20 2772 6561 644e 6f4c key' => 'readNoL │ │ │ -00002210: 696e 6573 272c 0a09 0909 0909 2020 2020 ines',...... │ │ │ -00002220: 272d 6869 6464 656e 2720 3d3e 2027 7965 '-hidden' => 'ye │ │ │ -00002230: 7327 2c0a 0909 0909 0920 2020 2027 2d64 s',...... '-d │ │ │ -00002240: 6566 6175 6c74 2720 3d3e 2032 3030 3030 efault' => 20000 │ │ │ -00002250: 290a 0909 2020 2020 5d0a 2020 2020 293b )... ]. ); │ │ │ -00002260: 0a0a 0a24 4368 6563 6b50 6172 2d3e 6368 ...$CheckPar->ch │ │ │ -00002270: 6563 6b28 272d 6172 6776 2720 3d3e 205c eck('-argv' => \ │ │ │ -00002280: 4041 5247 562c 0a20 2020 2020 2020 2020 @ARGV,. │ │ │ -00002290: 2020 2020 2020 2020 272d 6865 6c70 2720 '-help' │ │ │ -000022a0: 3d3e 2024 4865 6c70 0a20 2020 2020 2020 => $Help. │ │ │ -000022b0: 2020 2020 2020 2020 2020 293b 0a0a 0a23 );...# │ │ │ -000022c0: 2041 7573 7765 7274 756e 6720 6465 7220 Auswertung der │ │ │ -000022d0: 5061 7261 6d65 7465 720a 6d79 2024 636f Parameter.my $co │ │ │ -000022e0: 6e66 6967 4669 6c65 203d 2024 4368 6563 nfigFile = $Chec │ │ │ -000022f0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00002300: 5061 7228 2763 6f6e 6669 6746 696c 6527 Par('configFile' │ │ │ -00002310: 293b 0a6d 7920 2467 656e 6572 6174 6543 );.my $generateC │ │ │ -00002320: 6f6e 6669 6746 696c 6520 3d20 2443 6865 onfigFile = $Che │ │ │ -00002330: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00002340: 6850 6172 2827 6765 6e65 7261 7465 2729 hPar('generate') │ │ │ -00002350: 3b0a 6d79 2024 7072 696e 7420 3d20 2443 ;.my $print = $C │ │ │ -00002360: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00002370: 6974 686f 7574 5061 7228 2770 7269 6e74 ithoutPar('print │ │ │ -00002380: 2729 3b0a 6d79 2024 6261 636b 7570 4469 ');.my $backupDi │ │ │ -00002390: 7220 3d20 2443 6865 636b 5061 722d 3e67 r = $CheckPar->g │ │ │ -000023a0: 6574 4f70 7457 6974 6850 6172 2827 6261 etOptWithPar('ba │ │ │ -000023b0: 636b 7570 4469 7227 293b 0a6d 7920 2477 ckupDir');.my $w │ │ │ -000023c0: 7269 7465 546f 4669 6c65 203d 2024 4368 riteToFile = $Ch │ │ │ -000023d0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000023e0: 7468 5061 7228 2777 7269 7465 546f 4669 thPar('writeToFi │ │ │ -000023f0: 6c65 2729 3b0a 6d79 2024 7365 6172 6368 le');.my $search │ │ │ -00002400: 5275 6c65 203d 2024 4368 6563 6b50 6172 Rule = $CheckPar │ │ │ -00002410: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00002420: 2773 6561 7263 6852 756c 6527 293b 2020 'searchRule'); │ │ │ -00002430: 2020 2320 7665 6374 6f72 0a6d 7920 2477 # vector.my $w │ │ │ -00002440: 7269 7465 4162 7350 6174 6820 3d20 2443 riteAbsPath = $C │ │ │ -00002450: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00002460: 6974 686f 7574 5061 7228 2777 7269 7465 ithoutPar('write │ │ │ -00002470: 4162 7350 6174 6827 293b 0a6d 7920 2470 AbsPath');.my $p │ │ │ -00002480: 6172 4a6f 6273 203d 2024 4368 6563 6b50 arJobs = $CheckP │ │ │ -00002490: 6172 2d3e 6765 744f 7074 5769 7468 5061 ar->getOptWithPa │ │ │ -000024a0: 7228 2770 6172 4a6f 6273 2729 3b0a 6d79 r('parJobs');.my │ │ │ -000024b0: 2024 6465 6275 6720 3d20 2443 6865 636b $debug = $Check │ │ │ -000024c0: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -000024d0: 6172 2827 6465 6275 6727 293b 0a6d 7920 ar('debug');.my │ │ │ -000024e0: 246f 6e63 6520 3d20 2443 6865 636b 5061 $once = $CheckPa │ │ │ -000024f0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -00002500: 5061 7228 276f 6e63 6527 293b 0a24 746d Par('once');.$tm │ │ │ -00002510: 7064 6972 203d 2024 4368 6563 6b50 6172 pdir = $CheckPar │ │ │ -00002520: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00002530: 2774 6d70 6469 7227 293b 0a6d 7920 2840 'tmpdir');.my (@ │ │ │ -00002540: 6261 636b 7570 526f 6f74 2920 3d20 2824 backupRoot) = ($ │ │ │ -00002550: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00002560: 5769 7468 5061 7228 2762 6163 6b75 7052 WithPar('backupR │ │ │ -00002570: 6f6f 7427 2929 3b0a 0a6d 7920 2470 7269 oot'));..my $pri │ │ │ -00002580: 6e74 416c 6c20 3d20 2443 6865 636b 5061 ntAll = $CheckPa │ │ │ -00002590: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -000025a0: 5061 7228 2770 7269 6e74 416c 6c27 293b Par('printAll'); │ │ │ -000025b0: 0a24 7072 696e 7420 3d20 3120 6966 2024 .$print = 1 if $ │ │ │ -000025c0: 7072 696e 7441 6c6c 3b0a 6d79 2024 7265 printAll;.my $re │ │ │ -000025d0: 6164 4e6f 4c69 6e65 7320 3d20 2443 6865 adNoLines = $Che │ │ │ -000025e0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -000025f0: 6850 6172 2827 7265 6164 4e6f 4c69 6e65 hPar('readNoLine │ │ │ -00002600: 7327 293b 0a0a 756e 6c65 7373 2028 2470 s');..unless ($p │ │ │ -00002610: 6172 4a6f 6273 290a 7b0a 2020 2020 6c6f arJobs).{. lo │ │ │ -00002620: 6361 6c20 2a46 494c 453b 0a20 2020 2069 cal *FILE;. i │ │ │ -00002630: 6620 286f 7065 6e28 4649 4c45 2c20 222f f (open(FILE, "/ │ │ │ -00002640: 7072 6f63 2f63 7075 696e 666f 2229 290a proc/cpuinfo")). │ │ │ -00002650: 2020 2020 7b0a 096d 7920 246c 3b0a 0924 {..my $l;..$ │ │ │ -00002660: 7061 724a 6f62 7320 3d20 313b 0a09 7768 parJobs = 1;..wh │ │ │ -00002670: 696c 6520 2824 6c20 3d20 3c46 494c 453e ile ($l = │ │ │ -00002680: 290a 097b 0a09 2020 2020 2470 6172 4a6f )..{.. $parJo │ │ │ -00002690: 6273 2b2b 2069 6620 246c 203d 7e20 2f70 bs++ if $l =~ /p │ │ │ -000026a0: 726f 6365 7373 6f72 2f3b 0a09 7d0a 0963 rocessor/;..}..c │ │ │ -000026b0: 6c6f 7365 2846 494c 4529 3b0a 2020 2020 lose(FILE);. │ │ │ -000026c0: 7d0a 2020 2020 2470 6172 4a6f 6273 203d }. $parJobs = │ │ │ -000026d0: 2032 2069 6620 2470 6172 4a6f 6273 203c 2 if $parJobs < │ │ │ -000026e0: 2032 3b0a 7d0a 0a69 6620 2824 6765 6e65 2;.}..if ($gene │ │ │ -000026f0: 7261 7465 436f 6e66 6967 4669 6c65 290a rateConfigFile). │ │ │ -00002700: 7b0a 2020 2020 6d79 2024 616e 7377 6572 {. my $answer │ │ │ -00002710: 203d 2027 7965 7327 3b0a 2020 2020 6966 = 'yes';. if │ │ │ -00002720: 2028 2d65 2024 6765 6e65 7261 7465 436f (-e $generateCo │ │ │ -00002730: 6e66 6967 4669 6c65 290a 2020 2020 7b0a nfigFile). {. │ │ │ -00002740: 0964 6f0a 097b 0a09 2020 2020 7072 696e .do..{.. prin │ │ │ -00002750: 7420 223c 2467 656e 6572 6174 6543 6f6e t "<$generateCon │ │ │ -00002760: 6669 6746 696c 653e 2061 6c72 6561 6479 figFile> already │ │ │ -00002770: 2065 7869 7374 732e 204f 7665 7277 7269 exists. Overwri │ │ │ -00002780: 7465 3f5c 6e22 2c0a 0920 2020 2022 7965 te?\n",.. "ye │ │ │ -00002790: 7320 2f20 6e6f 202d 3e20 223b 0a09 2020 s / no -> ";.. │ │ │ -000027a0: 2020 2461 6e73 7765 7220 3d20 3c53 5444 $answer = ;.. chomp │ │ │ -000027c0: 2461 6e73 7765 723b 0a09 7d20 7768 696c $answer;..} whil │ │ │ -000027d0: 6520 2824 616e 7377 6572 206e 6520 2779 e ($answer ne 'y │ │ │ -000027e0: 6573 2720 616e 6420 2461 6e73 7765 7220 es' and $answer │ │ │ -000027f0: 6e65 2027 6e6f 2729 3b0a 2020 2020 7d0a ne 'no');. }. │ │ │ -00002800: 2020 2020 6578 6974 2030 2069 6620 2461 exit 0 if $a │ │ │ -00002810: 6e73 7765 7220 6571 2027 6e6f 273b 0a0a nswer eq 'no';.. │ │ │ -00002820: 2020 2020 6c6f 6361 6c20 2a46 494c 453b local *FILE; │ │ │ -00002830: 0a20 2020 206f 7065 6e28 4649 4c45 2c20 . open(FILE, │ │ │ -00002840: 223e 2024 6765 6e65 7261 7465 436f 6e66 "> $generateConf │ │ │ -00002850: 6967 4669 6c65 2229 206f 720a 0964 6965 igFile") or..die │ │ │ -00002860: 2022 636f 756c 6420 6e6f 7420 7772 6974 "could not writ │ │ │ -00002870: 6520 746f 203c 2467 656e 6572 6174 6543 e to <$generateC │ │ │ -00002880: 6f6e 6669 6746 696c 653e 223b 0a20 2020 onfigFile>";. │ │ │ -00002890: 2070 7269 6e74 2046 494c 4520 2474 656d print FILE $tem │ │ │ -000028a0: 706c 6174 6543 6f6e 6669 6746 696c 653b plateConfigFile; │ │ │ -000028b0: 0a20 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE) │ │ │ -000028c0: 3b0a 2020 2020 6578 6974 2030 3b0a 7d0a ;. exit 0;.}. │ │ │ -000028d0: 0a0a 6966 2028 2470 7269 6e74 290a 7b0a ..if ($print).{. │ │ │ -000028e0: 2020 2020 2443 6865 636b 5061 722d 3e70 $CheckPar->p │ │ │ -000028f0: 7269 6e74 2827 2d73 686f 7748 6964 6465 rint('-showHidde │ │ │ -00002900: 6e27 203d 3e20 2470 7269 6e74 416c 6c29 n' => $printAll) │ │ │ -00002910: 3b0a 7d0a 0a6d 7920 2470 724c 6f67 203d ;.}..my $prLog = │ │ │ -00002920: 2070 7269 6e74 4c6f 672d 3e6e 6577 2827 printLog->new(' │ │ │ -00002930: 2d6b 696e 6427 203d 3e20 5b27 493a 494e -kind' => ['I:IN │ │ │ -00002940: 464f 272c 2027 573a 5741 524e 494e 4727 FO', 'W:WARNING' │ │ │ -00002950: 2c20 2745 3a45 5252 4f52 272c 0a09 0909 , 'E:ERROR',.... │ │ │ -00002960: 0920 2020 2020 2027 533a 5354 4154 4953 . 'S:STATIS │ │ │ -00002970: 5449 4327 2c20 2744 3a44 4542 5547 272c TIC', 'D:DEBUG', │ │ │ -00002980: 2027 563a 5645 5253 494f 4e27 5d2c 0a09 'V:VERSION'],.. │ │ │ -00002990: 0909 2020 272d 746d 7064 6972 2720 3d3e .. '-tmpdir' => │ │ │ -000029a0: 2024 746d 7064 6972 293b 0a24 6d61 696e $tmpdir);.$main │ │ │ -000029b0: 3a3a 5f5f 7072 4c6f 6720 3d20 2470 724c ::__prLog = $prL │ │ │ -000029c0: 6f67 3b20 2020 2320 7573 6564 2069 6e20 og; # used in │ │ │ -000029d0: 7275 6c65 730a 2470 724c 6f67 2d3e 666f rules.$prLog->fo │ │ │ -000029e0: 726b 2824 7265 7129 3b0a 0a24 7072 4c6f rk($req);..$prLo │ │ │ -000029f0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00002a00: 203d 3e20 2756 272c 0a09 2020 2020 2020 => 'V',.. │ │ │ -00002a10: 272d 7374 7227 203d 3e20 5b22 7374 6f72 '-str' => ["stor │ │ │ -00002a20: 6542 6163 6b75 7053 6561 7263 682e 706c eBackupSearch.pl │ │ │ -00002a30: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA │ │ │ -00002a40: 434b 5550 5645 5253 494f 4e22 5d29 3b0a CKUPVERSION"]);. │ │ │ -00002a50: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00002a60: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00002a70: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00002a80: 5b22 6d69 7373 696e 6720 7061 7261 6d65 ["missing parame │ │ │ -00002a90: 7465 7273 2062 6163 6b75 7044 6972 2061 ters backupDir a │ │ │ -00002aa0: 6e64 2073 6561 7263 6852 756c 655c 6e24 nd searchRule\n$ │ │ │ -00002ab0: 4865 6c70 225d 2c0a 0920 2020 2020 2027 Help"],.. ' │ │ │ -00002ac0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ -00002ad0: 2075 6e6c 6573 7320 6465 6669 6e65 6420 unless defined │ │ │ -00002ae0: 2462 6163 6b75 7044 6972 2061 6e64 2064 $backupDir and d │ │ │ -00002af0: 6566 696e 6564 2024 7365 6172 6368 5275 efined $searchRu │ │ │ -00002b00: 6c65 3b0a 2470 724c 6f67 2d3e 7072 696e le;.$prLog->prin │ │ │ -00002b10: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -00002b20: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -00002b30: 3d3e 205b 226d 6973 7369 6e67 2070 6172 => ["missing par │ │ │ -00002b40: 616d 6574 6572 2062 6163 6b75 7044 6972 ameter backupDir │ │ │ -00002b50: 5c6e 2448 656c 7022 5d2c 0a09 2020 2020 \n$Help"],.. │ │ │ -00002b60: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ -00002b70: 2020 2020 756e 6c65 7373 2064 6566 696e unless defin │ │ │ -00002b80: 6564 2024 6261 636b 7570 4469 723b 0a24 ed $backupDir;.$ │ │ │ -00002b90: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002ba0: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ -00002bb0: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00002bc0: 6261 636b 7570 4469 7220 6469 7265 6374 backupDir direct │ │ │ -00002bd0: 6f72 7920 3c24 6261 636b 7570 4469 723e ory <$backupDir> │ │ │ -00002be0: 2064 6f65 7320 6e6f 7420 6578 6973 7420 does not exist │ │ │ -00002bf0: 2220 2e0a 0920 2020 2020 2022 6f72 2069 " ... "or i │ │ │ -00002c00: 7320 6e6f 7420 6163 6365 7369 626c 6522 s not accesible" │ │ │ -00002c10: 5d2c 0a09 2020 2020 2020 272d 6578 6974 ],.. '-exit │ │ │ -00002c20: 2720 3d3e 2031 290a 2020 2020 756e 6c65 ' => 1). unle │ │ │ -00002c30: 7373 202d 7220 2462 6163 6b75 7044 6972 ss -r $backupDir │ │ │ -00002c40: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print( │ │ │ -00002c50: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00002c60: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00002c70: 205b 226d 6973 7369 6e67 2070 6172 616d ["missing param │ │ │ -00002c80: 6574 6572 2073 6561 7263 6852 756c 655c eter searchRule\ │ │ │ -00002c90: 6e24 4865 6c70 225d 2c0a 0920 2020 2020 n$Help"],.. │ │ │ -00002ca0: 2027 2d65 7869 7427 203d 3e20 3129 0a20 '-exit' => 1). │ │ │ -00002cb0: 2020 2075 6e6c 6573 7320 6465 6669 6e65 unless define │ │ │ -00002cc0: 6420 2473 6561 7263 6852 756c 653b 0a0a d $searchRule;.. │ │ │ -00002cd0: 0a6d 7920 2473 5275 6c65 203d 2065 7661 .my $sRule = eva │ │ │ -00002ce0: 6c49 6e6f 6465 5275 6c65 2d3e 6e65 7728 lInodeRule->new( │ │ │ -00002cf0: 272d 6c69 6e65 2720 3d3e 2024 7365 6172 '-line' => $sear │ │ │ -00002d00: 6368 5275 6c65 2c0a 0909 0920 2020 2020 chRule,.... │ │ │ -00002d10: 2020 272d 6b65 794e 616d 6527 203d 3e20 '-keyName' => │ │ │ -00002d20: 2773 6561 7263 6827 2c0a 0909 0920 2020 'search',.... │ │ │ -00002d30: 2020 2020 272d 6465 6275 6727 203d 3e20 '-debug' => │ │ │ -00002d40: 2464 6562 7567 2c0a 0909 0920 2020 2020 $debug,.... │ │ │ -00002d50: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ -00002d60: 724c 6f67 293b 0a0a 2470 724c 6f67 2d3e rLog);..$prLog-> │ │ │ -00002d70: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00002d80: 2027 4927 2c0a 0920 2020 2020 2027 2d73 'I',.. '-s │ │ │ -00002d90: 7472 2720 3d3e 205b 2273 6561 7263 6869 tr' => ["searchi │ │ │ -00002da0: 6e67 2077 6974 6820 7275 6c65 222c 2027 ng with rule", ' │ │ │ -00002db0: 2020 2720 2e0a 0909 0920 6a6f 696e 2827 ' ..... join(' │ │ │ -00002dc0: 2027 2c20 407b 2473 5275 6c65 2d3e 6765 ', @{$sRule->ge │ │ │ -00002dd0: 744c 696e 6528 297d 295d 293b 0a0a 6966 tLine()})]);..if │ │ │ -00002de0: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. │ │ │ -00002df0: 6578 6974 2030 3b0a 7d0a 0a0a 6d79 2024 exit 0;.}...my $ │ │ │ -00002e00: 616c 6c4c 696e 6b73 203d 206c 6174 654c allLinks = lateL │ │ │ -00002e10: 696e 6b73 2d3e 6e65 7728 272d 6469 7273 inks->new('-dirs │ │ │ -00002e20: 2720 3d3e 205b 2462 6163 6b75 7044 6972 ' => [$backupDir │ │ │ -00002e30: 5d2c 0a09 0909 2020 2020 2020 272d 6b69 ],.... '-ki │ │ │ -00002e40: 6e64 2720 3d3e 2027 7265 6375 7273 6976 nd' => 'recursiv │ │ │ -00002e50: 6553 6561 7263 6827 2c0a 0909 0920 2020 eSearch',.... │ │ │ -00002e60: 2020 2027 2d76 6572 626f 7365 2720 3d3e '-verbose' => │ │ │ -00002e70: 2030 2c0a 0909 0920 2020 2020 2027 2d70 0,.... '-p │ │ │ -00002e80: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -00002e90: 3b0a 0a6d 7920 2461 6c6c 5374 6275 4469 ;..my $allStbuDi │ │ │ -00002ea0: 7273 203d 2024 616c 6c4c 696e 6b73 2d3e rs = $allLinks-> │ │ │ -00002eb0: 6765 7441 6c6c 5374 6f72 6542 6163 6b75 getAllStoreBacku │ │ │ -00002ec0: 7044 6972 7328 293b 0a0a 0a23 2066 696c pDirs();...# fil │ │ │ -00002ed0: 7465 7220 7468 6520 7265 6c65 7661 6e74 ter the relevant │ │ │ -00002ee0: 2062 6163 6b75 7073 0a6d 7920 2840 6469 backups.my (@di │ │ │ -00002ef0: 7273 546f 5365 6172 6368 2920 3d20 2829 rsToSearch) = () │ │ │ -00002f00: 3b0a 6966 2028 4062 6163 6b75 7052 6f6f ;.if (@backupRoo │ │ │ -00002f10: 7429 0a7b 0a20 2020 206d 7920 2464 3b0a t).{. my $d;. │ │ │ -00002f20: 2020 2020 666f 7265 6163 6820 2464 2028 foreach $d ( │ │ │ -00002f30: 4062 6163 6b75 7052 6f6f 7429 0a20 2020 @backupRoot). │ │ │ -00002f40: 207b 0a09 756e 6c65 7373 2028 2464 203d {..unless ($d = │ │ │ -00002f50: 7e20 6d23 5c41 2f23 290a 097b 0a09 2020 ~ m#\A/#)..{.. │ │ │ -00002f60: 2020 2464 203d 2022 2462 6163 6b75 7044 $d = "$backupD │ │ │ -00002f70: 6972 2f24 6422 3b0a 097d 0a09 2470 724c ir/$d";..}..$prL │ │ │ -00002f80: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002f90: 2720 3d3e 2027 4527 2c0a 0909 2020 2020 ' => 'E',... │ │ │ -00002fa0: 2020 272d 7374 7227 203d 3e20 5b22 6469 '-str' => ["di │ │ │ -00002fb0: 7265 6374 6f72 7920 3c24 643e 2064 6f65 rectory <$d> doe │ │ │ -00002fc0: 7320 6e6f 7420 6578 6973 7420 2220 2e0a s not exist " .. │ │ │ -00002fd0: 0909 0909 2022 6f72 2069 7320 6e6f 7420 .... "or is not │ │ │ -00002fe0: 6163 6365 7369 626c 6522 5d2c 0a09 0920 accesible"],... │ │ │ -00002ff0: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00003000: 3129 0a09 2020 2020 756e 6c65 7373 202d 1).. unless - │ │ │ -00003010: 7220 2464 3b0a 0924 6420 3d20 263a 3a61 r $d;..$d = &::a │ │ │ -00003020: 6273 6f6c 7574 6550 6174 6828 2464 293b bsolutePath($d); │ │ │ -00003030: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00003040: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00003050: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00003060: 3e20 5b22 6469 7265 6374 6f72 7920 3c24 > ["directory <$ │ │ │ -00003070: 643e 2069 7320 6e6f 7420 6120 7375 6264 d> is not a subd │ │ │ -00003080: 6972 6563 746f 7279 2022 202e 0a09 0909 irectory " ..... │ │ │ -00003090: 0920 226f 6620 6261 636b 7570 4469 7220 . "of backupDir │ │ │ -000030a0: 3c24 6261 636b 7570 4469 723e 225d 2c0a <$backupDir>"],. │ │ │ -000030b0: 0909 2020 2020 2020 272d 6578 6974 2720 .. '-exit' │ │ │ -000030c0: 3d3e 2031 290a 0920 2020 2075 6e6c 6573 => 1).. unles │ │ │ -000030d0: 7320 263a 3a69 7353 7562 4469 7228 2462 s &::isSubDir($b │ │ │ -000030e0: 6163 6b75 7044 6972 2c20 2464 293b 0a0a ackupDir, $d);.. │ │ │ -000030f0: 0923 206e 6f77 2067 6574 2061 6c6c 2064 .# now get all d │ │ │ -00003100: 6972 7320 6672 6f6d 2040 2461 6c6c 5374 irs from @$allSt │ │ │ -00003110: 6275 4469 7273 2062 656c 6f77 2024 640a buDirs below $d. │ │ │ -00003120: 096d 7920 2461 3b0a 0966 6f72 6561 6368 .my $a;..foreach │ │ │ -00003130: 2024 6120 2840 2461 6c6c 5374 6275 4469 $a (@$allStbuDi │ │ │ -00003140: 7273 290a 097b 0a09 2020 2020 7075 7368 rs)..{.. push │ │ │ -00003150: 2040 6469 7273 546f 5365 6172 6368 2c20 @dirsToSearch, │ │ │ -00003160: 2461 0a09 0969 6620 2461 203d 7e20 2f5c $a...if $a =~ /\ │ │ │ -00003170: 4124 645c 2f2f 7320 6f72 2024 6120 3d7e A$d\//s or $a =~ │ │ │ -00003180: 202f 5c41 2464 5c7a 2f73 3b0a 097d 0a20 /\A$d\z/s;..}. │ │ │ -00003190: 2020 207d 0a20 2020 2028 4064 6972 7354 }. (@dirsT │ │ │ -000031a0: 6f53 6561 7263 6829 203d 2073 6f72 7420 oSearch) = sort │ │ │ -000031b0: 7b20 2461 2063 6d70 2024 6220 7d20 4064 { $a cmp $b } @d │ │ │ -000031c0: 6972 7354 6f53 6561 7263 683b 0a7d 0a65 irsToSearch;.}.e │ │ │ -000031d0: 6c73 650a 7b0a 2020 2020 2840 6469 7273 lse.{. (@dirs │ │ │ -000031e0: 546f 5365 6172 6368 2920 3d20 736f 7274 ToSearch) = sort │ │ │ -000031f0: 207b 2024 6120 636d 7020 2462 207d 2040 { $a cmp $b } @ │ │ │ -00003200: 2461 6c6c 5374 6275 4469 7273 3b0a 7d0a $allStbuDirs;.}. │ │ │ -00003210: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00003220: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00003230: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00003240: 205b 226e 6f74 6869 6e67 2074 6f20 7365 ["nothing to se │ │ │ -00003250: 6172 6368 2c20 6e6f 2062 6163 6b75 7020 arch, no backup │ │ │ -00003260: 6469 7265 6374 6f72 6965 7320 7370 6563 directories spec │ │ │ -00003270: 6966 6965 6422 5d2c 0a09 2020 2020 2020 ified"],.. │ │ │ -00003280: 272d 6578 6974 2720 3d3e 2031 290a 2020 '-exit' => 1). │ │ │ -00003290: 2020 756e 6c65 7373 2040 6469 7273 546f unless @dirsTo │ │ │ -000032a0: 5365 6172 6368 3b0a 0a7b 0a20 2020 206d Search;..{. m │ │ │ -000032b0: 7920 2840 6f75 742c 2024 6429 3b0a 2020 y (@out, $d);. │ │ │ -000032c0: 2020 666f 7265 6163 6820 2464 2028 4064 foreach $d (@d │ │ │ -000032d0: 6972 7354 6f53 6561 7263 6829 0a20 2020 irsToSearch). │ │ │ -000032e0: 207b 0a09 7075 7368 2040 6f75 742c 2022 {..push @out, " │ │ │ -000032f0: 2020 2464 223b 0a20 2020 207d 0a20 2020 $d";. }. │ │ │ -00003300: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -00003310: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00003320: 0920 2027 2d73 7472 2720 3d3e 205b 2262 . '-str' => ["b │ │ │ -00003330: 6163 6b75 7020 6469 7265 6374 6f72 6965 ackup directorie │ │ │ -00003340: 7320 746f 2073 6561 7263 6822 2c20 406f s to search", @o │ │ │ -00003350: 7574 5d29 3b0a 7d0a 0a0a 6d79 2024 7061 ut]);.}...my $pa │ │ │ -00003360: 7246 6f72 6b20 3d20 7061 7261 6c6c 656c rFork = parallel │ │ │ -00003370: 466f 726b 2d3e 6e65 7728 272d 6d61 7850 Fork->new('-maxP │ │ │ -00003380: 6172 616c 6c65 6c27 203d 3e20 2470 6172 arallel' => $par │ │ │ -00003390: 4a6f 6273 2c0a 0909 0909 272d 7072 4c6f Jobs,.....'-prLo │ │ │ -000033a0: 6727 203d 3e20 2470 724c 6f67 293b 0a6d g' => $prLog);.m │ │ │ -000033b0: 7920 2474 696e 7953 6368 6564 203d 2074 y $tinySched = t │ │ │ -000033c0: 696e 7957 6169 7453 6368 6564 756c 6572 inyWaitScheduler │ │ │ -000033d0: 2d3e 6e65 7728 272d 7072 4c6f 6727 203d ->new('-prLog' = │ │ │ -000033e0: 3e20 2470 724c 6f67 293b 0a0a 230a 2320 > $prLog);..#.# │ │ │ -000033f0: 7365 6172 6368 2074 6872 6f75 6768 2061 search through a │ │ │ -00003400: 6c6c 2064 6972 6563 746f 7269 6573 2069 ll directories i │ │ │ -00003410: 6e20 4064 6972 7354 6f53 6561 7263 680a n @dirsToSearch. │ │ │ -00003420: 230a 6c6f 6361 6c20 2a46 494c 453b 0a6f #.local *FILE;.o │ │ │ -00003430: 7065 6e28 4649 4c45 2c20 223e 2024 7772 pen(FILE, "> $wr │ │ │ -00003440: 6974 6554 6f46 696c 6522 2920 6f72 0a20 iteToFile") or. │ │ │ -00003450: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -00003460: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -00003470: 0a09 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00003480: 2263 616e 6e6f 7420 6f70 656e 203c 2477 "cannot open <$w │ │ │ -00003490: 7269 7465 546f 4669 6c65 3e20 666f 7220 riteToFile> for │ │ │ -000034a0: 7772 6974 696e 6722 5d2c 0a09 0920 2027 writing"],... ' │ │ │ -000034b0: 2d65 7869 7427 203d 3e20 3129 0a20 2020 -exit' => 1). │ │ │ -000034c0: 2069 6620 2477 7269 7465 546f 4669 6c65 if $writeToFile │ │ │ -000034d0: 3b0a 6d79 2028 2464 6972 546f 5365 6172 ;.my ($dirToSear │ │ │ -000034e0: 6368 2c20 256f 6e63 652c 2024 6e65 2c20 ch, %once, $ne, │ │ │ -000034f0: 246e 622c 2024 7329 3b0a 666f 7265 6163 $nb, $s);.foreac │ │ │ -00003500: 6820 2464 6972 546f 5365 6172 6368 2028 h $dirToSearch ( │ │ │ -00003510: 4064 6972 7354 6f53 6561 7263 6829 0a7b @dirsToSearch).{ │ │ │ -00003520: 0a20 2020 2075 6e6c 6573 7320 282d 7220 . unless (-r │ │ │ -00003530: 2224 6469 7254 6f53 6561 7263 682f 2463 "$dirToSearch/$c │ │ │ -00003540: 6865 636b 5375 6d46 696c 6522 206f 720a heckSumFile" or. │ │ │ -00003550: 0920 2020 202d 7220 2224 6469 7254 6f53 . -r "$dirToS │ │ │ -00003560: 6561 7263 682f 2463 6865 636b 5375 6d46 earch/$checkSumF │ │ │ -00003570: 696c 652e 627a 3222 290a 2020 2020 7b0a ile.bz2"). {. │ │ │ -00003580: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00003590: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000035a0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000035b0: 205b 226e 6f20 7265 6164 6162 6c65 203c ["no readable < │ │ │ -000035c0: 2463 6865 636b 5375 6d46 696c 653e 2069 $checkSumFile> i │ │ │ -000035d0: 6e20 2220 2e0a 0909 0909 2022 3c24 6469 n " ...... "<$di │ │ │ -000035e0: 7254 6f53 6561 7263 683e 202e 2e2e 2073 rToSearch> ... s │ │ │ -000035f0: 6b69 7070 696e 6722 5d29 3b0a 096e 6578 kipping"]);..nex │ │ │ -00003600: 743b 0a20 2020 207d 0a23 2020 2020 6966 t;. }.# if │ │ │ -00003610: 2028 2d66 2022 2464 6972 546f 5365 6172 (-f "$dirToSear │ │ │ -00003620: 6368 2f24 6368 6563 6b53 756d 4669 6c65 ch/$checkSumFile │ │ │ -00003630: 2e6e 6f74 4669 6e69 7368 6564 2229 0a20 .notFinished"). │ │ │ -00003640: 2020 2075 6e6c 6573 7320 2826 3a3a 6368 unless (&::ch │ │ │ -00003650: 6563 6b49 6642 6163 6b75 7057 6173 4669 eckIfBackupWasFi │ │ │ -00003660: 6e69 7368 6564 2827 2d62 6163 6b75 7044 nished('-backupD │ │ │ -00003670: 6972 2720 3d3e 2022 2464 6972 546f 5365 ir' => "$dirToSe │ │ │ -00003680: 6172 6368 222c 0a09 0909 0909 2020 2020 arch",...... │ │ │ -00003690: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -000036a0: 6f67 2c0a 0909 0909 0927 2d63 6f75 6e74 og,......'-count │ │ │ -000036b0: 2720 3d3e 2034 3029 290a 2020 2020 7b0a ' => 40)). {. │ │ │ -000036c0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -000036d0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000036e0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000036f0: 205b 2262 6163 6b75 7020 3c24 6469 7254 ["backup <$dirT │ │ │ -00003700: 6f53 6561 7263 683e 206e 6f74 2066 696e oSearch> not fin │ │ │ -00003710: 6973 6865 6422 202e 0a09 0909 0920 2220 ished" ...... " │ │ │ -00003720: 2e2e 2e20 736b 6970 7069 6e67 225d 293b ... skipping"]); │ │ │ -00003730: 0a09 6e65 7874 3b0a 2020 2020 7d0a 0a20 ..next;. }.. │ │ │ -00003740: 2020 2024 6e62 2b2b 3b0a 0a20 2020 2024 $nb++;.. $ │ │ │ -00003750: 7320 3d20 223d 3d3d 2073 6561 7263 6869 s = "=== searchi │ │ │ -00003760: 6e67 2069 6e20 3c24 6469 7254 6f53 6561 ng in <$dirToSea │ │ │ -00003770: 7263 683e 3a5c 6e22 3b0a 2020 2020 0a20 rch>:\n";. . │ │ │ -00003780: 2020 2070 7269 6e74 2024 733b 0a20 2020 print $s;. │ │ │ -00003790: 2070 7269 6e74 2046 494c 4520 2473 2069 print FILE $s i │ │ │ -000037a0: 6620 2477 7269 7465 546f 4669 6c65 2061 f $writeToFile a │ │ │ -000037b0: 6e64 206e 6f74 2024 7772 6974 6541 6273 nd not $writeAbs │ │ │ -000037c0: 5061 7468 3b0a 0a20 2020 206d 7920 2472 Path;.. my $r │ │ │ -000037d0: 6373 6620 3d0a 0972 6561 6443 6865 636b csf =..readCheck │ │ │ -000037e0: 5375 6d46 696c 652d 3e6e 6577 2827 2d63 SumFile->new('-c │ │ │ -000037f0: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => │ │ │ -00003800: 2224 6469 7254 6f53 6561 7263 682f 2463 "$dirToSearch/$c │ │ │ -00003810: 6865 636b 5375 6d46 696c 6522 2c0a 0909 heckSumFile",... │ │ │ -00003820: 0920 2020 2020 2027 2d70 724c 6f67 2720 . '-prLog' │ │ │ -00003830: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... │ │ │ -00003840: 2020 2020 272d 746d 7064 6972 2720 3d3e '-tmpdir' => │ │ │ -00003850: 2024 746d 7064 6972 293b 0a23 2020 2020 $tmpdir);.# │ │ │ -00003860: 6d79 2024 6d65 7461 203d 2024 7263 7366 my $meta = $rcsf │ │ │ -00003870: 2d3e 6765 744d 6574 6156 616c 4669 656c ->getMetaValFiel │ │ │ -00003880: 6428 293b 0a23 2020 2020 6d79 2024 706f d();.# my $po │ │ │ -00003890: 7374 6669 7820 3d20 2824 246d 6574 617b stfix = ($$meta{ │ │ │ -000038a0: 2770 6f73 7466 6978 277d 292d 3e5b 305d 'postfix'})->[0] │ │ │ -000038b0: 3b20 2020 2023 2070 6f73 7466 6978 2066 ; # postfix f │ │ │ -000038c0: 6f72 2063 6f6d 7072 6573 7369 6f6e 0a20 or compression. │ │ │ -000038d0: 2020 206d 7920 2470 6f73 7466 6978 203d my $postfix = │ │ │ -000038e0: 2024 7263 7366 2d3e 6765 7449 6e66 6f57 $rcsf->getInfoW │ │ │ -000038f0: 6974 6850 6172 2827 706f 7374 6669 7827 ithPar('postfix' │ │ │ -00003900: 293b 0a0a 2020 2020 6d79 2024 6a6f 6254 );.. my $jobT │ │ │ -00003910: 6f44 6f20 3d20 313b 0a20 2020 206d 7920 oDo = 1;. my │ │ │ -00003920: 2470 6172 466f 726b 546f 446f 203d 2031 $parForkToDo = 1 │ │ │ -00003930: 3b0a 2020 2020 7768 696c 6520 2824 6a6f ;. while ($jo │ │ │ -00003940: 6254 6f44 6f20 3e20 3020 6f72 2024 7061 bToDo > 0 or $pa │ │ │ -00003950: 7246 6f72 6b54 6f44 6f20 3e20 3029 0a20 rForkToDo > 0). │ │ │ -00003960: 2020 207b 0a09 230a 0923 2063 6865 636b {..#..# check │ │ │ -00003970: 2066 6f72 206a 6f62 7320 646f 6e65 0a09 for jobs done.. │ │ │ -00003980: 230a 096d 7920 246f 6c64 203d 2024 7061 #..my $old = $pa │ │ │ -00003990: 7246 6f72 6b2d 3e63 6865 636b 4f6e 6528 rFork->checkOne( │ │ │ -000039a0: 293b 0a09 6966 2028 246f 6c64 290a 097b );..if ($old)..{ │ │ │ -000039b0: 0a09 2020 2020 6d79 2024 746d 704e 616d .. my $tmpNam │ │ │ -000039c0: 6520 3d20 246f 6c64 2d3e 6765 7428 272d e = $old->get('- │ │ │ -000039d0: 7768 6174 2720 3d3e 2027 696e 666f 2729 what' => 'info') │ │ │ -000039e0: 3b0a 0920 2020 206c 6f63 616c 202a 494e ;.. local *IN │ │ │ -000039f0: 3b0a 0920 2020 206f 7065 6e28 494e 2c20 ;.. open(IN, │ │ │ -00003a00: 2474 6d70 4e61 6d65 2920 6f72 0a09 0924 $tmpName) or...$ │ │ │ -00003a10: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003a20: 696e 6427 203d 3e20 2745 272c 0a09 0909 ind' => 'E',.... │ │ │ -00003a30: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00003a40: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 ["cannot open te │ │ │ -00003a50: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t │ │ │ -00003a60: 6d70 4e61 6d65 3e22 5d2c 0a09 0909 2020 mpName>"],.... │ │ │ -00003a70: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ -00003a80: 293b 0a09 2020 2020 6d79 2024 6c3b 0a09 );.. my $l;.. │ │ │ -00003a90: 2020 2020 7768 696c 6520 2824 6c20 3d20 while ($l = │ │ │ -00003aa0: 3c49 4e3e 290a 0920 2020 207b 0a09 0963 ).. {...c │ │ │ -00003ab0: 686f 7020 246c 3b0a 0909 6d79 2028 246d hop $l;...my ($m │ │ │ -00003ac0: 6435 7375 6d2c 2024 7369 7a65 2c20 246d d5sum, $size, $m │ │ │ -00003ad0: 6f64 652c 2024 6374 696d 652c 2024 6d74 ode, $ctime, $mt │ │ │ -00003ae0: 696d 652c 2024 7569 642c 2024 6769 642c ime, $uid, $gid, │ │ │ -00003af0: 0a09 0920 2020 2024 6669 6c65 6e61 6d65 ... $filename │ │ │ -00003b00: 2920 3d20 7370 6c69 7428 2f5c 732b 2f2c ) = split(/\s+/, │ │ │ -00003b10: 2024 6c2c 2038 293b 0a0a 0909 6966 2028 $l, 8);....if ( │ │ │ -00003b20: 246f 6e63 6529 0a09 097b 0a09 0920 2020 $once)...{... │ │ │ -00003b30: 206e 6578 7420 6966 2065 7869 7374 7320 next if exists │ │ │ -00003b40: 246f 6e63 657b 246d 6435 7375 6d7d 3b0a $once{$md5sum};. │ │ │ -00003b50: 0909 2020 2020 246f 6e63 657b 246d 6435 .. $once{$md5 │ │ │ -00003b60: 7375 6d7d 203d 2031 3b0a 0909 7d0a 0a09 sum} = 1;...}... │ │ │ -00003b70: 0924 6669 6c65 6e61 6d65 203d 7e20 732f .$filename =~ s/ │ │ │ -00003b80: 5c5c 3041 2f5c 6e2f 6f67 3b20 2020 2023 \\0A/\n/og; # │ │ │ -00003b90: 2072 6573 746f 7265 2027 5c6e 270a 0909 restore '\n'... │ │ │ -00003ba0: 2466 696c 656e 616d 6520 3d7e 2073 2f5c $filename =~ s/\ │ │ │ -00003bb0: 5c35 432f 5c5c 2f6f 673b 2020 2020 2320 \5C/\\/og; # │ │ │ -00003bc0: 7265 7374 6f72 6520 275c 5c27 0a0a 0909 restore '\\'.... │ │ │ -00003bd0: 6966 2028 2477 7269 7465 4162 7350 6174 if ($writeAbsPat │ │ │ -00003be0: 6829 0a09 097b 0a09 0920 2020 2024 7320 h)...{... $s │ │ │ -00003bf0: 3d20 2224 6469 7254 6f53 6561 7263 682f = "$dirToSearch/ │ │ │ -00003c00: 2466 696c 656e 616d 655c 6e22 3b0a 0909 $filename\n";... │ │ │ -00003c10: 7d0a 0909 656c 7365 0a09 097b 0a09 0920 }...else...{... │ │ │ -00003c20: 2020 2024 7320 3d20 2224 6669 6c65 6e61 $s = "$filena │ │ │ -00003c30: 6d65 5c6e 223b 0a09 097d 0a0a 0909 7072 me\n";...}....pr │ │ │ -00003c40: 696e 7420 2473 3b0a 0909 7072 696e 7420 int $s;...print │ │ │ -00003c50: 4649 4c45 2024 7320 6966 2024 7772 6974 FILE $s if $writ │ │ │ -00003c60: 6554 6f46 696c 653b 0a09 2020 2020 7d0a eToFile;.. }. │ │ │ -00003c70: 0920 2020 2063 6c6f 7365 2849 4e29 3b0a . close(IN);. │ │ │ -00003c80: 0920 2020 2075 6e6c 696e 6b20 2474 6d70 . unlink $tmp │ │ │ -00003c90: 4e61 6d65 3b0a 097d 0a0a 0923 0a09 2320 Name;..}...#..# │ │ │ -00003ca0: 7374 6172 7420 6120 6e65 7720 6a6f 620a start a new job. │ │ │ -00003cb0: 0923 0a09 6966 2028 246a 6f62 546f 446f .#..if ($jobToDo │ │ │ -00003cc0: 203e 2030 2061 6e64 2024 7061 7246 6f72 > 0 and $parFor │ │ │ -00003cd0: 6b2d 3e67 6574 4e6f 4672 6565 456e 7472 k->getNoFreeEntr │ │ │ -00003ce0: 6965 7328 2920 3e20 3029 0a09 7b0a 0920 ies() > 0)..{.. │ │ │ -00003cf0: 2020 206d 7920 2840 6c69 6e65 4275 6666 my (@lineBuff │ │ │ -00003d00: 6572 2c20 2469 293b 0a09 2020 2020 6d79 er, $i);.. my │ │ │ -00003d10: 2024 646f 6e65 203d 2030 3b0a 0920 2020 $done = 0;.. │ │ │ -00003d20: 2023 2072 6561 6420 2472 6561 644e 6f4c # read $readNoL │ │ │ -00003d30: 696e 6573 206c 696e 6573 0a09 2020 2020 ines lines.. │ │ │ -00003d40: 666f 7220 2824 646f 6e65 203d 2024 6920 for ($done = $i │ │ │ -00003d50: 3d20 3020 3b20 2469 203c 2024 7265 6164 = 0 ; $i < $read │ │ │ -00003d60: 4e6f 4c69 6e65 7320 3b20 2469 2b2b 290a NoLines ; $i++). │ │ │ -00003d70: 0920 2020 207b 0a09 096d 7920 246c 203d . {...my $l = │ │ │ -00003d80: 2024 7263 7366 2d3e 6e65 7874 4269 6e4c $rcsf->nextBinL │ │ │ -00003d90: 696e 6528 293b 0a09 0975 6e6c 6573 7320 ine();...unless │ │ │ -00003da0: 2824 6c29 0a09 097b 0a09 0920 2020 2024 ($l)...{... $ │ │ │ -00003db0: 646f 6e65 203d 2031 3b0a 0909 2020 2020 done = 1;... │ │ │ -00003dc0: 6c61 7374 3b0a 0909 7d0a 0909 246e 652b last;...}...$ne+ │ │ │ -00003dd0: 2b3b 0a09 0970 7573 6820 406c 696e 6542 +;...push @lineB │ │ │ -00003de0: 7566 6665 722c 2024 6c3b 0a09 2020 2020 uffer, $l;.. │ │ │ -00003df0: 7d0a 0920 2020 2024 6a6f 6254 6f44 6f20 }.. $jobToDo │ │ │ -00003e00: 3d20 406c 696e 6542 7566 6665 723b 0a09 = @lineBuffer;.. │ │ │ -00003e10: 2020 2020 6d79 2024 746d 704e 616d 6520 my $tmpName │ │ │ -00003e20: 3d20 263a 3a75 6e69 7146 696c 654e 616d = &::uniqFileNam │ │ │ -00003e30: 6528 222f 2474 6d70 6469 722f 7374 6f72 e("/$tmpdir/stor │ │ │ -00003e40: 6542 6163 6b75 7053 6561 7263 682d 2229 eBackupSearch-") │ │ │ -00003e50: 3b0a 0a09 2020 2020 6966 2028 246a 6f62 ;... if ($job │ │ │ -00003e60: 546f 446f 290a 0920 2020 207b 0a09 0924 ToDo).. {...$ │ │ │ -00003e70: 7061 7246 6f72 6b2d 3e61 6464 5f6e 6f62 parFork->add_nob │ │ │ -00003e80: 6c6f 636b 2827 2d66 756e 6374 696f 6e27 lock('-function' │ │ │ -00003e90: 203d 3e20 5c26 6368 6563 6b52 756c 652c => \&checkRule, │ │ │ -00003ea0: 0a09 0909 0920 2020 2020 2027 2d66 756e ..... '-fun │ │ │ -00003eb0: 6350 6172 2720 3d3e 0a09 0909 0920 2020 cPar' =>..... │ │ │ -00003ec0: 2020 205b 2473 5275 6c65 2c20 5c40 6c69 [$sRule, \@li │ │ │ -00003ed0: 6e65 4275 6666 6572 2c20 2470 724c 6f67 neBuffer, $prLog │ │ │ -00003ee0: 2c20 2463 6865 636b 5375 6d46 696c 652c , $checkSumFile, │ │ │ -00003ef0: 0a09 0909 0920 2020 2020 2020 2474 6d70 ..... $tmp │ │ │ -00003f00: 4e61 6d65 5d2c 0a09 0909 0920 2020 2020 Name],..... │ │ │ -00003f10: 2027 2d69 6e66 6f27 203d 3e20 2474 6d70 '-info' => $tmp │ │ │ -00003f20: 4e61 6d65 293b 0a09 0924 7469 6e79 5363 Name);...$tinySc │ │ │ -00003f30: 6865 642d 3e72 6573 6574 2829 3b0a 0920 hed->reset();.. │ │ │ -00003f40: 2020 207d 0a09 7d0a 0a09 230a 0923 2077 }..}...#..# w │ │ │ -00003f50: 6169 7420 0a09 230a 0924 7469 6e79 5363 ait ..#..$tinySc │ │ │ -00003f60: 6865 642d 3e77 6169 7428 293b 0a0a 0924 hed->wait();...$ │ │ │ -00003f70: 7061 7246 6f72 6b54 6f44 6f20 3d20 2470 parForkToDo = $p │ │ │ -00003f80: 6172 466f 726b 2d3e 6765 744e 6f55 7365 arFork->getNoUse │ │ │ -00003f90: 6445 6e74 7269 6573 2829 3b0a 2020 2020 dEntries();. │ │ │ -00003fa0: 7d0a 7d0a 636c 6f73 6528 4649 4c45 2920 }.}.close(FILE) │ │ │ -00003fb0: 6f72 0a20 2020 2024 7072 4c6f 672d 3e70 or. $prLog->p │ │ │ -00003fc0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00003fd0: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ -00003fe0: 3d3e 205b 2263 616e 6e6f 7420 636c 6f73 => ["cannot clos │ │ │ -00003ff0: 6520 3c24 7772 6974 6554 6f46 696c 653e e <$writeToFile> │ │ │ -00004000: 225d 2c0a 0909 2020 272d 6578 6974 2720 "],... '-exit' │ │ │ -00004010: 3d3e 2031 290a 2020 2020 6966 2024 7772 => 1). if $wr │ │ │ -00004020: 6974 6554 6f46 696c 653b 0a0a 6d79 2024 iteToFile;..my $ │ │ │ -00004030: 7320 3d20 2727 3b0a 2473 203d 2022 2c20 s = '';.$s = ", │ │ │ -00004040: 736b 6970 7065 6420 2220 2e20 7363 616c skipped " . scal │ │ │ -00004050: 6172 2040 6469 7273 546f 5365 6172 6368 ar @dirsToSearch │ │ │ -00004060: 202d 2024 6e62 202e 2022 2062 6163 6b75 - $nb . " backu │ │ │ -00004070: 7028 7329 220a 2020 2020 6966 2040 6469 p(s)". if @di │ │ │ -00004080: 7273 546f 5365 6172 6368 203e 2024 6e62 rsToSearch > $nb │ │ │ -00004090: 3b0a 2470 724c 6f67 2d3e 7072 696e 7428 ;.$prLog->print( │ │ │ -000040a0: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -000040b0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000040c0: 205b 2263 6865 636b 6564 2024 6e65 2065 ["checked $ne e │ │ │ -000040d0: 6e74 7269 6573 2069 6e20 246e 6220 6261 ntries in $nb ba │ │ │ -000040e0: 636b 7570 7324 7322 5d29 3b0a 0a65 7869 ckups$s"]);..exi │ │ │ -000040f0: 7420 303b 0a0a 0a0a 2323 2323 2323 2323 t 0;....######## │ │ │ -00004100: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004110: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00004120: 0a73 7562 2063 6865 636b 5275 6c65 0a7b .sub checkRule.{ │ │ │ -00004130: 0a20 2020 206d 7920 2473 5275 6c65 203d . my $sRule = │ │ │ -00004140: 2073 6869 6674 3b0a 2020 2020 6d79 2024 shift;. my $ │ │ │ -00004150: 6c69 7374 4f66 4669 6c65 7320 3d20 7368 listOfFiles = sh │ │ │ -00004160: 6966 743b 0a20 2020 206d 7920 2470 724c ift;. my $prL │ │ │ -00004170: 6f67 203d 2073 6869 6674 3b0a 2020 2020 og = shift;. │ │ │ -00004180: 6d79 2024 6368 6563 6b53 756d 4669 6c65 my $checkSumFile │ │ │ -00004190: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -000041a0: 2024 746d 7066 696c 6520 3d20 7368 6966 $tmpfile = shif │ │ │ -000041b0: 743b 0a0a 2020 2020 6c6f 6361 6c20 2a4f t;.. local *O │ │ │ -000041c0: 5554 3b0a 2020 2020 756e 6c65 7373 2028 UT;. unless ( │ │ │ -000041d0: 6f70 656e 284f 5554 2c20 223e 2024 746d open(OUT, "> $tm │ │ │ -000041e0: 7066 696c 6522 2929 0a20 2020 207b 0a09 pfile")). {.. │ │ │ -000041f0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00004200: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00004210: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00004220: 5b22 6361 6e6e 6f74 206f 7065 6e20 7465 ["cannot open te │ │ │ -00004230: 6d70 6f72 6172 7920 6669 6c65 203c 2474 mporary file <$t │ │ │ -00004240: 6d70 6669 6c65 3e22 5d29 3b0a 0972 6574 mpfile>"]);..ret │ │ │ -00004250: 7572 6e20 313b 2020 2020 2020 2020 2020 urn 1; │ │ │ -00004260: 2020 2020 2020 2020 2020 2020 2020 2023 # │ │ │ -00004270: 2045 5252 4f52 0a20 2020 207d 0a0a 2020 ERROR. }.. │ │ │ -00004280: 2020 6d79 2028 246c 293b 0a20 2020 206d my ($l);. m │ │ │ -00004290: 7920 2825 7479 7065 2920 3d20 2827 6469 y (%type) = ('di │ │ │ -000042a0: 7227 203d 3e20 2764 272c 0a09 0920 2027 r' => 'd',... ' │ │ │ -000042b0: 7379 6d6c 696e 6b27 203d 3e20 276c 272c symlink' => 'l', │ │ │ -000042c0: 0a09 0920 2027 7069 7065 2720 3d3e 2027 ... 'pipe' => ' │ │ │ -000042d0: 7027 2c0a 0909 2020 2773 6f63 6b65 7427 p',... 'socket' │ │ │ -000042e0: 203d 3e20 2773 272c 0a09 0920 2027 626c => 's',... 'bl │ │ │ -000042f0: 6f63 6b64 6576 2720 3d3e 2027 6227 2c0a ockdev' => 'b',. │ │ │ -00004300: 0909 2020 2763 6861 7264 6576 2720 3d3e .. 'chardev' => │ │ │ -00004310: 2027 6327 293b 0a20 2020 206d 7920 2824 'c');. my ($ │ │ │ -00004320: 6d64 3573 756d 2c20 2463 6f6d 7072 2c20 md5sum, $compr, │ │ │ -00004330: 2464 6576 496e 6f64 652c 2024 696e 6f64 $devInode, $inod │ │ │ -00004340: 6542 6163 6b75 702c 2024 6374 696d 652c eBackup, $ctime, │ │ │ -00004350: 2024 6d74 696d 652c 2024 6174 696d 652c $mtime, $atime, │ │ │ -00004360: 0a09 2473 697a 652c 2024 7569 642c 2024 ..$size, $uid, $ │ │ │ -00004370: 6769 642c 2024 6d6f 6465 2c20 2466 696c gid, $mode, $fil │ │ │ -00004380: 656e 616d 6529 3b0a 2020 2020 666f 7265 ename);. fore │ │ │ -00004390: 6163 6820 246c 2028 4024 6c69 7374 4f66 ach $l (@$listOf │ │ │ -000043a0: 4669 6c65 7329 0a20 2020 207b 0a09 6d79 Files). {..my │ │ │ -000043b0: 2028 4072 6574 2920 3d20 7265 6164 4368 (@ret) = readCh │ │ │ -000043c0: 6563 6b53 756d 4669 6c65 3a3a 6576 616c eckSumFile::eval │ │ │ -000043d0: 4269 6e4c 696e 6528 246c 2c20 2470 724c BinLine($l, $prL │ │ │ -000043e0: 6f67 2c20 2463 6865 636b 5375 6d46 696c og, $checkSumFil │ │ │ -000043f0: 6529 3b0a 096e 6578 7420 6966 2040 7265 e);..next if @re │ │ │ -00004400: 7420 213d 2031 323b 0a09 2824 6d64 3573 t != 12;..($md5s │ │ │ -00004410: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev │ │ │ -00004420: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac │ │ │ -00004430: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt │ │ │ -00004440: 696d 652c 2024 6174 696d 652c 0a09 2024 ime, $atime,.. $ │ │ │ -00004450: 7369 7a65 2c20 2475 6964 2c20 2467 6964 size, $uid, $gid │ │ │ -00004460: 2c20 246d 6f64 652c 2024 6669 6c65 6e61 , $mode, $filena │ │ │ -00004470: 6d65 2920 3d20 4072 6574 3b0a 0a09 6d79 me) = @ret;...my │ │ │ -00004480: 2024 7479 7065 203d 2027 6627 3b0a 0924 $type = 'f';..$ │ │ │ -00004490: 7479 7065 203d 2024 7479 7065 7b24 6d64 type = $type{$md │ │ │ -000044a0: 3573 756d 7d20 0969 6620 6578 6973 7473 5sum} .if exists │ │ │ -000044b0: 2024 7479 7065 7b24 6d64 3573 756d 7d3b $type{$md5sum}; │ │ │ -000044c0: 0a09 6966 2028 2473 5275 6c65 2d3e 6368 ..if ($sRule->ch │ │ │ -000044d0: 6563 6b52 756c 6528 2466 696c 656e 616d eckRule($filenam │ │ │ -000044e0: 652c 2024 7369 7a65 2c20 246d 6f64 652c e, $size, $mode, │ │ │ -000044f0: 2024 6374 696d 652c 2024 6d74 696d 652c $ctime, $mtime, │ │ │ -00004500: 2024 7569 642c 0a09 0909 2020 2020 2020 $uid,.... │ │ │ -00004510: 2467 6964 2c20 2474 7970 6529 203d 3d20 $gid, $type) == │ │ │ -00004520: 3129 0a09 7b0a 0920 2020 2024 6669 6c65 1)..{.. $file │ │ │ -00004530: 6e61 6d65 203d 7e20 732f 5c5c 2f5c 5c35 name =~ s/\\/\\5 │ │ │ -00004540: 432f 6f67 3b20 2020 2023 2027 5c5c 2720 C/og; # '\\' │ │ │ -00004550: 7374 6f72 6564 2061 7320 5c35 430a 0920 stored as \5C.. │ │ │ -00004560: 2020 2024 6669 6c65 6e61 6d65 203d 7e20 $filename =~ │ │ │ -00004570: 732f 5c6e 2f5c 5c30 412f 736f 673b 2020 s/\n/\\0A/sog; │ │ │ -00004580: 2023 2027 5c6e 2720 7374 6f72 6564 2061 # '\n' stored a │ │ │ -00004590: 7320 5c30 410a 0a09 2020 2020 7072 696e s \0A... prin │ │ │ -000045a0: 7420 4f55 5420 2224 6d64 3573 756d 2024 t OUT "$md5sum $ │ │ │ -000045b0: 7369 7a65 2024 6d6f 6465 2024 6374 696d size $mode $ctim │ │ │ -000045c0: 6520 246d 7469 6d65 2024 7569 6420 2467 e $mtime $uid $g │ │ │ -000045d0: 6964 2024 6669 6c65 6e61 6d65 5c6e 223b id $filename\n"; │ │ │ -000045e0: 0a09 7d0a 2020 2020 7d0a 0a20 2020 2063 ..}. }.. c │ │ │ -000045f0: 6c6f 7365 284f 5554 293b 0a0a 2020 2020 lose(OUT);.. │ │ │ -00004600: 7265 7475 726e 2030 3b0a 7d0a return 0;.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7053 6561 7263 680a pSearch. │ │ ├── ./usr/bin/storeBackupSetupIsolatedMode │ │ │ @@ -1,1051 +1,5 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3031 Josef Claes (201 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 0a23 2020 2054 s@web.de.#.# T │ │ │ -00000070: 6869 7320 7072 6f67 7261 6d20 6973 2066 his program is f │ │ │ -00000080: 7265 6520 736f 6674 7761 7265 3a20 796f ree software: yo │ │ │ -00000090: 7520 6361 6e20 7265 6469 7374 7269 6275 u can redistribu │ │ │ -000000a0: 7465 2069 7420 616e 642f 6f72 206d 6f64 te it and/or mod │ │ │ -000000b0: 6966 790a 2320 2020 6974 2075 6e64 6572 ify.# it under │ │ │ -000000c0: 2074 6865 2074 6572 6d73 206f 6620 7468 the terms of th │ │ │ -000000d0: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000000e0: 626c 6963 204c 6963 656e 7365 2061 7320 blic License as │ │ │ -000000f0: 7075 626c 6973 6865 6420 6279 0a23 2020 published by.# │ │ │ -00000100: 2074 6865 2046 7265 6520 536f 6674 7761 the Free Softwa │ │ │ -00000110: 7265 2046 6f75 6e64 6174 696f 6e2c 2065 re Foundation, e │ │ │ -00000120: 6974 6865 7220 7665 7273 696f 6e20 3320 ither version 3 │ │ │ -00000130: 6f66 2074 6865 204c 6963 656e 7365 2c20 of the License, │ │ │ -00000140: 6f72 0a23 2020 2028 6174 2079 6f75 7220 or.# (at your │ │ │ -00000150: 6f70 7469 6f6e 2920 616e 7920 6c61 7465 option) any late │ │ │ -00000160: 7220 7665 7273 696f 6e2e 0a0a 2320 2020 r version...# │ │ │ -00000170: 5468 6973 2070 726f 6772 616d 2069 7320 This program is │ │ │ -00000180: 6469 7374 7269 6275 7465 6420 696e 2074 distributed in t │ │ │ -00000190: 6865 2068 6f70 6520 7468 6174 2069 7420 he hope that it │ │ │ -000001a0: 7769 6c6c 2062 6520 7573 6566 756c 2c0a will be useful,. │ │ │ -000001b0: 2320 2020 6275 7420 5749 5448 4f55 5420 # but WITHOUT │ │ │ -000001c0: 414e 5920 5741 5252 414e 5459 3b20 7769 ANY WARRANTY; wi │ │ │ -000001d0: 7468 6f75 7420 6576 656e 2074 6865 2069 thout even the i │ │ │ -000001e0: 6d70 6c69 6564 2077 6172 7261 6e74 7920 mplied warranty │ │ │ -000001f0: 6f66 0a23 2020 204d 4552 4348 414e 5441 of.# MERCHANTA │ │ │ -00000200: 4249 4c49 5459 206f 7220 4649 544e 4553 BILITY or FITNES │ │ │ -00000210: 5320 464f 5220 4120 5041 5254 4943 554c S FOR A PARTICUL │ │ │ -00000220: 4152 2050 5552 504f 5345 2e20 2053 6565 AR PURPOSE. See │ │ │ -00000230: 2074 6865 0a23 2020 2047 4e55 2047 656e the.# GNU Gen │ │ │ -00000240: 6572 616c 2050 7562 6c69 6320 4c69 6365 eral Public Lice │ │ │ -00000250: 6e73 6520 666f 7220 6d6f 7265 2064 6574 nse for more det │ │ │ -00000260: 6169 6c73 2e0a 230a 2320 2020 596f 7520 ails..#.# You │ │ │ -00000270: 7368 6f75 6c64 2068 6176 6520 7265 6365 should have rece │ │ │ -00000280: 6976 6564 2061 2063 6f70 7920 6f66 2074 ived a copy of t │ │ │ -00000290: 6865 2047 4e55 2047 656e 6572 616c 2050 he GNU General P │ │ │ -000002a0: 7562 6c69 6320 4c69 6365 6e73 650a 2320 ublic License.# │ │ │ -000002b0: 2020 616c 6f6e 6720 7769 7468 2074 6869 along with thi │ │ │ -000002c0: 7320 7072 6f67 7261 6d2e 2020 4966 206e s program. If n │ │ │ -000002d0: 6f74 2c20 7365 6520 3c68 7474 703a 2f2f ot, see ..#...$mai │ │ │ -00000300: 6e3a 3a53 544f 5245 4241 434b 5550 5645 n::STOREBACKUPVE │ │ │ -00000310: 5253 494f 4e20 3d20 756e 6465 663b 0a0a RSION = undef;.. │ │ │ -00000320: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use │ │ │ -00000330: 7374 7269 6374 3b0a 7573 6520 7761 726e strict;.use warn │ │ │ -00000340: 696e 6773 3b0a 0a0a 0a73 7562 206c 6962 ings;....sub lib │ │ │ -00000350: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f │ │ │ -00000360: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. │ │ │ -00000370: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. │ │ │ -00000380: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se │ │ │ -00000390: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink │ │ │ -000003a0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo │ │ │ -000003b0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel │ │ │ -000003c0: c3b6 7374 0a20 2020 2069 6620 282d 6620 ..st. if (-f │ │ │ -000003d0: 2466 696c 6529 0a20 2020 207b 0a09 7768 $file). {..wh │ │ │ -000003e0: 696c 6520 282d 6c20 2466 696c 6529 0a09 ile (-l $file).. │ │ │ -000003f0: 7b0a 0920 2020 206d 7920 246c 696e 6b20 {.. my $link │ │ │ -00000400: 3d20 7265 6164 6c69 6e6b 2824 6669 6c65 = readlink($file │ │ │ -00000410: 293b 0a0a 0920 2020 2069 6620 2873 7562 );... if (sub │ │ │ -00000420: 7374 7228 246c 696e 6b2c 2030 2c20 3129 str($link, 0, 1) │ │ │ -00000430: 206e 6520 222f 2229 0a09 2020 2020 7b0a ne "/").. {. │ │ │ -00000440: 0909 2466 696c 6520 3d7e 2073 2f5b 5e5c ..$file =~ s/[^\ │ │ │ -00000450: 2f5d 2b24 2f24 6c69 6e6b 2f3b 0a20 2020 /]+$/$link/;. │ │ │ -00000460: 2020 2020 2020 2020 207d 0a09 2020 2020 }.. │ │ │ -00000470: 656c 7365 0a09 2020 2020 7b0a 0909 2466 else.. {...$f │ │ │ -00000480: 696c 6520 3d20 246c 696e 6b3b 0a09 2020 ile = $link;.. │ │ │ -00000490: 2020 7d0a 097d 0a0a 0928 2464 6972 2c20 }..}...($dir, │ │ │ -000004a0: 2466 696c 6529 203d 2026 7370 6c69 7446 $file) = &splitF │ │ │ -000004b0: 696c 6544 6972 2824 6669 6c65 293b 0a09 ileDir($file);.. │ │ │ -000004c0: 2466 696c 6520 3d20 222f 2466 696c 6522 $file = "/$file" │ │ │ -000004d0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -000004e0: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -000004f0: 4445 5252 2022 3c24 6669 6c65 3e20 646f DERR "<$file> do │ │ │ -00000500: 6573 206e 6f74 2065 7869 7374 215c 6e22 es not exist!\n" │ │ │ -00000510: 3b0a 0965 7869 7420 313b 0a20 2020 207d ;..exit 1;. } │ │ │ -00000520: 0a0a 2020 2020 2464 6972 202e 3d20 222f .. $dir .= "/ │ │ │ -00000530: 2e2e 2f6c 6962 223b 2020 2020 2020 2020 ../lib"; │ │ │ -00000540: 2020 2023 2050 6661 6420 7a75 2064 656e # Pfad zu den │ │ │ -00000550: 2042 6962 6c69 6f74 6865 6b65 6e0a 2020 Bibliotheken. │ │ │ -00000560: 2020 6d79 2024 6f6c 6444 6972 203d 2060 my $oldDir = ` │ │ │ -00000570: 2f62 696e 2f70 7764 603b 0a20 2020 2063 /bin/pwd`;. c │ │ │ -00000580: 686f 6d70 2024 6f6c 6444 6972 3b0a 2020 homp $oldDir;. │ │ │ -00000590: 2020 6966 2028 6368 6469 7220 2464 6972 if (chdir $dir │ │ │ -000005a0: 290a 2020 2020 7b0a 096d 7920 2461 6273 ). {..my $abs │ │ │ -000005b0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005c0: 3b0a 0963 686f 7020 2461 6273 4469 723b ;..chop $absDir; │ │ │ -000005d0: 0a09 6368 6469 7220 246f 6c64 4469 723b ..chdir $oldDir; │ │ │ -000005e0: 0a0a 0972 6574 7572 6e20 2826 7370 6c69 ...return (&spli │ │ │ -000005f0: 7446 696c 6544 6972 2822 2461 6273 4469 tFileDir("$absDi │ │ │ -00000600: 7224 6669 6c65 2229 293b 0a20 2020 207d r$file"));. } │ │ │ -00000610: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ -00000620: 0970 7269 6e74 2053 5444 4552 5220 223c .print STDERR "< │ │ │ -00000630: 2464 6972 3e20 646f 6573 206e 6f74 2065 $dir> does not e │ │ │ -00000640: 7869 7374 2c20 6578 6974 696e 675c 6e22 xist, exiting\n" │ │ │ -00000650: 3b0a 2020 2020 7d0a 7d0a 7375 6220 7370 ;. }.}.sub sp │ │ │ -00000660: 6c69 7446 696c 6544 6972 0a7b 0a20 2020 litFileDir.{. │ │ │ -00000670: 206d 7920 246e 616d 6520 3d20 7368 6966 my $name = shif │ │ │ -00000680: 743b 0a0a 2020 2020 7265 7475 726e 2028 t;.. return ( │ │ │ -00000690: 272e 272c 2024 6e61 6d65 2920 756e 6c65 '.', $name) unle │ │ │ -000006a0: 7373 2028 246e 616d 6520 3d7e 2f5c 2f2f ss ($name =~/\// │ │ │ -000006b0: 293b 2020 2020 2320 6e75 7220 6569 6e66 ); # nur einf │ │ │ -000006c0: 6163 6865 7220 4461 7465 696e 616d 650a acher Dateiname. │ │ │ -000006d0: 0a20 2020 206d 7920 2824 6469 722c 2024 . my ($dir, $ │ │ │ -000006e0: 6669 6c65 2920 3d20 246e 616d 6520 3d7e file) = $name =~ │ │ │ -000006f0: 202f 5e28 2e2a 295c 2f28 2e2a 2924 2f73 /^(.*)\/(.*)$/s │ │ │ -00000700: 3b0a 2020 2020 2464 6972 203d 2027 2f27 ;. $dir = '/' │ │ │ -00000710: 2069 6620 2824 6469 7220 6571 2027 2729 if ($dir eq '') │ │ │ -00000720: 3b20 2020 2020 2020 2020 2020 2020 2020 ; │ │ │ -00000730: 2020 2020 2320 6769 6c74 2c20 6661 6c6c # gilt, fall │ │ │ -00000740: 7320 7a2e 422e 202f 6669 6c65 6e61 6d65 s z.B. /filename │ │ │ -00000750: 0a20 2020 2072 6574 7572 6e20 2824 6469 . return ($di │ │ │ -00000760: 722c 2024 6669 6c65 293b 0a7d 0a6d 7920 r, $file);.}.my │ │ │ -00000770: 2824 7265 712c 2024 7072 6f67 2920 3d20 ($req, $prog) = │ │ │ -00000780: 266c 6962 5061 7468 2824 3029 3b0a 756e &libPath($0);.un │ │ │ -00000790: 7368 6966 7420 4049 4e43 2c20 2224 7265 shift @INC, "$re │ │ │ -000007a0: 7122 3b0a 0a0a 7265 7175 6972 6520 2763 q";...require 'c │ │ │ -000007b0: 6865 636b 5061 7261 6d32 2e70 6c27 3b0a heckParam2.pl';. │ │ │ -000007c0: 7265 7175 6972 6520 2763 6865 636b 4f62 require 'checkOb │ │ │ -000007d0: 6a50 6172 2e70 6c27 3b0a 7265 7175 6972 jPar.pl';.requir │ │ │ -000007e0: 6520 2770 724c 6f67 2e70 6c27 3b0a 7265 e 'prLog.pl';.re │ │ │ -000007f0: 7175 6972 6520 2776 6572 7369 6f6e 2e70 quire 'version.p │ │ │ -00000800: 6c27 3b0a 7265 7175 6972 6520 2766 696c l';.require 'fil │ │ │ -00000810: 6544 6972 2e70 6c27 3b0a 7265 7175 6972 eDir.pl';.requir │ │ │ -00000820: 6520 2773 746f 7265 4261 636b 7570 4c69 e 'storeBackupLi │ │ │ -00000830: 622e 706c 273b 0a0a 0a3d 6865 6164 3120 b.pl';...=head1 │ │ │ -00000840: 4e41 4d45 0a0a 7374 6f72 6542 6163 6b75 NAME..storeBacku │ │ │ -00000850: 7053 6574 7570 4973 6f6c 6174 6564 4d6f pSetupIsolatedMo │ │ │ -00000860: 6465 2e70 6c20 2d20 636f 7079 206c 6173 de.pl - copy las │ │ │ -00000870: 7420 7374 6f72 6542 6163 6b75 7020 6d65 t storeBackup me │ │ │ -00000880: 7461 2064 6174 610a 6f66 2061 2073 6572 ta data.of a ser │ │ │ -00000890: 6965 7320 746f 2065 672e 2061 2073 7469 ies to eg. a sti │ │ │ -000008a0: 636b 0a0a 3d68 6561 6431 2044 4553 4352 ck..=head1 DESCR │ │ │ -000008b0: 4950 5449 4f4e 0a0a 636f 7069 6573 2074 IPTION..copies t │ │ │ -000008c0: 6865 206d 6574 6120 6461 7461 206f 6620 he meta data of │ │ │ -000008d0: 6120 6261 636b 7570 2074 6f20 616e 6f74 a backup to anot │ │ │ -000008e0: 6865 7220 6669 6c65 7379 7374 656d 2028 her filesystem ( │ │ │ -000008f0: 6567 2e20 6120 6d65 6d6f 7279 0a73 7469 eg. a memory.sti │ │ │ -00000900: 636b 293b 206f 7074 696e 6f61 6c6c 7920 ck); optinoally │ │ │ -00000910: 6765 6e65 7261 7465 7320 6120 6375 7374 generates a cust │ │ │ -00000920: 6f6d 6973 6564 2076 6572 7369 6f6e 206f omised version o │ │ │ -00000930: 6620 7468 6520 7374 6f72 6542 6163 6b75 f the storeBacku │ │ │ -00000940: 700a 636f 6e66 6967 7572 6174 696f 6e20 p.configuration │ │ │ -00000950: 6669 6c65 0a54 6869 7320 6361 6e20 6265 file.This can be │ │ │ -00000960: 2075 7365 6420 746f 2067 656e 6572 6174 used to generat │ │ │ -00000970: 6520 696e 6372 656d 656e 7461 6c20 6261 e incremental ba │ │ │ -00000980: 636b 7570 2065 672e 2064 7572 696e 6720 ckup eg. during │ │ │ -00000990: 7472 6176 656c 2e0a 5468 6573 6520 6361 travel..These ca │ │ │ -000009a0: 6e20 6265 2069 6e74 6567 7261 7465 6420 n be integrated │ │ │ -000009b0: 696e 746f 2074 6865 2066 756c 6c20 6261 into the full ba │ │ │ -000009c0: 636b 7570 2076 6961 0a73 746f 7265 4261 ckup via.storeBa │ │ │ -000009d0: 636b 7570 4d65 7267 6549 736f 6c61 7465 ckupMergeIsolate │ │ │ -000009e0: 6442 6163 6b75 702e 706c 2061 6e64 2073 dBackup.pl and s │ │ │ -000009f0: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate │ │ │ -00000a00: 4261 636b 7570 2e70 6c0a 0a0a 3d68 6561 Backup.pl...=hea │ │ │ -00000a10: 6431 2053 594e 4f50 5349 530a 0a62 6173 d1 SYNOPSIS..bas │ │ │ -00000a20: 6564 206f 6e20 636f 6e66 6967 7572 6174 ed on configurat │ │ │ -00000a30: 696f 6e20 6669 6c65 3a0a 0a20 2020 2073 ion file:.. s │ │ │ -00000a40: 746f 7265 4261 636b 7570 5365 7475 7049 toreBackupSetupI │ │ │ -00000a50: 736f 6c61 7465 644d 6f64 652e 706c 202d solatedMode.pl - │ │ │ -00000a60: 6620 636f 6e66 6967 4669 6c65 202d 7420 f configFile -t │ │ │ -00000a70: 7461 7267 6574 4469 720a 2020 2020 0909 targetDir. .. │ │ │ -00000a80: 0909 5b2d 5320 7365 7269 6573 5d20 5b2d ..[-S series] [- │ │ │ -00000a90: 6720 6e65 7743 6f6e 6669 6746 696c 655d g newConfigFile] │ │ │ -00000aa0: 0a09 0909 095b 2d65 2065 7870 6c69 6369 .....[-e explici │ │ │ -00000ab0: 7442 6163 6b75 705d 205b 2d76 5d20 5b2d tBackup] [-v] [- │ │ │ -00000ac0: 465d 0a0a 0a6e 6f20 636f 6e66 6967 7572 F]...no configur │ │ │ -00000ad0: 6174 696f 6e20 6669 6c65 3a0a 0a20 2020 ation file:.. │ │ │ -00000ae0: 2073 746f 7265 4261 636b 7570 5365 7475 storeBackupSetu │ │ │ -00000af0: 7049 736f 6c61 7465 644d 6f64 652e 706c pIsolatedMode.pl │ │ │ -00000b00: 202d 6220 6261 636b 7570 4469 7220 2d74 -b backupDir -t │ │ │ -00000b10: 2074 6172 6765 7444 6972 0a20 2020 2009 targetDir. . │ │ │ -00000b20: 0909 095b 2d53 2073 6572 6965 735d 205b ...[-S series] [ │ │ │ -00000b30: 2d65 2065 7870 6c69 6369 7442 6163 6b75 -e explicitBacku │ │ │ -00000b40: 705d 205b 2d76 5d20 5b2d 465d 0a0a 3d68 p] [-v] [-F]..=h │ │ │ -00000b50: 6561 6431 204f 5054 494f 4e53 0a0a 3d6f ead1 OPTIONS..=o │ │ │ -00000b60: 7665 7220 380a 0a3d 6974 656d 2042 3c2d ver 8..=item B<- │ │ │ -00000b70: 2d63 6f6e 6669 6746 696c 653e 2c20 423c -configFile>, B< │ │ │ -00000b80: 2d66 3e0a 0a20 2020 2028 6f72 6967 696e -f>.. (origin │ │ │ -00000b90: 616c 2c20 6e6f 6e2d 6973 6f6c 6174 6564 al, non-isolated │ │ │ -00000ba0: 206d 6f64 6529 2063 6f6e 6669 6775 7261 mode) configura │ │ │ -00000bb0: 7469 6f6e 2066 696c 6520 746f 2063 6f70 tion file to cop │ │ │ -00000bc0: 7920 666f 720a 2020 2020 6973 6f6c 6174 y for. isolat │ │ │ -00000bd0: 6564 206d 6f64 6520 616c 736f 2075 7365 ed mode also use │ │ │ -00000be0: 6420 746f 2067 6574 2076 616c 7565 2066 d to get value f │ │ │ -00000bf0: 6f72 2062 6163 6b75 7044 6972 2061 6e64 or backupDir and │ │ │ -00000c00: 2073 6572 6965 732e 0a20 2020 2059 6f75 series.. You │ │ │ -00000c10: 2063 616e 2061 6c73 6f20 7573 6520 616e can also use an │ │ │ -00000c20: 2061 6c72 6561 6479 2067 656e 6572 6174 already generat │ │ │ -00000c30: 6564 2063 6f6e 6669 6775 7261 7469 6f6e ed configuration │ │ │ -00000c40: 2066 696c 6520 746f 0a20 2020 2072 6570 file to. rep │ │ │ -00000c50: 6561 7420 7468 6520 7365 7420 7570 2077 eat the set up w │ │ │ -00000c60: 6974 6820 7468 6520 7361 6d65 2063 6f6e ith the same con │ │ │ -00000c70: 6669 6775 7261 7469 6f6e 2061 7320 696e figuration as in │ │ │ -00000c80: 2074 6865 2070 6173 742e 0a0a 3d69 7465 the past...=ite │ │ │ -00000c90: 6d20 423c 2d2d 7461 7267 6574 4469 723e m B<--targetDir> │ │ │ -00000ca0: 2c20 423c 2d74 3e0a 0a20 2020 2064 6972 , B<-t>.. dir │ │ │ -00000cb0: 6563 746f 7279 2077 6865 7265 2074 6f20 ectory where to │ │ │ -00000cc0: 7772 6974 6520 7468 6520 6e65 7720 636f write the new co │ │ │ -00000cd0: 6e66 6967 7572 6174 696f 6e20 6669 6c65 nfiguration file │ │ │ -00000ce0: 2066 6f72 0a20 2020 2069 736f 6c61 7465 for. isolate │ │ │ -00000cf0: 6420 6d6f 6465 2e20 416c 736f 2c20 7468 d mode. Also, th │ │ │ -00000d00: 6520 7365 7269 6573 2064 6972 6563 746f e series directo │ │ │ -00000d10: 7279 2069 7320 6372 6561 7465 6420 696e ry is created in │ │ │ -00000d20: 0a20 2020 2074 6172 6765 7444 6972 2061 . targetDir a │ │ │ -00000d30: 6e64 2074 6865 206d 6574 6120 6461 7461 nd the meta data │ │ │ -00000d40: 2066 726f 6d20 7468 6520 6c61 7374 2062 from the last b │ │ │ -00000d50: 6163 6b75 7020 696e 0a20 2020 2062 6163 ackup in. bac │ │ │ -00000d60: 6b75 7044 6972 2069 7320 636f 7069 6564 kupDir is copied │ │ │ -00000d70: 2074 6f20 7461 7267 6574 4469 722f 7365 to targetDir/se │ │ │ -00000d80: 7269 6573 0a0a 3d69 7465 6d20 423c 2d2d ries..=item B<-- │ │ │ -00000d90: 6765 6e65 7261 7465 3e2c 2042 3c2d 673e generate>, B<-g> │ │ │ -00000da0: 0a0a 2020 2020 2870 6174 6820 616e 6429 .. (path and) │ │ │ -00000db0: 2066 696c 6520 6e61 6d65 206f 6620 7468 file name of th │ │ │ -00000dc0: 6520 636f 6e66 6967 7572 6174 696f 6e20 e configuration │ │ │ -00000dd0: 6669 6c65 2074 6f20 6765 6e65 7261 7465 file to generate │ │ │ -00000de0: 2e0a 2020 2020 4465 6661 756c 7420 6973 .. Default is │ │ │ -00000df0: 2069 736f 6c61 7465 2d3c 6e61 6d65 2073 isolate- in. │ │ │ -00000e20: 2074 6865 2073 616d 6520 6469 7265 6374 the same direct │ │ │ -00000e30: 6f72 7920 6173 2063 6f6e 6669 6746 696c ory as configFil │ │ │ -00000e40: 650a 0a3d 6974 656d 2042 3c2d 2d62 6163 e..=item B<--bac │ │ │ -00000e50: 6b75 7044 6972 3e2c 2042 3c2d 623e 0a0a kupDir>, B<-b>.. │ │ │ -00000e60: 2020 2020 6261 636b 7570 2064 6972 6563 backup direc │ │ │ -00000e70: 746f 7279 2066 726f 6d20 7768 6963 6820 tory from which │ │ │ -00000e80: 6d65 7461 2064 6174 6120 6861 7665 2074 meta data have t │ │ │ -00000e90: 6f20 6265 0a20 2020 2063 6f70 6965 6420 o be. copied │ │ │ -00000ea0: 6567 2e20 6f6e 2061 6e20 7573 6220 7374 eg. on an usb st │ │ │ -00000eb0: 6963 6b2e 0a20 2020 2049 6620 6d6f 7265 ick.. If more │ │ │ -00000ec0: 2074 6861 6e20 6f6e 6520 7365 7269 6573 than one series │ │ │ -00000ed0: 2065 7869 7374 7320 696e 2074 6869 7320 exists in this │ │ │ -00000ee0: 6261 636b 7570 2c0a 2020 2020 796f 7520 backup,. you │ │ │ -00000ef0: 6861 7665 2074 6f20 7370 6563 6966 7920 have to specify │ │ │ -00000f00: 6f70 7469 6f6e 2073 6572 6965 7320 616c option series al │ │ │ -00000f10: 736f 0a0a 3d69 7465 6d20 423c 2d2d 7365 so..=item B<--se │ │ │ -00000f20: 7269 6573 3e2c 2042 3c2d 533e 0a0a 2020 ries>, B<-S>.. │ │ │ -00000f30: 2020 7365 7269 6573 206f 6620 7768 6963 series of whic │ │ │ -00000f40: 6820 6d65 7461 2064 6174 6120 6861 7665 h meta data have │ │ │ -00000f50: 2074 6f20 6265 2063 6f70 6965 6420 746f to be copied to │ │ │ -00000f60: 2074 6172 6765 7444 6972 2e0a 2020 2020 targetDir.. │ │ │ -00000f70: 4861 7320 746f 2062 6520 7370 6563 6966 Has to be specif │ │ │ -00000f80: 6965 6420 6966 206d 6f72 6520 7468 616e ied if more than │ │ │ -00000f90: 206f 6e65 2073 6572 6965 7320 6578 6973 one series exis │ │ │ -00000fa0: 740a 2020 2020 696e 2062 6163 6b75 7044 t. in backupD │ │ │ -00000fb0: 6972 0a0a 3d69 7465 6d20 423c 2d2d 6578 ir..=item B<--ex │ │ │ -00000fc0: 706c 6963 6974 4261 636b 7570 3e2c 2042 plicitBackup>, B │ │ │ -00000fd0: 3c2d 653e 0a0a 2020 2020 6578 706c 6963 <-e>.. explic │ │ │ -00000fe0: 6974 2042 6163 6b75 7020 7768 6963 6820 it Backup which │ │ │ -00000ff0: 6861 7320 746f 2062 6520 636f 7069 6564 has to be copied │ │ │ -00001000: 0a20 2020 2064 6566 6175 6c74 2069 7320 . default is │ │ │ -00001010: 7468 6520 6c61 7374 2062 6163 6b75 7020 the last backup │ │ │ -00001020: 6f66 2074 6865 2073 7065 6369 6669 6564 of the specified │ │ │ -00001030: 2073 6572 6965 730a 0a3d 6974 656d 2042 series..=item B │ │ │ -00001040: 3c2d 2d76 6572 626f 7365 3e2c 2042 3c2d <--verbose>, B<- │ │ │ -00001050: 763e 0a0a 2020 2020 6765 6e65 7261 7465 v>.. generate │ │ │ -00001060: 2076 6572 626f 7365 206d 6573 7361 6765 verbose message │ │ │ -00001070: 730a 0a3d 6974 656d 2042 3c2d 2d66 6f72 s..=item B<--for │ │ │ -00001080: 6365 3e2c 2042 3c2d 463e 0a0a 2020 2020 ce>, B<-F>.. │ │ │ -00001090: 666f 7263 6520 7573 6167 6520 6f66 206c force usage of l │ │ │ -000010a0: 6173 7420 6261 636b 7570 2028 7769 7468 ast backup (with │ │ │ -000010b0: 206c 6174 654c 696e 6b73 292c 2065 7665 lateLinks), eve │ │ │ -000010c0: 6e20 6974 2069 6620 6861 730a 2020 2020 n it if has. │ │ │ -000010d0: 6e6f 7420 6265 656e 2063 6f6d 706c 6574 not been complet │ │ │ -000010e0: 6564 2077 6974 6820 7374 6f72 6542 6163 ed with storeBac │ │ │ -000010f0: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup. │ │ │ -00001100: 706c 0a0a 3d62 6163 6b0a 0a3d 6865 6164 pl..=back..=head │ │ │ -00001110: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop │ │ │ -00001120: 7972 6967 6874 2028 6329 2032 3031 322d yright (c) 2012- │ │ │ -00001130: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo │ │ │ -00001140: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R │ │ │ -00001150: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe │ │ │ -00001160: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU │ │ │ -00001170: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00001180: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any │ │ │ -00001190: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version.. │ │ │ -000011a0: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help = │ │ │ -000011b0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text( │ │ │ -000011c0: 2430 293b 0a0a 2670 7269 6e74 5665 7273 $0);..&printVers │ │ │ -000011d0: 696f 6e28 5c40 4152 4756 2c20 272d 5627 ion(\@ARGV, '-V' │ │ │ -000011e0: 2c20 272d 2d76 6572 7369 6f6e 2729 3b0a , '--version');. │ │ │ -000011f0: 0a6d 7920 2443 6865 636b 5061 7220 3d0a .my $CheckPar =. │ │ │ -00001200: 2020 2020 4368 6563 6b50 6172 616d 2d3e CheckParam-> │ │ │ -00001210: 6e65 7728 272d 616c 6c6f 774c 6973 7473 new('-allowLists │ │ │ -00001220: 2720 3d3e 2027 6e6f 272c 0a09 0920 2020 ' => 'no',... │ │ │ -00001230: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt │ │ │ -00001240: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00001250: 203d 3e20 2762 6163 6b75 7044 6972 272c => 'backupDir', │ │ │ -00001260: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00001270: 7074 696f 6e27 203d 3e20 272d 6227 2c0a ption' => '-b',. │ │ │ -00001280: 0909 0909 0920 2020 2027 2d63 6c5f 616c ..... '-cl_al │ │ │ -00001290: 6961 7327 203d 3e20 272d 2d62 6163 6b75 ias' => '--backu │ │ │ -000012a0: 7044 6972 272c 0a09 0909 0909 2020 2020 pDir',...... │ │ │ -000012b0: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -000012c0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -000012d0: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ -000012e0: 636f 6e66 6967 4669 6c65 5d27 292c 0a09 configFile]'),.. │ │ │ -000012f0: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001300: 2d6e 616d 6527 203d 3e20 2773 6572 6965 -name' => 'serie │ │ │ -00001310: 7327 2c0a 0909 0909 0920 2020 2027 2d63 s',...... '-c │ │ │ -00001320: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d53 l_option' => '-S │ │ │ -00001330: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001340: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7365 _alias' => '--se │ │ │ -00001350: 7269 6573 272c 0a09 0909 0909 2020 2020 ries',...... │ │ │ -00001360: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00001370: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -00001380: 6c79 5f69 6627 203d 3e20 275b 6261 636b ly_if' => '[back │ │ │ -00001390: 7570 4469 725d 2729 2c0a 0909 0909 4f70 upDir]'),.....Op │ │ │ -000013a0: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000013b0: 2720 3d3e 2027 6578 706c 6963 6974 4261 ' => 'explicitBa │ │ │ -000013c0: 636b 7570 272c 0a09 0909 0909 2020 2020 ckup',...... │ │ │ -000013d0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000013e0: 272d 6527 2c0a 0909 0909 0920 2020 2027 '-e',...... ' │ │ │ -000013f0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -00001400: 2d65 7870 6c69 6369 7442 6163 6b75 7027 -explicitBackup' │ │ │ -00001410: 2c0a 0909 0909 0920 2020 2027 2d70 6172 ,...... '-par │ │ │ -00001420: 616d 2720 3d3e 2027 7965 7327 292c 0a09 am' => 'yes'),.. │ │ │ -00001430: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00001440: 2d6e 616d 6527 203d 3e20 2763 6f6e 6669 -name' => 'confi │ │ │ -00001450: 6746 696c 6527 2c0a 0909 0909 0920 2020 gFile',...... │ │ │ -00001460: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001470: 2027 2d66 272c 0a09 0909 0909 2020 2020 '-f',...... │ │ │ -00001480: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001490: 2d2d 636f 6e66 6967 4669 6c65 272c 0a09 --configFile',.. │ │ │ -000014a0: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -000014b0: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ -000014c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -000014d0: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi │ │ │ -000014e0: 725d 2729 2c0a 0909 0909 4f70 7469 6f6e r]'),.....Option │ │ │ -000014f0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00001500: 2027 7461 7267 6574 4469 7227 2c0a 0909 'targetDir',... │ │ │ -00001510: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00001520: 6f6e 2720 3d3e 2027 2d74 272c 0a09 0909 on' => '-t',.... │ │ │ -00001530: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -00001540: 2720 3d3e 2027 2d2d 7461 7267 6574 4469 ' => '--targetDi │ │ │ -00001550: 7227 2c0a 0909 0909 0920 2020 2027 2d70 r',...... '-p │ │ │ -00001560: 6172 616d 2720 3d3e 2027 7965 7327 2c0a aram' => 'yes',. │ │ │ -00001570: 2309 0909 0909 2020 2020 272d 6d75 7374 #..... '-must │ │ │ -00001580: 5f62 6527 203d 3e20 2779 6573 2729 2c0a _be' => 'yes'),. │ │ │ -00001590: 0909 0909 0920 2020 2029 2c0a 0909 0909 ..... ),..... │ │ │ -000015a0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000015b0: 6d65 2720 3d3e 2027 6765 6e65 7261 7465 me' => 'generate │ │ │ -000015c0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -000015d0: 5f6f 7074 696f 6e27 203d 3e20 272d 6727 _option' => '-g' │ │ │ -000015e0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000015f0: 616c 6961 7327 203d 3e20 272d 2d67 656e alias' => '--gen │ │ │ -00001600: 6572 6174 6527 2c0a 0909 0909 0920 2020 erate',...... │ │ │ -00001610: 2027 2d70 6172 616d 2720 3d3e 2027 7965 '-param' => 'ye │ │ │ -00001620: 7327 2c0a 0909 0909 0920 2020 2027 2d6f s',...... '-o │ │ │ -00001630: 6e6c 795f 6966 2720 3d3e 2027 5b63 6f6e nly_if' => '[con │ │ │ -00001640: 6669 6746 696c 655d 2729 2c0a 0909 0909 figFile]'),..... │ │ │ -00001650: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001660: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose' │ │ │ -00001670: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001680: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v', │ │ │ -00001690: 0a09 0909 0909 2020 2020 272d 636c 5f61 ...... '-cl_a │ │ │ -000016a0: 6c69 6173 2720 3d3e 2027 2d2d 7665 7262 lias' => '--verb │ │ │ -000016b0: 6f73 6527 292c 0a09 0909 094f 7074 696f ose'),.....Optio │ │ │ -000016c0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -000016d0: 3e20 2766 6f72 6365 272c 0a09 0909 0909 > 'force',...... │ │ │ -000016e0: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -000016f0: 203d 3e20 272d 4627 2c0a 0909 0909 0920 => '-F',...... │ │ │ -00001700: 2020 2027 2d63 6c5f 616c 6961 7327 203d '-cl_alias' = │ │ │ -00001710: 3e20 272d 2d66 6f72 6365 2729 0a09 0909 > '--force').... │ │ │ -00001720: 095d 293b 0a0a 2443 6865 636b 5061 722d .]);..$CheckPar- │ │ │ -00001730: 3e63 6865 636b 2827 2d61 7267 7627 203d >check('-argv' = │ │ │ -00001740: 3e20 5c40 4152 4756 2c0a 2020 2020 2020 > \@ARGV,. │ │ │ -00001750: 2020 2020 2020 2020 2020 2027 2d68 656c '-hel │ │ │ -00001760: 7027 203d 3e20 2448 656c 700a 2020 2020 p' => $Help. │ │ │ -00001770: 2020 2020 2020 2020 2020 2020 2029 3b0a );. │ │ │ -00001780: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir = │ │ │ -00001790: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000017a0: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu │ │ │ -000017b0: 7044 6972 2729 3b0a 6d79 2024 7365 7269 pDir');.my $seri │ │ │ -000017c0: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -000017d0: 6765 744f 7074 5769 7468 5061 7228 2773 getOptWithPar('s │ │ │ -000017e0: 6572 6965 7327 293b 2020 2320 6d75 7374 eries'); # must │ │ │ -000017f0: 2062 6520 7370 6563 6966 6965 6420 6966 be specified if │ │ │ -00001800: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00001810: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001820: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001830: 2020 2023 206d 6f72 6520 7468 616e 2031 # more than 1 │ │ │ -00001840: 2073 6572 6965 7320 6578 6973 740a 6d79 series exist.my │ │ │ -00001850: 2024 6578 706c 6963 6974 4261 636b 7570 $explicitBackup │ │ │ -00001860: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00001870: 744f 7074 5769 7468 5061 7228 2765 7870 tOptWithPar('exp │ │ │ -00001880: 6c69 6369 7442 6163 6b75 7027 293b 0a6d licitBackup');.m │ │ │ -00001890: 7920 2463 6f6e 6669 6746 696c 6520 3d20 y $configFile = │ │ │ -000018a0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -000018b0: 7457 6974 6850 6172 2827 636f 6e66 6967 tWithPar('config │ │ │ -000018c0: 4669 6c65 2729 3b0a 6d79 2024 6765 6e65 File');.my $gene │ │ │ -000018d0: 7261 7465 436f 6e66 6967 4669 6c65 203d rateConfigFile = │ │ │ -000018e0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -000018f0: 7074 5769 7468 5061 7228 2767 656e 6572 ptWithPar('gener │ │ │ -00001900: 6174 6527 293b 0a6d 7920 2474 6172 6765 ate');.my $targe │ │ │ -00001910: 7444 6972 203d 2024 4368 6563 6b50 6172 tDir = $CheckPar │ │ │ -00001920: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00001930: 2774 6172 6765 7444 6972 2729 3b0a 6d79 'targetDir');.my │ │ │ -00001940: 2024 7665 7262 6f73 6520 3d20 2443 6865 $verbose = $Che │ │ │ -00001950: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00001960: 686f 7574 5061 7228 2776 6572 626f 7365 houtPar('verbose │ │ │ -00001970: 2729 3b0a 6d79 2024 666f 7263 6520 3d20 ');.my $force = │ │ │ -00001980: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001990: 7457 6974 686f 7574 5061 7228 2766 6f72 tWithoutPar('for │ │ │ -000019a0: 6365 2729 3b0a 0a0a 6d79 2024 7072 4c6f ce');...my $prLo │ │ │ -000019b0: 673b 0a6d 7920 2824 7072 4c6f 674b 696e g;.my ($prLogKin │ │ │ -000019c0: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN', │ │ │ -000019d0: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',.. │ │ │ -000019e0: 0920 2020 2749 3a49 4e46 4f27 2c0a 0909 . 'I:INFO',... │ │ │ -000019f0: 2020 2027 573a 5741 524e 494e 4727 2c0a 'W:WARNING',. │ │ │ -00001a00: 0909 2020 2027 453a 4552 524f 5227 5d3b .. 'E:ERROR']; │ │ │ -00001a10: 0a24 7072 4c6f 6720 3d20 7072 696e 744c .$prLog = printL │ │ │ -00001a20: 6f67 2d3e 6e65 7728 272d 6b69 6e64 2720 og->new('-kind' │ │ │ -00001a30: 3d3e 2024 7072 4c6f 674b 696e 6429 3b0a => $prLogKind);. │ │ │ -00001a40: 0a0a 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00001a50: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00001a60: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00001a70: 205b 2270 6c65 6173 6520 6465 6669 6e65 ["please define │ │ │ -00001a80: 203c 636f 6e66 6967 4669 6c65 3e20 6f72 or │ │ │ -00001a90: 203c 6261 636b 7570 4469 723e 225d 2c0a "],. │ │ │ -00001aa0: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00001ab0: 3e20 3129 0a20 2020 2075 6e6c 6573 7320 > 1). unless │ │ │ -00001ac0: 2824 636f 6e66 6967 4669 6c65 206f 7220 ($configFile or │ │ │ -00001ad0: 2462 6163 6b75 7044 6972 293b 0a0a 0a6d $backupDir);...m │ │ │ -00001ae0: 7920 246f 7468 6572 4261 636b 7570 5365 y $otherBackupSe │ │ │ -00001af0: 7269 6573 203d 2075 6e64 6566 3b0a 6d79 ries = undef;.my │ │ │ -00001b00: 2024 6c61 7465 4c69 6e6b 7320 3d20 756e $lateLinks = un │ │ │ -00001b10: 6465 663b 0a6d 7920 246c 6174 6543 6f6d def;.my $lateCom │ │ │ -00001b20: 7072 6573 7320 3d20 756e 6465 663b 0a6d press = undef;.m │ │ │ -00001b30: 7920 2475 7365 4f6c 6443 6f6e 6669 6720 y $useOldConfig │ │ │ -00001b40: 3d20 303b 0a69 6620 2824 636f 6e66 6967 = 0;.if ($config │ │ │ -00001b50: 4669 6c65 2920 2020 2023 2067 6574 2069 File) # get i │ │ │ -00001b60: 6e66 6f72 6d61 7469 6f6e 2066 726f 6d20 nformation from │ │ │ -00001b70: 636f 6e66 6967 2066 696c 650a 7b0a 2020 config file.{. │ │ │ -00001b80: 2020 6d79 2024 636f 6e66 4f6c 6420 3d0a my $confOld =. │ │ │ -00001b90: 0943 6865 636b 5061 7261 6d2d 3e6e 6577 .CheckParam->new │ │ │ -00001ba0: 2827 2d63 6f6e 6669 6746 696c 6527 203d ('-configFile' = │ │ │ -00001bb0: 3e20 272d 6627 2c0a 0909 0927 2d6c 6973 > '-f',....'-lis │ │ │ -00001bc0: 7427 203d 3e20 5b0a 0909 0920 2020 204f t' => [.... O │ │ │ -00001bd0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001be0: 6527 203d 3e20 276f 6c64 436f 6e66 6967 e' => 'oldConfig │ │ │ -00001bf0: 4669 6c65 272c 0a09 0909 0909 272d 636c File',......'-cl │ │ │ -00001c00: 5f6f 7074 696f 6e27 203d 3e20 272d 6627 _option' => '-f' │ │ │ -00001c10: 2c0a 0909 0909 0927 2d70 6172 616d 2720 ,......'-param' │ │ │ -00001c20: 3d3e 2027 7965 7327 292c 0a09 0909 2020 => 'yes'),.... │ │ │ -00001c30: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ -00001c40: 6e61 6d65 2720 3d3e 2027 6261 636b 7570 name' => 'backup │ │ │ -00001c50: 4469 7227 2c0a 0909 0909 0927 2d63 665f Dir',......'-cf_ │ │ │ -00001c60: 6b65 7927 203d 3e20 2762 6163 6b75 7044 key' => 'backupD │ │ │ -00001c70: 6972 272c 0a09 0909 0909 272d 7061 7261 ir',......'-para │ │ │ -00001c80: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ -00001c90: 0920 2020 204f 7074 696f 6e2d 3e6e 6577 . Option->new │ │ │ -00001ca0: 2827 2d6e 616d 6527 203d 3e20 2773 6572 ('-name' => 'ser │ │ │ -00001cb0: 6965 7327 2c0a 0909 0909 0927 2d63 665f ies',......'-cf_ │ │ │ -00001cc0: 6b65 7927 203d 3e20 2773 6572 6965 7327 key' => 'series' │ │ │ -00001cd0: 2c0a 0909 0909 0927 2d64 6566 6175 6c74 ,......'-default │ │ │ -00001ce0: 2720 3d3e 2027 6465 6661 756c 7427 292c ' => 'default'), │ │ │ -00001cf0: 0a09 0909 2020 2020 4f70 7469 6f6e 2d3e .... Option-> │ │ │ -00001d00: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001d10: 6c61 7465 4c69 6e6b 7327 2c0a 0909 0909 lateLinks',..... │ │ │ -00001d20: 0927 2d63 665f 6b65 7927 203d 3e20 276c .'-cf_key' => 'l │ │ │ -00001d30: 6174 654c 696e 6b73 272c 0a09 0909 0909 ateLinks',...... │ │ │ -00001d40: 272d 6366 5f6e 6f4f 7074 5365 7427 203d '-cf_noOptSet' = │ │ │ -00001d50: 3e20 5b27 7965 7327 2c20 276e 6f27 5d29 > ['yes', 'no']) │ │ │ -00001d60: 2c0a 0909 0920 2020 204f 7074 696f 6e2d ,.... Option- │ │ │ -00001d70: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -00001d80: 276c 6174 6543 6f6d 7072 6573 7327 2c0a 'lateCompress',. │ │ │ -00001d90: 0909 0909 0927 2d6f 6e6c 795f 6966 2720 .....'-only_if' │ │ │ -00001da0: 3d3e 2027 5b6c 6174 654c 696e 6b73 5d27 => '[lateLinks]' │ │ │ -00001db0: 2c0a 0909 0909 0927 2d63 665f 6b65 7927 ,......'-cf_key' │ │ │ -00001dc0: 203d 3e20 276c 6174 6543 6f6d 7072 6573 => 'lateCompres │ │ │ -00001dd0: 7327 2c0a 0909 0909 0927 2d63 665f 6e6f s',......'-cf_no │ │ │ -00001de0: 4f70 7453 6574 2720 3d3e 205b 2779 6573 OptSet' => ['yes │ │ │ -00001df0: 272c 2027 6e6f 275d 292c 0a09 0909 2020 ', 'no']),.... │ │ │ -00001e00: 2020 4f70 7469 6f6e 2d3e 6e65 7728 272d Option->new('- │ │ │ -00001e10: 6e61 6d65 2720 3d3e 2027 6d65 7267 6542 name' => 'mergeB │ │ │ -00001e20: 6163 6b75 7044 6972 272c 0a09 0909 0909 ackupDir',...... │ │ │ -00001e30: 272d 6366 5f6b 6579 2720 3d3e 2027 6d65 '-cf_key' => 'me │ │ │ -00001e40: 7267 6542 6163 6b75 7044 6972 272c 0a09 rgeBackupDir',.. │ │ │ -00001e50: 0909 0909 272d 7061 7261 6d27 203d 3e20 ....'-param' => │ │ │ -00001e60: 2779 6573 2729 2c0a 0909 095d 293b 0a20 'yes'),....]);. │ │ │ -00001e70: 2020 2024 636f 6e66 4f6c 642d 3e63 6865 $confOld->che │ │ │ -00001e80: 636b 2827 2d61 7267 7627 203d 3e20 5b27 ck('-argv' => [' │ │ │ -00001e90: 2d66 2720 3d3e 2024 636f 6e66 6967 4669 -f' => $configFi │ │ │ -00001ea0: 6c65 5d2c 0a09 0920 2020 2027 2d68 656c le],... '-hel │ │ │ -00001eb0: 7027 203d 3e20 2263 616e 6e6f 7420 7265 p' => "cannot re │ │ │ -00001ec0: 6164 2066 696c 6520 3c24 636f 6e66 6967 ad file <$config │ │ │ -00001ed0: 4669 6c65 3e5c 6e22 2c0a 0909 2020 2020 File>\n",... │ │ │ -00001ee0: 272d 6967 6e6f 7265 4164 6469 7469 6f6e '-ignoreAddition │ │ │ -00001ef0: 616c 4b65 7973 2720 3d3e 2031 293b 0a0a alKeys' => 1);.. │ │ │ -00001f00: 2020 2020 6d79 2024 6d65 7267 6542 6163 my $mergeBac │ │ │ -00001f10: 6b75 7044 6972 203d 2024 636f 6e66 4f6c kupDir = $confOl │ │ │ -00001f20: 642d 3e67 6574 4f70 7457 6974 6850 6172 d->getOptWithPar │ │ │ -00001f30: 2827 6d65 7267 6542 6163 6b75 7044 6972 ('mergeBackupDir │ │ │ -00001f40: 2729 3b0a 2020 2020 6966 2028 246d 6572 ');. if ($mer │ │ │ -00001f50: 6765 4261 636b 7570 4469 7229 0a20 2020 geBackupDir). │ │ │ -00001f60: 207b 0a09 2462 6163 6b75 7044 6972 203d {..$backupDir = │ │ │ -00001f70: 2024 636f 6e66 4f6c 642d 3e67 6574 4f70 $confOld->getOp │ │ │ -00001f80: 7457 6974 6850 6172 2827 6d65 7267 6542 tWithPar('mergeB │ │ │ -00001f90: 6163 6b75 7044 6972 2729 3b0a 0924 7461 ackupDir');..$ta │ │ │ -00001fa0: 7267 6574 4469 7220 3d20 2463 6f6e 664f rgetDir = $confO │ │ │ -00001fb0: 6c64 2d3e 6765 744f 7074 5769 7468 5061 ld->getOptWithPa │ │ │ -00001fc0: 7228 2762 6163 6b75 7044 6972 2729 3b0a r('backupDir');. │ │ │ -00001fd0: 0924 7573 654f 6c64 436f 6e66 6967 203d .$useOldConfig = │ │ │ -00001fe0: 2031 3b0a 2020 2020 7d0a 2020 2020 656c 1;. }. el │ │ │ -00001ff0: 7365 0a20 2020 207b 0a09 2462 6163 6b75 se. {..$backu │ │ │ -00002000: 7044 6972 203d 2024 636f 6e66 4f6c 642d pDir = $confOld- │ │ │ -00002010: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00002020: 6261 636b 7570 4469 7227 293b 0a20 2020 backupDir');. │ │ │ -00002030: 207d 0a20 2020 2024 7365 7269 6573 203d }. $series = │ │ │ -00002040: 2024 636f 6e66 4f6c 642d 3e67 6574 4f70 $confOld->getOp │ │ │ -00002050: 7457 6974 6850 6172 2827 7365 7269 6573 tWithPar('series │ │ │ -00002060: 2729 3b0a 2020 2020 246c 6174 654c 696e ');. $lateLin │ │ │ -00002070: 6b73 203d 2024 636f 6e66 4f6c 642d 3e67 ks = $confOld->g │ │ │ -00002080: 6574 4f70 7457 6974 686f 7574 5061 7228 etOptWithoutPar( │ │ │ -00002090: 276c 6174 654c 696e 6b73 2729 3b0a 2020 'lateLinks');. │ │ │ -000020a0: 2020 246c 6174 6543 6f6d 7072 6573 7320 $lateCompress │ │ │ -000020b0: 3d20 2463 6f6e 664f 6c64 2d3e 6765 744f = $confOld->getO │ │ │ -000020c0: 7074 5769 7468 6f75 7450 6172 2827 6c61 ptWithoutPar('la │ │ │ -000020d0: 7465 436f 6d70 7265 7373 2729 3b0a 7d0a teCompress');.}. │ │ │ -000020e0: 656c 7365 2020 2020 2023 2064 6f20 6e6f else # do no │ │ │ -000020f0: 7420 7265 6164 2063 6f6e 6669 6775 7261 t read configura │ │ │ -00002100: 7469 6f6e 2066 696c 650a 7b0a 2020 2020 tion file.{. │ │ │ -00002110: 756e 6c65 7373 2028 2473 6572 6965 7329 unless ($series) │ │ │ -00002120: 2020 2020 2320 6368 6563 6b20 6e61 6d65 # check name │ │ │ -00002130: 206f 6620 7365 7269 6573 0a20 2020 207b of series. { │ │ │ -00002140: 0a09 6c6f 6361 6c20 2a44 4952 3b0a 096f ..local *DIR;..o │ │ │ -00002150: 7065 6e64 6972 2844 4952 2c20 2462 6163 pendir(DIR, $bac │ │ │ -00002160: 6b75 7044 6972 2920 6f72 0a09 2020 2020 kupDir) or.. │ │ │ -00002170: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00002180: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -00002190: 0920 2027 2d73 7472 2720 3d3e 205b 2263 . '-str' => ["c │ │ │ -000021a0: 616e 6e6f 7420 6f70 656e 6469 7220 3c24 annot opendir <$ │ │ │ -000021b0: 6261 636b 7570 4469 723e 2c20 6578 6974 backupDir>, exit │ │ │ -000021c0: 696e 6722 5d2c 0a09 0909 2020 272d 6164 ing"],.... '-ad │ │ │ -000021d0: 6427 203d 3e20 5b5f 5f46 494c 455f 5f2c d' => [__FILE__, │ │ │ -000021e0: 205f 5f4c 494e 455f 5f5d 2c0a 0909 0920 __LINE__],.... │ │ │ -000021f0: 2027 2d65 7869 7427 203d 3e20 3129 3b0a '-exit' => 1);. │ │ │ -00002200: 096d 7920 2824 656e 7472 792c 2040 656e .my ($entry, @en │ │ │ -00002210: 7472 6965 7329 3b0a 0977 6869 6c65 2028 tries);..while ( │ │ │ -00002220: 2465 6e74 7279 203d 2072 6561 6464 6972 $entry = readdir │ │ │ -00002230: 2044 4952 290a 097b 0a09 2020 2020 6e65 DIR)..{.. ne │ │ │ -00002240: 7874 2069 6620 2824 656e 7472 7920 6571 xt if ($entry eq │ │ │ -00002250: 2027 2e27 206f 7220 2465 6e74 7279 2065 '.' or $entry e │ │ │ -00002260: 7120 272e 2e27 293b 0a09 2020 2020 6d79 q '..');.. my │ │ │ -00002270: 2024 6520 3d20 2224 6261 636b 7570 4469 $e = "$backupDi │ │ │ -00002280: 722f 2465 6e74 7279 223b 0a09 2020 2020 r/$entry";.. │ │ │ -00002290: 6e65 7874 2069 6620 282d 6c20 2465 2061 next if (-l $e a │ │ │ -000022a0: 6e64 206e 6f74 202d 6420 2465 293b 2020 nd not -d $e); │ │ │ -000022b0: 2023 206f 6e6c 7920 6469 7265 6374 6f72 # only director │ │ │ -000022c0: 6965 730a 0920 2020 206e 6578 7420 756e ies.. next un │ │ │ -000022d0: 6c65 7373 202d 6420 2465 3b0a 0920 2020 less -d $e;.. │ │ │ -000022e0: 2070 7573 6820 4065 6e74 7269 6573 2c20 push @entries, │ │ │ -000022f0: 2465 6e74 7279 3b0a 097d 0a09 636c 6f73 $entry;..}..clos │ │ │ -00002300: 6564 6972 2844 4952 293b 0a0a 0924 7072 edir(DIR);...$pr │ │ │ -00002310: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00002320: 6427 203d 3e20 2745 272c 0a09 0920 2020 d' => 'E',... │ │ │ -00002330: 2020 2027 2d73 7472 2720 3d3e 0a09 0920 '-str' =>... │ │ │ -00002340: 2020 2020 205b 226e 6f20 7365 7269 6573 ["no series │ │ │ -00002350: 2066 6f75 6e64 2069 6e20 3c24 6261 636b found in <$back │ │ │ -00002360: 7570 4469 723e 2c20 6578 6974 696e 6722 upDir>, exiting" │ │ │ -00002370: 5d2c 0a09 0920 2020 2020 2027 2d65 7869 ],... '-exi │ │ │ -00002380: 7427 203d 3e20 3129 0a09 2020 2020 6966 t' => 1).. if │ │ │ -00002390: 2040 656e 7472 6965 7320 3d3d 2030 3b0a @entries == 0;. │ │ │ -000023a0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -000023b0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -000023c0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000023d0: 0a09 0920 2020 2020 205b 2266 6f75 6e64 ... ["found │ │ │ -000023e0: 206d 6f72 6520 7468 616e 206f 6e65 2062 more than one b │ │ │ -000023f0: 6163 6b75 7020 7365 7269 6573 2c20 706c ackup series, pl │ │ │ -00002400: 6561 7365 2073 7065 6369 6679 2022 2c0a ease specify ",. │ │ │ -00002410: 0909 2020 2020 2020 2273 6572 6965 7320 .. "series │ │ │ -00002420: 7769 7468 206f 7074 696f 6e20 2d2d 7365 with option --se │ │ │ -00002430: 7269 6573 3b20 666f 756e 643a 222c 2073 ries; found:", s │ │ │ -00002440: 6f72 7420 4065 6e74 7269 6573 5d2c 0a09 ort @entries],.. │ │ │ -00002450: 0920 2020 2020 2027 2d65 7869 7427 203d . '-exit' = │ │ │ -00002460: 3e20 3129 0a09 2020 2020 6966 2040 656e > 1).. if @en │ │ │ -00002470: 7472 6965 7320 3e20 313b 0a0a 0924 7365 tries > 1;...$se │ │ │ -00002480: 7269 6573 203d 2024 656e 7472 6965 735b ries = $entries[ │ │ │ -00002490: 305d 3b0a 2020 2020 7d0a 7d0a 0a24 7072 0];. }.}..$pr │ │ │ -000024a0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -000024b0: 6427 203d 3e20 2745 272c 0a09 2020 2020 d' => 'E',.. │ │ │ -000024c0: 2020 272d 7374 7227 203d 3e20 5b22 6261 '-str' => ["ba │ │ │ -000024d0: 636b 7570 2064 6972 6563 746f 7279 203c ckup directory < │ │ │ -000024e0: 2462 6163 6b75 7044 6972 3e20 646f 6573 $backupDir> does │ │ │ -000024f0: 206e 6f74 2065 7869 7374 225d 2c0a 0920 not exist"],.. │ │ │ -00002500: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00002510: 3129 0a20 2020 2075 6e6c 6573 7320 282d 1). unless (- │ │ │ -00002520: 6420 2462 6163 6b75 7044 6972 293b 0a24 d $backupDir);.$ │ │ │ -00002530: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002540: 696e 6427 203d 3e20 2745 272c 0a09 2020 ind' => 'E',.. │ │ │ -00002550: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00002560: 706c 6561 7365 2073 7065 6369 6679 2074 please specify t │ │ │ -00002570: 6172 6765 7444 6972 225d 2c0a 0920 2020 argetDir"],.. │ │ │ -00002580: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ -00002590: 0a20 2020 2075 6e6c 6573 7320 2824 7461 . unless ($ta │ │ │ -000025a0: 7267 6574 4469 7229 3b0a 2470 724c 6f67 rgetDir);.$prLog │ │ │ -000025b0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000025c0: 3d3e 2027 4527 2c0a 0920 2020 2020 2027 => 'E',.. ' │ │ │ -000025d0: 2d73 7472 2720 3d3e 205b 2274 6172 6765 -str' => ["targe │ │ │ -000025e0: 7420 6469 7265 6374 6f72 7920 3c24 7461 t directory <$ta │ │ │ -000025f0: 7267 6574 4469 723e 2064 6f65 7320 6e6f rgetDir> does no │ │ │ -00002600: 7420 6578 6973 7422 5d2c 0a09 2020 2020 t exist"],.. │ │ │ -00002610: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ -00002620: 2020 2020 756e 6c65 7373 2028 2d64 2024 unless (-d $ │ │ │ -00002630: 7461 7267 6574 4469 7229 3b0a 2470 724c targetDir);.$prL │ │ │ -00002640: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00002650: 2720 3d3e 2027 4527 2c0a 0920 2020 2020 ' => 'E',.. │ │ │ -00002660: 2027 2d73 7472 2720 3d3e 0a09 2020 2020 '-str' =>.. │ │ │ -00002670: 2020 5b22 7365 7269 6573 2064 6972 6563 ["series direc │ │ │ -00002680: 746f 7279 203c 2473 6572 6965 733e 2064 tory <$series> d │ │ │ -00002690: 6f65 7320 6e6f 7420 6578 6973 7420 696e oes not exist in │ │ │ -000026a0: 7369 6465 203c 2462 6163 6b75 7044 6972 side <$backupDir │ │ │ -000026b0: 3e22 5d2c 0a09 2020 2020 2020 272d 6578 >"],.. '-ex │ │ │ -000026c0: 6974 2720 3d3e 2031 290a 2020 2020 756e it' => 1). un │ │ │ -000026d0: 6c65 7373 2028 2d64 2022 2462 6163 6b75 less (-d "$backu │ │ │ -000026e0: 7044 6972 2f24 7365 7269 6573 2229 3b0a pDir/$series");. │ │ │ -000026f0: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00002700: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00002710: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00002720: 5b22 666f 756e 6420 7365 7269 6573 203c ["found series < │ │ │ -00002730: 2473 6572 6965 733e 2069 6e20 6261 636b $series> in back │ │ │ -00002740: 7570 4469 7220 3c24 6261 636b 7570 4469 upDir <$backupDi │ │ │ -00002750: 723e 225d 290a 2020 2020 6966 2024 7665 r>"]). if $ve │ │ │ -00002760: 7262 6f73 653b 0a0a 6d79 2024 7461 7267 rbose;..my $targ │ │ │ -00002770: 6574 5365 7269 6573 4469 7220 3d20 2224 etSeriesDir = "$ │ │ │ -00002780: 7461 7267 6574 4469 722f 2473 6572 6965 targetDir/$serie │ │ │ -00002790: 7322 3b0a 0a23 0a23 2064 6574 6563 7420 s";..#.# detect │ │ │ -000027a0: 6c61 7374 2062 6163 6b75 700a 230a 6d79 last backup.#.my │ │ │ -000027b0: 2024 6c61 7374 4261 636b 7570 4469 7220 $lastBackupDir │ │ │ -000027c0: 3d20 756e 6465 663b 0a69 6620 2824 6578 = undef;.if ($ex │ │ │ -000027d0: 706c 6963 6974 4261 636b 7570 290a 7b0a plicitBackup).{. │ │ │ -000027e0: 2020 2020 246c 6173 7442 6163 6b75 7044 $lastBackupD │ │ │ -000027f0: 6972 203d 2022 2462 6163 6b75 7044 6972 ir = "$backupDir │ │ │ -00002800: 2f24 7365 7269 6573 2f24 6578 706c 6963 /$series/$explic │ │ │ -00002810: 6974 4261 636b 7570 223b 0a20 2020 2024 itBackup";. $ │ │ │ -00002820: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00002830: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00002840: 2027 2d73 7472 2720 3d3e 205b 2265 7870 '-str' => ["exp │ │ │ -00002850: 6c69 6369 7420 6261 636b 7570 203c 246c licit backup <$l │ │ │ -00002860: 6173 7442 6163 6b75 7044 6972 3e20 646f astBackupDir> do │ │ │ -00002870: 6573 206e 6f74 2065 7869 7374 225d 2c0a es not exist"],. │ │ │ -00002880: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ -00002890: 290a 0975 6e6c 6573 7320 2d64 2024 6c61 )..unless -d $la │ │ │ -000028a0: 7374 4261 636b 7570 4469 723b 0a7d 0a65 stBackupDir;.}.e │ │ │ -000028b0: 6c73 650a 7b0a 2020 2020 6c6f 6361 6c20 lse.{. local │ │ │ -000028c0: 2a44 4952 3b0a 2020 2020 6f70 656e 6469 *DIR;. opendi │ │ │ -000028d0: 7228 4449 522c 2022 2462 6163 6b75 7044 r(DIR, "$backupD │ │ │ -000028e0: 6972 2f24 7365 7269 6573 2229 206f 720a ir/$series") or. │ │ │ -000028f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00002900: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00002910: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00002920: 205b 2263 616e 6e6f 7420 6f70 656e 6469 ["cannot opendi │ │ │ -00002930: 7220 3c24 6261 636b 7570 4469 722f 2473 r <$backupDir/$s │ │ │ -00002940: 6572 6965 733e 2c20 6578 6974 696e 6722 eries>, exiting" │ │ │ -00002950: 5d2c 0a09 0920 2020 2020 2027 2d61 6464 ],... '-add │ │ │ -00002960: 2720 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 ' => [__FILE__, │ │ │ -00002970: 5f5f 4c49 4e45 5f5f 5d2c 0a09 0920 2020 __LINE__],... │ │ │ -00002980: 2020 2027 2d65 7869 7427 203d 3e20 3129 '-exit' => 1) │ │ │ -00002990: 3b0a 2020 2020 6d79 2028 2465 6e74 7279 ;. my ($entry │ │ │ -000029a0: 2c20 4065 6e74 7269 6573 293b 0a20 2020 , @entries);. │ │ │ -000029b0: 2077 6869 6c65 2028 2465 6e74 7279 203d while ($entry = │ │ │ -000029c0: 2072 6561 6464 6972 2044 4952 290a 2020 readdir DIR). │ │ │ -000029d0: 2020 7b0a 096e 6578 7420 6966 2028 2d6c {..next if (-l │ │ │ -000029e0: 2024 656e 7472 7920 616e 6420 6e6f 7420 $entry and not │ │ │ -000029f0: 2d64 2024 656e 7472 7929 3b20 2020 2320 -d $entry); # │ │ │ -00002a00: 6f6e 6c79 2064 6972 6563 746f 7269 6573 only directories │ │ │ -00002a10: 0a09 7075 7368 2040 656e 7472 6965 732c ..push @entries, │ │ │ -00002a20: 2024 656e 7472 790a 0920 2020 2069 6620 $entry.. if │ │ │ -00002a30: 2465 6e74 7279 203d 7e0a 0920 2020 202f $entry =~.. / │ │ │ -00002a40: 5c41 285c 647b 347d 295c 2e28 5c64 7b32 \A(\d{4})\.(\d{2 │ │ │ -00002a50: 7d29 5c2e 285c 647b 327d 295f 285c 647b })\.(\d{2})_(\d{ │ │ │ -00002a60: 327d 295c 2e28 5c64 7b32 7d29 5c2e 285c 2})\.(\d{2})\.(\ │ │ │ -00002a70: 647b 327d 295c 5a2f 6f3b 0a20 2020 207d d{2})\Z/o;. } │ │ │ -00002a80: 0a20 2020 2063 6c6f 7365 6469 7228 4449 . closedir(DI │ │ │ -00002a90: 5229 3b0a 0a20 2020 2040 656e 7472 6965 R);.. @entrie │ │ │ -00002aa0: 7320 3d20 736f 7274 2040 656e 7472 6965 s = sort @entrie │ │ │ -00002ab0: 733b 2020 2020 2320 6e65 7765 7374 2062 s; # newest b │ │ │ -00002ac0: 6163 6b75 7020 6669 7273 740a 2020 2020 ackup first. │ │ │ -00002ad0: 6d79 2024 653b 0a20 2020 2066 6f72 6561 my $e;. forea │ │ │ -00002ae0: 6368 2024 6520 2840 656e 7472 6965 7329 ch $e (@entries) │ │ │ -00002af0: 0a20 2020 207b 0a23 0969 6620 282d 6520 . {.#.if (-e │ │ │ -00002b00: 2224 6261 636b 7570 4469 722f 2473 6572 "$backupDir/$ser │ │ │ -00002b10: 6965 732f 2465 2f2e 6d64 3543 6865 636b ies/$e/.md5Check │ │ │ -00002b20: 5375 6d73 2e6e 6f74 6669 6e69 7368 6564 Sums.notfinished │ │ │ -00002b30: 2229 0a09 756e 6c65 7373 2028 263a 3a63 ")..unless (&::c │ │ │ -00002b40: 6865 636b 4966 4261 636b 7570 5761 7346 heckIfBackupWasF │ │ │ -00002b50: 696e 6973 6865 6428 272d 6261 636b 7570 inished('-backup │ │ │ -00002b60: 4469 7227 203d 3e20 2224 6261 636b 7570 Dir' => "$backup │ │ │ -00002b70: 4469 722f 2473 6572 6965 732f 2465 222c Dir/$series/$e", │ │ │ -00002b80: 0a09 0909 0909 2020 2020 272d 7072 4c6f ...... '-prLo │ │ │ -00002b90: 6727 203d 3e20 2470 724c 6f67 2c0a 0909 g' => $prLog,... │ │ │ -00002ba0: 0920 2020 2027 2d63 6f75 6e74 2720 3d3e . '-count' => │ │ │ -00002bb0: 2035 3029 290a 097b 0a09 2020 2020 2470 50))..{.. $p │ │ │ -00002bc0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00002bd0: 6e64 2720 3d3e 2027 5727 2c0a 0909 0920 nd' => 'W',.... │ │ │ -00002be0: 2027 2d73 7472 2720 3d3e 205b 223c 2462 '-str' => ["<$b │ │ │ -00002bf0: 6163 6b75 7044 6972 2f24 7365 7269 6573 ackupDir/$series │ │ │ -00002c00: 2f24 653e 206e 6f74 2066 696e 6973 6865 /$e> not finishe │ │ │ -00002c10: 6422 5d29 3b0a 097d 0a09 656c 7365 0a09 d"]);..}..else.. │ │ │ -00002c20: 7b0a 0920 2020 2024 6c61 7374 4261 636b {.. $lastBack │ │ │ -00002c30: 7570 4469 7220 3d20 2224 6261 636b 7570 upDir = "$backup │ │ │ -00002c40: 4469 722f 2473 6572 6965 732f 2465 223b Dir/$series/$e"; │ │ │ -00002c50: 0a09 7d0a 2020 2020 7d0a 2020 2020 2470 ..}. }. $p │ │ │ -00002c60: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00002c70: 6e64 2720 3d3e 2027 4527 2c0a 0909 2020 nd' => 'E',... │ │ │ -00002c80: 272d 7374 7227 203d 3e0a 0909 2020 5b22 '-str' =>... [" │ │ │ -00002c90: 6e6f 2073 6572 6965 7320 666f 756e 6420 no series found │ │ │ -00002ca0: 696e 203c 2462 6163 6b75 7044 6972 3e2c in <$backupDir>, │ │ │ -00002cb0: 2065 7869 7469 6e67 225d 2c0a 0909 2020 exiting"],... │ │ │ -00002cc0: 272d 6578 6974 2720 3d3e 2031 290a 0975 '-exit' => 1)..u │ │ │ -00002cd0: 6e6c 6573 7320 246c 6173 7442 6163 6b75 nless $lastBacku │ │ │ -00002ce0: 7044 6972 3b0a 0a20 2020 2024 7072 4c6f pDir;.. $prLo │ │ │ -00002cf0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00002d00: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -00002d10: 7472 2720 3d3e 0a20 2020 2020 2020 5b22 tr' =>. [" │ │ │ -00002d20: 6c61 7374 2062 6163 6b75 7044 6972 203c last backupDir < │ │ │ -00002d30: 2462 6163 6b75 7044 6972 3e20 6e65 6564 $backupDir> need │ │ │ -00002d40: 7322 2c0a 0922 746f 2072 756e 2073 746f s",.."to run sto │ │ │ -00002d50: 7265 4261 636b 7570 5570 6461 7465 4261 reBackupUpdateBa │ │ │ -00002d60: 636b 7570 2e70 6c2c 2022 2c0a 0922 706c ckup.pl, ",.."pl │ │ │ -00002d70: 6561 7365 2064 6f20 736f 2061 6e64 2072 ease do so and r │ │ │ -00002d80: 6570 6561 7420 7275 6e6e 696e 6720 7468 epeat running th │ │ │ -00002d90: 6973 2070 726f 6772 616d 222c 0a09 226f is program",.."o │ │ │ -00002da0: 7220 7573 6520 6f70 7469 6f6e 202d 2d65 r use option --e │ │ │ -00002db0: 7870 6c69 6369 7442 6163 6b75 7020 6f72 xplicitBackup or │ │ │ -00002dc0: 206f 7074 696f 6e20 2d2d 666f 7263 6522 option --force" │ │ │ -00002dd0: 5d2c 0a09 0920 2027 2d65 7869 7427 203d ],... '-exit' = │ │ │ -00002de0: 3e20 3129 0a09 6966 202d 6520 2224 6c61 > 1)..if -e "$la │ │ │ -00002df0: 7374 4261 636b 7570 4469 722f 2e73 746f stBackupDir/.sto │ │ │ -00002e00: 7265 4261 636b 7570 4c69 6e6b 732f 6c69 reBackupLinks/li │ │ │ -00002e10: 6e6b 4669 6c65 2e62 7a32 220a 0961 6e64 nkFile.bz2"..and │ │ │ -00002e20: 206e 6f74 2024 666f 7263 653b 0a0a 2020 not $force;.. │ │ │ -00002e30: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00002e40: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00002e50: 0909 2020 272d 7374 7227 203d 3e0a 0909 .. '-str' =>... │ │ │ -00002e60: 2020 5b22 6c61 7374 2064 6972 6563 746f ["last directo │ │ │ -00002e70: 7279 2077 6974 6820 6261 636b 7570 2069 ry with backup i │ │ │ -00002e80: 7320 3c24 6c61 7374 4261 636b 7570 4469 s <$lastBackupDi │ │ │ -00002e90: 723e 225d 290a 0969 6620 2476 6572 626f r>"])..if $verbo │ │ │ -00002ea0: 7365 3b0a 7d0a 0a69 6620 2824 636f 6e66 se;.}..if ($conf │ │ │ -00002eb0: 6967 4669 6c65 2061 6e64 206e 6f74 2024 igFile and not $ │ │ │ -00002ec0: 7573 654f 6c64 436f 6e66 6967 2920 2023 useOldConfig) # │ │ │ -00002ed0: 2063 6f70 7920 636f 6e66 6967 7572 6174 copy configurat │ │ │ -00002ee0: 696f 6e20 6669 6c65 0a7b 0a20 2020 2075 ion file.{. u │ │ │ -00002ef0: 6e6c 6573 7320 2824 6765 6e65 7261 7465 nless ($generate │ │ │ -00002f00: 436f 6e66 6967 4669 6c65 290a 2020 2020 ConfigFile). │ │ │ -00002f10: 7b0a 096d 7920 2824 625f 6469 722c 2024 {..my ($b_dir, $ │ │ │ -00002f20: 625f 6669 6c65 2920 3d20 263a 3a73 706c b_file) = &::spl │ │ │ -00002f30: 6974 4669 6c65 4469 7228 2463 6f6e 6669 itFileDir($confi │ │ │ -00002f40: 6746 696c 6529 3b0a 0924 6765 6e65 7261 gFile);..$genera │ │ │ -00002f50: 7465 436f 6e66 6967 4669 6c65 203d 2022 teConfigFile = " │ │ │ -00002f60: 2462 5f64 6972 2f69 736f 6c61 7465 2d24 $b_dir/isolate-$ │ │ │ -00002f70: 625f 6669 6c65 223b 0a20 2020 207d 0a0a b_file";. }.. │ │ │ -00002f80: 2020 2020 6d79 2024 616e 7377 6572 203d my $answer = │ │ │ -00002f90: 2027 7965 7327 3b0a 2020 2020 6966 2028 'yes';. if ( │ │ │ -00002fa0: 2d65 2024 6765 6e65 7261 7465 436f 6e66 -e $generateConf │ │ │ -00002fb0: 6967 4669 6c65 290a 2020 2020 7b0a 0964 igFile). {..d │ │ │ -00002fc0: 6f0a 097b 0a09 2020 2020 7072 696e 7420 o..{.. print │ │ │ -00002fd0: 223c 2467 656e 6572 6174 6543 6f6e 6669 "<$generateConfi │ │ │ -00002fe0: 6746 696c 653e 2061 6c72 6561 6479 2065 gFile> already e │ │ │ -00002ff0: 7869 7374 732e 204f 7665 7277 7269 7465 xists. Overwrite │ │ │ -00003000: 3f5c 6e22 2c0a 0920 2020 2022 7965 7320 ?\n",.. "yes │ │ │ -00003010: 2f20 6e6f 202d 3e20 223b 0a09 2020 2020 / no -> ";.. │ │ │ -00003020: 2461 6e73 7765 7220 3d20 3c53 5444 494e $answer = ;.. chomp $a │ │ │ -00003040: 6e73 7765 723b 0a09 7d20 7768 696c 6520 nswer;..} while │ │ │ -00003050: 2824 616e 7377 6572 206e 6520 2779 6573 ($answer ne 'yes │ │ │ -00003060: 2720 616e 6420 2461 6e73 7765 7220 6e65 ' and $answer ne │ │ │ -00003070: 2027 6e6f 2729 3b0a 2020 2020 7d0a 2020 'no');. }. │ │ │ -00003080: 2020 6578 6974 2030 2069 6620 2461 6e73 exit 0 if $ans │ │ │ -00003090: 7765 7220 6571 2027 6e6f 273b 0a0a 2020 wer eq 'no';.. │ │ │ -000030a0: 2020 2320 7265 6164 2063 6f6e 6669 6720 # read config │ │ │ -000030b0: 6669 6c65 2061 6e64 2063 6f70 790a 2020 file and copy. │ │ │ -000030c0: 2020 6c6f 6361 6c20 2a46 494c 453b 0a20 local *FILE;. │ │ │ -000030d0: 2020 206f 7065 6e28 4649 4c45 2c20 2463 open(FILE, $c │ │ │ -000030e0: 6f6e 6669 6746 696c 6529 206f 720a 0924 onfigFile) or..$ │ │ │ -000030f0: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003100: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00003110: 2020 2020 2027 2d73 7472 2720 3d3e 2022 '-str' => " │ │ │ -00003120: 6361 6e6e 6f74 206f 7065 6e20 3c24 636f cannot open <$co │ │ │ -00003130: 6e66 6967 4669 6c65 3e22 2c0a 0909 2020 nfigFile>",... │ │ │ -00003140: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ -00003150: 293b 0a20 2020 206d 7920 2840 636f 6e66 );. my (@conf │ │ │ -00003160: 6967 4669 6c65 2920 3d20 3c46 494c 453e igFile) = │ │ │ -00003170: 3b0a 2020 2020 6368 6f6d 7020 4063 6f6e ;. chomp @con │ │ │ -00003180: 6669 6746 696c 653b 0a20 2020 2063 6c6f figFile;. clo │ │ │ -00003190: 7365 2846 494c 4529 3b0a 0a20 2020 206f se(FILE);.. o │ │ │ -000031a0: 7065 6e28 4649 4c45 2c20 273e 272c 2024 pen(FILE, '>', $ │ │ │ -000031b0: 6765 6e65 7261 7465 436f 6e66 6967 4669 generateConfigFi │ │ │ -000031c0: 6c65 2920 6f72 0a09 2470 724c 6f67 2d3e le) or..$prLog-> │ │ │ -000031d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -000031e0: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ -000031f0: 7374 7227 203d 3e20 2263 616e 6e6f 7420 str' => "cannot │ │ │ -00003200: 6f70 656e 203c 2467 656e 6572 6174 6543 open <$generateC │ │ │ -00003210: 6f6e 6669 6746 696c 653e 222c 0a09 0920 onfigFile>",... │ │ │ -00003220: 2020 2020 2027 2d65 7869 7427 203d 3e20 '-exit' => │ │ │ -00003230: 3129 3b0a 0a20 2020 206d 7920 2825 6368 1);.. my (%ch │ │ │ -00003240: 6563 6b4b 6579 7329 203d 2028 2762 6163 eckKeys) = ('bac │ │ │ -00003250: 6b75 7044 6972 2720 3d3e 2031 2c0a 0909 kupDir' => 1,... │ │ │ -00003260: 2020 2020 2020 2027 6c61 7465 4c69 6e6b 'lateLink │ │ │ -00003270: 7327 203d 3e20 3129 3b0a 2020 2020 6d79 s' => 1);. my │ │ │ -00003280: 2028 256b 6579 732c 2024 6c29 3b0a 2020 (%keys, $l);. │ │ │ -00003290: 2020 6d79 2028 4063 6629 203d 2028 4063 my (@cf) = (@c │ │ │ -000032a0: 6f6e 6669 6746 696c 6529 3b20 2020 2020 onfigFile); │ │ │ -000032b0: 2020 2320 776f 726b 696e 6720 636f 7079 # working copy │ │ │ -000032c0: 206f 6620 4063 6f6e 6669 6746 696c 650a of @configFile. │ │ │ -000032d0: 2020 2020 6d79 2024 6163 744b 6579 203d my $actKey = │ │ │ -000032e0: 2075 6e64 6566 3b0a 2020 2020 6d79 2024 undef;. my $ │ │ │ -000032f0: 6920 3d20 303b 0a20 2020 206d 7920 2470 i = 0;. my $p │ │ │ -00003300: 7269 6e74 4e65 7874 4c69 6e65 203d 2031 rintNextLine = 1 │ │ │ -00003310: 3b0a 2020 2020 6d79 2028 4063 6f6d 6d65 ;. my (@comme │ │ │ -00003320: 6e74 7329 203d 2028 293b 0a20 2020 2066 nts) = ();. f │ │ │ -00003330: 6f72 6561 6368 2024 6c20 2840 6366 290a oreach $l (@cf). │ │ │ -00003340: 2020 2020 7b0a 0924 692b 2b3b 0a0a 0969 {..$i++;...i │ │ │ -00003350: 6620 2824 6c20 3d7e 202f 5c41 5b23 5d2f f ($l =~ /\A[#]/ │ │ │ -00003360: 206f 7220 246c 203d 7e20 2f5c 415c 732a or $l =~ /\A\s* │ │ │ -00003370: 5c5a 2f29 2020 2320 636f 6d6d 656e 7420 \Z/) # comment │ │ │ -00003380: 6f72 2065 6d70 7479 0a09 7b0a 0920 2020 or empty..{.. │ │ │ -00003390: 2070 7573 6820 4063 6f6d 6d65 6e74 732c push @comments, │ │ │ -000033a0: 2024 6c3b 0a09 2020 2020 2461 6374 4b65 $l;.. $actKe │ │ │ -000033b0: 7920 3d20 756e 6465 663b 0a09 2020 2020 y = undef;.. │ │ │ -000033c0: 6e65 7874 3b0a 097d 0a09 6966 2028 246c next;..}..if ($l │ │ │ -000033d0: 203d 7e20 2f5c 415c 732b 2f29 0a09 7b0a =~ /\A\s+/)..{. │ │ │ -000033e0: 0920 2020 2064 6965 2022 636f 6e74 696e . die "contin │ │ │ -000033f0: 7565 206c 696e 6520 7769 7468 206e 6f20 ue line with no │ │ │ -00003400: 6b65 7920 6174 206c 696e 6520 2469 3a5c key at line $i:\ │ │ │ -00003410: 6e3c 222c 0a09 2020 2020 2463 6f6e 6669 n<",.. $confi │ │ │ -00003420: 6746 696c 655b 2469 2d31 5d2c 2022 3e5c gFile[$i-1], ">\ │ │ │ -00003430: 6e22 2075 6e6c 6573 7320 2461 6374 4b65 n" unless $actKe │ │ │ -00003440: 793b 0a09 2020 2020 246b 6579 737b 2461 y;.. $keys{$a │ │ │ -00003450: 6374 4b65 797d 7b27 6c69 6e65 277d 202e ctKey}{'line'} . │ │ │ -00003460: 3d20 2720 2720 2e20 246c 3b0a 0a09 2020 = ' ' . $l;... │ │ │ -00003470: 2020 7072 696e 7420 4649 4c45 2022 246c print FILE "$l │ │ │ -00003480: 5c6e 220a 0909 6966 2024 7072 696e 744e \n"...if $printN │ │ │ -00003490: 6578 744c 696e 653b 0a09 7d0a 0965 6c73 extLine;..}..els │ │ │ -000034a0: 650a 097b 0a09 2020 2020 6d79 2028 2473 e..{.. my ($s │ │ │ -000034b0: 656d 6963 6f6c 6f6e 2c20 246b 6579 2c20 emicolon, $key, │ │ │ -000034c0: 246c 696e 6529 3b0a 0920 2020 2069 6620 $line);.. if │ │ │ -000034d0: 2828 2473 656d 6963 6f6c 6f6e 2c20 246b (($semicolon, $k │ │ │ -000034e0: 6579 2c20 246c 696e 6529 203d 2024 6c20 ey, $line) = $l │ │ │ -000034f0: 3d7e 202f 5c41 283b 3f29 282e 2b3f 295c =~ /\A(;?)(.+?)\ │ │ │ -00003500: 732a 3d5c 732a 282e 2a29 5c5a 2f29 0a09 s*=\s*(.*)\Z/).. │ │ │ -00003510: 2020 2020 7b0a 0909 2461 6374 4b65 7920 {...$actKey │ │ │ -00003520: 3d20 246b 6579 3b0a 0909 246b 6579 737b = $key;...$keys{ │ │ │ -00003530: 2461 6374 4b65 797d 7b27 6c69 6e65 277d $actKey}{'line'} │ │ │ -00003540: 203d 2024 6c69 6e65 3b0a 0909 246b 6579 = $line;...$key │ │ │ -00003550: 737b 2461 6374 4b65 797d 7b27 6c69 6e65 s{$actKey}{'line │ │ │ -00003560: 6e6f 277d 203d 2024 693b 0a0a 0909 6966 no'} = $i;....if │ │ │ -00003570: 2028 246b 6579 2065 7120 2762 6163 6b75 ($key eq 'backu │ │ │ -00003580: 7044 6972 2729 0a09 097b 0a09 0920 2020 pDir')...{... │ │ │ -00003590: 2024 7072 696e 744e 6578 744c 696e 6520 $printNextLine │ │ │ -000035a0: 3d20 313b 0a09 0920 2020 2070 7269 6e74 = 1;... print │ │ │ -000035b0: 2046 494c 4520 6a6f 696e 2822 5c6e 222c FILE join("\n", │ │ │ -000035c0: 2040 636f 6d6d 656e 7473 292c 0a09 0920 @comments),... │ │ │ -000035d0: 2020 2022 5c6e 246b 6579 3d5c 2224 7461 "\n$key=\"$ta │ │ │ -000035e0: 7267 6574 4469 725c 225c 6e5c 6e22 3b0a rgetDir\"\n\n";. │ │ │ -000035f0: 0909 2020 2020 2320 6d65 7267 6542 6163 .. # mergeBac │ │ │ -00003600: 6b75 7044 6972 0a09 0920 2020 2070 7269 kupDir... pri │ │ │ -00003610: 6e74 2046 494c 450a 0909 0922 2320 6261 nt FILE...."# ba │ │ │ -00003620: 636b 7570 4469 7220 666f 7220 6d65 7267 ckupDir for merg │ │ │ -00003630: 696e 6720 7468 6520 6261 636b 7570 7320 ing the backups │ │ │ -00003640: 6765 6e65 7261 7465 6420 696e 2022 2c0a generated in ",. │ │ │ -00003650: 0909 0922 6973 6f6c 6174 6564 206d 6f64 ..."isolated mod │ │ │ -00003660: 655c 6e23 206c 6174 6572 2069 6e20 6d61 e\n# later in ma │ │ │ -00003670: 696e 2062 6163 6b75 705c 6e22 2c0a 0909 in backup\n",... │ │ │ -00003680: 0922 6d65 7267 6542 6163 6b75 7044 6972 ."mergeBackupDir │ │ │ -00003690: 3d24 6c69 6e65 5c6e 223b 0a09 0920 2020 =$line\n";... │ │ │ -000036a0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -000036b0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -000036c0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ -000036d0: 0920 2020 2020 205b 2224 6765 6e65 7261 . ["$genera │ │ │ -000036e0: 7465 436f 6e66 6967 4669 6c65 3a20 6368 teConfigFile: ch │ │ │ -000036f0: 616e 6765 6420 3c62 6163 6b75 7044 6972 anged " .... " │ │ │ -00003710: 746f 2027 2474 6172 6765 7444 6972 2722 to '$targetDir'" │ │ │ -00003720: 2c0a 0909 2020 2020 2020 2224 6765 6e65 ,... "$gene │ │ │ -00003730: 7261 7465 436f 6e66 6967 4669 6c65 3a20 rateConfigFile: │ │ │ -00003740: 6372 6561 7465 6420 3c6d 6572 6765 4261 created " .... │ │ │ -00003760: 2020 2020 2020 2261 7320 2724 6c69 6e65 "as '$line │ │ │ -00003770: 2722 5d29 3b0a 0909 2020 2020 6465 6c65 '"]);... dele │ │ │ -00003780: 7465 2024 6368 6563 6b4b 6579 737b 246b te $checkKeys{$k │ │ │ -00003790: 6579 7d3b 0a09 097d 0a09 0965 6c73 6966 ey};...}...elsif │ │ │ -000037a0: 2028 246b 6579 2065 7120 276d 6572 6765 ($key eq 'merge │ │ │ -000037b0: 4261 636b 7570 4469 7227 290a 0909 7b0a BackupDir')...{. │ │ │ -000037c0: 0909 2020 2020 2470 7269 6e74 4e65 7874 .. $printNext │ │ │ -000037d0: 4c69 6e65 203d 2030 3b0a 0909 2020 2020 Line = 0;... │ │ │ -000037e0: 7072 696e 7420 4649 4c45 206a 6f69 6e28 print FILE join( │ │ │ -000037f0: 225c 6e22 2c20 4063 6f6d 6d65 6e74 7329 "\n", @comments) │ │ │ -00003800: 2c20 225c 6e3b 246b 6579 3d24 6c69 6e65 , "\n;$key=$line │ │ │ -00003810: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \n";... $prLo │ │ │ -00003820: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00003830: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... ' │ │ │ -00003840: 2d73 7472 2720 3d3e 0a20 2020 2020 2020 -str' =>. │ │ │ -00003850: 2020 0909 2020 5b22 2467 656e 6572 6174 .. ["$generat │ │ │ -00003860: 6543 6f6e 6669 6746 696c 653a 2064 6973 eConfigFile: dis │ │ │ -00003870: 6162 6c65 6420 6578 6973 7469 6e67 206b abled existing k │ │ │ -00003880: 6579 2024 6b65 793d 246c 696e 6522 5d29 ey $key=$line"]) │ │ │ -00003890: 0a09 0909 6966 2028 2473 656d 6963 6f6c ....if ($semicol │ │ │ -000038a0: 6f6e 2065 7120 273b 2729 3b0a 0909 7d0a on eq ';');...}. │ │ │ -000038b0: 0909 656c 7369 6620 2824 6b65 7920 6571 ..elsif ($key eq │ │ │ -000038c0: 2027 6f74 6865 7242 6163 6b75 7053 6572 'otherBackupSer │ │ │ -000038d0: 6965 7327 290a 0909 7b0a 0909 2020 2020 ies')...{... │ │ │ -000038e0: 2470 7269 6e74 4e65 7874 4c69 6e65 203d $printNextLine = │ │ │ -000038f0: 2030 3b0a 0909 2020 2020 7072 696e 7420 0;... print │ │ │ -00003900: 4649 4c45 206a 6f69 6e28 225c 6e22 2c20 FILE join("\n", │ │ │ -00003910: 4063 6f6d 6d65 6e74 7329 2c0a 0909 2020 @comments),... │ │ │ -00003920: 2020 225c 6e24 6b65 793d 303a 2473 6572 "\n$key=0:$ser │ │ │ -00003930: 6965 735c 6e22 3b0a 0909 2020 2020 2470 ies\n";... $p │ │ │ -00003940: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00003950: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',..... │ │ │ -00003960: 2020 272d 7374 7227 203d 3e0a 2020 2020 '-str' =>. │ │ │ -00003970: 2020 2020 2009 0920 205b 2224 6765 6e65 .. ["$gene │ │ │ -00003980: 7261 7465 436f 6e66 6967 4669 6c65 3a20 rateConfigFile: │ │ │ -00003990: 7365 7474 696e 6720 3c24 6b65 793e 2074 setting <$key> t │ │ │ -000039a0: 6f20 303a 2473 6572 6965 7322 5d29 3b0a o 0:$series"]);. │ │ │ -000039b0: 0909 7d09 2020 2020 2020 0a09 0965 6c73 ..}. ...els │ │ │ -000039c0: 6966 2028 246b 6579 2065 7120 276c 6174 if ($key eq 'lat │ │ │ -000039d0: 654c 696e 6b73 2729 0a09 097b 0a09 0920 eLinks')...{... │ │ │ -000039e0: 2020 2024 7072 696e 744e 6578 744c 696e $printNextLin │ │ │ -000039f0: 6520 3d20 313b 0a09 0920 2020 2070 7269 e = 1;... pri │ │ │ -00003a00: 6e74 2046 494c 4520 6a6f 696e 2822 5c6e nt FILE join("\n │ │ │ -00003a10: 222c 2040 636f 6d6d 656e 7473 292c 0a09 ", @comments),.. │ │ │ -00003a20: 0920 2020 2022 5c6e 246b 6579 3d79 6573 . "\n$key=yes │ │ │ -00003a30: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \n";... $prLo │ │ │ -00003a40: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00003a50: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... ' │ │ │ -00003a60: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -00003a70: 205b 2224 6765 6e65 7261 7465 436f 6e66 ["$generateConf │ │ │ -00003a80: 6967 4669 6c65 3a20 6368 616e 6765 6420 igFile: changed │ │ │ -00003a90: 3c24 6b65 793e 2074 6f20 2779 6573 2722 <$key> to 'yes'" │ │ │ -00003aa0: 5d29 0a09 0909 756e 6c65 7373 2024 6c61 ])....unless $la │ │ │ -00003ab0: 7465 4c69 6e6b 733b 0a09 0920 2020 2064 teLinks;... d │ │ │ -00003ac0: 656c 6574 6520 2463 6865 636b 4b65 7973 elete $checkKeys │ │ │ -00003ad0: 7b24 6b65 797d 3b0a 0909 7d0a 0909 656c {$key};...}...el │ │ │ -00003ae0: 7369 6620 2824 6b65 7920 6571 2027 6c61 sif ($key eq 'la │ │ │ -00003af0: 7465 436f 6d70 7265 7373 2729 0a09 097b teCompress')...{ │ │ │ -00003b00: 0a09 0920 2020 2024 7072 696e 744e 6578 ... $printNex │ │ │ -00003b10: 744c 696e 6520 3d20 313b 0a09 0920 2020 tLine = 1;... │ │ │ -00003b20: 2070 7269 6e74 2046 494c 4520 6a6f 696e print FILE join │ │ │ -00003b30: 2822 5c6e 222c 2040 636f 6d6d 656e 7473 ("\n", @comments │ │ │ -00003b40: 292c 0a09 0920 2020 2022 5c6e 2473 656d ),... "\n$sem │ │ │ -00003b50: 6963 6f6c 6f6e 246b 6579 3d24 6c69 6e65 icolon$key=$line │ │ │ -00003b60: 5c6e 223b 0a09 0920 2020 2024 7072 4c6f \n";... $prLo │ │ │ -00003b70: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00003b80: 203d 3e20 2749 272c 0a09 0909 0920 2027 => 'I',..... ' │ │ │ -00003b90: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -00003ba0: 205b 2224 6765 6e65 7261 7465 436f 6e66 ["$generateConf │ │ │ -00003bb0: 6967 4669 6c65 3a20 796f 7520 6d61 7920 igFile: you may │ │ │ -00003bc0: 7761 6e74 2074 6f20 6368 616e 6765 203c want to change < │ │ │ -00003bd0: 246b 6579 3e20 2220 2e0a 0909 2020 2020 $key> " .... │ │ │ -00003be0: 2020 2022 746f 2027 6e6f 2722 5d29 0a09 "to 'no'"]).. │ │ │ -00003bf0: 0909 6966 2024 6c61 7465 436f 6d70 7265 ..if $lateCompre │ │ │ -00003c00: 7373 3b0a 0909 7d0a 0909 656c 7369 6620 ss;...}...elsif │ │ │ -00003c10: 2824 6b65 7920 6571 2027 6b65 6570 4d69 ($key eq 'keepMi │ │ │ -00003c20: 6e4e 756d 6265 7227 290a 0909 7b0a 0909 nNumber')...{... │ │ │ -00003c30: 2020 2020 2470 7269 6e74 4e65 7874 4c69 $printNextLi │ │ │ -00003c40: 6e65 203d 2030 3b0a 0909 2020 2020 7072 ne = 0;... pr │ │ │ -00003c50: 696e 7420 4649 4c45 206a 6f69 6e28 225c int FILE join("\ │ │ │ -00003c60: 6e22 2c20 4063 6f6d 6d65 6e74 7329 2c0a n", @comments),. │ │ │ -00003c70: 0909 2020 2020 225c 6e24 6b65 793d 3939 .. "\n$key=99 │ │ │ -00003c80: 3939 395c 6e22 3b0a 0909 7d0a 0909 656c 999\n";...}...el │ │ │ -00003c90: 7369 6620 2824 6b65 7920 3d7e 202f 5c41 sif ($key =~ /\A │ │ │ -00003ca0: 6b65 6570 2f29 0a09 097b 0a09 0920 2020 keep/)...{... │ │ │ -00003cb0: 2024 7072 696e 744e 6578 744c 696e 6520 $printNextLine │ │ │ -00003cc0: 3d20 303b 0a09 0920 2020 2070 7269 6e74 = 0;... print │ │ │ -00003cd0: 2046 494c 4520 6a6f 696e 2822 5c6e 222c FILE join("\n", │ │ │ -00003ce0: 2040 636f 6d6d 656e 7473 292c 0a09 0920 @comments),... │ │ │ -00003cf0: 2020 2022 5c6e 3b24 6b65 793d 246c 696e "\n;$key=$lin │ │ │ -00003d00: 655c 6e22 3b0a 0909 7d0a 0909 656c 7365 e\n";...}...else │ │ │ -00003d10: 0a09 097b 0a09 0920 2020 2024 7072 696e ...{... $prin │ │ │ -00003d20: 744e 6578 744c 696e 6520 3d20 313b 0a09 tNextLine = 1;.. │ │ │ -00003d30: 0920 2020 2070 7269 6e74 2046 494c 4520 . print FILE │ │ │ -00003d40: 6a6f 696e 2822 5c6e 222c 2040 636f 6d6d join("\n", @comm │ │ │ -00003d50: 656e 7473 292c 2022 5c6e 2473 656d 6963 ents), "\n$semic │ │ │ -00003d60: 6f6c 6f6e 246b 6579 3d24 6c69 6e65 5c6e olon$key=$line\n │ │ │ -00003d70: 223b 0a09 097d 0a0a 0909 2840 636f 6d6d ";...}....(@comm │ │ │ -00003d80: 656e 7473 2920 3d20 2829 3b0a 0920 2020 ents) = ();.. │ │ │ -00003d90: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -00003da0: 2020 7b0a 0909 6469 6520 2263 616e 6e6f {...die "canno │ │ │ -00003db0: 7420 6964 656e 7469 6679 206c 696e 6520 t identify line │ │ │ -00003dc0: 2469 2069 6e20 6669 6c65 2024 636f 6e66 $i in file $conf │ │ │ -00003dd0: 6967 4669 6c65 3a5c 6e3c 222c 0a09 0924 igFile:\n<",...$ │ │ │ -00003de0: 636f 6e66 6967 4669 6c65 5b24 692d 315d configFile[$i-1] │ │ │ -00003df0: 2c20 223e 5c6e 223b 0a09 2020 2020 7d0a , ">\n";.. }. │ │ │ -00003e00: 097d 0a20 2020 207d 0a20 2020 2063 6c6f .}. }. clo │ │ │ -00003e10: 7365 2846 494c 4529 3b0a 0a20 2020 2024 se(FILE);.. $ │ │ │ -00003e20: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00003e30: 696e 6427 203d 3e20 2745 272c 0a09 0920 ind' => 'E',... │ │ │ -00003e40: 2027 2d73 7472 2720 3d3e 205b 2224 6765 '-str' => ["$ge │ │ │ -00003e50: 6e65 7261 7465 436f 6e66 6967 4669 6c65 nerateConfigFile │ │ │ -00003e60: 3a20 636f 756c 646e 2774 2066 696e 6420 : couldn't find │ │ │ -00003e70: 6b65 7928 7329 203c 2220 2e0a 0909 0920 key(s) <" ..... │ │ │ -00003e80: 2020 2020 6a6f 696e 2827 3e20 3c27 2c20 join('> <', │ │ │ -00003e90: 736f 7274 206b 6579 7320 2563 6865 636b sort keys %check │ │ │ -00003ea0: 4b65 7973 2920 2e20 223e 225d 2c0a 0909 Keys) . ">"],... │ │ │ -00003eb0: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ -00003ec0: 0969 6620 7363 616c 6172 286b 6579 7320 .if scalar(keys │ │ │ -00003ed0: 2563 6865 636b 4b65 7973 293b 0a7d 0a0a %checkKeys);.}.. │ │ │ -00003ee0: 0a23 0a23 2063 6f70 7920 6d61 696e 2073 .#.# copy main s │ │ │ -00003ef0: 7065 6369 616c 2066 696c 6573 2061 6e64 pecial files and │ │ │ -00003f00: 2064 6972 6563 746f 7279 2073 7472 7563 directory struc │ │ │ -00003f10: 7475 7265 0a23 0a75 6e6c 6573 7320 282d ture.#.unless (- │ │ │ -00003f20: 6420 2474 6172 6765 7453 6572 6965 7344 d $targetSeriesD │ │ │ -00003f30: 6972 290a 7b0a 2020 2020 2470 724c 6f67 ir).{. $prLog │ │ │ -00003f40: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00003f50: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ -00003f60: 7227 203d 3e20 5b22 6361 6e6e 6f74 2063 r' => ["cannot c │ │ │ -00003f70: 7265 6174 6520 6469 7265 6374 6f72 7920 reate directory │ │ │ -00003f80: 3c24 7461 7267 6574 5365 7269 6573 4469 <$targetSeriesDi │ │ │ -00003f90: 723e 225d 2c0a 0909 2020 272d 6578 6974 r>"],... '-exit │ │ │ -00003fa0: 2720 3d3e 2031 290a 0975 6e6c 6573 7320 ' => 1)..unless │ │ │ -00003fb0: 6d6b 6469 7220 2474 6172 6765 7453 6572 mkdir $targetSer │ │ │ -00003fc0: 6965 7344 6972 2c20 3037 3535 3b0a 7d0a iesDir, 0755;.}. │ │ │ -00003fd0: 0a24 6c61 7374 4261 636b 7570 4469 7220 .$lastBackupDir │ │ │ -00003fe0: 3d7e 206d 232e 2a2f 282e 2b29 233b 0a6d =~ m#.*/(.+)#;.m │ │ │ -00003ff0: 7920 2474 6172 6765 7442 6163 6b75 7044 y $targetBackupD │ │ │ -00004000: 6972 203d 2022 2474 6172 6765 7453 6572 ir = "$targetSer │ │ │ -00004010: 6965 7344 6972 2f24 3122 3b0a 6d6b 6469 iesDir/$1";.mkdi │ │ │ -00004020: 7220 2474 6172 6765 7442 6163 6b75 7044 r $targetBackupD │ │ │ -00004030: 6972 3b0a 0a24 7072 4c6f 672d 3e70 7269 ir;..$prLog->pri │ │ │ -00004040: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00004050: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -00004060: 203d 3e20 5b22 6372 6561 7465 6420 6469 => ["created di │ │ │ -00004070: 7265 6374 6f72 7920 3c24 7461 7267 6574 rectory <$target │ │ │ -00004080: 4261 636b 7570 4469 723e 225d 290a 2020 BackupDir>"]). │ │ │ -00004090: 2020 6966 2024 7665 7262 6f73 653b 0a0a if $verbose;.. │ │ │ -000040a0: 263a 3a63 6f70 7953 7462 7553 7065 6369 &::copyStbuSpeci │ │ │ -000040b0: 616c 4669 6c65 7328 246c 6173 7442 6163 alFiles($lastBac │ │ │ -000040c0: 6b75 7044 6972 2c20 2474 6172 6765 7442 kupDir, $targetB │ │ │ -000040d0: 6163 6b75 7044 6972 2c20 2470 724c 6f67 ackupDir, $prLog │ │ │ -000040e0: 2c20 2476 6572 626f 7365 2c0a 0909 0927 , $verbose,....' │ │ │ -000040f0: 2f74 6d70 2729 3b0a 0a24 7072 4c6f 672d /tmp');..$prLog- │ │ │ -00004100: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00004110: 3e20 2749 272c 0a09 2020 2020 2020 272d > 'I',.. '- │ │ │ -00004120: 7374 7227 203d 3e0a 0920 2020 2020 205b str' =>.. [ │ │ │ -00004130: 2279 6f75 206d 6179 2077 616e 7420 746f "you may want to │ │ │ -00004140: 2061 646a 7573 7420 3c24 6765 6e65 7261 adjust <$genera │ │ │ -00004150: 7465 436f 6e66 6967 4669 6c65 3e20 746f teConfigFile> to │ │ │ -00004160: 2079 6f75 7220 6e65 6564 7322 5d29 0a20 your needs"]). │ │ │ -00004170: 2020 2069 6620 2824 636f 6e66 6967 4669 if ($configFi │ │ │ -00004180: 6c65 2061 6e64 206e 6f74 2024 7573 654f le and not $useO │ │ │ -00004190: 6c64 436f 6e66 6967 293b 0a0a 0a65 7869 ldConfig);...exi │ │ │ -000041a0: 7420 303b 0a0a t 0;.. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7053 6574 7570 4973 6f6c 6174 6564 4d6f pSetupIsolatedMo │ │ │ +00000040: 6465 0a de. │ │ ├── ./usr/bin/storeBackupUpdateBackup │ │ │ @@ -1,3719 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 382d 3230 3229 0a23 2020 2020 2020 2020 8-202).# │ │ │ -00000050: 2020 2020 2020 2020 2068 6a63 6c61 6573 hjclaes │ │ │ -00000060: 4077 6562 2e64 650a 230a 2320 2020 5468 @web.de.#.# Th │ │ │ -00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ -00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ -00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ -000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ -000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ -000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ -000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ -000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ -000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ -00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ -00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ -00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ -00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ -00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ -00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ -00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ -00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ -00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ -00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ -000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ -000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ -000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ -000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ -000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ -000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ -00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ -00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ -00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ -00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ -00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ -00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ -00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ -00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ -00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ -00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ -000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ -000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ -000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#...use P │ │ │ -00000300: 4f53 4958 3b0a 7573 6520 7374 7269 6374 OSIX;.use strict │ │ │ -00000310: 3b0a 7573 6520 7761 726e 696e 6773 3b0a ;.use warnings;. │ │ │ -00000320: 0a75 7365 2046 636e 746c 2071 7728 4f5f .use Fcntl qw(O_ │ │ │ -00000330: 5244 5752 204f 5f43 5245 4154 293b 0a75 RDWR O_CREAT);.u │ │ │ -00000340: 7365 2050 4f53 4958 3b0a 0a24 6d61 696e se POSIX;..$main │ │ │ -00000350: 3a3a 5354 4f52 4542 4143 4b55 5056 4552 ::STOREBACKUPVER │ │ │ -00000360: 5349 4f4e 203d 2075 6e64 6566 3b0a 0a0a SION = undef;... │ │ │ -00000370: 7375 6220 6c69 6250 6174 680a 7b0a 2020 sub libPath.{. │ │ │ -00000380: 2020 6d79 2024 6669 6c65 203d 2073 6869 my $file = shi │ │ │ -00000390: 6674 3b0a 0a20 2020 206d 7920 2464 6972 ft;.. my $dir │ │ │ -000003a0: 3b0a 0a20 2020 2023 2046 616c 6c73 2044 ;.. # Falls D │ │ │ -000003b0: 6174 6569 2073 656c 6273 7420 6569 6e20 atei selbst ein │ │ │ -000003c0: 7379 6d6c 696e 6b20 6973 742c 2073 6f6c symlink ist, sol │ │ │ -000003d0: 616e 6765 2066 6f6c 6765 6e2c 2062 6973 ange folgen, bis │ │ │ -000003e0: 2061 7566 6765 6cf6 7374 0a20 2020 2069 aufgel.st. i │ │ │ -000003f0: 6620 282d 6620 2466 696c 6529 0a20 2020 f (-f $file). │ │ │ -00000400: 207b 0a09 7768 696c 6520 282d 6c20 2466 {..while (-l $f │ │ │ -00000410: 696c 6529 0a09 7b0a 0920 2020 206d 7920 ile)..{.. my │ │ │ -00000420: 246c 696e 6b20 3d20 7265 6164 6c69 6e6b $link = readlink │ │ │ -00000430: 2824 6669 6c65 293b 0a0a 0920 2020 2069 ($file);... i │ │ │ -00000440: 6620 2873 7562 7374 7228 246c 696e 6b2c f (substr($link, │ │ │ -00000450: 2030 2c20 3129 206e 6520 222f 2229 0a09 0, 1) ne "/").. │ │ │ -00000460: 2020 2020 7b0a 0909 2466 696c 6520 3d7e {...$file =~ │ │ │ -00000470: 2073 2f5b 5e5c 2f5d 2b24 2f24 6c69 6e6b s/[^\/]+$/$link │ │ │ -00000480: 2f3b 0a09 2020 2020 7d0a 0920 2020 2065 /;.. }.. e │ │ │ -00000490: 6c73 650a 0920 2020 207b 0a09 0924 6669 lse.. {...$fi │ │ │ -000004a0: 6c65 203d 2024 6c69 6e6b 3b0a 0920 2020 le = $link;.. │ │ │ -000004b0: 207d 0a09 7d0a 0a09 2824 6469 722c 2024 }..}...($dir, $ │ │ │ -000004c0: 6669 6c65 2920 3d20 2673 706c 6974 4669 file) = &splitFi │ │ │ -000004d0: 6c65 4469 7228 2466 696c 6529 3b0a 0924 leDir($file);..$ │ │ │ -000004e0: 6669 6c65 203d 2022 2f24 6669 6c65 223b file = "/$file"; │ │ │ -000004f0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -00000500: 2020 2020 7b0a 0970 7269 6e74 2053 5444 {..print STD │ │ │ -00000510: 4552 5220 223c 2466 696c 653e 2064 6f65 ERR "<$file> doe │ │ │ -00000520: 7320 6e6f 7420 6578 6973 7421 5c6e 223b s not exist!\n"; │ │ │ -00000530: 0a09 6578 6974 2031 3b0a 2020 2020 7d0a ..exit 1;. }. │ │ │ -00000540: 0a20 2020 2024 6469 7220 2e3d 2022 2f2e . $dir .= "/. │ │ │ -00000550: 2e2f 6c69 6222 3b20 2020 2020 2020 2020 ./lib"; │ │ │ -00000560: 2020 2320 5066 6164 207a 7520 6465 6e20 # Pfad zu den │ │ │ -00000570: 4269 626c 696f 7468 656b 656e 0a20 2020 Bibliotheken. │ │ │ -00000580: 206d 7920 246f 6c64 4469 7220 3d20 602f my $oldDir = `/ │ │ │ -00000590: 6269 6e2f 7077 6460 3b0a 2020 2020 6368 bin/pwd`;. ch │ │ │ -000005a0: 6f6d 7020 246f 6c64 4469 723b 0a20 2020 omp $oldDir;. │ │ │ -000005b0: 2069 6620 2863 6864 6972 2024 6469 7229 if (chdir $dir) │ │ │ -000005c0: 0a20 2020 207b 0a09 6d79 2024 6162 7344 . {..my $absD │ │ │ -000005d0: 6972 203d 2060 2f62 696e 2f70 7764 603b ir = `/bin/pwd`; │ │ │ -000005e0: 0a09 6368 6f70 2024 6162 7344 6972 3b0a ..chop $absDir;. │ │ │ -000005f0: 0963 6864 6972 2024 6f6c 6444 6972 3b0a .chdir $oldDir;. │ │ │ -00000600: 0a09 7265 7475 726e 2028 2673 706c 6974 ..return (&split │ │ │ -00000610: 4669 6c65 4469 7228 2224 6162 7344 6972 FileDir("$absDir │ │ │ -00000620: 2466 696c 6522 2929 3b0a 2020 2020 7d0a $file"));. }. │ │ │ -00000630: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ -00000640: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR "<$ │ │ │ -00000650: 6469 723e 2064 6f65 7320 6e6f 7420 6578 dir> does not ex │ │ │ -00000660: 6973 742c 2065 7869 7469 6e67 5c6e 223b ist, exiting\n"; │ │ │ -00000670: 0a20 2020 207d 0a7d 0a73 7562 2073 706c . }.}.sub spl │ │ │ -00000680: 6974 4669 6c65 4469 720a 7b0a 2020 2020 itFileDir.{. │ │ │ -00000690: 6d79 2024 6e61 6d65 203d 2073 6869 6674 my $name = shift │ │ │ -000006a0: 3b0a 0a20 2020 2072 6574 7572 6e20 2827 ;.. return (' │ │ │ -000006b0: 2e27 2c20 246e 616d 6529 2075 6e6c 6573 .', $name) unles │ │ │ -000006c0: 7320 2824 6e61 6d65 203d 7e2f 5c2f 2f29 s ($name =~/\//) │ │ │ -000006d0: 3b20 2020 2023 206e 7572 2065 696e 6661 ; # nur einfa │ │ │ -000006e0: 6368 6572 2044 6174 6569 6e61 6d65 0a0a cher Dateiname.. │ │ │ -000006f0: 2020 2020 6d79 2028 2464 6972 2c20 2466 my ($dir, $f │ │ │ -00000700: 696c 6529 203d 2024 6e61 6d65 203d 7e20 ile) = $name =~ │ │ │ -00000710: 2f5e 282e 2a29 5c2f 282e 2a29 242f 733b /^(.*)\/(.*)$/s; │ │ │ -00000720: 0a20 2020 2024 6469 7220 3d20 272f 2720 . $dir = '/' │ │ │ -00000730: 6966 2028 2464 6972 2065 7120 2727 293b if ($dir eq ''); │ │ │ -00000740: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000750: 2020 2023 2067 696c 742c 2066 616c 6c73 # gilt, falls │ │ │ -00000760: 207a 2e42 2e20 2f66 696c 656e 616d 650a z.B. /filename. │ │ │ -00000770: 2020 2020 7265 7475 726e 2028 2464 6972 return ($dir │ │ │ -00000780: 2c20 2466 696c 6529 3b0a 7d0a 6d79 2028 , $file);.}.my ( │ │ │ -00000790: 2472 6571 2c20 2470 726f 6729 203d 2026 $req, $prog) = & │ │ │ -000007a0: 6c69 6250 6174 6828 2430 293b 0a75 6e73 libPath($0);.uns │ │ │ -000007b0: 6869 6674 2040 494e 432c 2022 2472 6571 hift @INC, "$req │ │ │ -000007c0: 223b 0a0a 7265 7175 6972 6520 2773 746f ";..require 'sto │ │ │ -000007d0: 7265 4261 636b 7570 4c69 622e 706c 273b reBackupLib.pl'; │ │ │ -000007e0: 0a72 6571 7569 7265 2027 6368 6563 6b50 .require 'checkP │ │ │ -000007f0: 6172 616d 322e 706c 273b 0a72 6571 7569 aram2.pl';.requi │ │ │ -00000800: 7265 2027 6368 6563 6b4f 626a 5061 722e re 'checkObjPar. │ │ │ -00000810: 706c 273b 0a72 6571 7569 7265 2027 7072 pl';.require 'pr │ │ │ -00000820: 4c6f 672e 706c 273b 0a72 6571 7569 7265 Log.pl';.require │ │ │ -00000830: 2027 7665 7273 696f 6e2e 706c 273b 0a72 'version.pl';.r │ │ │ -00000840: 6571 7569 7265 2027 6461 7465 546f 6f6c equire 'dateTool │ │ │ -00000850: 732e 706c 273b 0a72 6571 7569 7265 2027 s.pl';.require ' │ │ │ -00000860: 6669 6c65 4469 722e 706c 273b 0a72 6571 fileDir.pl';.req │ │ │ -00000870: 7569 7265 2027 6875 6d61 6e52 6561 642e uire 'humanRead. │ │ │ -00000880: 706c 273b 0a0a 6d79 2024 6c6f 636b 4669 pl';..my $lockFi │ │ │ -00000890: 6c65 203d 2028 2445 4e56 7b27 5553 4552 le = ($ENV{'USER │ │ │ -000008a0: 277d 2065 7120 2772 6f6f 7427 2920 3f20 '} eq 'root') ? │ │ │ -000008b0: 2020 2020 2320 6465 6661 756c 7420 7661 # default va │ │ │ -000008c0: 6c75 650a 0909 272f 7661 722f 6c6f 636b lue...'/var/lock │ │ │ -000008d0: 2f73 746f 7265 4261 636b 7570 2e6c 6f63 /storeBackup.loc │ │ │ -000008e0: 6b27 203a 0a09 0924 454e 567b 2748 4f4d k' :...$ENV{'HOM │ │ │ -000008f0: 4527 7d20 2e20 272f 7374 6f72 6542 6163 E'} . '/storeBac │ │ │ -00000900: 6b75 702e 6c6f 636b 273b 0a6d 7920 2463 kup.lock';.my $c │ │ │ -00000910: 6865 636b 5375 6d46 696c 6520 3d20 272e heckSumFile = '. │ │ │ -00000920: 6d64 3543 6865 636b 5375 6d73 273b 0a6d md5CheckSums';.m │ │ │ -00000930: 7920 2462 6c6f 636b 4368 6563 6b53 756d y $blockCheckSum │ │ │ -00000940: 4669 6c65 203d 2027 2e6d 6435 426c 6f63 File = '.md5Bloc │ │ │ -00000950: 6b43 6865 636b 5375 6d73 273b 0a6d 7920 kCheckSums';.my │ │ │ -00000960: 2462 6173 6554 7265 6543 6f6e 6620 3d20 $baseTreeConf = │ │ │ -00000970: 2273 746f 7265 4261 636b 7570 4261 7365 "storeBackupBase │ │ │ -00000980: 5472 6565 2e63 6f6e 6622 3b0a 6d79 2024 Tree.conf";.my $ │ │ │ -00000990: 6465 6c74 6143 6163 6865 436f 6e66 203d deltaCacheConf = │ │ │ -000009a0: 2022 6465 6c74 6143 6163 6865 2e63 6f6e "deltaCache.con │ │ │ -000009b0: 6622 3b0a 6d79 2024 7042 203d 2027 7072 f";.my $pB = 'pr │ │ │ -000009c0: 6f63 6573 7365 6442 6163 6b75 7073 273b ocessedBackups'; │ │ │ -000009d0: 0a6d 7920 2461 7263 6869 7665 4475 7261 .my $archiveDura │ │ │ -000009e0: 7469 6f6e 4465 6c74 6143 6163 6865 203d tionDeltaCache = │ │ │ -000009f0: 2027 3939 6427 3b0a 6d79 2024 6175 746f '99d';.my $auto │ │ │ -00000a00: 7265 7061 6972 4572 726f 7220 3d20 313b repairError = 1; │ │ │ -00000a10: 0a0a 3d68 6561 6431 204e 414d 450a 0a73 ..=head1 NAME..s │ │ │ -00000a20: 746f 7265 4261 636b 7570 5570 6461 7465 toreBackupUpdate │ │ │ -00000a30: 4261 636b 7570 2e70 6c20 2d20 7570 6461 Backup.pl - upda │ │ │ -00000a40: 7465 7320 2f20 6669 6e61 6c69 7a65 7320 tes / finalizes │ │ │ -00000a50: 6261 636b 7570 7320 6372 6561 7465 6420 backups created │ │ │ -00000a60: 6279 2073 746f 7265 4261 636b 7570 2e70 by storeBackup.p │ │ │ -00000a70: 6c20 7769 7468 206f 7074 696f 6e20 2d2d l with option -- │ │ │ -00000a80: 6c61 7465 4c69 6e6b 2c20 2d2d 6c61 7465 lateLink, --late │ │ │ -00000a90: 436f 6d70 7265 7373 0a0a 3d68 6561 6431 Compress..=head1 │ │ │ -00000aa0: 2053 594e 4f50 5349 530a 0a09 7374 6f72 SYNOPSIS...stor │ │ │ -00000ab0: 6542 6163 6b75 7055 7064 6174 6542 6163 eBackupUpdateBac │ │ │ -00000ac0: 6b75 702e 706c 202d 6220 6261 636b 7570 kup.pl -b backup │ │ │ -00000ad0: 4469 7265 6374 6f72 7920 5b2d 2d61 7574 Directory [--aut │ │ │ -00000ae0: 6f72 6570 6169 725d 0a09 2020 2020 2020 orepair].. │ │ │ -00000af0: 5b2d 2d70 7269 6e74 5d20 5b2d 2d76 6572 [--print] [--ver │ │ │ -00000b00: 626f 7365 5d20 5b2d 2d64 6562 7567 5d20 bose] [--debug] │ │ │ -00000b10: 5b2d 2d6c 6f63 6b46 696c 655d 205b 2d2d [--lockFile] [-- │ │ │ -00000b20: 6e6f 436f 6d70 7265 7373 5d0a 0920 2020 noCompress].. │ │ │ -00000b30: 2020 205b 2d2d 7072 6f67 7265 7373 5265 [--progressRe │ │ │ -00000b40: 706f 7274 206e 756d 6265 725d 205b 2d2d port number] [-- │ │ │ -00000b50: 6368 6563 6b4f 6e6c 795d 205b 2d2d 636f checkOnly] [--co │ │ │ -00000b60: 7079 4261 636b 7570 4f6e 6c79 5d0a 0920 pyBackupOnly].. │ │ │ -00000b70: 2020 2020 205b 2d2d 646f 6e74 436f 7079 [--dontCopy │ │ │ -00000b80: 4261 636b 7570 5d20 5b2d 4120 6172 6368 Backup] [-A arch │ │ │ -00000b90: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta │ │ │ -00000ba0: 4361 6368 655d 0a09 2020 2020 2020 5b2d Cache].. [- │ │ │ -00000bb0: 2d64 6f6e 7444 656c 496e 4465 6c74 6143 -dontDelInDeltaC │ │ │ -00000bc0: 6163 6865 5d20 5b2d 2d63 7265 6174 654e ache] [--createN │ │ │ -00000bd0: 6577 5365 7269 6573 5d0a 0920 2020 2020 ewSeries].. │ │ │ -00000be0: 205b 2d2d 6e6f 5761 726e 696e 6744 6966 [--noWarningDif │ │ │ -00000bf0: 6653 6572 6965 7349 6e42 6163 6b75 7043 fSeriesInBackupC │ │ │ -00000c00: 6f70 795d 205b 2d2d 6d61 7848 6172 644c opy] [--maxHardL │ │ │ -00000c10: 696e 6b73 5d0a 0920 2020 2020 205b 2d2d inks].. [-- │ │ │ -00000c20: 6c6f 6746 696c 650a 0920 2020 2020 2020 logFile.. │ │ │ -00000c30: 5b2d 2d70 6c75 734c 6f67 5374 646f 7574 [--plusLogStdout │ │ │ -00000c40: 5d20 5b2d 2d73 7570 7072 6573 7354 696d ] [--suppressTim │ │ │ -00000c50: 655d 205b 2d6d 206d 6178 4669 6c65 6c65 e] [-m maxFilele │ │ │ -00000c60: 6e5d 0a09 2020 2020 2020 205b 5b2d 6e20 n].. [[-n │ │ │ -00000c70: 6e6f 4f66 4f6c 6446 696c 6573 5d20 7c20 noOfOldFiles] | │ │ │ -00000c80: 5b2d 2d73 6176 654c 6f67 735d 5d0a 0920 [--saveLogs]].. │ │ │ -00000c90: 2020 2020 2020 5b2d 2d63 6f6d 7072 6573 [--compres │ │ │ -00000ca0: 7357 6974 6820 636f 6d70 7265 7373 7072 sWith compresspr │ │ │ -00000cb0: 6f67 5d5d 0a0a 0973 746f 7265 4261 636b og]]...storeBack │ │ │ -00000cc0: 7570 5570 6461 7465 4261 636b 7570 2e70 upUpdateBackup.p │ │ │ -00000cd0: 6c20 2d2d 696e 7465 7261 6374 6976 6520 l --interactive │ │ │ -00000ce0: 2d2d 6261 636b 7570 4469 7220 746f 704c --backupDir topL │ │ │ -00000cf0: 6576 6c44 6972 0a09 2020 2020 2020 5b2d evlDir.. [- │ │ │ -00000d00: 2d61 7574 6f72 6570 6169 725d 205b 2d2d -autorepair] [-- │ │ │ -00000d10: 7072 696e 745d 0a0a 0973 746f 7265 4261 print]...storeBa │ │ │ -00000d20: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup │ │ │ -00000d30: 2e70 6c20 2d2d 6765 6e42 6163 6b75 7042 .pl --genBackupB │ │ │ -00000d40: 6173 6554 7265 6543 6f6e 6620 6469 7265 aseTreeConf dire │ │ │ -00000d50: 6374 6f72 790a 0a09 7374 6f72 6542 6163 ctory...storeBac │ │ │ -00000d60: 6b75 7055 7064 6174 6542 6163 6b75 702e kupUpdateBackup. │ │ │ -00000d70: 706c 202d 2d67 656e 4465 6c74 6143 6163 pl --genDeltaCac │ │ │ -00000d80: 6865 436f 6e66 2064 6972 6563 746f 7279 heConf directory │ │ │ -00000d90: 0a0a 3d68 6561 6431 2057 4152 4e49 4e47 ..=head1 WARNING │ │ │ -00000da0: 0a0a 2020 2121 2120 5553 4147 4520 494e .. !!! USAGE IN │ │ │ -00000db0: 2050 4152 414c 4c45 4c20 5749 5448 2073 PARALLEL WITH s │ │ │ -00000dc0: 746f 7265 4261 636b 7570 2e70 6c20 4341 toreBackup.pl CA │ │ │ -00000dd0: 4e20 4445 5354 524f 5920 594f 5552 2042 N DESTROY YOUR B │ │ │ -00000de0: 4143 4b55 5053 2021 2121 0a0a 3d68 6561 ACKUPS !!!..=hea │ │ │ -00000df0: 6431 204f 5054 494f 4e53 0a0a 3d6f 7665 d1 OPTIONS..=ove │ │ │ -00000e00: 7220 380a 0a3d 6974 656d 2042 3c2d 2d69 r 8..=item B<--i │ │ │ -00000e10: 6e74 6572 6163 7469 7665 3e2c 2042 3c2d nteractive>, B<- │ │ │ -00000e20: 693e 0a0a 2020 2020 696e 7465 7261 6374 i>.. interact │ │ │ -00000e30: 6976 6520 6d6f 6465 2066 6f72 2072 6570 ive mode for rep │ │ │ -00000e40: 6172 696e 6720 2f20 6465 6c65 7469 6e67 aring / deleting │ │ │ -00000e50: 2063 7572 7275 7074 6564 0a20 2020 2062 currupted. b │ │ │ -00000e60: 6163 6b75 7073 2063 7265 6174 6564 2077 ackups created w │ │ │ -00000e70: 6974 6820 6f70 7469 6f6e 2027 2d2d 6c61 ith option '--la │ │ │ -00000e80: 7465 4c69 6e6b 7327 0a0a 3d69 7465 6d20 teLinks'..=item │ │ │ -00000e90: 423c 2d2d 6261 636b 7570 4469 723e 2c20 B<--backupDir>, │ │ │ -00000ea0: 423c 2d62 3e0a 0a20 2020 2074 6f70 206c B<-b>.. top l │ │ │ -00000eb0: 6576 656c 2064 6972 6563 746f 7279 206f evel directory o │ │ │ -00000ec0: 6620 616c 6c20 6261 636b 7570 7320 286d f all backups (m │ │ │ -00000ed0: 7573 7420 6578 6973 7429 0a0a 3d69 7465 ust exist)..=ite │ │ │ -00000ee0: 6d20 423c 2d2d 6175 746f 7265 7061 6972 m B<--autorepair │ │ │ -00000ef0: 3e2c 2042 3c2d 613e 0a0a 2020 2020 7265 >, B<-a>.. re │ │ │ -00000f00: 7061 6972 2073 696d 706c 6520 696e 636f pair simple inco │ │ │ -00000f10: 6e73 6973 7465 6e63 6965 7320 6175 746f nsistencies auto │ │ │ -00000f20: 6d61 7469 6361 6c6c 7920 7769 7468 6f75 matically withou │ │ │ -00000f30: 740a 2020 2020 7265 7175 6573 7469 6e67 t. requesting │ │ │ -00000f40: 2074 6865 2061 6374 696f 6e0a 0a3d 6974 the action..=it │ │ │ -00000f50: 656d 2042 3c2d 2d70 7269 6e74 3e0a 0a20 em B<--print>.. │ │ │ -00000f60: 2020 2070 7269 6e74 2063 6f6e 6669 6775 print configu │ │ │ -00000f70: 7261 7469 6f6e 2072 6561 6420 6672 6f6d ration read from │ │ │ -00000f80: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f │ │ │ -00000f90: 696c 6520 616e 6420 7374 6f70 0a0a 3d69 ile and stop..=i │ │ │ -00000fa0: 7465 6d20 423c 2d2d 7665 7262 6f73 653e tem B<--verbose> │ │ │ -00000fb0: 2c20 423c 2d76 3e0a 0a20 2020 2076 6572 , B<-v>.. ver │ │ │ -00000fc0: 626f 7365 206d 6573 7361 6765 730a 0a3d bose messages..= │ │ │ -00000fd0: 6974 656d 2042 3c2d 2d64 6562 7567 3e2c item B<--debug>, │ │ │ -00000fe0: 2042 3c2d 643e 0a0a 2020 2020 6765 6e65 B<-d>.. gene │ │ │ -00000ff0: 7261 7465 2064 6574 6169 6c65 6420 696e rate detailed in │ │ │ -00001000: 666f 726d 6174 696f 6e20 6162 6f75 7420 formation about │ │ │ -00001010: 7468 6520 6669 6c65 730a 2020 2020 7769 the files. wi │ │ │ -00001020: 7468 2074 6865 206c 696e 6b69 6e67 2069 th the linking i │ │ │ -00001030: 6e66 6f72 6d61 7469 6f6e 2069 6e20 6974 nformation in it │ │ │ -00001040: 0a0a 3d69 7465 6d20 423c 2d2d 6c6f 636b ..=item B<--lock │ │ │ -00001050: 4669 6c65 3e2c 2042 3c2d 4c3e 0a0a 2020 File>, B<-L>.. │ │ │ -00001060: 2020 6c6f 636b 2066 696c 652c 2069 6620 lock file, if │ │ │ -00001070: 6578 6973 742c 206e 6577 2069 6e73 7461 exist, new insta │ │ │ -00001080: 6e63 6573 2077 696c 6c20 6669 6e69 7368 nces will finish │ │ │ -00001090: 2069 660a 2020 2020 616e 206f 6c64 2069 if. an old i │ │ │ -000010a0: 7320 616c 7265 6164 7920 7275 6e6e 696e s already runnin │ │ │ -000010b0: 670a 2020 2020 4966 2073 6574 2074 6f20 g. If set to │ │ │ -000010c0: 7468 6520 7361 6d65 2066 696c 6520 6173 the same file as │ │ │ -000010d0: 2069 6e20 7374 6f72 6542 6163 6b75 7020 in storeBackup │ │ │ -000010e0: 6974 2077 696c 6c0a 2020 2020 7072 6576 it will. prev │ │ │ -000010f0: 656e 7420 2470 726f 6720 6672 6f6d 2072 ent $prog from r │ │ │ -00001100: 756e 6e69 6e67 2069 6e20 7061 7261 6c6c unning in parall │ │ │ -00001110: 656c 0a20 2020 2074 6f20 7374 6f72 6542 el. to storeB │ │ │ -00001120: 6163 6b75 702c 2064 6566 6175 6c74 2069 ackup, default i │ │ │ -00001130: 7320 246c 6f63 6b46 696c 650a 2020 2020 s $lockFile. │ │ │ -00001140: 7468 6973 2074 7970 6520 6f66 206c 6f63 this type of loc │ │ │ -00001150: 6b20 6669 6c65 7320 646f 6573 206e 6f74 k files does not │ │ │ -00001160: 2077 6f72 6b20 6163 726f 7373 206d 756c work across mul │ │ │ -00001170: 7469 706c 6520 7365 7276 6572 730a 2020 tiple servers. │ │ │ -00001180: 2020 616e 6420 6973 206e 6f74 2064 6573 and is not des │ │ │ -00001190: 6967 6e65 6420 746f 2073 6570 6172 6174 igned to separat │ │ │ -000011a0: 6520 7374 6f72 6542 6163 6b75 702e 706c e storeBackup.pl │ │ │ -000011b0: 2061 6e64 0a20 2020 2073 746f 7265 4261 and. storeBa │ │ │ -000011c0: 636b 7570 5570 6461 7465 4261 636b 7570 ckupUpdateBackup │ │ │ -000011d0: 2e70 6c20 6f72 2061 6e79 206f 7468 6572 .pl or any other │ │ │ -000011e0: 2073 746f 7265 4261 636b 7570 0a20 2020 storeBackup. │ │ │ -000011f0: 2070 726f 6365 7373 2069 6e20 6120 7365 process in a se │ │ │ -00001200: 7061 7261 7465 2050 4944 2073 7061 6365 parate PID space │ │ │ -00001210: 0a20 2020 2044 6566 6175 6c74 206c 6f63 . Default loc │ │ │ -00001220: 6b20 6669 6c65 2066 6f72 2072 6f6f 7420 k file for root │ │ │ -00001230: 6973 2069 6e20 2f76 6172 2f6c 6f63 6b2c is in /var/lock, │ │ │ -00001240: 2066 6f72 206f 7468 6572 7320 696e 205c for others in \ │ │ │ -00001250: 2448 4f4d 450a 0a3d 6974 656d 2042 3c2d $HOME..=item B<- │ │ │ -00001260: 2d6e 6f43 6f6d 7072 6573 733e 0a0a 2020 -noCompress>.. │ │ │ -00001270: 2020 6d61 7869 6d61 6c20 6e75 6d62 6572 maximal number │ │ │ -00001280: 206f 6620 7061 7261 6c6c 656c 2063 6f6d of parallel com │ │ │ -00001290: 7072 6573 7320 6f70 6572 6174 696f 6e73 press operations │ │ │ -000012a0: 2c0a 2020 2020 6465 6661 756c 7420 3d20 ,. default = │ │ │ -000012b0: 6368 6f73 656e 2061 7574 6f6d 6174 6963 chosen automatic │ │ │ -000012c0: 616c 6c79 0a0a 3d69 7465 6d20 423c 2d2d ally..=item B<-- │ │ │ -000012d0: 6368 6563 6b4f 6e6c 793e 2042 3c2d 633e checkOnly> B<-c> │ │ │ -000012e0: 0a0a 2020 2020 646f 206e 6f74 2070 6572 .. do not per │ │ │ -000012f0: 666f 726d 2061 6e79 2061 6374 696f 6e2c form any action, │ │ │ -00001300: 206f 6e6c 7920 6368 6563 6b20 636f 6e73 only check cons │ │ │ -00001310: 6973 7465 6e63 790a 0a3d 6974 656d 2042 istency..=item B │ │ │ -00001320: 3c2d 2d63 6f70 7942 6163 6b75 704f 6e6c <--copyBackupOnl │ │ │ -00001330: 793e 0a0a 2020 2020 6f6e 6c79 2064 6f20 y>.. only do │ │ │ -00001340: 7461 736b 2074 6f20 7265 706c 6963 6174 task to replicat │ │ │ -00001350: 6520 696e 6372 656d 656e 7461 6c20 286c e incremental (l │ │ │ -00001360: 6174 654c 696e 6b73 290a 2020 2020 6261 ateLinks). ba │ │ │ -00001370: 636b 7570 3b20 6e6f 2068 6172 6420 6c69 ckup; no hard li │ │ │ -00001380: 6e6b 696e 672c 2063 6f6d 7072 6573 7369 nking, compressi │ │ │ -00001390: 6f6e 2c20 6574 632e 0a0a 3d69 7465 6d20 on, etc...=item │ │ │ -000013a0: 423c 2d2d 646f 6e74 436f 7079 4261 636b B<--dontCopyBack │ │ │ -000013b0: 7570 3e0a 0a20 2020 2064 6f20 6e6f 7420 up>.. do not │ │ │ -000013c0: 646f 2061 6e79 2072 6570 6c69 6361 7469 do any replicati │ │ │ -000013d0: 6f6e 2074 6173 6b20 746f 2063 6f70 790a on task to copy. │ │ │ -000013e0: 2020 2020 696e 6372 656d 656e 7461 6c20 incremental │ │ │ -000013f0: 286c 6174 654c 696e 6b29 2062 6163 6b75 (lateLink) backu │ │ │ -00001400: 7073 0a20 2020 204e 4f54 453a 2069 6620 ps. NOTE: if │ │ │ -00001410: 7573 6564 206f 6e20 7468 6520 6d61 7374 used on the mast │ │ │ -00001420: 6572 2063 6163 6865 2c20 7468 6973 206f er cache, this o │ │ │ -00001430: 7074 696f 6e20 6469 7372 7570 7473 2074 ption disrupts t │ │ │ -00001440: 6865 2064 6174 610a 2020 2020 666c 6f77 he data. flow │ │ │ -00001450: 2066 6f72 2072 6570 6c69 6361 7469 6f6e for replication │ │ │ -00001460: 210a 0a3d 6974 656d 2042 3c2d 2d61 7263 !..=item B<--arc │ │ │ -00001470: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt │ │ │ -00001480: 6143 6163 6865 3e20 423c 2d41 3e0a 0a20 aCache> B<-A>.. │ │ │ -00001490: 2020 2044 7572 6174 696f 6e20 6166 7465 Duration afte │ │ │ -000014a0: 7220 7768 6963 6820 616c 7265 6164 7920 r which already │ │ │ -000014b0: 696e 2062 6163 6b75 7043 6f70 7920 636f in backupCopy co │ │ │ -000014c0: 7069 6564 2061 6e64 206c 696e 6b65 640a pied and linked. │ │ │ -000014d0: 2020 2020 6261 636b 7570 7320 7769 6c6c backups will │ │ │ -000014e0: 2062 6520 6465 6c65 7465 642e 2054 6869 be deleted. Thi │ │ │ -000014f0: 7320 6166 6665 6374 7320 616c 6c20 7365 s affects all se │ │ │ -00001500: 7269 6573 2069 6e0a 2020 2020 6465 6c74 ries in. delt │ │ │ -00001510: 6163 6163 6865 7320 7072 6f63 6573 7365 acaches processe │ │ │ -00001520: 6442 6163 6b75 7073 2064 6972 6563 746f dBackups directo │ │ │ -00001530: 7279 2e0a 2020 2020 5468 6520 6475 7261 ry.. The dura │ │ │ -00001540: 7469 6f6e 2068 6173 2074 6f20 6265 2073 tion has to be s │ │ │ -00001550: 7065 6369 6669 6564 2069 6e20 666f 726d pecified in form │ │ │ -00001560: 6174 2027 6468 6d73 272c 2065 672e 0a20 at 'dhms', eg.. │ │ │ -00001570: 2020 2031 3064 3468 206d 6561 6e73 2031 10d4h means 1 │ │ │ -00001580: 3020 6461 7973 2061 6e64 2034 2068 6f75 0 days and 4 hou │ │ │ -00001590: 7273 2c20 6465 6661 756c 7420 6973 2039 rs, default is 9 │ │ │ -000015a0: 3964 0a20 2020 2028 7369 6d69 6c61 7220 9d. (similar │ │ │ -000015b0: 746f 206f 7074 696f 6e20 6b65 6570 416c to option keepAl │ │ │ -000015c0: 6c20 696e 2073 746f 7265 4261 636b 7570 l in storeBackup │ │ │ -000015d0: 4465 6c2e 706c 290a 0a3d 6974 656d 2042 Del.pl)..=item B │ │ │ -000015e0: 3c2d 2d64 6f6e 7444 656c 496e 4465 6c74 <--dontDelInDelt │ │ │ -000015f0: 6143 6163 6865 3e0a 2020 2020 646f 206e aCache>. do n │ │ │ -00001600: 6f74 2064 656c 6574 6520 616e 7920 6261 ot delete any ba │ │ │ -00001610: 636b 7570 2069 6e20 6465 6c74 6143 6163 ckup in deltaCac │ │ │ -00001620: 6865 0a0a 3d69 7465 6d20 423c 2d2d 6372 he..=item B<--cr │ │ │ -00001630: 6561 7465 4e65 7753 6572 6965 733e 2042 eateNewSeries> B │ │ │ -00001640: 3c2d 433e 0a0a 2020 2020 4175 746f 6d61 <-C>.. Automa │ │ │ -00001650: 7469 6361 6c6c 7920 6372 6561 7465 206e tically create n │ │ │ -00001660: 6577 2073 6572 6965 7320 696e 2064 656c ew series in del │ │ │ -00001670: 7461 4361 6368 6520 616e 6420 7468 650a taCache and the. │ │ │ -00001680: 2020 2020 7265 706c 6963 6174 696f 6e20 replication │ │ │ -00001690: 6469 7265 6374 6f72 7920 2f20 6469 7265 directory / dire │ │ │ -000016a0: 6374 6f72 6965 732e 2054 6869 7320 6973 ctories. This is │ │ │ -000016b0: 2065 7370 6563 6961 6c6c 7920 7573 6566 especially usef │ │ │ -000016c0: 756c 0a20 2020 2069 6620 796f 7520 7573 ul. if you us │ │ │ -000016d0: 6520 7769 6c64 6361 7264 7320 746f 2073 e wildcards to s │ │ │ -000016e0: 7065 6369 6679 2073 6572 6965 7320 6e61 pecify series na │ │ │ -000016f0: 6d65 2077 6869 6368 2073 686f 756c 6420 me which should │ │ │ -00001700: 6265 0a20 2020 2061 6464 6564 2027 6f6e be. added 'on │ │ │ -00001710: 2074 6865 2066 6c79 270a 0a3d 6974 656d the fly'..=item │ │ │ -00001720: 2042 3c2d 2d70 726f 6772 6573 7352 6570 B<--progressRep │ │ │ -00001730: 6f72 743e 0a0a 2020 2020 7072 696e 7420 ort>.. print │ │ │ -00001740: 7072 6f67 7265 7373 2072 6570 6f72 743a progress report: │ │ │ -00001750: 0a0a 3d6f 7665 7220 340a 0a3d 6974 656d ..=over 4..=item │ │ │ -00001760: 2061 6674 6572 2065 6163 6820 276e 756d after each 'num │ │ │ -00001770: 6265 7227 2066 696c 6573 2077 6865 6e20 ber' files when │ │ │ -00001780: 636f 6d70 7265 7373 696e 670a 0a3d 6974 compressing..=it │ │ │ -00001790: 656d 2061 6674 6572 2065 6163 6820 276e em after each 'n │ │ │ -000017a0: 756d 6265 7220 2a20 3130 3030 2720 6669 umber * 1000' fi │ │ │ -000017b0: 6c65 7320 7768 656e 206c 696e 6b69 6e67 les when linking │ │ │ -000017c0: 0a0a 3d69 7465 6d20 6166 7465 7220 6561 ..=item after ea │ │ │ -000017d0: 6368 2027 6e75 6d62 6572 202a 2031 3030 ch 'number * 100 │ │ │ -000017e0: 3030 2720 6669 6c65 7320 7768 656e 2070 00' files when p │ │ │ -000017f0: 6572 666f 726d 696e 6720 6368 6d6f 640a erforming chmod. │ │ │ -00001800: 0a3d 6261 636b 0a0a 3d69 7465 6d20 423c .=back..=item B< │ │ │ -00001810: 2d2d 6e6f 5761 726e 696e 6744 6966 6653 --noWarningDiffS │ │ │ -00001820: 6572 6965 7349 6e42 6163 6b75 7043 6f70 eriesInBackupCop │ │ │ -00001830: 793e 2c20 423c 2d4e 3e0a 0a20 2020 2064 y>, B<-N>.. d │ │ │ -00001840: 6f20 6e6f 7420 7772 6974 6520 6120 7761 o not write a wa │ │ │ -00001850: 726e 696e 6720 6966 2074 6865 7265 2069 rning if there i │ │ │ -00001860: 7320 6120 6469 6666 6572 656e 7420 7365 s a different se │ │ │ -00001870: 7420 6f66 2073 6572 6965 730a 2020 2020 t of series. │ │ │ -00001880: 696e 7369 6465 2074 6865 2062 6163 6b75 inside the backu │ │ │ -00001890: 7020 636f 7079 2028 7265 706c 6963 6174 p copy (replicat │ │ │ -000018a0: 696f 6e20 6469 7265 6374 6f72 7929 2074 ion directory) t │ │ │ -000018b0: 6861 6e20 696e 2074 6865 0a20 2020 2061 han in the. a │ │ │ -000018c0: 6374 7561 6c20 6465 6c74 6143 6163 6865 ctual deltaCache │ │ │ -000018d0: 0a0a 3d69 7465 6d20 423c 2d2d 6d61 7848 ..=item B<--maxH │ │ │ -000018e0: 6172 644c 696e 6b73 3e0a 0a20 2020 206d ardLinks>.. m │ │ │ -000018f0: 6178 696d 756d 206e 756d 6265 7220 6f66 aximum number of │ │ │ -00001900: 2068 6172 6420 6c69 6e6b 7320 746f 2075 hard links to u │ │ │ -00001910: 7365 0a20 2020 207a 6572 6f20 2864 6566 se. zero (def │ │ │ -00001920: 6175 6c74 2920 6d65 616e 7320 6c69 6d69 ault) means limi │ │ │ -00001930: 7420 6465 7065 6e64 7320 6f6e 2066 696c t depends on fil │ │ │ -00001940: 6520 7379 7374 656d 2075 7365 6420 6f6e e system used on │ │ │ -00001950: 6c79 0a0a 3d69 7465 6d20 423c 2d2d 6c6f ly..=item B<--lo │ │ │ -00001960: 6746 696c 653e 2c20 423c 2d6c 3e0a 0a20 gFile>, B<-l>.. │ │ │ -00001970: 2020 206c 6f67 4669 6c65 2c20 4465 6661 logFile, Defa │ │ │ -00001980: 756c 743a 2073 7464 6f75 740a 0a3d 6974 ult: stdout..=it │ │ │ -00001990: 656d 2042 3c2d 2d70 6c75 734c 6f67 5374 em B<--plusLogSt │ │ │ -000019a0: 646f 7574 3e0a 0a20 2020 2069 6620 796f dout>.. if yo │ │ │ -000019b0: 7520 7370 6563 6966 7920 6120 6c6f 6720 u specify a log │ │ │ -000019c0: 6669 6c65 2077 6974 6820 2d2d 6c6f 6746 file with --logF │ │ │ -000019d0: 696c 6520 796f 7520 6361 6e0a 2020 2020 ile you can. │ │ │ -000019e0: 6164 6469 7469 6f6e 616c 6c79 2070 7269 additionally pri │ │ │ -000019f0: 6e74 2074 6865 206f 7574 7075 7420 746f nt the output to │ │ │ -00001a00: 2053 5444 4f55 5420 7769 7468 2074 6869 STDOUT with thi │ │ │ -00001a10: 7320 666c 6167 0a0a 3d69 7465 6d20 423c s flag..=item B< │ │ │ -00001a20: 2d2d 7375 7070 7265 7373 5469 6d65 3e0a --suppressTime>. │ │ │ -00001a30: 0a20 2020 2073 7570 7072 6573 7320 6f75 . suppress ou │ │ │ -00001a40: 7470 7574 206f 6620 7469 6d65 2069 6e20 tput of time in │ │ │ -00001a50: 6c6f 6766 696c 650a 0a3d 6974 656d 2042 logfile..=item B │ │ │ -00001a60: 3c2d 2d6d 6178 4669 6c65 6c65 6e3e 2c20 <--maxFilelen>, │ │ │ -00001a70: 423c 2d6d 3e0a 0a20 2020 206d 6178 696d B<-m>.. maxim │ │ │ -00001a80: 616c 206c 656e 6774 6820 6f66 206c 6f67 al length of log │ │ │ -00001a90: 2066 696c 652c 2064 6566 6175 6c74 203d file, default = │ │ │ -00001aa0: 2031 6536 0a0a 3d69 7465 6d20 423c 2d2d 1e6..=item B<-- │ │ │ -00001ab0: 6e6f 4f66 4f6c 6446 696c 6573 3e2c 2042 noOfOldFiles>, B │ │ │ -00001ac0: 3c2d 6e3e 0a0a 2020 2020 6e75 6d62 6572 <-n>.. number │ │ │ -00001ad0: 206f 6620 6f6c 6420 6c6f 6720 6669 6c65 of old log file │ │ │ -00001ae0: 732c 2064 6566 6175 6c74 203d 2035 0a0a s, default = 5.. │ │ │ -00001af0: 3d69 7465 6d20 423c 2d2d 7361 7665 4c6f =item B<--saveLo │ │ │ -00001b00: 6773 3e0a 0a20 2020 2073 6176 6520 6c6f gs>.. save lo │ │ │ -00001b10: 6720 6669 6c65 7320 7769 7468 2064 6174 g files with dat │ │ │ -00001b20: 6520 616e 6420 7469 6d65 2069 6e73 7465 e and time inste │ │ │ -00001b30: 6164 206f 6620 6465 6c65 7469 6e67 2074 ad of deleting t │ │ │ -00001b40: 6865 0a20 2020 206f 6c64 2028 7769 7468 he. old (with │ │ │ -00001b50: 205b 2d6e 6f4f 664f 6c64 4669 6c65 735d [-noOfOldFiles] │ │ │ -00001b60: 290a 0a3d 6974 656d 2042 3c2d 2d63 6f6d )..=item B<--com │ │ │ -00001b70: 7072 6573 7357 6974 683e 0a0a 2020 2020 pressWith>.. │ │ │ -00001b80: 636f 6d70 7265 7373 2073 6176 6564 206c compress saved l │ │ │ -00001b90: 6f67 2066 696c 6573 2028 652e 672e 2077 og files (e.g. w │ │ │ -00001ba0: 6974 6820 2767 7a69 7020 2d39 2729 2e0a ith 'gzip -9').. │ │ │ -00001bb0: 2020 2020 6465 6661 756c 7420 6973 2027 default is ' │ │ │ -00001bc0: 627a 6970 3227 0a0a 3d69 7465 6d20 423c bzip2'..=item B< │ │ │ -00001bd0: 2d2d 6765 6e42 6163 6b75 7042 6173 6554 --genBackupBaseT │ │ │ -00001be0: 7265 6543 6f6e 663e 0a0a 2020 2020 6765 reeConf>.. ge │ │ │ -00001bf0: 6e65 7261 7465 2061 2074 656d 706c 6174 nerate a templat │ │ │ -00001c00: 6520 6f66 2074 6865 2062 6163 6b75 702d e of the backup- │ │ │ -00001c10: 636f 7079 2063 6f6e 6669 6775 7261 7469 copy configurati │ │ │ -00001c20: 6f6e 2066 696c 650a 2020 2020 666f 7220 on file. for │ │ │ -00001c30: 7468 6520 6261 636b 7570 2064 6972 6563 the backup direc │ │ │ -00001c40: 746f 7269 6573 2028 626f 7468 2073 6f75 tories (both sou │ │ │ -00001c50: 7263 6520 616e 6420 7461 7267 6574 290a rce and target). │ │ │ -00001c60: 0a3d 6974 656d 2042 3c2d 2d67 656e 4465 .=item B<--genDe │ │ │ -00001c70: 6c74 6143 6163 6865 436f 6e66 3e0a 0a20 ltaCacheConf>.. │ │ │ -00001c80: 2020 2067 656e 6572 6174 6520 6120 7465 generate a te │ │ │ -00001c90: 6d70 6c61 7465 206f 6620 7468 6520 6261 mplate of the ba │ │ │ -00001ca0: 636b 7570 2d63 6f70 7920 636f 6e66 6967 ckup-copy config │ │ │ -00001cb0: 7572 6174 696f 6e20 6669 6c65 0a20 2020 uration file. │ │ │ -00001cc0: 2066 6f72 2074 6865 2064 656c 7461 4361 for the deltaCa │ │ │ -00001cd0: 6368 6520 6469 7265 6374 6f72 790a 0a3d che directory..= │ │ │ -00001ce0: 6261 636b 0a0a 3d68 6561 6431 2043 4f50 back..=head1 COP │ │ │ -00001cf0: 5952 4947 4854 0a0a 436f 7079 7269 6768 YRIGHT..Copyrigh │ │ │ -00001d00: 7420 2863 2920 3230 3038 2d32 3032 3220 t (c) 2008-2022 │ │ │ -00001d10: 6279 2048 6569 6e7a 2d4a 6f73 6566 2043 by Heinz-Josef C │ │ │ -00001d20: 6c61 6573 2e0a 5075 626c 6973 6865 6420 laes..Published │ │ │ -00001d30: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge │ │ │ -00001d40: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ -00001d50: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l │ │ │ -00001d60: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c │ │ │ -00001d70: 7574 0a0a 6d79 2024 4865 6c70 203d 2026 ut..my $Help = & │ │ │ -00001d80: 3a3a 6765 7450 6f64 3254 6578 7428 2430 ::getPod2Text($0 │ │ │ -00001d90: 293b 0a0a 2670 7269 6e74 5665 7273 696f );..&printVersio │ │ │ -00001da0: 6e28 5c40 4152 4756 2c20 272d 5627 2c20 n(\@ARGV, '-V', │ │ │ -00001db0: 272d 2d76 6572 7369 6f6e 2729 3b0a 0a6d '--version');..m │ │ │ -00001dc0: 7920 2473 7461 7274 4461 7465 203d 2064 y $startDate = d │ │ │ -00001dd0: 6174 6554 6f6f 6c73 2d3e 6e65 7728 293b ateTools->new(); │ │ │ -00001de0: 0a6d 7920 2443 6865 636b 5061 7220 3d0a .my $CheckPar =. │ │ │ -00001df0: 2020 2020 4368 6563 6b50 6172 616d 2d3e CheckParam-> │ │ │ -00001e00: 6e65 7728 272d 6c69 7374 2720 3d3e 205b new('-list' => [ │ │ │ -00001e10: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00001e20: 6d65 2720 3d3e 2027 6261 636b 7570 4469 me' => 'backupDi │ │ │ -00001e30: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ -00001e40: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d62 l_option' => '-b │ │ │ -00001e50: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001e60: 5f61 6c69 6173 2720 3d3e 2027 2d2d 6261 _alias' => '--ba │ │ │ -00001e70: 636b 7570 4469 7227 2c0a 0909 0909 0920 ckupDir',...... │ │ │ -00001e80: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -00001e90: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -00001ea0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001eb0: 3e20 2761 7574 6f72 6570 6169 7227 2c0a > 'autorepair',. │ │ │ -00001ec0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001ed0: 7469 6f6e 2720 3d3e 2027 2d2d 6175 746f tion' => '--auto │ │ │ -00001ee0: 7265 7061 6972 272c 0a09 0909 0909 2020 repair',...... │ │ │ -00001ef0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00001f00: 2027 2d61 2729 2c0a 2020 2020 2020 2020 '-a'),. │ │ │ -00001f10: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001f20: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00001f30: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001f40: 7072 696e 7427 2c0a 0909 0909 0920 2020 print',...... │ │ │ -00001f50: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001f60: 2027 2d2d 7072 696e 7427 292c 0a09 0909 '--print'),.... │ │ │ -00001f70: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00001f80: 616d 6527 203d 3e20 2769 6e74 6572 6163 ame' => 'interac │ │ │ -00001f90: 7469 7665 272c 0a09 0909 0909 2020 2020 tive',...... │ │ │ -00001fa0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001fb0: 272d 6927 2c0a 0909 0909 0920 2020 2027 '-i',...... ' │ │ │ -00001fc0: 2d63 6c5f 616c 6961 7327 203d 3e20 272d -cl_alias' => '- │ │ │ -00001fd0: 2d69 6e74 6572 6163 7469 7665 2729 2c0a -interactive'),. │ │ │ -00001fe0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00001ff0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 636b '-name' => 'lock │ │ │ -00002000: 4669 6c65 272c 0a09 0909 0909 2020 2020 File',...... │ │ │ -00002010: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00002020: 272d 4c27 2c0a 2020 2020 2020 2020 2020 '-L',. │ │ │ -00002030: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002040: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002050: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00002060: 2027 2d2d 6c6f 636b 4669 6c65 272c 0a09 '--lockFile',.. │ │ │ -00002070: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -00002080: 6627 203d 3e20 276e 6f74 205b 696e 7465 f' => 'not [inte │ │ │ -00002090: 7261 6374 6976 655d 272c 0a20 2020 2020 ractive]',. │ │ │ -000020a0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000020b0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000020c0: 2020 2020 2020 2027 2d64 6566 6175 6c74 '-default │ │ │ -000020d0: 2720 3d3e 2024 6c6f 636b 4669 6c65 292c ' => $lockFile), │ │ │ -000020e0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -000020f0: 2827 2d6e 616d 6527 203d 3e20 276e 6f43 ('-name' => 'noC │ │ │ -00002100: 6f6d 7072 6573 7327 2c0a 0909 0909 0920 ompress',...... │ │ │ -00002110: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00002120: 3d3e 2027 2d2d 6e6f 436f 6d70 7265 7373 => '--noCompress │ │ │ -00002130: 272c 0a09 0909 0909 2020 2020 272d 7061 ',...... '-pa │ │ │ -00002140: 7261 6d27 203d 3e20 2779 6573 272c 0a09 ram' => 'yes',.. │ │ │ -00002150: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ -00002160: 6e27 203d 3e20 275c 415b 312d 395d 5c64 n' => '\A[1-9]\d │ │ │ -00002170: 2a5c 5a27 292c 0a09 0909 094f 7074 696f *\Z'),.....Optio │ │ │ -00002180: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00002190: 3e20 2763 6865 636b 4f6e 6c79 272c 0a09 > 'checkOnly',.. │ │ │ -000021a0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -000021b0: 696f 6e27 203d 3e20 272d 6327 2c0a 0909 ion' => '-c',... │ │ │ -000021c0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -000021d0: 7327 203d 3e20 272d 2d63 6865 636b 4f6e s' => '--checkOn │ │ │ -000021e0: 6c79 272c 0a09 0909 0909 2020 2020 272d ly',...... '- │ │ │ -000021f0: 6f6e 6c79 5f69 6627 203d 3e20 276e 6f74 only_if' => 'not │ │ │ -00002200: 205b 696e 7465 7261 6374 6976 655d 2729 [interactive]') │ │ │ -00002210: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00002220: 7728 272d 6e61 6d65 2720 3d3e 2027 636f w('-name' => 'co │ │ │ -00002230: 7079 4261 636b 7570 4f6e 6c79 272c 0a09 pyBackupOnly',.. │ │ │ -00002240: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00002250: 696f 6e27 203d 3e20 272d 2d63 6f70 7942 ion' => '--copyB │ │ │ -00002260: 6163 6b75 704f 6e6c 7927 2c0a 0909 0909 ackupOnly',..... │ │ │ -00002270: 0920 2020 2027 2d6f 6e6c 795f 6966 2720 . '-only_if' │ │ │ -00002280: 3d3e 2027 6e6f 7420 5b69 6e74 6572 6163 => 'not [interac │ │ │ -00002290: 7469 7665 5d27 292c 0a09 0909 094f 7074 tive]'),.....Opt │ │ │ -000022a0: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000022b0: 203d 3e20 2764 6f6e 7443 6f70 7942 6163 => 'dontCopyBac │ │ │ -000022c0: 6b75 7027 2c0a 0909 0909 0920 2020 2027 kup',...... ' │ │ │ -000022d0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -000022e0: 2d2d 646f 6e74 436f 7079 4261 636b 7570 --dontCopyBackup │ │ │ -000022f0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -00002300: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ -00002310: 696e 7465 7261 6374 6976 655d 2729 2c0a interactive]'),. │ │ │ -00002320: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00002330: 272d 6e61 6d65 2720 3d3e 2027 6172 6368 '-name' => 'arch │ │ │ -00002340: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta │ │ │ -00002350: 4361 6368 6527 2c0a 0909 0909 0920 2020 Cache',...... │ │ │ -00002360: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00002370: 2027 2d41 272c 0a09 0909 0909 2020 2020 '-A',...... │ │ │ -00002380: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00002390: 2d2d 6172 6368 6976 6544 7572 6174 696f --archiveDuratio │ │ │ -000023a0: 6e44 656c 7461 4361 6368 6527 2c0a 0909 nDeltaCache',... │ │ │ -000023b0: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -000023c0: 203d 3e20 2761 7263 6869 7665 4475 7261 => 'archiveDura │ │ │ -000023d0: 7469 6f6e 4465 6c74 6143 6163 6865 272c tionDeltaCache', │ │ │ -000023e0: 0a09 0909 0909 2020 2020 272d 6465 6661 ...... '-defa │ │ │ -000023f0: 756c 7427 203d 3e20 2461 7263 6869 7665 ult' => $archive │ │ │ -00002400: 4475 7261 7469 6f6e 4465 6c74 6143 6163 DurationDeltaCac │ │ │ -00002410: 6865 2c0a 0909 0909 0920 2020 2027 2d6f he,...... '-o │ │ │ -00002420: 6e6c 795f 6966 2720 3d3e 2027 6e6f 7420 nly_if' => 'not │ │ │ -00002430: 5b69 6e74 6572 6163 7469 7665 5d27 292c [interactive]'), │ │ │ -00002440: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00002450: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002460: 204f 7074 696f 6e2d 3e6e 6577 2827 2d6e Option->new('-n │ │ │ -00002470: 616d 6527 203d 3e20 2764 6f6e 7444 656c ame' => 'dontDel │ │ │ -00002480: 496e 4465 6c74 6143 6163 6865 272c 0a09 InDeltaCache',.. │ │ │ -00002490: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -000024a0: 696f 6e27 203d 3e20 272d 2d64 6f6e 7444 ion' => '--dontD │ │ │ -000024b0: 656c 496e 4465 6c74 6143 6163 6865 272c elInDeltaCache', │ │ │ -000024c0: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only │ │ │ -000024d0: 5f69 6627 203d 3e20 276e 6f74 205b 696e _if' => 'not [in │ │ │ -000024e0: 7465 7261 6374 6976 655d 2729 2c0a 0909 teractive]'),... │ │ │ -000024f0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -00002500: 6e61 6d65 2720 3d3e 2027 6372 6561 7465 name' => 'create │ │ │ -00002510: 4e65 7753 6572 6965 7327 2c0a 0909 0909 NewSeries',..... │ │ │ -00002520: 0920 2020 2027 2d63 6c5f 6f70 7469 6f6e . '-cl_option │ │ │ -00002530: 2720 3d3e 2027 2d43 272c 0a09 0909 0909 ' => '-C',...... │ │ │ -00002540: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00002550: 3e20 276e 6f74 205b 696e 7465 7261 6374 > 'not [interact │ │ │ -00002560: 6976 655d 272c 0a09 0909 0909 2020 2020 ive]',...... │ │ │ -00002570: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00002580: 2d2d 6372 6561 7465 4e65 7753 6572 6965 --createNewSerie │ │ │ -00002590: 7327 292c 0a09 0909 094f 7074 696f 6e2d s'),.....Option- │ │ │ -000025a0: 3e6e 6577 2827 2d6e 616d 6527 203d 3e20 >new('-name' => │ │ │ -000025b0: 2770 726f 6772 6573 7352 6570 6f72 7427 'progressReport' │ │ │ -000025c0: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -000025d0: 6f70 7469 6f6e 2720 3d3e 2027 2d2d 7072 option' => '--pr │ │ │ -000025e0: 6f67 7265 7373 5265 706f 7274 272c 0a09 ogressReport',.. │ │ │ -000025f0: 0909 0909 2020 2020 272d 6465 6661 756c .... '-defaul │ │ │ -00002600: 7427 203d 3e20 302c 0a09 0909 0909 2020 t' => 0,...... │ │ │ -00002610: 2020 272d 7061 7474 6572 6e27 203d 3e20 '-pattern' => │ │ │ -00002620: 275c 415c 642b 5c5a 2729 2c0a 0909 0909 '\A\d+\Z'),..... │ │ │ -00002630: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -00002640: 6d65 2720 3d3e 2027 7665 7262 6f73 6527 me' => 'verbose' │ │ │ -00002650: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00002660: 6f70 7469 6f6e 2720 3d3e 2027 2d76 272c option' => '-v', │ │ │ -00002670: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only │ │ │ -00002680: 5f69 6627 203d 3e20 276e 6f74 205b 696e _if' => 'not [in │ │ │ -00002690: 7465 7261 6374 6976 655d 272c 0a09 0909 teractive]',.... │ │ │ -000026a0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -000026b0: 2720 3d3e 2027 2d2d 7665 7262 6f73 6527 ' => '--verbose' │ │ │ -000026c0: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -000026d0: 6577 2827 2d6e 616d 6527 203d 3e20 2764 ew('-name' => 'd │ │ │ -000026e0: 6562 7567 272c 0a09 0909 0909 2020 2020 ebug',...... │ │ │ -000026f0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00002700: 272d 2d64 6562 7567 272c 0a09 0909 0909 '--debug',...... │ │ │ -00002710: 2020 2020 272d 636c 5f61 6c69 6173 2720 '-cl_alias' │ │ │ -00002720: 3d3e 2027 2d64 272c 0a09 0909 0909 2020 => '-d',...... │ │ │ -00002730: 2020 272d 6f6e 6c79 5f69 6627 203d 3e20 '-only_if' => │ │ │ -00002740: 276e 6f74 205b 696e 7465 7261 6374 6976 'not [interactiv │ │ │ -00002750: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option │ │ │ -00002760: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00002770: 2027 6e6f 5761 726e 696e 6744 6966 6653 'noWarningDiffS │ │ │ -00002780: 6572 6965 7349 6e42 6163 6b75 7043 6f70 eriesInBackupCop │ │ │ -00002790: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c │ │ │ -000027a0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d4e l_option' => '-N │ │ │ -000027b0: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -000027c0: 6c79 5f69 6627 203d 3e20 276e 6f74 205b ly_if' => 'not [ │ │ │ -000027d0: 696e 7465 7261 6374 6976 655d 272c 0a09 interactive]',.. │ │ │ -000027e0: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -000027f0: 6173 2720 3d3e 2027 2d2d 6e6f 5761 726e as' => '--noWarn │ │ │ -00002800: 696e 6744 6966 6653 6572 6965 7349 6e42 ingDiffSeriesInB │ │ │ -00002810: 6163 6b75 7043 6f70 7927 292c 0a09 0909 ackupCopy'),.... │ │ │ -00002820: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00002830: 616d 6527 203d 3e20 276d 6178 4861 7264 ame' => 'maxHard │ │ │ -00002840: 4c69 6e6b 7327 2c0a 0909 0909 0920 2020 Links',...... │ │ │ -00002850: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00002860: 2027 2d2d 6d61 7848 6172 644c 696e 6b73 '--maxHardLinks │ │ │ -00002870: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -00002880: 6661 756c 7427 203d 3e20 302c 0a09 0909 fault' => 0,.... │ │ │ -00002890: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -000028a0: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\A\d+\Z'),. │ │ │ -000028b0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -000028c0: 272d 6e61 6d65 2720 3d3e 2027 6c6f 6746 '-name' => 'logF │ │ │ -000028d0: 696c 6527 2c0a 0909 0909 0920 2020 2027 ile',...... ' │ │ │ -000028e0: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -000028f0: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '- │ │ │ -00002900: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00002910: 6c6f 6746 696c 6527 2c0a 0909 0909 0920 logFile',...... │ │ │ -00002920: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -00002930: 7965 7327 2c0a 0909 0909 0920 2020 2027 yes',...... ' │ │ │ -00002940: 2d6f 6e6c 795f 6966 2720 3d3e 2027 6e6f -only_if' => 'no │ │ │ -00002950: 7420 5b69 6e74 6572 6163 7469 7665 5d27 t [interactive]' │ │ │ -00002960: 292c 0a09 0909 094f 7074 696f 6e2d 3e6e ),.....Option->n │ │ │ -00002970: 6577 2827 2d6e 616d 6527 203d 3e20 2770 ew('-name' => 'p │ │ │ -00002980: 6c75 734c 6f67 5374 646f 7574 272c 0a09 lusLogStdout',.. │ │ │ -00002990: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -000029a0: 696f 6e27 203d 3e20 272d 2d70 6c75 734c ion' => '--plusL │ │ │ -000029b0: 6f67 5374 646f 7574 272c 0a09 0909 0909 ogStdout',...... │ │ │ -000029c0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -000029d0: 3e20 275b 6c6f 6746 696c 655d 2729 2c0a > '[logFile]'),. │ │ │ -000029e0: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -000029f0: 272d 6e61 6d65 2720 3d3e 2027 7375 7070 '-name' => 'supp │ │ │ -00002a00: 7265 7373 5469 6d65 272c 0a09 0909 0909 ressTime',...... │ │ │ -00002a10: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00002a20: 203d 3e20 272d 2d73 7570 7072 6573 7354 => '--suppressT │ │ │ -00002a30: 696d 6527 292c 0a09 0909 094f 7074 696f ime'),.....Optio │ │ │ -00002a40: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00002a50: 3e20 276d 6178 4669 6c65 6c65 6e27 2c0a > 'maxFilelen',. │ │ │ -00002a60: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00002a70: 7469 6f6e 2720 3d3e 2027 2d6d 272c 0a09 tion' => '-m',.. │ │ │ -00002a80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00002a90: 6173 2720 3d3e 2027 2d2d 6d61 7846 696c as' => '--maxFil │ │ │ -00002aa0: 656c 656e 272c 0a09 0909 0909 2020 2020 elen',...... │ │ │ -00002ab0: 272d 6465 6661 756c 7427 203d 3e20 3165 '-default' => 1e │ │ │ -00002ac0: 362c 0a09 0909 0909 2020 2020 272d 7061 6,...... '-pa │ │ │ -00002ad0: 7474 6572 6e27 203d 3e20 275c 415b 655c ttern' => '\A[e\ │ │ │ -00002ae0: 645d 2b5c 5a27 2c0a 2020 2020 2020 2020 d]+\Z',. │ │ │ -00002af0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002b00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002b10: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00002b20: 3e27 5b6c 6f67 4669 6c65 5d27 292c 0a09 >'[logFile]'),.. │ │ │ -00002b30: 0909 094f 7074 696f 6e2d 3e6e 6577 2827 ...Option->new(' │ │ │ -00002b40: 2d6e 616d 6527 203d 3e20 276e 6f4f 664f -name' => 'noOfO │ │ │ -00002b50: 6c64 4669 6c65 7327 2c0a 0909 0909 0920 ldFiles',...... │ │ │ -00002b60: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00002b70: 3d3e 2027 2d6e 272c 0a09 0909 0909 2020 => '-n',...... │ │ │ -00002b80: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00002b90: 2027 2d2d 6e6f 4f66 4f6c 6446 696c 6573 '--noOfOldFiles │ │ │ -00002ba0: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -00002bb0: 6661 756c 7427 203d 3e20 2735 272c 0a09 fault' => '5',.. │ │ │ -00002bc0: 0909 0909 2020 2020 272d 7061 7474 6572 .... '-patter │ │ │ -00002bd0: 6e27 203d 3e20 275c 415c 642b 5c5a 272c n' => '\A\d+\Z', │ │ │ -00002be0: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00002bf0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002c00: 2020 2020 2020 2020 2020 2020 2027 2d6f '-o │ │ │ -00002c10: 6e6c 795f 6966 2720 3d3e 225b 6c6f 6746 nly_if' =>"[logF │ │ │ -00002c20: 696c 655d 2229 2c0a 2020 2020 2020 2020 ile]"),. │ │ │ -00002c30: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002c40: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00002c50: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00002c60: 7361 7665 4c6f 6773 272c 0a09 0909 0909 saveLogs',...... │ │ │ -00002c70: 2020 2020 272d 636c 5f6f 7074 696f 6e27 '-cl_option' │ │ │ -00002c80: 203d 3e20 272d 2d73 6176 654c 6f67 7327 => '--saveLogs' │ │ │ -00002c90: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00002ca0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002cb0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00002cc0: 6465 6661 756c 7427 203d 3e20 276e 6f27 default' => 'no' │ │ │ -00002cd0: 2c0a 2020 2020 2020 2020 2020 2020 2020 ,. │ │ │ -00002ce0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002cf0: 2020 2020 2020 2020 2020 2020 2020 272d '- │ │ │ -00002d00: 6f6e 6c79 5f69 6627 203d 3e20 275b 6c6f only_if' => '[lo │ │ │ -00002d10: 6746 696c 655d 2729 2c0a 2020 2020 2020 gFile]'),. │ │ │ -00002d20: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002d30: 2020 2020 2020 2020 2020 4f70 7469 6f6e Option │ │ │ -00002d40: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00002d50: 2027 636f 6d70 7265 7373 5769 7468 272c 'compressWith', │ │ │ -00002d60: 0a09 0909 0909 2020 2020 272d 636c 5f6f ...... '-cl_o │ │ │ -00002d70: 7074 696f 6e27 203d 3e20 272d 2d63 6f6d ption' => '--com │ │ │ -00002d80: 7072 6573 7357 6974 6827 2c0a 0909 0909 pressWith',..... │ │ │ -00002d90: 0920 2020 2027 2d71 756f 7465 4576 616c . '-quoteEval │ │ │ -00002da0: 2720 3d3e 2027 7965 7327 2c0a 2020 2020 ' => 'yes',. │ │ │ -00002db0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002dc0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002dd0: 2020 2020 2020 2020 272d 6465 6661 756c '-defaul │ │ │ -00002de0: 7427 203d 3e20 2762 7a69 7032 272c 0a20 t' => 'bzip2',. │ │ │ -00002df0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002e00: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002e10: 2020 2020 2020 2020 2020 2027 2d6f 6e6c '-onl │ │ │ -00002e20: 795f 6966 2720 3d3e 275b 6c6f 6746 696c y_if' =>'[logFil │ │ │ -00002e30: 655d 2729 2c0a 0909 0909 4f70 7469 6f6e e]'),.....Option │ │ │ -00002e40: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00002e50: 2027 6765 6e42 6163 6b75 7042 6173 6554 'genBackupBaseT │ │ │ -00002e60: 7265 6543 6f6e 6627 2c0a 0909 0909 0920 reeConf',...... │ │ │ -00002e70: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00002e80: 3d3e 2027 2d2d 6765 6e42 6163 6b75 7042 => '--genBackupB │ │ │ -00002e90: 6173 6554 7265 6543 6f6e 6627 2c0a 0909 aseTreeConf',... │ │ │ -00002ea0: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00002eb0: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi │ │ │ -00002ec0: 725d 2061 6e64 206e 6f74 205b 6765 6e44 r] and not [genD │ │ │ -00002ed0: 656c 7461 4361 6368 6543 6f6e 665d 272c eltaCacheConf]', │ │ │ -00002ee0: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -00002ef0: 6d27 203d 3e20 2779 6573 2729 2c0a 0909 m' => 'yes'),... │ │ │ -00002f00: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -00002f10: 6e61 6d65 2720 3d3e 2027 6765 6e44 656c name' => 'genDel │ │ │ -00002f20: 7461 4361 6368 6543 6f6e 6627 2c0a 0909 taCacheConf',... │ │ │ -00002f30: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -00002f40: 6f6e 2720 3d3e 2027 2d2d 6765 6e44 656c on' => '--genDel │ │ │ -00002f50: 7461 4361 6368 6543 6f6e 6627 2c0a 0909 taCacheConf',... │ │ │ -00002f60: 2020 2020 272d 6f6e 6c79 5f69 6627 203d '-only_if' = │ │ │ -00002f70: 3e20 276e 6f74 205b 6261 636b 7570 4469 > 'not [backupDi │ │ │ -00002f80: 725d 2061 6e64 206e 6f74 205b 6765 6e42 r] and not [genB │ │ │ -00002f90: 6163 6b75 7042 6173 6554 7265 6543 6f6e ackupBaseTreeCon │ │ │ -00002fa0: 665d 272c 0a09 0909 0909 2020 2020 272d f]',...... '- │ │ │ -00002fb0: 7061 7261 6d27 203d 3e20 2779 6573 2729 param' => 'yes') │ │ │ -00002fc0: 2c0a 2320 6869 6464 656e 206f 7074 696f ,.# hidden optio │ │ │ -00002fd0: 6e73 0a23 2075 7365 6420 6279 2073 746f ns.# used by sto │ │ │ -00002fe0: 7265 4261 636b 7570 4d6f 756e 742e 706c reBackupMount.pl │ │ │ -00002ff0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00003000: 2827 2d6e 616d 6527 203d 3e20 2777 7269 ('-name' => 'wri │ │ │ -00003010: 7465 546f 4e61 6d65 6450 6970 6527 2c0a teToNamedPipe',. │ │ │ -00003020: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00003030: 7469 6f6e 2720 3d3e 2027 2d2d 7772 6974 tion' => '--writ │ │ │ -00003040: 6554 6f4e 616d 6564 5069 7065 272c 0a09 eToNamedPipe',.. │ │ │ -00003050: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00003060: 203d 3e20 2779 6573 272c 0a09 0909 0909 => 'yes',...... │ │ │ -00003070: 2020 2020 272d 6869 6464 656e 2720 3d3e '-hidden' => │ │ │ -00003080: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ -00003090: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -000030a0: 203d 3e20 2773 6b69 7053 796e 6327 2c0a => 'skipSync',. │ │ │ -000030b0: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -000030c0: 7469 6f6e 2720 3d3e 2027 2d2d 736b 6970 tion' => '--skip │ │ │ -000030d0: 5379 6e63 2729 0a09 0909 095d 0a09 0920 Sync').....]... │ │ │ -000030e0: 2020 2029 3b0a 0a24 4368 6563 6b50 6172 );..$CheckPar │ │ │ -000030f0: 2d3e 6368 6563 6b28 272d 6172 6776 2720 ->check('-argv' │ │ │ -00003100: 3d3e 205c 4041 5247 562c 0a20 2020 2020 => \@ARGV,. │ │ │ -00003110: 2020 2020 2020 2020 2020 2020 272d 6865 '-he │ │ │ -00003120: 6c70 2720 3d3e 2024 4865 6c70 0a20 2020 lp' => $Help. │ │ │ -00003130: 2020 2020 2020 2020 2020 2020 2020 293b ); │ │ │ -00003140: 0a0a 2320 4175 7377 6572 7475 6e67 2064 ..# Auswertung d │ │ │ -00003150: 6572 2050 6172 616d 6574 6572 0a6d 7920 er Parameter.my │ │ │ -00003160: 2461 7574 6f72 6570 6169 7220 3d20 2443 $autorepair = $C │ │ │ -00003170: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00003180: 6974 686f 7574 5061 7228 2761 7574 6f72 ithoutPar('autor │ │ │ -00003190: 6570 6169 7227 293b 0a6d 7920 2470 7269 epair');.my $pri │ │ │ -000031a0: 6e74 203d 2024 4368 6563 6b50 6172 2d3e nt = $CheckPar-> │ │ │ -000031b0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -000031c0: 2827 7072 696e 7427 293b 0a6d 7920 2469 ('print');.my $i │ │ │ -000031d0: 6e74 6572 6163 7469 7665 203d 2024 4368 nteractive = $Ch │ │ │ -000031e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000031f0: 7468 6f75 7450 6172 2827 696e 7465 7261 thoutPar('intera │ │ │ -00003200: 6374 6976 6527 293b 0a6d 7920 2476 6572 ctive');.my $ver │ │ │ -00003210: 626f 7365 203d 2024 4368 6563 6b50 6172 bose = $CheckPar │ │ │ -00003220: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00003230: 6172 2827 7665 7262 6f73 6527 293b 0a6d ar('verbose');.m │ │ │ -00003240: 7920 2464 6562 7567 203d 2024 4368 6563 y $debug = $Chec │ │ │ -00003250: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00003260: 6f75 7450 6172 2827 6465 6275 6727 293b outPar('debug'); │ │ │ -00003270: 0a24 6c6f 636b 4669 6c65 203d 2024 4368 .$lockFile = $Ch │ │ │ -00003280: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00003290: 7468 5061 7228 276c 6f63 6b46 696c 6527 thPar('lockFile' │ │ │ -000032a0: 293b 0a6d 7920 246e 6f43 6f6d 7072 6573 );.my $noCompres │ │ │ -000032b0: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g │ │ │ -000032c0: 6574 4f70 7457 6974 6850 6172 2827 6e6f etOptWithPar('no │ │ │ -000032d0: 436f 6d70 7265 7373 2729 3b0a 6d79 2024 Compress');.my $ │ │ │ -000032e0: 6368 6563 6b4f 6e6c 7920 3d20 2443 6865 checkOnly = $Che │ │ │ -000032f0: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00003300: 686f 7574 5061 7228 2763 6865 636b 4f6e houtPar('checkOn │ │ │ -00003310: 6c79 2729 3b0a 6d79 2024 636f 7079 4261 ly');.my $copyBa │ │ │ -00003320: 636b 7570 4f6e 6c79 203d 2024 4368 6563 ckupOnly = $Chec │ │ │ -00003330: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00003340: 6f75 7450 6172 2827 636f 7079 4261 636b outPar('copyBack │ │ │ -00003350: 7570 4f6e 6c79 2729 3b0a 6d79 2024 646f upOnly');.my $do │ │ │ -00003360: 6e74 436f 7079 4261 636b 7570 203d 2024 ntCopyBackup = $ │ │ │ -00003370: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00003380: 5769 7468 6f75 7450 6172 2827 646f 6e74 WithoutPar('dont │ │ │ -00003390: 436f 7079 4261 636b 7570 2729 3b0a 2461 CopyBackup');.$a │ │ │ -000033a0: 7263 6869 7665 4475 7261 7469 6f6e 4465 rchiveDurationDe │ │ │ -000033b0: 6c74 6143 6163 6865 203d 2024 4368 6563 ltaCache = $Chec │ │ │ -000033c0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -000033d0: 5061 7228 2761 7263 6869 7665 4475 7261 Par('archiveDura │ │ │ -000033e0: 7469 6f6e 4465 6c74 6143 6163 6865 2729 tionDeltaCache') │ │ │ -000033f0: 3b0a 6d79 2024 646f 6e74 4465 6c49 6e44 ;.my $dontDelInD │ │ │ -00003400: 656c 7461 4361 6368 6520 3d20 2443 6865 eltaCache = $Che │ │ │ -00003410: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00003420: 686f 7574 5061 7228 2764 6f6e 7444 656c houtPar('dontDel │ │ │ -00003430: 496e 4465 6c74 6143 6163 6865 2729 3b0a InDeltaCache');. │ │ │ -00003440: 6d79 2024 6372 6561 7465 4e65 7753 6572 my $createNewSer │ │ │ -00003450: 6965 7320 3d20 2443 6865 636b 5061 722d ies = $CheckPar- │ │ │ -00003460: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00003470: 7228 2763 7265 6174 654e 6577 5365 7269 r('createNewSeri │ │ │ -00003480: 6573 2729 3b0a 6d79 2024 7072 6f67 7265 es');.my $progre │ │ │ -00003490: 7373 5265 706f 7274 203d 2024 4368 6563 ssReport = $Chec │ │ │ -000034a0: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -000034b0: 5061 7228 2770 726f 6772 6573 7352 6570 Par('progressRep │ │ │ -000034c0: 6f72 7427 293b 0a6d 7920 246e 6f57 6172 ort');.my $noWar │ │ │ -000034d0: 6e69 6e67 4469 6666 5365 7269 6573 496e ningDiffSeriesIn │ │ │ -000034e0: 4261 636b 7570 436f 7079 203d 0a20 2020 BackupCopy =. │ │ │ -000034f0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003500: 7074 5769 7468 6f75 7450 6172 2827 6e6f ptWithoutPar('no │ │ │ -00003510: 5761 726e 696e 6744 6966 6653 6572 6965 WarningDiffSerie │ │ │ -00003520: 7349 6e42 6163 6b75 7043 6f70 7927 293b sInBackupCopy'); │ │ │ -00003530: 0a6d 7920 246d 6178 4861 7264 4c69 6e6b .my $maxHardLink │ │ │ -00003540: 7320 3d20 2443 6865 636b 5061 722d 3e67 s = $CheckPar->g │ │ │ -00003550: 6574 4f70 7457 6974 6850 6172 2827 6d61 etOptWithPar('ma │ │ │ -00003560: 7848 6172 644c 696e 6b73 2729 3b0a 6d79 xHardLinks');.my │ │ │ -00003570: 2024 6c6f 6746 696c 6520 3d20 2443 6865 $logFile = $Che │ │ │ -00003580: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00003590: 6850 6172 2827 6c6f 6746 696c 6527 293b hPar('logFile'); │ │ │ -000035a0: 0a6d 7920 2470 6c75 734c 6f67 5374 646f .my $plusLogStdo │ │ │ -000035b0: 7574 203d 2024 4368 6563 6b50 6172 2d3e ut = $CheckPar-> │ │ │ -000035c0: 6765 744f 7074 5769 7468 6f75 7450 6172 getOptWithoutPar │ │ │ -000035d0: 2827 706c 7573 4c6f 6753 7464 6f75 7427 ('plusLogStdout' │ │ │ -000035e0: 293b 0a6d 7920 2477 6974 6854 696d 6520 );.my $withTime │ │ │ -000035f0: 3d20 6e6f 7420 2443 6865 636b 5061 722d = not $CheckPar- │ │ │ -00003600: 3e67 6574 4f70 7457 6974 686f 7574 5061 >getOptWithoutPa │ │ │ -00003610: 7228 2773 7570 7072 6573 7354 696d 6527 r('suppressTime' │ │ │ -00003620: 293b 0a24 7769 7468 5469 6d65 203d 2024 );.$withTime = $ │ │ │ -00003630: 7769 7468 5469 6d65 203f 2027 7965 7327 withTime ? 'yes' │ │ │ -00003640: 203a 2027 6e6f 273b 0a6d 7920 246d 6178 : 'no';.my $max │ │ │ -00003650: 4669 6c65 6c65 6e20 3d20 2443 6865 636b Filelen = $Check │ │ │ -00003660: 5061 722d 3e67 6574 4f70 7457 6974 6850 Par->getOptWithP │ │ │ -00003670: 6172 2827 6d61 7846 696c 656c 656e 2729 ar('maxFilelen') │ │ │ -00003680: 3b0a 6d79 2024 6e6f 4f66 4f6c 6446 696c ;.my $noOfOldFil │ │ │ -00003690: 6573 203d 2024 4368 6563 6b50 6172 2d3e es = $CheckPar-> │ │ │ -000036a0: 6765 744f 7074 5769 7468 5061 7228 276e getOptWithPar('n │ │ │ -000036b0: 6f4f 664f 6c64 4669 6c65 7327 293b 0a6d oOfOldFiles');.m │ │ │ -000036c0: 7920 2473 6176 654c 6f67 7320 3d20 2443 y $saveLogs = $C │ │ │ -000036d0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -000036e0: 6974 6850 6172 2827 7361 7665 4c6f 6773 ithPar('saveLogs │ │ │ -000036f0: 2729 3b0a 6d79 2024 636f 6d70 7265 7373 ');.my $compress │ │ │ -00003700: 5769 7468 203d 2024 4368 6563 6b50 6172 With = $CheckPar │ │ │ -00003710: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -00003720: 2763 6f6d 7072 6573 7357 6974 6827 293b 'compressWith'); │ │ │ -00003730: 0a6d 7920 2462 6163 6b75 7044 6972 203d .my $backupDir = │ │ │ -00003740: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00003750: 7074 5769 7468 5061 7228 2762 6163 6b75 ptWithPar('backu │ │ │ -00003760: 7044 6972 2729 3b0a 6d79 2024 6765 6e42 pDir');.my $genB │ │ │ -00003770: 6163 6b75 7042 6173 6554 7265 6543 6f6e ackupBaseTreeCon │ │ │ -00003780: 6620 3d20 2443 6865 636b 5061 722d 3e67 f = $CheckPar->g │ │ │ -00003790: 6574 4f70 7457 6974 6850 6172 2827 6765 etOptWithPar('ge │ │ │ -000037a0: 6e42 6163 6b75 7042 6173 6554 7265 6543 nBackupBaseTreeC │ │ │ -000037b0: 6f6e 6627 293b 0a6d 7920 2467 656e 4465 onf');.my $genDe │ │ │ -000037c0: 6c74 6143 6163 6865 436f 6e66 203d 2024 ltaCacheConf = $ │ │ │ -000037d0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000037e0: 5769 7468 5061 7228 2767 656e 4465 6c74 WithPar('genDelt │ │ │ -000037f0: 6143 6163 6865 436f 6e66 2729 3b0a 2320 aCacheConf');.# │ │ │ -00003800: 6869 6464 656e 206f 7074 696f 6e73 0a6d hidden options.m │ │ │ -00003810: 7920 2477 7269 7465 546f 4e61 6d65 6450 y $writeToNamedP │ │ │ -00003820: 6970 6520 3d20 2443 6865 636b 5061 722d ipe = $CheckPar- │ │ │ -00003830: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00003840: 7772 6974 6554 6f4e 616d 6564 5069 7065 writeToNamedPipe │ │ │ -00003850: 2729 3b0a 6d79 2024 736b 6970 5379 6e63 ');.my $skipSync │ │ │ -00003860: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00003870: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ -00003880: 736b 6970 5379 6e63 2729 3b0a 0a0a 756e skipSync');...un │ │ │ -00003890: 6c65 7373 2028 246e 6f43 6f6d 7072 6573 less ($noCompres │ │ │ -000038a0: 7329 0a7b 0a20 2020 206c 6f63 616c 202a s).{. local * │ │ │ -000038b0: 4649 4c45 3b0a 2020 2020 6966 2028 6f70 FILE;. if (op │ │ │ -000038c0: 656e 2846 494c 452c 2022 2f70 726f 632f en(FILE, "/proc/ │ │ │ -000038d0: 6370 7569 6e66 6f22 2929 0a20 2020 207b cpuinfo")). { │ │ │ -000038e0: 0a09 6d79 2024 6c3b 0a09 246e 6f43 6f6d ..my $l;..$noCom │ │ │ -000038f0: 7072 6573 7320 3d20 313b 0a09 7768 696c press = 1;..whil │ │ │ -00003900: 6520 2824 6c20 3d20 3c46 494c 453e 290a e ($l = ). │ │ │ -00003910: 097b 0a09 2020 2020 246e 6f43 6f6d 7072 .{.. $noCompr │ │ │ -00003920: 6573 732b 2b20 6966 2024 6c20 3d7e 202f ess++ if $l =~ / │ │ │ -00003930: 7072 6f63 6573 736f 722f 3b0a 097d 0a09 processor/;..}.. │ │ │ -00003940: 636c 6f73 6528 4649 4c45 293b 0a20 2020 close(FILE);. │ │ │ -00003950: 207d 0a20 2020 2024 6e6f 436f 6d70 7265 }. $noCompre │ │ │ -00003960: 7373 203d 2032 2069 6620 246e 6f43 6f6d ss = 2 if $noCom │ │ │ -00003970: 7072 6573 7320 3c20 323b 0a7d 0a0a 6d79 press < 2;.}..my │ │ │ -00003980: 2024 7465 6d70 6c61 7465 4261 636b 7570 $templateBackup │ │ │ -00003990: 4261 7365 5472 6565 436f 6e66 203d 203c BaseTreeConf = < │ │ │ -000039a0: 3c45 4f43 3b0a 2320 636f 6e66 6967 7572 already ex │ │ │ -00004420: 6973 7473 2e20 4f76 6572 7772 6974 653f ists. Overwrite? │ │ │ -00004430: 5c6e 222c 0a09 2020 2020 2279 6573 202f \n",.. "yes / │ │ │ -00004440: 206e 6f20 2d3e 2022 3b0a 0920 2020 2024 no -> ";.. $ │ │ │ -00004450: 616e 7377 6572 203d 203c 5354 4449 4e3e answer = │ │ │ -00004460: 3b0a 0920 2020 2063 686f 6d70 2024 616e ;.. chomp $an │ │ │ -00004470: 7377 6572 3b0a 097d 2077 6869 6c65 2028 swer;..} while ( │ │ │ -00004480: 2461 6e73 7765 7220 6e65 2027 7965 7327 $answer ne 'yes' │ │ │ -00004490: 2061 6e64 2024 616e 7377 6572 206e 6520 and $answer ne │ │ │ -000044a0: 276e 6f27 293b 0a20 2020 207d 0a20 2020 'no');. }. │ │ │ -000044b0: 2065 7869 7420 3020 6966 2024 616e 7377 exit 0 if $answ │ │ │ -000044c0: 6572 2065 7120 276e 6f27 3b0a 0a20 2020 er eq 'no';.. │ │ │ -000044d0: 206c 6f63 616c 202a 4649 4c45 3b0a 2020 local *FILE;. │ │ │ -000044e0: 2020 6f70 656e 2846 494c 452c 2027 3e27 open(FILE, '>' │ │ │ -000044f0: 2c20 2463 6f6e 664e 616d 6529 206f 720a , $confName) or. │ │ │ -00004500: 0964 6965 2022 636f 756c 6420 6e6f 7420 .die "could not │ │ │ -00004510: 7772 6974 6520 746f 203c 2463 6f6e 664e write to <$confN │ │ │ -00004520: 616d 653e 223b 0a20 2020 2070 7269 6e74 ame>";. print │ │ │ -00004530: 2046 494c 4520 2474 656d 706c 6174 653b FILE $template; │ │ │ -00004540: 0a20 2020 2063 6c6f 7365 2846 494c 4529 . close(FILE) │ │ │ -00004550: 3b0a 2020 2020 6578 6974 2030 3b0a 7d0a ;. exit 0;.}. │ │ │ -00004560: 0a64 6965 2022 706c 6561 7365 2073 7065 .die "please spe │ │ │ -00004570: 6369 6679 206f 7074 696f 6e20 3c62 6163 cify option \n$Help". │ │ │ -00004590: 2020 2020 756e 6c65 7373 2024 6261 636b unless $back │ │ │ -000045a0: 7570 4469 723b 0a0a 2462 6163 6b75 7044 upDir;..$backupD │ │ │ -000045b0: 6972 203d 7e20 732f 5c2f 2b24 2f2f 3b0a ir =~ s/\/+$//;. │ │ │ -000045c0: 0a0a 6d79 2028 4070 6172 2920 3d20 2829 ..my (@par) = () │ │ │ -000045d0: 3b0a 6966 2028 6465 6669 6e65 6420 246c ;.if (defined $l │ │ │ -000045e0: 6f67 4669 6c65 290a 7b0a 2020 2020 7075 ogFile).{. pu │ │ │ -000045f0: 7368 2040 7061 722c 2028 272d 6669 6c65 sh @par, ('-file │ │ │ -00004600: 2720 3d3e 2024 6c6f 6746 696c 652c 0a09 ' => $logFile,.. │ │ │ -00004610: 0927 2d6d 756c 7469 7072 696e 7427 203d .'-multiprint' = │ │ │ -00004620: 3e20 2779 6573 2729 3b0a 7d0a 656c 7365 > 'yes');.}.else │ │ │ -00004630: 0a7b 0a20 2020 2070 7573 6820 4070 6172 .{. push @par │ │ │ -00004640: 2c20 2827 2d66 696c 6564 6573 6372 6970 , ('-filedescrip │ │ │ -00004650: 746f 7227 2c20 2a53 5444 4f55 5429 3b0a tor', *STDOUT);. │ │ │ -00004660: 7d0a 0a6d 7920 2824 7072 4c6f 674b 696e }..my ($prLogKin │ │ │ -00004670: 6429 203d 205b 2741 3a42 4547 494e 272c d) = ['A:BEGIN', │ │ │ -00004680: 0a09 0920 2020 275a 3a45 4e44 272c 0a09 ... 'Z:END',.. │ │ │ -00004690: 0920 2020 2756 3a56 4552 5349 4f4e 272c . 'V:VERSION', │ │ │ -000046a0: 0a09 0920 2020 2749 3a49 4e46 4f27 2c0a ... 'I:INFO',. │ │ │ -000046b0: 0909 2020 2027 573a 5741 524e 494e 4727 .. 'W:WARNING' │ │ │ -000046c0: 2c0a 0909 2020 2027 453a 4552 524f 5227 ,... 'E:ERROR' │ │ │ -000046d0: 2c0a 0909 2020 2027 503a 5052 4f47 5245 ,... 'P:PROGRE │ │ │ -000046e0: 5353 272c 0a09 0920 2020 2753 3a53 5441 SS',... 'S:STA │ │ │ -000046f0: 5449 5354 4943 272c 0a09 0920 2020 2744 TISTIC',... 'D │ │ │ -00004700: 3a44 4542 5547 275d 3b0a 6d79 2024 7072 :DEBUG'];.my $pr │ │ │ -00004710: 4c6f 6731 203d 2070 7269 6e74 4c6f 672d Log1 = printLog- │ │ │ -00004720: 3e6e 6577 2827 2d6b 696e 6427 203d 3e20 >new('-kind' => │ │ │ -00004730: 2470 724c 6f67 4b69 6e64 2c0a 0909 0920 $prLogKind,.... │ │ │ -00004740: 2020 4070 6172 2c0a 0909 0920 2020 272d @par,.... '- │ │ │ -00004750: 7769 7468 5469 6d65 2720 3d3e 2024 7769 withTime' => $wi │ │ │ -00004760: 7468 5469 6d65 2c0a 0909 0920 2020 272d thTime,.... '- │ │ │ -00004770: 6d61 7846 696c 656c 656e 2720 3d3e 2024 maxFilelen' => $ │ │ │ -00004780: 6d61 7846 696c 656c 656e 2c0a 0909 0920 maxFilelen,.... │ │ │ -00004790: 2020 272d 6e6f 4f66 4f6c 6446 696c 6573 '-noOfOldFiles │ │ │ -000047a0: 2720 3d3e 2024 6e6f 4f66 4f6c 6446 696c ' => $noOfOldFil │ │ │ -000047b0: 6573 2c0a 0909 0920 2020 272d 7361 7665 es,.... '-save │ │ │ -000047c0: 4c6f 6773 2720 3d3e 2024 7361 7665 4c6f Logs' => $saveLo │ │ │ -000047d0: 6773 2c0a 0909 0920 2020 272d 636f 6d70 gs,.... '-comp │ │ │ -000047e0: 7265 7373 5769 7468 2720 3d3e 2024 636f ressWith' => $co │ │ │ -000047f0: 6d70 7265 7373 5769 7468 293b 0a0a 6d79 mpressWith);..my │ │ │ -00004800: 2024 7072 4c6f 6720 3d20 7072 696e 744c $prLog = printL │ │ │ -00004810: 6f67 4d75 6c74 6970 6c65 2d3e 6e65 7728 ogMultiple->new( │ │ │ -00004820: 272d 7072 4c6f 6773 2720 3d3e 205b 2470 '-prLogs' => [$p │ │ │ -00004830: 724c 6f67 315d 293b 0a24 7072 4c6f 672d rLog1]);.$prLog- │ │ │ -00004840: 3e66 6f72 6b28 2472 6571 293b 0a0a 6966 >fork($req);..if │ │ │ -00004850: 2028 2470 7269 6e74 290a 7b0a 2020 2020 ($print).{. │ │ │ -00004860: 2443 6865 636b 5061 722d 3e70 7269 6e74 $CheckPar->print │ │ │ -00004870: 2829 3b0a 2020 2020 6578 6974 2030 3b0a ();. exit 0;. │ │ │ -00004880: 7d0a 0a69 6620 2824 706c 7573 4c6f 6753 }..if ($plusLogS │ │ │ -00004890: 7464 6f75 7429 0a7b 0a20 2020 206d 7920 tdout).{. my │ │ │ -000048a0: 2470 203d 2070 7269 6e74 4c6f 672d 3e6e $p = printLog->n │ │ │ -000048b0: 6577 2827 2d6b 696e 6427 203d 3e20 2470 ew('-kind' => $p │ │ │ -000048c0: 724c 6f67 4b69 6e64 2c0a 0909 0920 2027 rLogKind,.... ' │ │ │ -000048d0: 2d66 696c 6564 6573 6372 6970 746f 7227 -filedescriptor' │ │ │ -000048e0: 2c20 2a53 5444 4f55 5429 3b0a 2020 2020 , *STDOUT);. │ │ │ -000048f0: 2470 724c 6f67 2d3e 6164 6428 272d 7072 $prLog->add('-pr │ │ │ -00004900: 4c6f 6773 2720 3d3e 205b 2470 5d29 3b0a Logs' => [$p]);. │ │ │ -00004910: 7d0a 6966 2028 2477 7269 7465 546f 4e61 }.if ($writeToNa │ │ │ -00004920: 6d65 6450 6970 6529 0a7b 0a20 2020 206d medPipe).{. m │ │ │ -00004930: 7920 2470 6c20 3d20 2470 724c 6f67 3b0a y $pl = $prLog;. │ │ │ -00004940: 2020 2020 6d79 2024 6e70 203d 2070 7269 my $np = pri │ │ │ -00004950: 6e74 4c6f 672d 3e6e 6577 2827 2d6b 696e ntLog->new('-kin │ │ │ -00004960: 6427 203d 3e20 2470 724c 6f67 4b69 6e64 d' => $prLogKind │ │ │ -00004970: 2c0a 0909 0920 2020 272d 6669 6c65 2720 ,.... '-file' │ │ │ -00004980: 3d3e 2024 7772 6974 6554 6f4e 616d 6564 => $writeToNamed │ │ │ -00004990: 5069 7065 2c0a 0909 0920 2020 272d 6d61 Pipe,.... '-ma │ │ │ -000049a0: 7846 696c 656c 656e 2720 3d3e 2030 293b xFilelen' => 0); │ │ │ -000049b0: 0a20 2020 2024 7072 4c6f 6720 3d20 7072 . $prLog = pr │ │ │ -000049c0: 696e 744c 6f67 4d75 6c74 6970 6c65 2d3e intLogMultiple-> │ │ │ -000049d0: 6e65 7728 272d 7072 4c6f 6773 2720 3d3e new('-prLogs' => │ │ │ -000049e0: 205b 2470 6c2c 2024 6e70 5d29 3b0a 7d0a [$pl, $np]);.}. │ │ │ -000049f0: 0a69 6620 2824 696e 7465 7261 6374 6976 .if ($interactiv │ │ │ -00004a00: 6529 0a7b 0a20 2020 2024 7665 7262 6f73 e).{. $verbos │ │ │ -00004a10: 6520 3d20 313b 0a20 2020 2024 6465 6275 e = 1;. $debu │ │ │ -00004a20: 6720 3d20 313b 0a7d 0a0a 246d 6169 6e3a g = 1;.}..$main: │ │ │ -00004a30: 3a49 4f43 6f6d 7072 6573 7344 6972 6563 :IOCompressDirec │ │ │ -00004a40: 7420 3d20 303b 0a65 7661 6c20 2275 7365 t = 0;.eval "use │ │ │ -00004a50: 2049 4f3a 3a43 6f6d 7072 6573 733a 3a42 IO::Compress::B │ │ │ -00004a60: 7a69 7032 2071 7728 627a 6970 3229 223b zip2 qw(bzip2)"; │ │ │ -00004a70: 0a69 6620 2824 4029 0a7b 0a20 2020 2024 .if ($@).{. $ │ │ │ -00004a80: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00004a90: 696e 6427 203d 3e20 2749 272c 0a09 0920 ind' => 'I',... │ │ │ -00004aa0: 2027 2d73 7472 2720 3d3e 0a09 0920 205b '-str' =>... [ │ │ │ -00004ab0: 2270 6c65 6173 6520 696e 7374 616c 6c20 "please install │ │ │ -00004ac0: 494f 3a3a 436f 6d70 7265 7373 3a3a 427a IO::Compress::Bz │ │ │ -00004ad0: 6970 3220 6672 6f6d 2022 202e 0a09 0920 ip2 from " .... │ │ │ -00004ae0: 2020 2243 5041 4e20 666f 7220 6265 7474 "CPAN for bett │ │ │ -00004af0: 6572 2070 6572 666f 726d 616e 6365 225d er performance"] │ │ │ -00004b00: 293b 0a7d 0a65 6c73 650a 7b0a 2020 2020 );.}.else.{. │ │ │ -00004b10: 246d 6169 6e3a 3a49 4f43 6f6d 7072 6573 $main::IOCompres │ │ │ -00004b20: 7344 6972 6563 7420 3d20 313b 0a7d 0a0a sDirect = 1;.}.. │ │ │ -00004b30: 0a24 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00004b40: 2d6b 696e 6427 203d 3e20 2741 272c 0a09 -kind' => 'A',.. │ │ │ -00004b50: 2020 2020 2020 272d 7374 7227 203d 3e0a '-str' =>. │ │ │ -00004b60: 0920 2020 2020 205b 2263 6865 636b 696e . ["checkin │ │ │ -00004b70: 6720 7265 6665 7265 6e63 6573 2061 6e64 g references and │ │ │ -00004b80: 2062 6163 6b75 7020 636f 7079 696e 6720 backup copying │ │ │ -00004b90: 696e 203c 2462 6163 6b75 7044 6972 3e22 in <$backupDir>" │ │ │ -00004ba0: 5d29 3b0a 2470 724c 6f67 2d3e 7072 696e ]);.$prLog->prin │ │ │ -00004bb0: 7428 272d 6b69 6e64 2720 3d3e 2027 5627 t('-kind' => 'V' │ │ │ -00004bc0: 2c0a 0920 2020 2020 2027 2d73 7472 2720 ,.. '-str' │ │ │ -00004bd0: 3d3e 205b 2273 746f 7265 4261 636b 7570 => ["storeBackup │ │ │ -00004be0: 5570 6461 7465 4261 636b 7570 2e70 6c2c UpdateBackup.pl, │ │ │ -00004bf0: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC │ │ │ -00004c00: 4b55 5056 4552 5349 4f4e 225d 293b 0a0a KUPVERSION"]);.. │ │ │ -00004c10: 263a 3a63 6865 636b 4c6f 636b 4669 6c65 &::checkLockFile │ │ │ -00004c20: 2824 6c6f 636b 4669 6c65 2c20 2470 724c ($lockFile, $prL │ │ │ -00004c30: 6f67 293b 0a0a 6578 6974 2031 0a20 2020 og);..exit 1. │ │ │ -00004c40: 2075 6e6c 6573 7320 2664 656c 6574 654f unless &deleteO │ │ │ -00004c50: 6c64 4261 636b 7570 4469 7273 3a3a 6368 ldBackupDirs::ch │ │ │ -00004c60: 6563 6b54 696d 6553 6361 6c65 466f 726d eckTimeScaleForm │ │ │ -00004c70: 6174 2827 6172 6368 6976 6544 7572 6174 at('archiveDurat │ │ │ -00004c80: 696f 6e44 656c 7461 4361 6368 6527 2c0a ionDeltaCache',. │ │ │ -00004c90: 0909 0909 0909 2020 2020 2020 2461 7263 ...... $arc │ │ │ -00004ca0: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt │ │ │ -00004cb0: 6143 6163 6865 2c0a 0909 0909 0909 2020 aCache,....... │ │ │ -00004cc0: 2020 2020 2470 724c 6f67 2c20 3029 3b0a $prLog, 0);. │ │ │ -00004cd0: 0a6d 7920 2825 7365 7269 6573 546f 436f .my (%seriesToCo │ │ │ -00004ce0: 7079 293b 2020 2023 2024 7365 7269 6573 py); # $series │ │ │ -00004cf0: 546f 436f 7079 7b73 6572 6965 737d 7b62 ToCopy{series}{b │ │ │ -00004d00: 6163 6b75 7043 6f70 794e 616d 657d 0a6d ackupCopyName}.m │ │ │ -00004d10: 7920 2464 656c 7461 4361 6368 6520 3d20 y $deltaCache = │ │ │ -00004d20: 756e 6465 663b 0a6d 7920 2462 6163 6b75 undef;.my $backu │ │ │ -00004d30: 7054 7970 6520 3d20 276e 6f6e 6527 3b0a pType = 'none';. │ │ │ -00004d40: 6966 2028 2d65 2022 2462 6163 6b75 7044 if (-e "$backupD │ │ │ -00004d50: 6972 2f24 6261 7365 5472 6565 436f 6e66 ir/$baseTreeConf │ │ │ -00004d60: 2220 616e 6420 6e6f 7420 2464 6f6e 7443 " and not $dontC │ │ │ -00004d70: 6f70 7942 6163 6b75 7029 0a7b 0a23 2072 opyBackup).{.# r │ │ │ -00004d80: 6561 6420 7374 6f72 6542 6163 6b75 7042 ead storeBackupB │ │ │ -00004d90: 6173 6554 7265 652e 636f 6e66 2069 6e20 aseTree.conf in │ │ │ -00004da0: 2462 6163 6b75 7044 6972 0a20 2020 206d $backupDir. m │ │ │ -00004db0: 7920 2824 6261 636b 7570 5472 6565 4e61 y ($backupTreeNa │ │ │ -00004dc0: 6d65 2c20 2473 6572 6965 7354 6f44 6973 me, $seriesToDis │ │ │ -00004dd0: 7472 6962 7574 6529 3b0a 2020 2020 2824 tribute);. ($ │ │ │ -00004de0: 6261 636b 7570 5472 6565 4e61 6d65 2c20 backupTreeName, │ │ │ -00004df0: 2462 6163 6b75 7054 7970 652c 2024 7365 $backupType, $se │ │ │ -00004e00: 7269 6573 546f 4469 7374 7269 6275 7465 riesToDistribute │ │ │ -00004e10: 2c20 2464 656c 7461 4361 6368 6529 203d , $deltaCache) = │ │ │ -00004e20: 0a09 263a 3a72 6561 6442 6163 6b75 7044 ..&::readBackupD │ │ │ -00004e30: 6972 4261 7365 5472 6565 436f 6e66 2822 irBaseTreeConf(" │ │ │ -00004e40: 2462 6163 6b75 7044 6972 2f24 6261 7365 $backupDir/$base │ │ │ -00004e50: 5472 6565 436f 6e66 222c 0a09 0909 0920 TreeConf",..... │ │ │ -00004e60: 2020 2020 263a 3a61 6273 6f6c 7574 6550 &::absoluteP │ │ │ -00004e70: 6174 6828 2462 6163 6b75 7044 6972 292c ath($backupDir), │ │ │ -00004e80: 2024 7072 4c6f 6729 3b0a 0a23 7072 696e $prLog);..#prin │ │ │ -00004e90: 7420 222d 312d 2d2d 2d2d 2d2d 2d2d 2d2d t "-1----------- │ │ │ -00004ea0: 2d2d 2d2d 2d3d 3d3d 3d3d 3d3d 2d2d 2d2d -----=======---- │ │ │ -00004eb0: 2d2d 2d2d 2d2d 2d2d 5c6e 223b 0a20 2020 --------\n";. │ │ │ -00004ec0: 2023 2072 6570 6c61 6365 2077 696c 6463 # replace wildc │ │ │ -00004ed0: 6172 6473 2069 6e20 7265 706c 6963 6174 ards in replicat │ │ │ -00004ee0: 6564 2062 6163 6b75 700a 2020 2020 6d79 ed backup. my │ │ │ -00004ef0: 2028 4072 6561 6453 6572 6965 7329 203d (@readSeries) = │ │ │ -00004f00: 2026 3a3a 6576 616c 4578 6365 7074 696f &::evalExceptio │ │ │ -00004f10: 6e4c 6973 745f 506c 7573 4d69 6e75 7328 nList_PlusMinus( │ │ │ -00004f20: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib │ │ │ -00004f30: 7574 652c 0a09 0909 0909 2020 2020 263a ute,...... &: │ │ │ -00004f40: 3a61 6273 6f6c 7574 6550 6174 6828 2462 :absolutePath($b │ │ │ -00004f50: 6163 6b75 7044 6972 292c 0a09 0909 0920 ackupDir),..... │ │ │ -00004f60: 2020 2020 2022 2462 6163 6b75 7054 7265 "$backupTre │ │ │ -00004f70: 654e 616d 6520 7365 7269 6573 222c 2027 eName series", ' │ │ │ -00004f80: 7365 7269 6573 272c 2031 2c0a 0909 0909 series', 1,..... │ │ │ -00004f90: 0920 2020 2075 6e64 6566 2c20 312c 2024 . undef, 1, $ │ │ │ -00004fa0: 7072 4c6f 6729 3b0a 2370 7269 6e74 2022 prLog);.#print " │ │ │ -00004fb0: 2d31 2e31 2d2d 2d2d 2d2d 7265 6164 5365 -1.1------readSe │ │ │ -00004fc0: 7269 6573 3d40 7265 6164 5365 7269 6573 ries=@readSeries │ │ │ -00004fd0: 5c6e 223b 0a0a 2370 7269 6e74 2022 6261 \n";..#print "ba │ │ │ -00004fe0: 636b 7570 5472 6565 4e61 6d65 203d 203c ckupTreeName = < │ │ │ -00004ff0: 2462 6163 6b75 7054 7265 654e 616d 653e $backupTreeName> │ │ │ -00005000: 5c6e 223b 0a23 7072 696e 7420 2262 6163 \n";.#print "bac │ │ │ -00005010: 6b75 7054 7970 6520 3d20 3c24 6261 636b kupType = <$back │ │ │ -00005020: 7570 5479 7065 3e5c 6e22 3b0a 2370 7269 upType>\n";.#pri │ │ │ -00005030: 6e74 2022 7365 7269 6573 546f 4469 7374 nt "seriesToDist │ │ │ -00005040: 7269 6275 7465 203d 2028 4024 7365 7269 ribute = (@$seri │ │ │ -00005050: 6573 546f 4469 7374 7269 6275 7465 295c esToDistribute)\ │ │ │ -00005060: 6e22 3b0a 2370 7269 6e74 2022 6465 6c74 n";.#print "delt │ │ │ -00005070: 6143 6163 6865 203d 203c 2464 656c 7461 aCache = <$delta │ │ │ -00005080: 4361 6368 653e 5c6e 223b 0a0a 2020 2020 Cache>\n";.. │ │ │ -00005090: 2320 6176 6f69 6420 6465 6c74 6143 6163 # avoid deltaCac │ │ │ -000050a0: 6865 2061 6e64 2062 6163 6b75 7044 6972 he and backupDir │ │ │ -000050b0: 2074 6f20 6265 2073 7562 6469 7265 6374 to be subdirect │ │ │ -000050c0: 6f72 6965 7320 6f66 2065 6163 6820 6f74 ories of each ot │ │ │ -000050d0: 6865 720a 2020 2020 2470 724c 6f67 2d3e her. $prLog-> │ │ │ -000050e0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -000050f0: 2027 4527 2c0a 0909 2020 272d 7374 7227 'E',... '-str' │ │ │ -00005100: 203d 3e0a 0909 2020 5b22 6465 6c74 6143 =>... ["deltaC │ │ │ -00005110: 6163 6865 203c 2464 656c 7461 4361 6368 ache <$deltaCach │ │ │ -00005120: 653e 2069 7320 6120 7375 6264 6972 6563 e> is a subdirec │ │ │ -00005130: 746f 7279 206f 6620 2220 2e0a 0909 2020 tory of " .... │ │ │ -00005140: 2022 6261 636b 7570 4469 7220 3c24 6261 "backupDir <$ba │ │ │ -00005150: 636b 7570 4469 723e 2c20 706c 6561 7365 ckupDir>, please │ │ │ -00005160: 2063 6861 6e67 6522 5d2c 0a09 0920 2027 change"],... ' │ │ │ -00005170: 2d65 7869 7427 203d 3e20 3129 0a09 6966 -exit' => 1)..if │ │ │ -00005180: 2026 3a3a 6973 5375 6244 6972 2824 6465 &::isSubDir($de │ │ │ -00005190: 6c74 6143 6163 6865 2c20 2462 6163 6b75 ltaCache, $backu │ │ │ -000051a0: 7044 6972 293b 0a20 2020 2024 7072 4c6f pDir);. $prLo │ │ │ -000051b0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -000051c0: 203d 3e20 2745 272c 0a09 0920 2027 2d73 => 'E',... '-s │ │ │ -000051d0: 7472 2720 3d3e 0a09 0920 205b 2262 6163 tr' =>... ["bac │ │ │ -000051e0: 6b75 7044 6972 203c 2462 6163 6b75 7044 kupDir <$backupD │ │ │ -000051f0: 6972 3e20 6973 2061 2073 7562 6469 7265 ir> is a subdire │ │ │ -00005200: 6374 6f72 7920 6f66 2022 202e 0a09 0920 ctory of " .... │ │ │ -00005210: 2020 2264 656c 7461 4361 6368 6520 3c24 "deltaCache <$ │ │ │ -00005220: 6465 6c74 6143 6163 6865 3e2c 2070 6c65 deltaCache>, ple │ │ │ -00005230: 6173 6520 6368 616e 6765 225d 2c0a 0909 ase change"],... │ │ │ -00005240: 2020 272d 6578 6974 2720 3d3e 2031 290a '-exit' => 1). │ │ │ -00005250: 0969 6620 263a 3a69 7353 7562 4469 7228 .if &::isSubDir( │ │ │ -00005260: 2462 6163 6b75 7044 6972 2c20 2464 656c $backupDir, $del │ │ │ -00005270: 7461 4361 6368 6529 3b0a 0a20 2020 2069 taCache);.. i │ │ │ -00005280: 6620 2824 6261 636b 7570 5479 7065 2065 f ($backupType e │ │ │ -00005290: 7120 2763 6f70 7927 290a 2020 2020 7b0a q 'copy'). {. │ │ │ -000052a0: 2370 7269 6e74 2022 2d32 2d2d 2d2d 2d2d #print "-2------ │ │ │ -000052b0: 2d2d 2d2d 2d2d 2d2d 2d2d 3d3d 3d3d 3d3d ----------====== │ │ │ -000052c0: 3d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 =------------\n" │ │ │ -000052d0: 3b0a 0923 2062 7569 6c64 2068 6173 6820 ;..# build hash │ │ │ -000052e0: 7769 7468 206c 6973 7420 6f66 2073 6572 with list of ser │ │ │ -000052f0: 6965 7320 696e 2072 6570 6c69 6361 7469 ies in replicati │ │ │ -00005300: 6f6e 2064 6972 6563 746f 7279 0a09 6d79 on directory..my │ │ │ -00005310: 2028 2572 6561 6453 6572 6965 7329 3b0a (%readSeries);. │ │ │ -00005320: 2370 7269 6e74 2022 7265 6164 5365 7269 #print "readSeri │ │ │ -00005330: 6573 3d3c 4072 6561 6453 6572 6965 733e es=<@readSeries> │ │ │ -00005340: 5c6e 223b 0a09 666f 7265 6163 6820 6d79 \n";..foreach my │ │ │ -00005350: 2024 7220 2840 7265 6164 5365 7269 6573 $r (@readSeries │ │ │ -00005360: 290a 097b 0a23 7072 696e 7420 22df dfdf )..{.#print "... │ │ │ -00005370: dfdf dfdf dfdf df24 72df dfdf dfdf 5c6e .......$r.....\n │ │ │ -00005380: 223b 0a09 2020 2020 2472 6561 6453 6572 ";.. $readSer │ │ │ -00005390: 6965 737b 2472 7d20 3d20 313b 0a09 7d0a ies{$r} = 1;..}. │ │ │ -000053a0: 0a09 2320 7265 6164 2064 656c 7461 4361 ..# read deltaCa │ │ │ -000053b0: 6368 652e 636f 6e66 2069 6e20 2464 656c che.conf in $del │ │ │ -000053c0: 7461 4361 6368 650a 096d 7920 2463 7363 taCache..my $csc │ │ │ -000053d0: 4669 6c65 203d 2022 2464 656c 7461 4361 File = "$deltaCa │ │ │ -000053e0: 6368 652f 2464 656c 7461 4361 6368 6543 che/$deltaCacheC │ │ │ -000053f0: 6f6e 6622 3b0a 096d 7920 2840 6263 2920 onf";..my (@bc) │ │ │ -00005400: 3d20 263a 3a72 6561 6444 656c 7461 4361 = &::readDeltaCa │ │ │ -00005410: 6368 6543 6f6e 6628 2463 7363 4669 6c65 cheConf($cscFile │ │ │ -00005420: 2c20 2464 656c 7461 4361 6368 652c 2031 , $deltaCache, 1 │ │ │ -00005430: 2c20 2470 724c 6f67 293b 0a0a 2370 7269 , $prLog);..#pri │ │ │ -00005440: 6e74 2022 2d32 2e35 2d2d 2d2d 2d2d 2d2d nt "-2.5-------- │ │ │ -00005450: 2d2d 2d2d 2d2d 2d2d 3d3d 3d3d 3d3d 3d2d --------=======- │ │ │ -00005460: 2d2d 2d2d 2d2d 2d2d 2d2d 2d5c 6e22 3b0a -----------\n";. │ │ │ -00005470: 0923 2067 656e 6572 6174 6520 6c69 7374 .# generate list │ │ │ -00005480: 2077 6974 6820 6578 6973 7469 6e67 2073 with existing s │ │ │ -00005490: 6572 6965 7320 696e 2044 656c 7461 2043 eries in Delta C │ │ │ -000054a0: 6163 6865 0a09 6d79 2028 406c 6973 7453 ache..my (@listS │ │ │ -000054b0: 6572 6965 7345 7869 7374 496e 4465 6c74 eriesExistInDelt │ │ │ -000054c0: 6129 203d 2028 293b 0a09 666f 7265 6163 a) = ();..foreac │ │ │ -000054d0: 6820 6d79 2024 6263 2028 4062 6329 0a09 h my $bc (@bc).. │ │ │ -000054e0: 7b0a 2370 7269 6e74 2022 3d3d 3d3e 2024 {.#print "===> $ │ │ │ -000054f0: 6263 5b30 5d5b 305d 202d 2d2d 2d2d 2d2d bc[0][0] ------- │ │ │ -00005500: 2d2d 2024 6261 636b 7570 5472 6565 4e61 -- $backupTreeNa │ │ │ -00005510: 6d65 5c6e 223b 0a09 2020 2020 6966 2028 me\n";.. if ( │ │ │ -00005520: 2462 635b 305d 5b30 5d20 6571 2024 6261 $bc[0][0] eq $ba │ │ │ -00005530: 636b 7570 5472 6565 4e61 6d65 290a 0920 ckupTreeName).. │ │ │ -00005540: 2020 207b 0a09 0928 406c 6973 7453 6572 {...(@listSer │ │ │ -00005550: 6965 7345 7869 7374 496e 4465 6c74 6129 iesExistInDelta) │ │ │ -00005560: 203d 2028 4024 6263 5b31 2e2e 4024 6263 = (@$bc[1..@$bc │ │ │ -00005570: 2d31 5d29 3b0a 0920 2020 207d 0a23 7072 -1]);.. }.#pr │ │ │ -00005580: 696e 7420 222d 332d 2d2d 2d2d 2d2d 2d2d int "-3--------- │ │ │ -00005590: 2d2b 4465 6c74 6120 4361 6368 6520 5365 -+Delta Cache Se │ │ │ -000055a0: 7269 6573 2b2b 2b2b 2b2b 406c 6973 7453 ries++++++@listS │ │ │ -000055b0: 6572 6965 7345 7869 7374 496e 4465 6c74 eriesExistInDelt │ │ │ -000055c0: 612b 2b5c 6e22 3b0a 097d 0a09 2320 6765 a++\n";..}..# ge │ │ │ -000055d0: 6e65 7261 7465 206d 6973 7369 6e67 2073 nerate missing s │ │ │ -000055e0: 6572 6965 7320 6469 7265 6374 6f72 6965 eries directorie │ │ │ -000055f0: 7320 696e 2072 6570 6c69 6361 7469 6f6e s in replication │ │ │ -00005600: 2064 6972 6563 746f 7279 0a09 2320 5468 directory..# Th │ │ │ -00005610: 6973 2068 6173 2074 6f20 6265 2064 6f6e is has to be don │ │ │ -00005620: 6520 276f 6e20 7468 6520 666c 7927 2061 e 'on the fly' a │ │ │ -00005630: 6c73 6f20 7768 656e 2075 7369 6e67 2077 lso when using w │ │ │ -00005640: 696c 6463 6172 6473 2069 6e20 7365 7269 ildcards in seri │ │ │ -00005650: 6573 206e 616d 6573 0a09 6d79 2024 6372 es names..my $cr │ │ │ -00005660: 6561 7465 5365 7269 6573 203d 2030 3b0a eateSeries = 0;. │ │ │ -00005670: 0966 6f72 6561 6368 206d 7920 2464 2028 .foreach my $d ( │ │ │ -00005680: 406c 6973 7453 6572 6965 7345 7869 7374 @listSeriesExist │ │ │ -00005690: 496e 4465 6c74 6129 0a09 7b0a 2370 7269 InDelta)..{.#pri │ │ │ -000056a0: 6e74 2022 332e 3520 2d2d 203c 2464 3e20 nt "3.5 -- <$d> │ │ │ -000056b0: 2d2d 2022 2c20 2864 6566 696e 6564 2024 -- ", (defined $ │ │ │ -000056c0: 7265 6164 5365 7269 6573 7b24 647d 292c readSeries{$d}), │ │ │ -000056d0: 2022 5c6e 223b 0a09 2020 2020 6966 2028 "\n";.. if ( │ │ │ -000056e0: 2463 7265 6174 654e 6577 5365 7269 6573 $createNewSeries │ │ │ -000056f0: 2061 6e64 206e 6f74 2064 6566 696e 6564 and not defined │ │ │ -00005700: 2024 7265 6164 5365 7269 6573 7b24 647d $readSeries{$d} │ │ │ -00005710: 290a 0920 2020 207b 0a23 7072 696e 7420 ).. {.#print │ │ │ -00005720: 2233 2e36 2d2d 203c 2462 6163 6b75 7044 "3.6-- <$backupD │ │ │ -00005730: 6972 2f24 643e 5c6e 223b 0a09 0965 7869 ir/$d>\n";...exi │ │ │ -00005740: 7420 310a 0909 2020 2020 756e 6c65 7373 t 1... unless │ │ │ -00005750: 2026 3a3a 6d61 6b65 4469 7250 6174 6828 &::makeDirPath( │ │ │ -00005760: 2224 6261 636b 7570 4469 722f 2464 222c "$backupDir/$d", │ │ │ -00005770: 2024 7072 4c6f 6729 3b0a 0909 2463 7265 $prLog);...$cre │ │ │ -00005780: 6174 6553 6572 6965 7320 3d20 313b 0a09 ateSeries = 1;.. │ │ │ -00005790: 2020 2020 7d0a 097d 0a23 7072 696e 7420 }..}.#print │ │ │ -000057a0: 222d 342d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d "-4------------- │ │ │ -000057b0: 2d2d 2d3d 3d3d 3d3d 3d3d 2d2d 2d2d 2d2d ---=======------ │ │ │ -000057c0: 2d2d 2d2d 2d2d 5c6e 223b 0a23 7072 696e ------\n";.#prin │ │ │ -000057d0: 7420 222d 342e 312d 2d2d 2d2d 2d73 6572 t "-4.1------ser │ │ │ -000057e0: 6965 7354 6f44 6973 7472 6962 7574 653d iesToDistribute= │ │ │ -000057f0: 4024 7365 7269 6573 546f 4469 7374 7269 @$seriesToDistri │ │ │ -00005800: 6275 7465 5c6e 223b 0a09 6966 2028 2463 bute\n";..if ($c │ │ │ -00005810: 7265 6174 6553 6572 6965 7329 0a09 7b0a reateSeries)..{. │ │ │ -00005820: 0920 2020 2023 2072 6570 6c61 6365 2077 . # replace w │ │ │ -00005830: 696c 6463 6172 6473 2069 6e20 7265 706c ildcards in repl │ │ │ -00005840: 6963 6174 6564 2062 6163 6b75 700a 0920 icated backup.. │ │ │ -00005850: 2020 2028 4072 6561 6453 6572 6965 7329 (@readSeries) │ │ │ -00005860: 203d 2026 3a3a 6576 616c 4578 6365 7074 = &::evalExcept │ │ │ -00005870: 696f 6e4c 6973 745f 506c 7573 4d69 6e75 ionList_PlusMinu │ │ │ -00005880: 7328 2473 6572 6965 7354 6f44 6973 7472 s($seriesToDistr │ │ │ -00005890: 6962 7574 652c 0a09 0909 0909 0920 2020 ibute,....... │ │ │ -000058a0: 2026 3a3a 6162 736f 6c75 7465 5061 7468 &::absolutePath │ │ │ -000058b0: 2824 6261 636b 7570 4469 7229 2c0a 0909 ($backupDir),... │ │ │ -000058c0: 0909 0909 2020 2020 2224 6261 636b 7570 .... "$backup │ │ │ -000058d0: 5472 6565 4e61 6d65 2073 6572 6965 7322 TreeName series" │ │ │ -000058e0: 2c20 2773 6572 6965 7327 2c0a 0909 0909 , 'series',..... │ │ │ -000058f0: 0909 2020 2020 312c 2075 6e64 6566 2c20 .. 1, undef, │ │ │ -00005900: 312c 2024 7072 4c6f 6729 3b0a 097d 0a09 1, $prLog);..}.. │ │ │ -00005910: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib │ │ │ -00005920: 7574 6520 3d5c 4072 6561 6453 6572 6965 ute =\@readSerie │ │ │ -00005930: 733b 0a23 7072 696e 7420 222d 342e 322d s;.#print "-4.2- │ │ │ -00005940: 2d2d 2d2d 2d73 6572 6965 7354 6f44 6973 -----seriesToDis │ │ │ -00005950: 7472 6962 7574 653d 4024 7365 7269 6573 tribute=@$series │ │ │ -00005960: 546f 4469 7374 7269 6275 7465 5c6e 223b ToDistribute\n"; │ │ │ -00005970: 0a0a 0924 6175 746f 7265 7061 6972 4572 ...$autorepairEr │ │ │ -00005980: 726f 7220 3d20 303b 0a23 0923 2072 6561 ror = 0;.#.# rea │ │ │ -00005990: 6420 6465 6c74 6143 6163 6865 2e63 6f6e d deltaCache.con │ │ │ -000059a0: 6620 696e 2024 6465 6c74 6143 6163 6865 f in $deltaCache │ │ │ -000059b0: 0a23 096d 7920 2463 7363 4669 6c65 203d .#.my $cscFile = │ │ │ -000059c0: 2022 2464 656c 7461 4361 6368 652f 2464 "$deltaCache/$d │ │ │ -000059d0: 656c 7461 4361 6368 6543 6f6e 6622 3b0a eltaCacheConf";. │ │ │ -000059e0: 2309 6d79 2028 4062 6329 203d 2026 3a3a #.my (@bc) = &:: │ │ │ -000059f0: 7265 6164 4465 6c74 6143 6163 6865 436f readDeltaCacheCo │ │ │ -00005a00: 6e66 2824 6373 6346 696c 652c 2024 6465 nf($cscFile, $de │ │ │ -00005a10: 6c74 6143 6163 6865 2c20 312c 2024 7072 ltaCache, 1, $pr │ │ │ -00005a20: 4c6f 6729 3b0a 0a09 2320 6368 6563 6b20 Log);...# check │ │ │ -00005a30: 636f 6e73 6973 7465 6e63 7920 6f66 2062 consistency of b │ │ │ -00005a40: 6163 6b75 7043 6f70 7920 616e 6420 6465 ackupCopy and de │ │ │ -00005a50: 6c74 6143 6163 6865 2063 6f6e 6669 6775 ltaCache configu │ │ │ -00005a60: 7261 7469 6f6e 0a09 6d79 2024 666f 756e ration..my $foun │ │ │ -00005a70: 6442 6163 6b75 7054 7265 654e 616d 6546 dBackupTreeNameF │ │ │ -00005a80: 6c61 6720 3d20 303b 0a09 666f 7265 6163 lag = 0;..foreac │ │ │ -00005a90: 6820 6d79 2024 6263 2028 4062 6329 0a09 h my $bc (@bc).. │ │ │ -00005aa0: 7b0a 0920 2020 206d 7920 2473 3b20 2020 {.. my $s; │ │ │ -00005ab0: 2320 7365 7420 6861 7368 2077 6974 6820 # set hash with │ │ │ -00005ac0: 616c 6c20 7365 7269 6573 2074 6f20 636f all series to co │ │ │ -00005ad0: 7079 2074 6f20 616c 6c20 6261 636b 7570 py to all backup │ │ │ -00005ae0: 436f 7069 6573 0a09 2020 2020 666f 7265 Copies.. fore │ │ │ -00005af0: 6163 6820 2473 2028 4024 6263 5b31 2e2e ach $s (@$bc[1.. │ │ │ -00005b00: 4024 6263 2d31 5d29 0a09 2020 2020 7b0a @$bc-1]).. {. │ │ │ -00005b10: 0909 2473 6572 6965 7354 6f43 6f70 797b ..$seriesToCopy{ │ │ │ -00005b20: 2473 7d7b 2424 6263 5b30 5d7d 203d 2031 $s}{$$bc[0]} = 1 │ │ │ -00005b30: 3b0a 0920 2020 2020 2020 2020 2020 2020 ;.. │ │ │ -00005b40: 2020 2020 2020 2320 7365 7269 6573 2024 # series $ │ │ │ -00005b50: 7320 6861 7320 746f 2062 6520 636f 7069 s has to be copi │ │ │ -00005b60: 6564 2074 6f20 2462 6163 6b75 7054 7265 ed to $backupTre │ │ │ -00005b70: 654e 616d 650a 2370 7269 6e74 2022 2323 eName.#print "## │ │ │ -00005b80: 2323 7365 7420 2473 202d 3e20 222c 2024 ##set $s -> ", $ │ │ │ -00005b90: 2462 635b 305d 2c20 2220 3d20 315c 6e22 $bc[0], " = 1\n" │ │ │ -00005ba0: 3b0a 0920 2020 207d 0a0a 0920 2020 2069 ;.. }... i │ │ │ -00005bb0: 6620 2824 2462 635b 305d 2065 7120 2462 f ($$bc[0] eq $b │ │ │ -00005bc0: 6163 6b75 7054 7265 654e 616d 6529 0a09 ackupTreeName).. │ │ │ -00005bd0: 2020 2020 7b0a 0909 2470 724c 6f67 2d3e {...$prLog-> │ │ │ -00005be0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00005bf0: 2027 4527 2c0a 0909 0920 2020 2020 2027 'E',.... ' │ │ │ -00005c00: 2d73 7472 2720 3d3e 205b 2224 6373 6346 -str' => ["$cscF │ │ │ -00005c10: 696c 653a 2062 6163 6b75 7044 6972 206e ile: backupDir n │ │ │ -00005c20: 616d 6520 3c22 202e 0a09 0909 0909 2024 ame <" ....... $ │ │ │ -00005c30: 2462 635b 305d 202e 2022 3e20 6465 6669 $bc[0] . "> defi │ │ │ -00005c40: 6e65 6420 7477 6963 6522 5d2c 0a09 0909 ned twice"],.... │ │ │ -00005c50: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00005c60: 2031 290a 0909 2020 2020 6966 2024 666f 1)... if $fo │ │ │ -00005c70: 756e 6442 6163 6b75 7054 7265 654e 616d undBackupTreeNam │ │ │ -00005c80: 6546 6c61 6720 3d3d 2031 3b0a 0a09 0924 eFlag == 1;....$ │ │ │ -00005c90: 666f 756e 6442 6163 6b75 7054 7265 654e foundBackupTreeN │ │ │ -00005ca0: 616d 6546 6c61 6720 3d20 313b 0a23 7072 ameFlag = 1;.#pr │ │ │ -00005cb0: 696e 7420 222d 2d40 2462 632d 2d5c 6e22 int "--@$bc--\n" │ │ │ -00005cc0: 3b0a 0909 6d79 2028 2573 293b 0a09 0966 ;...my (%s);...f │ │ │ -00005cd0: 6f72 6561 6368 2024 7320 2840 2462 635b oreach $s (@$bc[ │ │ │ -00005ce0: 312e 2e40 2462 632d 315d 290a 0909 7b0a 1..@$bc-1])...{. │ │ │ -00005cf0: 0909 2020 2020 2473 7b24 737d 203d 2031 .. $s{$s} = 1 │ │ │ -00005d00: 3b0a 0909 7d0a 0909 666f 7265 6163 6820 ;...}...foreach │ │ │ -00005d10: 2473 2028 4024 7365 7269 6573 546f 4469 $s (@$seriesToDi │ │ │ -00005d20: 7374 7269 6275 7465 290a 0909 7b0a 2370 stribute)...{.#p │ │ │ -00005d30: 7269 6e74 2022 2d2d 2d72 656d 6f76 696e rint "---removin │ │ │ -00005d40: 6720 7365 7269 6573 203c 2473 3e5c 6e22 g series <$s>\n" │ │ │ -00005d50: 3b0a 0909 2020 2020 6966 2028 6578 6973 ;... if (exis │ │ │ -00005d60: 7473 2024 737b 2473 7d29 0a09 0920 2020 ts $s{$s})... │ │ │ -00005d70: 207b 0a09 0909 6465 6c65 7465 2024 737b {....delete $s{ │ │ │ -00005d80: 2473 7d3b 0a09 0920 2020 207d 0a09 0920 $s};... }... │ │ │ -00005d90: 2020 2065 6c73 650a 0909 2020 2020 7b0a else... {. │ │ │ -00005da0: 0909 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00005db0: 2827 2d6b 696e 6427 203d 3e20 2757 272c ('-kind' => 'W', │ │ │ -00005dc0: 0a09 0909 0920 2020 2020 2027 2d73 7472 ..... '-str │ │ │ -00005dd0: 2720 3d3e 0a09 0909 0920 2020 2020 205b ' =>..... [ │ │ │ -00005de0: 2224 6373 6346 696c 653a 2073 6572 6965 "$cscFile: serie │ │ │ -00005df0: 7320 3c24 733e 2069 7320 6d69 7373 696e s <$s> is missin │ │ │ -00005e00: 6720 696e 203c 2220 2e0a 0909 0909 2020 g in <" ...... │ │ │ -00005e10: 2020 2020 2024 2462 635b 305d 202e 2022 $$bc[0] . " │ │ │ -00005e20: 3e2c 2064 6566 696e 6564 2069 6e20 2220 >, defined in " │ │ │ -00005e30: 2e0a 0909 0909 2020 2020 2020 2022 2462 ...... "$b │ │ │ -00005e40: 6163 6b75 7044 6972 2f24 6261 7365 5472 ackupDir/$baseTr │ │ │ -00005e50: 6565 436f 6e66 225d 290a 0909 0920 2020 eeConf"]).... │ │ │ -00005e60: 2075 6e6c 6573 7320 246e 6f57 6172 6e69 unless $noWarni │ │ │ -00005e70: 6e67 4469 6666 5365 7269 6573 496e 4261 ngDiffSeriesInBa │ │ │ -00005e80: 636b 7570 436f 7079 3b0a 0909 2020 2020 ckupCopy;... │ │ │ -00005e90: 7d0a 0a09 097d 0a0a 0909 2470 724c 6f67 }....}....$prLog │ │ │ -00005ea0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00005eb0: 3d3e 2027 4527 2c0a 0909 0920 2020 2020 => 'E',.... │ │ │ -00005ec0: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... │ │ │ -00005ed0: 2020 2020 5b22 2462 6163 6b75 7044 6972 ["$backupDir │ │ │ -00005ee0: 2f24 6261 7365 5472 6565 436f 6e66 2073 /$baseTreeConf s │ │ │ -00005ef0: 6572 6965 7320 3c22 202e 0a09 0909 2020 eries <" ..... │ │ │ -00005f00: 2020 2020 206a 6f69 6e28 273e 3c27 2c20 join('><', │ │ │ -00005f10: 736f 7274 206b 6579 7320 2573 2920 2e20 sort keys %s) . │ │ │ -00005f20: 223e 206d 6973 7369 6e67 2069 6e20 3c22 "> missing in <" │ │ │ -00005f30: 202e 0a09 0909 2020 2020 2020 2024 2462 ..... $$b │ │ │ -00005f40: 635b 305d 202e 2022 3e2c 2064 6566 696e c[0] . ">, defin │ │ │ -00005f50: 6564 2069 6e20 2463 7363 4669 6c65 222c ed in $cscFile", │ │ │ -00005f60: 0a09 0909 2020 2020 2020 2022 7573 6520 .... "use │ │ │ -00005f70: 6f70 7469 6f6e 202d 2d63 7265 6174 654e option --createN │ │ │ -00005f80: 6577 5365 7269 6573 2069 6620 796f 7520 ewSeries if you │ │ │ -00005f90: 7761 6e74 2022 202e 0a09 0909 2020 2020 want " ..... │ │ │ -00005fa0: 2020 2022 6d69 7373 696e 6720 7365 7269 "missing seri │ │ │ -00005fb0: 6573 2074 6f20 6265 2063 7265 6174 6564 es to be created │ │ │ -00005fc0: 2061 7574 6f6d 6174 6963 616c 6c79 225d automatically"] │ │ │ -00005fd0: 2c0a 0909 0920 2020 2020 2027 2d65 7869 ,.... '-exi │ │ │ -00005fe0: 7427 203d 3e20 3129 0a09 0920 2020 2069 t' => 1)... i │ │ │ -00005ff0: 6620 7363 616c 6172 206b 6579 7320 2573 f scalar keys %s │ │ │ -00006000: 3b0a 0920 2020 207d 0a09 7d0a 0a09 2320 ;.. }..}...# │ │ │ -00006010: 636f 7079 2062 6163 6b75 7020 6469 7265 copy backup dire │ │ │ -00006020: 6374 6f72 6965 7320 2873 7469 6c6c 2069 ctories (still i │ │ │ -00006030: 6e20 2462 6163 6b75 7054 7970 6520 6571 n $backupType eq │ │ │ -00006040: 2027 636f 7079 2729 0a09 6d79 2024 733b 'copy')..my $s; │ │ │ -00006050: 0a09 666f 7265 6163 6820 2473 2028 4024 ..foreach $s (@$ │ │ │ -00006060: 7365 7269 6573 546f 4469 7374 7269 6275 seriesToDistribu │ │ │ -00006070: 7465 290a 097b 0a09 2020 2020 6e65 7874 te)..{.. next │ │ │ -00006080: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d "$del │ │ │ -00006090: 7461 4361 6368 652f 2473 223b 0a0a 0920 taCache/$s";... │ │ │ -000060a0: 2020 206d 6b64 6972 2022 2462 6163 6b75 mkdir "$backu │ │ │ -000060b0: 7044 6972 2f24 7322 0a09 0975 6e6c 6573 pDir/$s"...unles │ │ │ -000060c0: 7320 2d64 2022 2462 6163 6b75 7044 6972 s -d "$backupDir │ │ │ -000060d0: 2f24 7322 3b0a 0a09 2020 2020 6d79 2028 /$s";... my ( │ │ │ -000060e0: 4064 6972 7329 203d 2026 3a3a 7265 6164 @dirs) = &::read │ │ │ -000060f0: 4469 7253 7462 7528 2224 6465 6c74 6143 DirStbu("$deltaC │ │ │ -00006100: 6163 6865 2f24 7322 2c20 5f5f 4649 4c45 ache/$s", __FILE │ │ │ -00006110: 5f5f 2c20 5f5f 4c49 4e45 5f5f 2c0a 0909 __, __LINE__,... │ │ │ -00006120: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00006130: 275c 415c 647b 347d 5c2e 5c64 7b32 7d5c '\A\d{4}\.\d{2}\ │ │ │ -00006140: 2e5c 647b 327d 5f5c 647b 327d 5c2e 5c64 .\d{2}_\d{2}\.\d │ │ │ -00006150: 7b32 7d5c 2e5c 647b 327d 5c5a 272c 0a09 {2}\.\d{2}\Z',.. │ │ │ -00006160: 0909 0909 2470 724c 6f67 293b 0a09 2020 ....$prLog);.. │ │ │ -00006170: 2020 6d79 2024 643b 0a09 2020 2020 666f my $d;.. fo │ │ │ -00006180: 7265 6163 6820 2464 2028 4064 6972 7329 reach $d (@dirs) │ │ │ -00006190: 0a09 2020 2020 7b0a 0909 2320 7365 6172 .. {...# sear │ │ │ -000061a0: 6368 2069 6620 666c 6167 2066 696c 6520 ch if flag file │ │ │ -000061b0: 6973 2061 6c72 6561 6479 2063 6f6e 7461 is already conta │ │ │ -000061c0: 696e 696e 6720 7468 6973 2062 6163 6b75 ining this backu │ │ │ -000061d0: 7043 6f70 794e 616d 650a 0909 6c6f 6361 pCopyName...loca │ │ │ -000061e0: 6c20 2a46 494c 453b 0a09 0969 6620 282d l *FILE;...if (- │ │ │ -000061f0: 6420 2224 6465 6c74 6143 6163 6865 2f24 d "$deltaCache/$ │ │ │ -00006200: 732f 2464 2229 0a09 097b 0a23 7072 696e s/$d")...{.#prin │ │ │ -00006210: 7420 223d 313d 2464 5c6e 223b 0a09 0920 t "=1=$d\n";... │ │ │ -00006220: 2020 2069 6620 282d 6520 2224 6465 6c74 if (-e "$delt │ │ │ -00006230: 6143 6163 6865 2f24 732f 2464 2e6e 6f74 aCache/$s/$d.not │ │ │ -00006240: 4669 6e69 7368 6564 2229 0a09 0920 2020 Finished")... │ │ │ -00006250: 207b 0a23 7072 696e 7420 223d 323d 2464 {.#print "=2=$d │ │ │ -00006260: 5c6e 223b 0a09 0909 2470 724c 6f67 2d3e \n";....$prLog-> │ │ │ -00006270: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00006280: 2027 5727 2c0a 0909 0909 2020 2020 2020 'W',..... │ │ │ -00006290: 272d 7374 7227 203d 3e0a 0909 0909 2020 '-str' =>..... │ │ │ -000062a0: 2020 2020 5b22 3c24 6465 6c74 6143 6163 ["<$deltaCac │ │ │ -000062b0: 6865 2f24 732f 2464 3e20 6e6f 7420 6669 he/$s/$d> not fi │ │ │ -000062c0: 6e69 7368 6564 225d 293b 0a09 0909 6c61 nished"]);....la │ │ │ -000062d0: 7374 3b20 2023 2064 6f20 6e6f 7420 636f st; # do not co │ │ │ -000062e0: 7079 206c 6174 6572 2062 6163 6b75 7073 py later backups │ │ │ -000062f0: 206f 720a 0909 0920 2020 2020 2020 2320 or.... # │ │ │ -00006300: 6861 7264 206c 696e 6b69 6e67 2077 696c hard linking wil │ │ │ -00006310: 6c20 7275 6e20 696e 746f 2070 726f 626c l run into probl │ │ │ -00006320: 656d 730a 0909 2020 2020 7d0a 0a09 0920 ems... }.... │ │ │ -00006330: 2020 206d 7920 2466 6f75 6e64 203d 2030 my $found = 0 │ │ │ -00006340: 3b0a 0909 2020 2020 6966 2028 2d65 2022 ;... if (-e " │ │ │ -00006350: 2464 656c 7461 4361 6368 652f 2473 2f24 $deltaCache/$s/$ │ │ │ -00006360: 642e 636f 7069 6564 2229 0a09 0920 2020 d.copied")... │ │ │ -00006370: 207b 0a09 0909 6f70 656e 2846 494c 452c {....open(FILE, │ │ │ -00006380: 2027 3c27 2c20 2224 6465 6c74 6143 6163 '<', "$deltaCac │ │ │ -00006390: 6865 2f24 732f 2464 2e63 6f70 6965 6422 he/$s/$d.copied" │ │ │ -000063a0: 2920 6f72 0a09 0909 2020 2020 2470 724c ) or.... $prL │ │ │ -000063b0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -000063c0: 2720 3d3e 2027 4527 2c0a 0909 0909 0920 ' => 'E',...... │ │ │ -000063d0: 2027 2d73 7472 2720 3d3e 0a09 0909 0909 '-str' =>...... │ │ │ -000063e0: 2020 5b22 6361 6e6e 6f74 206f 7065 6e20 ["cannot open │ │ │ -000063f0: 3c24 6465 6c74 6143 6163 6865 2f24 732f <$deltaCache/$s/ │ │ │ -00006400: 2464 2e63 6f70 6965 643e 225d 2c0a 0909 $d.copied>"],... │ │ │ -00006410: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -00006420: 3129 3b0a 0909 096d 7920 246c 3b0a 0909 1);....my $l;... │ │ │ -00006430: 0966 6f72 6561 6368 2024 6c20 283c 4649 .foreach $l ()....{.... │ │ │ -00006450: 2063 686f 6d70 2024 6c3b 0a09 0909 2020 chomp $l;.... │ │ │ -00006460: 2020 2466 6f75 6e64 203d 2031 0a09 0909 $found = 1.... │ │ │ -00006470: 0969 6620 246c 2065 7120 2462 6163 6b75 .if $l eq $backu │ │ │ -00006480: 7054 7265 654e 616d 653b 0a09 0909 7d0a pTreeName;....}. │ │ │ -00006490: 0909 0963 6c6f 7365 2846 494c 4529 3b0a ...close(FILE);. │ │ │ -000064a0: 0909 2020 2020 7d0a 0a09 0920 2020 2069 .. }.... i │ │ │ -000064b0: 6620 2824 666f 756e 6429 0a09 0920 2020 f ($found)... │ │ │ -000064c0: 207b 0a09 0909 2470 724c 6f67 2d3e 7072 {....$prLog->pr │ │ │ -000064d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000064e0: 4927 2c0a 0909 0909 2020 2020 2020 272d I',..... '- │ │ │ -000064f0: 7374 7227 203d 3e0a 0909 0909 2020 2020 str' =>..... │ │ │ -00006500: 2020 5b22 3c24 6261 636b 7570 4469 722f ["<$backupDir/ │ │ │ -00006510: 2473 2f24 643e 2061 6c72 6561 6479 2063 $s/$d> already c │ │ │ -00006520: 6f70 6965 6422 5d29 0a09 0909 2020 2020 opied"]).... │ │ │ -00006530: 6966 2024 7665 7262 6f73 653b 0a09 0909 if $verbose;.... │ │ │ -00006540: 6e65 7874 3b0a 0909 2020 2020 7d0a 0909 next;... }... │ │ │ -00006550: 7d0a 0a23 7072 696e 7420 223d 333d 2464 }..#print "=3=$d │ │ │ -00006560: 5c6e 223b 0a09 0924 7072 4c6f 672d 3e70 \n";...$prLog->p │ │ │ -00006570: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00006580: 2749 272c 0a09 0909 2020 2020 2020 272d 'I',.... '- │ │ │ -00006590: 7374 7227 203d 3e0a 0909 0920 2020 2020 str' =>.... │ │ │ -000065a0: 205b 2263 6f70 7969 6e67 203c 2464 656c ["copying <$del │ │ │ -000065b0: 7461 4361 6368 652f 2473 2f24 643e 2074 taCache/$s/$d> t │ │ │ -000065c0: 6f20 2220 2e0a 0909 0920 2020 2020 2020 o " ..... │ │ │ -000065d0: 223c 2462 6163 6b75 7044 6972 2f24 733e "<$backupDir/$s> │ │ │ -000065e0: 225d 293b 0a09 0926 3a3a 636f 7079 4469 "]);...&::copyDi │ │ │ -000065f0: 7228 2224 6465 6c74 6143 6163 6865 2f24 r("$deltaCache/$ │ │ │ -00006600: 732f 2464 2220 3d3e 2022 2462 6163 6b75 s/$d" => "$backu │ │ │ -00006610: 7044 6972 2f24 7322 2c0a 0909 0920 2020 pDir/$s",.... │ │ │ -00006620: 222f 746d 702f 7374 6275 5570 6461 7465 "/tmp/stbuUpdate │ │ │ -00006630: 4261 636b 7570 2d22 2c20 2470 724c 6f67 Backup-", $prLog │ │ │ -00006640: 2c20 3029 3b0a 0909 6f70 656e 2846 494c , 0);...open(FIL │ │ │ -00006650: 452c 2027 3e3e 272c 2022 2464 656c 7461 E, '>>', "$delta │ │ │ -00006660: 4361 6368 652f 2473 2f24 642e 636f 7069 Cache/$s/$d.copi │ │ │ -00006670: 6564 2229 206f 720a 0909 2020 2020 2470 ed") or... $p │ │ │ -00006680: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00006690: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ -000066a0: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ -000066b0: 2020 5b22 6361 6e6e 6f74 2077 7269 7465 ["cannot write │ │ │ -000066c0: 203c 2464 656c 7461 4361 6368 652f 2473 <$deltaCache/$s │ │ │ -000066d0: 2f24 642e 636f 7069 6564 3e22 5d2c 0a09 /$d.copied>"],.. │ │ │ -000066e0: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -000066f0: 3129 3b0a 0909 7072 696e 7420 4649 4c45 1);...print FILE │ │ │ -00006700: 2022 2462 6163 6b75 7054 7265 654e 616d "$backupTreeNam │ │ │ -00006710: 655c 6e22 3b0a 0909 636c 6f73 6528 4649 e\n";...close(FI │ │ │ -00006720: 4c45 293b 0a09 2020 2020 7d0a 2370 7269 LE);.. }.#pri │ │ │ -00006730: 6e74 2022 3d34 3d5c 6e22 3b0a 097d 0a23 nt "=4=\n";..}.# │ │ │ -00006740: 7072 696e 7420 223d 353d 5c6e 223b 0a20 print "=5=\n";. │ │ │ -00006750: 2020 207d 0a20 2020 2065 6c73 6966 2028 }. elsif ( │ │ │ -00006760: 2462 6163 6b75 7054 7970 6520 6571 2027 $backupType eq ' │ │ │ -00006770: 6d61 7374 6572 2729 0a20 2020 207b 0a09 master'). {.. │ │ │ -00006780: 2473 6572 6965 7354 6f44 6973 7472 6962 $seriesToDistrib │ │ │ -00006790: 7574 6520 3d20 5c40 7265 6164 5365 7269 ute = \@readSeri │ │ │ -000067a0: 6573 3b0a 0a09 6d79 2024 733b 0a09 666f es;...my $s;..fo │ │ │ -000067b0: 7265 6163 6820 2473 2028 4024 7365 7269 reach $s (@$seri │ │ │ -000067c0: 6573 546f 4469 7374 7269 6275 7465 290a esToDistribute). │ │ │ -000067d0: 097b 0a09 2020 2020 756e 6c65 7373 2028 .{.. unless ( │ │ │ -000067e0: 2d65 2022 2462 6163 6b75 7044 6972 2f24 -e "$backupDir/$ │ │ │ -000067f0: 7322 290a 0920 2020 207b 0a09 0924 7072 s").. {...$pr │ │ │ -00006800: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00006810: 6427 203d 3e20 2757 272c 0a09 0909 2020 d' => 'W',.... │ │ │ -00006820: 2020 2020 272d 7374 7227 203d 3e0a 0909 '-str' =>... │ │ │ -00006830: 0920 2020 2020 205b 2273 6572 6965 7320 . ["series │ │ │ -00006840: 3c24 6261 636b 7570 5472 6565 4e61 6d65 <$backupTreeName │ │ │ -00006850: 2f24 733e 2064 6f65 7320 6e6f 7420 6578 /$s> does not ex │ │ │ -00006860: 6973 7422 5d29 3b0a 0909 6e65 7874 3b0a ist"]);...next;. │ │ │ -00006870: 0920 2020 207d 0a0a 0920 2020 2024 7072 . }... $pr │ │ │ -00006880: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00006890: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ -000068a0: 272d 7374 7227 203d 3e0a 0909 0920 205b '-str' =>.... [ │ │ │ -000068b0: 226d 6173 7465 7220 6261 636b 7570 3a20 "master backup: │ │ │ -000068c0: 6368 6563 6b69 6e67 203c 2462 6163 6b75 checking <$backu │ │ │ -000068d0: 7054 7265 654e 616d 652f 2473 3e22 5d29 pTreeName/$s>"]) │ │ │ -000068e0: 3b0a 0a09 2020 2020 6d79 2028 4064 6972 ;... my (@dir │ │ │ -000068f0: 7329 203d 2026 3a3a 7265 6164 4469 7253 s) = &::readDirS │ │ │ -00006900: 7462 7528 2224 6261 636b 7570 4469 722f tbu("$backupDir/ │ │ │ -00006910: 2473 222c 205f 5f46 494c 455f 5f2c 205f $s", __FILE__, _ │ │ │ -00006920: 5f4c 494e 455f 5f2c 0a09 0909 2020 2020 _LINE__,.... │ │ │ -00006930: 2020 2027 5c41 5c64 7b34 7d5c 2e5c 647b '\A\d{4}\.\d{ │ │ │ -00006940: 327d 5c2e 5c64 7b32 7d5f 5c64 7b32 7d5c 2}\.\d{2}_\d{2}\ │ │ │ -00006950: 2e5c 647b 327d 5c2e 5c64 7b32 7d5c 5a27 .\d{2}\.\d{2}\Z' │ │ │ -00006960: 2c0a 0909 0909 0924 7072 4c6f 6729 3b0a ,......$prLog);. │ │ │ -00006970: 0920 2020 206d 7920 2465 6e74 7279 3b0a . my $entry;. │ │ │ -00006980: 0920 2020 2066 6f72 6561 6368 2024 656e . foreach $en │ │ │ -00006990: 7472 7920 2840 6469 7273 290a 0920 2020 try (@dirs).. │ │ │ -000069a0: 207b 0a09 096e 6578 740a 0909 2020 2020 {...next... │ │ │ -000069b0: 756e 6c65 7373 202d 6520 2224 6261 636b unless -e "$back │ │ │ -000069c0: 7570 4469 722f 2473 2f24 656e 7472 792f upDir/$s/$entry/ │ │ │ -000069d0: 2e73 746f 7265 4261 636b 7570 4c69 6e6b .storeBackupLink │ │ │ -000069e0: 732f 6c69 6e6b 4669 6c65 2e62 7a32 223b s/linkFile.bz2"; │ │ │ -000069f0: 0a0a 0909 6966 2028 282d 6520 2224 6465 ....if ((-e "$de │ │ │ -00006a00: 6c74 6143 6163 6865 2f24 732f 2465 6e74 ltaCache/$s/$ent │ │ │ -00006a10: 7279 2220 6f72 0a09 0920 2020 2020 2d65 ry" or... -e │ │ │ -00006a20: 2022 2464 656c 7461 4361 6368 652f 2473 "$deltaCache/$s │ │ │ -00006a30: 2f24 656e 7472 792e 636f 7069 6564 2229 /$entry.copied") │ │ │ -00006a40: 2061 6e64 0a09 0920 2020 206e 6f74 202d and... not - │ │ │ -00006a50: 6520 2224 6465 6c74 6143 6163 6865 2f24 e "$deltaCache/$ │ │ │ -00006a60: 732f 2465 6e74 7279 2e6e 6f74 4669 6e69 s/$entry.notFini │ │ │ -00006a70: 7368 6564 2229 0a09 097b 0a09 0920 2020 shed")...{... │ │ │ -00006a80: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -00006a90: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00006aa0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ -00006ab0: 0909 0920 205b 225c 7461 6c72 6561 6479 ... ["\talready │ │ │ -00006ac0: 2063 6f70 6965 6420 3c24 656e 7472 793e copied <$entry> │ │ │ -00006ad0: 2074 6f20 3c24 6465 6c74 6143 6163 6865 to <$deltaCache │ │ │ -00006ae0: 3e22 5d29 3b0a 0909 2020 2020 6e65 7874 >"]);... next │ │ │ -00006af0: 3b0a 0909 7d0a 0a09 0924 7072 4c6f 672d ;...}....$prLog- │ │ │ -00006b00: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00006b10: 3e20 2749 272c 0a09 0909 2020 2020 2020 > 'I',.... │ │ │ -00006b20: 272d 7374 7227 203d 3e0a 0909 0920 2020 '-str' =>.... │ │ │ -00006b30: 2020 205b 225c 7463 6f70 7969 6e67 203c ["\tcopying < │ │ │ -00006b40: 2465 6e74 7279 3e20 746f 203c 2464 656c $entry> to <$del │ │ │ -00006b50: 7461 4361 6368 652f 2473 3e22 5d29 3b0a taCache/$s>"]);. │ │ │ -00006b60: 0a09 096d 6b64 6972 2022 2464 656c 7461 ...mkdir "$delta │ │ │ -00006b70: 4361 6368 652f 2473 220a 0909 2020 2020 Cache/$s"... │ │ │ -00006b80: 756e 6c65 7373 202d 6520 2224 6465 6c74 unless -e "$delt │ │ │ -00006b90: 6143 6163 6865 2f24 7322 3b0a 0a09 096f aCache/$s";....o │ │ │ -00006ba0: 7065 6e28 4649 4c45 2c20 273e 272c 2022 pen(FILE, '>', " │ │ │ -00006bb0: 2464 656c 7461 4361 6368 652f 2473 2f24 $deltaCache/$s/$ │ │ │ -00006bc0: 656e 7472 792e 6e6f 7446 696e 6973 6865 entry.notFinishe │ │ │ -00006bd0: 6422 2920 6f72 0a09 0920 2020 2024 7072 d") or... $pr │ │ │ -00006be0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00006bf0: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -00006c00: 2027 2d73 7472 2720 3d3e 0a09 0909 0920 '-str' =>..... │ │ │ -00006c10: 205b 2263 616e 6e6f 7420 7772 6974 6520 ["cannot write │ │ │ -00006c20: 3c24 6465 6c74 6143 6163 6865 2f24 732f <$deltaCache/$s/ │ │ │ -00006c30: 2465 6e74 7279 2e6e 6f74 4669 6e69 7368 $entry.notFinish │ │ │ -00006c40: 6564 3e22 5d2c 0a09 0909 0920 2027 2d65 ed>"],..... '-e │ │ │ -00006c50: 7869 7427 203d 3e20 3129 3b0a 0909 636c xit' => 1);...cl │ │ │ -00006c60: 6f73 6528 4649 4c45 293b 0a09 0926 3a3a ose(FILE);...&:: │ │ │ -00006c70: 636f 7079 4469 7228 2224 6261 636b 7570 copyDir("$backup │ │ │ -00006c80: 4469 722f 2473 2f24 656e 7472 7922 203d Dir/$s/$entry" = │ │ │ -00006c90: 3e20 2224 6465 6c74 6143 6163 6865 2f24 > "$deltaCache/$ │ │ │ -00006ca0: 7322 2c0a 0909 0920 2020 222f 746d 702f s",.... "/tmp/ │ │ │ -00006cb0: 7374 6275 5570 6461 7465 4261 636b 7570 stbuUpdateBackup │ │ │ -00006cc0: 2d22 2c20 2470 724c 6f67 2c20 3029 3b0a -", $prLog, 0);. │ │ │ -00006cd0: 0909 756e 6c69 6e6b 2022 2464 656c 7461 ..unlink "$delta │ │ │ -00006ce0: 4361 6368 652f 2473 2f24 656e 7472 792e Cache/$s/$entry. │ │ │ -00006cf0: 6e6f 7446 696e 6973 6865 6422 3b0a 0920 notFinished";.. │ │ │ -00006d00: 2020 207d 0a09 7d0a 0a20 2020 207d 0a20 }..}.. }. │ │ │ -00006d10: 2020 2065 6c73 6966 2028 2462 6163 6b75 elsif ($backu │ │ │ -00006d20: 7054 7970 6520 6571 2027 6e6f 6e65 2729 pType eq 'none') │ │ │ -00006d30: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ -00006d40: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00006d50: 2027 4927 2c0a 0909 2020 2020 2020 272d 'I',... '- │ │ │ -00006d60: 7374 7227 203d 3e20 5b22 2462 6163 6b75 str' => ["$backu │ │ │ -00006d70: 7044 6972 2f24 6261 7365 5472 6565 436f pDir/$baseTreeCo │ │ │ -00006d80: 6e66 3a20 6e6f 7468 696e 6720 746f 2064 nf: nothing to d │ │ │ -00006d90: 6f22 5d29 3b09 0a20 2020 207d 0a7d 2023 o"]);.. }.} # │ │ │ -00006da0: 2065 6e64 2072 6561 6420 7374 6f72 6542 end read storeB │ │ │ -00006db0: 6163 6b75 7042 6173 6554 7265 652e 636f ackupBaseTree.co │ │ │ -00006dc0: 6e66 2069 6e20 2462 6163 6b75 7044 6972 nf in $backupDir │ │ │ -00006dd0: 0a0a 0a65 7869 7420 300a 2020 2020 6966 ...exit 0. if │ │ │ -00006de0: 2024 636f 7079 4261 636b 7570 4f6e 6c79 $copyBackupOnly │ │ │ -00006df0: 3b0a 0a0a 6966 2028 2469 6e74 6572 6163 ;...if ($interac │ │ │ -00006e00: 7469 7665 290a 7b0a 2020 2020 6d79 2024 tive).{. my $ │ │ │ -00006e10: 616e 7377 6572 3b0a 2020 2020 646f 0a20 answer;. do. │ │ │ -00006e20: 2020 207b 0a09 7072 696e 7420 225c 6e42 {..print "\nB │ │ │ -00006e30: 6566 6f72 6520 7472 7969 6e67 2074 6f20 efore trying to │ │ │ -00006e40: 7265 7061 6972 2061 6e79 2064 616d 6167 repair any damag │ │ │ -00006e50: 6573 206f 6620 7468 6520 6261 636b 7570 es of the backup │ │ │ -00006e60: 5c6e 222c 0a09 2279 6f75 2073 686f 756c \n",.."you shoul │ │ │ -00006e70: 6420 6d61 6b65 2061 2062 6163 6b75 7020 d make a backup │ │ │ -00006e80: 6f66 2074 6865 2066 696c 6573 2062 6565 of the files bee │ │ │ -00006e90: 696e 6720 6d61 6e69 7075 6c61 7465 6420 ing manipulated │ │ │ -00006ea0: 6279 5c6e 222c 0a09 2274 6869 7320 7072 by\n",.."this pr │ │ │ -00006eb0: 6f67 7261 6d2e 2044 6f20 7468 6973 2062 ogram. Do this b │ │ │ -00006ec0: 7920 6567 2e20 6578 6563 7574 696e 675c y eg. executing\ │ │ │ -00006ed0: 6e22 2c0a 0922 2320 7461 7220 6366 202f n",.."# tar cf / │ │ │ -00006ee0: 7361 7665 506c 6163 652e 7461 7220 3c62 savePlace.tar /..st │ │ │ -00006f00: 6f72 6542 6163 6b75 704c 696e 6b73 5c6e oreBackupLinks\n │ │ │ -00006f10: 222c 0a09 2266 6f72 2061 6c6c 2061 6666 ",.."for all aff │ │ │ -00006f20: 6563 7465 6420 6261 636b 7570 2064 6972 ected backup dir │ │ │ -00006f30: 6563 746f 7269 6573 206f 7220 7369 6d70 ectories or simp │ │ │ -00006f40: 6c79 2061 6c6c 206f 6620 796f 7572 2062 ly all of your b │ │ │ -00006f50: 6163 6b75 7073 2e5c 6e22 2c0a 0922 636f ackups.\n",.."co │ │ │ -00006f60: 6e74 696e 7565 3f5c 6e22 2c0a 0922 7965 ntinue?\n",.."ye │ │ │ -00006f70: 7320 2f20 6e6f 2020 2d3e 2022 3b0a 0924 s / no -> ";..$ │ │ │ -00006f80: 616e 7377 6572 203d 203c 5354 4449 4e3e answer = │ │ │ -00006f90: 3b0a 0963 686f 6d70 2024 616e 7377 6572 ;..chomp $answer │ │ │ -00006fa0: 3b0a 2020 2020 7d20 7768 696c 6520 2824 ;. } while ($ │ │ │ -00006fb0: 616e 7377 6572 206e 6520 2779 6573 2720 answer ne 'yes' │ │ │ -00006fc0: 616e 6420 2461 6e73 7765 7220 6e65 2027 and $answer ne ' │ │ │ -00006fd0: 6e6f 2729 3b0a 0a20 2020 2065 7869 7420 no');.. exit │ │ │ -00006fe0: 300a 0969 6620 2461 6e73 7765 7220 6571 0..if $answer eq │ │ │ -00006ff0: 2027 6e6f 273b 0a7d 0a0a 0a6d 7920 2461 'no';.}...my $a │ │ │ -00007000: 6c6c 4c69 6e6b 7320 3d20 6c61 7465 4c69 llLinks = lateLi │ │ │ -00007010: 6e6b 732d 3e6e 6577 2827 2d64 6972 7327 nks->new('-dirs' │ │ │ -00007020: 203d 3e20 5b24 6261 636b 7570 4469 725d => [$backupDir] │ │ │ -00007030: 2c0a 0909 0920 2020 2020 2027 2d6b 696e ,.... '-kin │ │ │ -00007040: 6427 203d 3e20 2772 6563 7572 7369 7665 d' => 'recursive │ │ │ -00007050: 5365 6172 6368 272c 0a09 0909 2020 2020 Search',.... │ │ │ -00007060: 2020 272d 6368 6563 6b4c 696e 6b46 726f '-checkLinkFro │ │ │ -00007070: 6d43 6f6e 7369 7374 656e 6379 2720 3d3e mConsistency' => │ │ │ -00007080: 2031 2c0a 0909 0920 2020 2020 2027 2d76 1,.... '-v │ │ │ -00007090: 6572 626f 7365 2720 3d3e 2024 7665 7262 erbose' => $verb │ │ │ -000070a0: 6f73 652c 0a09 0909 2020 2020 2020 272d ose,.... '- │ │ │ -000070b0: 6465 6275 6727 203d 3e20 2464 6562 7567 debug' => $debug │ │ │ -000070c0: 2c0a 0909 0920 2020 2020 2027 2d70 724c ,.... '-prL │ │ │ -000070d0: 6f67 2720 3d3e 2024 7072 4c6f 672c 0a09 og' => $prLog,.. │ │ │ -000070e0: 0909 2020 2020 2020 272d 696e 7465 7261 .. '-intera │ │ │ -000070f0: 6374 6976 6527 203d 3e20 2469 6e74 6572 ctive' => $inter │ │ │ -00007100: 6163 7469 7665 2c0a 0909 0920 2020 2020 active,.... │ │ │ -00007110: 2027 2d61 7574 6f72 6570 6169 7227 203d '-autorepair' = │ │ │ -00007120: 3e20 2461 7574 6f72 6570 6169 722c 0a09 > $autorepair,.. │ │ │ -00007130: 0909 2020 2020 2020 272d 6175 746f 7265 .. '-autore │ │ │ -00007140: 7061 6972 4572 726f 7227 203d 3e20 2461 pairError' => $a │ │ │ -00007150: 7574 6f72 6570 6169 7245 7272 6f72 293b utorepairError); │ │ │ -00007160: 0a0a 0a69 6620 2824 6368 6563 6b4f 6e6c ...if ($checkOnl │ │ │ -00007170: 7929 0a7b 0a20 2020 2075 6e6c 696e 6b20 y).{. unlink │ │ │ -00007180: 246c 6f63 6b46 696c 653b 0a20 2020 2065 $lockFile;. e │ │ │ -00007190: 7869 7420 303b 0a7d 0a0a 6966 2028 2469 xit 0;.}..if ($i │ │ │ -000071a0: 6e74 6572 6163 7469 7665 290a 7b0a 2020 nteractive).{. │ │ │ -000071b0: 2020 6d79 2024 616e 7377 6572 3b0a 2020 my $answer;. │ │ │ -000071c0: 2020 646f 0a20 2020 207b 0a09 7072 696e do. {..prin │ │ │ -000071d0: 7420 225c 6e63 6f6e 7469 6e75 6520 7769 t "\ncontinue wi │ │ │ -000071e0: 7468 2075 7064 6174 696e 6720 7468 6520 th updating the │ │ │ -000071f0: 6261 636b 7570 2873 293f 5c6e 222c 0a09 backup(s)?\n",.. │ │ │ -00007200: 2228 636f 6d70 7265 7373 696e 6720 616e "(compressing an │ │ │ -00007210: 6420 7365 7474 696e 6720 6861 7264 206c d setting hard l │ │ │ -00007220: 696e 6b73 295c 6e22 2c0a 0922 7965 7320 inks)\n",.."yes │ │ │ -00007230: 2f20 6e6f 2020 2d3e 2022 3b0a 0924 616e / no -> ";..$an │ │ │ -00007240: 7377 6572 203d 203c 5354 4449 4e3e 3b0a swer = ;. │ │ │ -00007250: 0963 686f 6d70 2024 616e 7377 6572 3b0a .chomp $answer;. │ │ │ -00007260: 2020 2020 7d20 7768 696c 6520 2824 616e } while ($an │ │ │ -00007270: 7377 6572 206e 6520 2779 6573 2720 616e swer ne 'yes' an │ │ │ -00007280: 6420 2461 6e73 7765 7220 6e65 2027 6e6f d $answer ne 'no │ │ │ -00007290: 2729 3b0a 0a20 2020 2065 7869 7420 300a ');.. exit 0. │ │ │ -000072a0: 0969 6620 2461 6e73 7765 7220 6571 2027 .if $answer eq ' │ │ │ -000072b0: 6e6f 273b 0a7d 0a0a 230a 2320 7365 7420 no';.}..#.# set │ │ │ -000072c0: 6c69 6e6b 7320 616e 6420 636f 6d70 7265 links and compre │ │ │ -000072d0: 7373 2066 696c 6573 0a23 0a6d 7920 2475 ss files.#.my $u │ │ │ -000072e0: 7064 6174 6544 6972 466c 6167 203d 2030 pdateDirFlag = 0 │ │ │ -000072f0: 3b0a 6d79 2028 406c 6174 654c 696e 6b44 ;.my (@lateLinkD │ │ │ -00007300: 6972 7329 3b0a 6d79 2024 6e75 6d62 6572 irs);.my $number │ │ │ -00007310: 4469 7273 546f 4c69 6e6b 203d 202d 313b DirsToLink = -1; │ │ │ -00007320: 0a6d 7920 246e 756d 6265 7244 6972 7354 .my $numberDirsT │ │ │ -00007330: 6f4c 696e 6b43 6f75 6e74 203d 2030 3b0a oLinkCount = 0;. │ │ │ -00007340: 7768 696c 6520 2828 2840 6c61 7465 4c69 while (((@lateLi │ │ │ -00007350: 6e6b 4469 7273 2920 3d20 2461 6c6c 4c69 nkDirs) = $allLi │ │ │ -00007360: 6e6b 732d 3e67 6574 416c 6c44 6972 7357 nks->getAllDirsW │ │ │ -00007370: 6974 684c 6174 654c 696e 6b73 2829 2920 ithLateLinks()) │ │ │ -00007380: 3e20 3029 0a7b 0a23 2020 2020 246e 756d > 0).{.# $num │ │ │ -00007390: 6265 7244 6972 7354 6f4c 696e 6b20 3d20 berDirsToLink = │ │ │ -000073a0: 406c 6174 654c 696e 6b44 6972 730a 2020 @lateLinkDirs. │ │ │ -000073b0: 2020 246e 756d 6265 7244 6972 7354 6f4c $numberDirsToL │ │ │ -000073c0: 696e 6b20 3d20 2461 6c6c 4c69 6e6b 732d ink = $allLinks- │ │ │ -000073d0: 3e67 6574 4e75 6d4c 696e 6b54 6f28 290a >getNumLinkTo(). │ │ │ -000073e0: 0969 6620 246e 756d 6265 7244 6972 7354 .if $numberDirsT │ │ │ -000073f0: 6f4c 696e 6b20 3d3d 202d 313b 0a0a 2020 oLink == -1;.. │ │ │ -00007400: 2020 6d79 2024 643b 0a20 2020 2066 6f72 my $d;. for │ │ │ -00007410: 6561 6368 2024 6420 2873 6f72 7420 406c each $d (sort @l │ │ │ -00007420: 6174 654c 696e 6b44 6972 7329 0a20 2020 ateLinkDirs). │ │ │ -00007430: 207b 0a09 6d79 2024 6c69 6e6b 546f 4861 {..my $linkToHa │ │ │ -00007440: 7368 203d 2024 616c 6c4c 696e 6b73 2d3e sh = $allLinks-> │ │ │ -00007450: 6765 744c 696e 6b54 6f48 6173 6828 293b getLinkToHash(); │ │ │ -00007460: 0a09 6d79 2024 6c69 6e6b 4672 6f6d 4861 ..my $linkFromHa │ │ │ -00007470: 7368 203d 2024 616c 6c4c 696e 6b73 2d3e sh = $allLinks-> │ │ │ -00007480: 6765 744c 696e 6b46 726f 6d48 6173 6828 getLinkFromHash( │ │ │ -00007490: 293b 0a0a 2320 2020 2020 2020 7072 696e );..# prin │ │ │ -000074a0: 7420 2263 6865 636b 696e 6720 3c24 643e t "checking <$d> │ │ │ -000074b0: 5c6e 223b 0a20 2020 2020 2020 6966 2028 \n";. if ( │ │ │ -000074c0: 2d65 2022 2464 2f2e 7374 6f72 6542 6163 -e "$d/.storeBac │ │ │ -000074d0: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil │ │ │ -000074e0: 652e 627a 3222 290a 2020 2020 2020 207b e.bz2"). { │ │ │ -000074f0: 0a23 0920 2020 7072 696e 7420 225c 7424 .#. print "\t$ │ │ │ -00007500: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi │ │ │ -00007510: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2 │ │ │ -00007520: 2065 7869 7374 735c 6e22 3b0a 0920 2020 exists\n";.. │ │ │ -00007530: 6d79 2024 6c69 6e6b 546f 4469 723b 0a09 my $linkToDir;.. │ │ │ -00007540: 2020 206d 7920 246e 6565 6473 5570 6461 my $needsUpda │ │ │ -00007550: 7465 203d 2030 3b0a 0920 2020 6d79 2024 te = 0;.. my $ │ │ │ -00007560: 6861 7368 203d 2024 246c 696e 6b54 6f48 hash = $$linkToH │ │ │ -00007570: 6173 687b 2464 7d3b 0a09 2020 2066 6f72 ash{$d};.. for │ │ │ -00007580: 6561 6368 2024 6c69 6e6b 546f 4469 7220 each $linkToDir │ │ │ -00007590: 2873 6f72 7420 6b65 7973 2025 2468 6173 (sort keys %$has │ │ │ -000075a0: 6829 0a09 2020 207b 0a23 0920 2020 2020 h).. {.#. │ │ │ -000075b0: 2020 7072 696e 7420 225c 745c 7463 6865 print "\t\tche │ │ │ -000075c0: 636b 696e 6720 246c 696e 6b54 6f44 6972 cking $linkToDir │ │ │ -000075d0: 2066 6f72 206c 696e 6b46 696c 652e 627a for linkFile.bz │ │ │ -000075e0: 323a 2022 3b0a 0920 2020 2020 2020 6966 2: ";.. if │ │ │ -000075f0: 2028 2d65 2022 246c 696e 6b54 6f44 6972 (-e "$linkToDir │ │ │ -00007600: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin │ │ │ -00007610: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2" │ │ │ -00007620: 290a 0920 2020 2020 2020 7b0a 0909 2020 ).. {... │ │ │ -00007630: 2024 6e65 6564 7355 7064 6174 6520 3d20 $needsUpdate = │ │ │ -00007640: 313b 0a23 0909 2020 2070 7269 6e74 2022 1;.#.. print " │ │ │ -00007650: 6e65 6564 7320 5570 6461 7465 215c 6e22 needs Update!\n" │ │ │ -00007660: 3b0a 0909 2020 206c 6173 743b 0a09 2020 ;... last;.. │ │ │ -00007670: 2020 2020 207d 0a09 2020 2020 2020 2065 }.. e │ │ │ -00007680: 6c73 650a 0920 2020 2020 2020 7b0a 2309 lse.. {.#. │ │ │ -00007690: 0920 2020 7072 696e 7420 226f 6b2c 2069 . print "ok, i │ │ │ -000076a0: 7320 7570 6461 7465 645c 6e22 3b0a 0920 s updated\n";.. │ │ │ -000076b0: 2020 2020 2020 7d0a 0920 2020 7d0a 0920 }.. }.. │ │ │ -000076c0: 2020 6966 2028 246e 6565 6473 5570 6461 if ($needsUpda │ │ │ -000076d0: 7465 203d 3d20 3029 0a09 2020 207b 0a23 te == 0).. {.# │ │ │ -000076e0: 0920 2020 2020 2020 7072 696e 7420 2275 . print "u │ │ │ -000076f0: 7064 6174 6520 2464 5c6e 223b 0a09 2020 pdate $d\n";.. │ │ │ -00007700: 207d 0a09 2020 2065 6c73 650a 0920 2020 }.. else.. │ │ │ -00007710: 7b0a 0920 2020 2020 2020 6e65 7874 3b0a {.. next;. │ │ │ -00007720: 0920 2020 7d0a 2020 2020 2020 207d 0a20 . }. }. │ │ │ -00007730: 2020 2020 2020 656c 7365 0a20 2020 2020 else. │ │ │ -00007740: 2020 7b0a 0920 2020 6e65 7874 3b0a 2020 {.. next;. │ │ │ -00007750: 2020 2020 207d 0a0a 0924 7570 6461 7465 }...$update │ │ │ -00007760: 4469 7246 6c61 6720 3d20 313b 0a09 2b2b DirFlag = 1;..++ │ │ │ -00007770: 246e 756d 6265 7244 6972 7354 6f4c 696e $numberDirsToLin │ │ │ -00007780: 6b43 6f75 6e74 3b0a 093a 3a75 7064 6174 kCount;..::updat │ │ │ -00007790: 6542 6163 6b75 7044 6972 2824 642c 2024 eBackupDir($d, $ │ │ │ -000077a0: 6e6f 436f 6d70 7265 7373 2c20 2470 726f noCompress, $pro │ │ │ -000077b0: 6772 6573 7352 6570 6f72 742c 2024 7072 gressReport, $pr │ │ │ -000077c0: 4c6f 672c 0a09 0909 2020 2469 6e74 6572 Log,.... $inter │ │ │ -000077d0: 6163 7469 7665 2c20 2224 6e75 6d62 6572 active, "$number │ │ │ -000077e0: 4469 7273 546f 4c69 6e6b 436f 756e 742f DirsToLinkCount/ │ │ │ -000077f0: 246e 756d 6265 7244 6972 7354 6f4c 696e $numberDirsToLin │ │ │ -00007800: 6b22 2c0a 0909 0920 2024 6261 636b 7570 k",.... $backup │ │ │ -00007810: 5479 7065 293b 0a0a 0969 6620 282d 6520 Type);...if (-e │ │ │ -00007820: 2224 6261 636b 7570 4469 722f 2462 6173 "$backupDir/$bas │ │ │ -00007830: 6554 7265 6543 6f6e 6622 290a 097b 0a09 eTreeConf")..{.. │ │ │ -00007840: 2020 2020 2320 7772 6974 6520 6d65 7373 # write mess │ │ │ -00007850: 6167 6520 7468 6174 2074 6869 7320 6261 age that this ba │ │ │ -00007860: 636b 7570 2069 7320 636f 6d70 6c65 7465 ckup is complete │ │ │ -00007870: 6420 746f 2064 656c 7461 4361 6368 650a d to deltaCache. │ │ │ -00007880: 0920 2020 2023 2028 6966 206e 6563 6573 . # (if neces │ │ │ -00007890: 7361 7279 290a 0920 2020 206d 7920 2461 sary).. my $a │ │ │ -000078a0: 6273 4261 636b 7570 4469 7220 3d20 263a bsBackupDir = &: │ │ │ -000078b0: 3a61 6273 6f6c 7574 6550 6174 6828 2462 :absolutePath($b │ │ │ -000078c0: 6163 6b75 7044 6972 293b 0a09 2020 2020 ackupDir);.. │ │ │ -000078d0: 6d79 2024 616b 7444 6972 203d 2026 3a3a my $aktDir = &:: │ │ │ -000078e0: 6162 736f 6c75 7465 5061 7468 2824 6429 absolutePath($d) │ │ │ -000078f0: 3b0a 0a09 2020 2020 6d79 2028 2461 6b74 ;... my ($akt │ │ │ -00007900: 4261 636b 7570 4469 722c 2024 616b 7453 BackupDir, $aktS │ │ │ -00007910: 6572 6965 732c 2024 616b 7442 6163 6b75 eries, $aktBacku │ │ │ -00007920: 702c 2024 6e29 3b0a 0920 2020 2024 6e20 p, $n);.. $n │ │ │ -00007930: 3d20 2824 616b 7442 6163 6b75 7044 6972 = ($aktBackupDir │ │ │ -00007940: 2c20 2461 6b74 5365 7269 6573 2c20 2461 , $aktSeries, $a │ │ │ -00007950: 6b74 4261 636b 7570 2920 3d0a 0909 2461 ktBackup) =...$a │ │ │ -00007960: 6b74 4469 7220 3d7e 0a09 092f 5c41 2824 ktDir =~.../\A($ │ │ │ -00007970: 6162 7342 6163 6b75 7044 6972 295c 2f28 absBackupDir)\/( │ │ │ -00007980: 2e2a 3f29 5c2f 285c 647b 347d 5c2e 5c64 .*?)\/(\d{4}\.\d │ │ │ -00007990: 7b32 7d5c 2e5c 647b 327d 5f5c 647b 327d {2}\.\d{2}_\d{2} │ │ │ -000079a0: 5c2e 5c64 7b32 7d5c 2e5c 647b 327d 295c \.\d{2}\.\d{2})\ │ │ │ -000079b0: 5a2f 3b0a 0a23 7072 696e 7420 223c 2464 Z/;..#print "<$d │ │ │ -000079c0: 3e20 3d3d 3e20 3c24 616b 7442 6163 6b75 > ==> <$aktBacku │ │ │ -000079d0: 7044 6972 3e20 3c24 616b 7453 6572 6965 pDir> <$aktSerie │ │ │ -000079e0: 733e 203c 2461 6b74 4261 636b 7570 3e5c s> <$aktBackup>\ │ │ │ -000079f0: 6e22 3b0a 0a09 2020 2020 6d79 2028 2462 n";... my ($b │ │ │ -00007a00: 6163 6b75 7054 7265 654e 616d 652c 2024 ackupTreeName, $ │ │ │ -00007a10: 6261 636b 7570 5479 7065 2c20 2473 6572 backupType, $ser │ │ │ -00007a20: 6965 7354 6f44 6973 7472 6962 7574 652c iesToDistribute, │ │ │ -00007a30: 2024 6465 6c74 6143 6163 6865 2920 3d0a $deltaCache) =. │ │ │ -00007a40: 0909 263a 3a72 6561 6442 6163 6b75 7044 ..&::readBackupD │ │ │ -00007a50: 6972 4261 7365 5472 6565 436f 6e66 2822 irBaseTreeConf(" │ │ │ -00007a60: 2462 6163 6b75 7044 6972 2f24 6261 7365 $backupDir/$base │ │ │ -00007a70: 5472 6565 436f 6e66 222c 0a09 0909 0909 TreeConf",...... │ │ │ -00007a80: 2020 2020 2026 3a3a 6162 736f 6c75 7465 &::absolute │ │ │ -00007a90: 5061 7468 2824 6261 636b 7570 4469 7229 Path($backupDir) │ │ │ -00007aa0: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. │ │ │ -00007ab0: 2320 7265 706c 6163 6520 7769 6c64 6361 # replace wildca │ │ │ -00007ac0: 7264 730a 0920 2020 206d 7920 2840 7265 rds.. my (@re │ │ │ -00007ad0: 6164 5365 7269 6573 2920 3d20 263a 3a65 adSeries) = &::e │ │ │ -00007ae0: 7661 6c45 7863 6570 7469 6f6e 4c69 7374 valExceptionList │ │ │ -00007af0: 5f50 6c75 734d 696e 7573 2824 7365 7269 _PlusMinus($seri │ │ │ -00007b00: 6573 546f 4469 7374 7269 6275 7465 2c0a esToDistribute,. │ │ │ -00007b10: 0909 0909 0909 2020 2020 263a 3a61 6273 ...... &::abs │ │ │ -00007b20: 6f6c 7574 6550 6174 6828 2462 6163 6b75 olutePath($backu │ │ │ -00007b30: 7044 6972 292c 0a09 0909 0909 2020 2020 pDir),...... │ │ │ -00007b40: 2224 6261 636b 7570 5472 6565 4e61 6d65 "$backupTreeName │ │ │ -00007b50: 2073 6572 6965 7322 2c20 2773 6572 6965 series", 'serie │ │ │ -00007b60: 7327 2c20 302c 0a09 0909 0909 0920 2020 s', 0,....... │ │ │ -00007b70: 2075 6e64 6566 2c20 312c 2024 7072 4c6f undef, 1, $prLo │ │ │ -00007b80: 6729 3b0a 0920 2020 2024 7365 7269 6573 g);.. $series │ │ │ -00007b90: 546f 4469 7374 7269 6275 7465 203d 5c40 ToDistribute =\@ │ │ │ -00007ba0: 7265 6164 5365 7269 6573 3b0a 0a09 2020 readSeries;... │ │ │ -00007bb0: 2020 6d79 2024 666f 756e 6420 3d20 303b my $found = 0; │ │ │ -00007bc0: 0a09 2020 2020 666f 7265 6163 6820 6d79 .. foreach my │ │ │ -00007bd0: 2024 7320 2840 2473 6572 6965 7354 6f44 $s (@$seriesToD │ │ │ -00007be0: 6973 7472 6962 7574 6529 0a09 2020 2020 istribute).. │ │ │ -00007bf0: 7b0a 0909 6966 2028 2473 2065 7120 2461 {...if ($s eq $a │ │ │ -00007c00: 6b74 5365 7269 6573 290a 0909 7b0a 0909 ktSeries)...{... │ │ │ -00007c10: 2020 2020 2466 6f75 6e64 203d 2031 3b0a $found = 1;. │ │ │ -00007c20: 0909 2020 2020 6c61 7374 3b0a 0909 7d0a .. last;...}. │ │ │ -00007c30: 0920 2020 207d 0a0a 0920 2020 2069 6620 . }... if │ │ │ -00007c40: 2824 666f 756e 6420 616e 6420 2462 6163 ($found and $bac │ │ │ -00007c50: 6b75 7054 7970 6520 6571 2027 636f 7079 kupType eq 'copy │ │ │ -00007c60: 2729 0a09 2020 2020 7b0a 2370 7269 6e74 ').. {.#print │ │ │ -00007c70: 2022 3c24 6261 636b 7570 5472 6565 4e61 "<$backupTreeNa │ │ │ -00007c80: 6d65 3e20 2d2d 3e20 3c24 6465 6c74 6143 me> --> <$deltaC │ │ │ -00007c90: 6163 6865 3e20 2f20 3c24 616b 7453 6572 ache> / <$aktSer │ │ │ -00007ca0: 6965 733e 202f 203c 2461 6b74 4261 636b ies> / <$aktBack │ │ │ -00007cb0: 7570 3e20 2e6c 696e 6b65 645c 6e22 3b0a up> .linked\n";. │ │ │ -00007cc0: 0909 6f70 656e 2846 494c 452c 2027 3e3e ..open(FILE, '>> │ │ │ -00007cd0: 272c 2022 2464 656c 7461 4361 6368 652f ', "$deltaCache/ │ │ │ -00007ce0: 2461 6b74 5365 7269 6573 2f24 616b 7442 $aktSeries/$aktB │ │ │ -00007cf0: 6163 6b75 702e 6c69 6e6b 6564 2229 206f ackup.linked") o │ │ │ -00007d00: 720a 0909 2020 2020 2470 724c 6f67 2d3e r... $prLog-> │ │ │ -00007d10: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00007d20: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st │ │ │ -00007d30: 7227 203d 3e0a 0909 0909 2020 5b22 6361 r' =>..... ["ca │ │ │ -00007d40: 6e6e 6f74 2077 7269 7465 2074 6f20 3c24 nnot write to <$ │ │ │ -00007d50: 6465 6c74 6143 6163 6865 2f24 616b 7453 deltaCache/$aktS │ │ │ -00007d60: 6572 6965 732f 2461 6b74 4261 636b 7570 eries/$aktBackup │ │ │ -00007d70: 2e6c 696e 6b65 643e 225d 2c0a 0909 0909 .linked>"],..... │ │ │ -00007d80: 2020 272d 6578 6974 2720 3d3e 2031 293b '-exit' => 1); │ │ │ -00007d90: 0a09 0970 7269 6e74 2046 494c 4520 2224 ...print FILE "$ │ │ │ -00007da0: 6261 636b 7570 5472 6565 4e61 6d65 5c6e backupTreeName\n │ │ │ -00007db0: 223b 0a09 0963 6c6f 7365 2846 494c 4529 ";...close(FILE) │ │ │ -00007dc0: 3b0a 0909 2470 724c 6f67 2d3e 7072 696e ;...$prLog->prin │ │ │ -00007dd0: 7428 272d 6b69 6e64 2720 3d3e 2027 4927 t('-kind' => 'I' │ │ │ -00007de0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -00007df0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [" │ │ │ -00007e00: 6d61 726b 6564 203c 2461 6b74 5365 7269 marked <$aktSeri │ │ │ -00007e10: 6573 2f24 616b 7442 6163 6b75 703e 2061 es/$aktBackup> a │ │ │ -00007e20: 7320 6c69 6e6b 6564 2022 202e 0a09 0909 s linked " ..... │ │ │ -00007e30: 2020 2020 2020 2022 696e 203c 2464 656c "in <$del │ │ │ -00007e40: 7461 4361 6368 653e 225d 293b 0a09 2020 taCache>"]);.. │ │ │ -00007e50: 2020 7d0a 0a0a 097d 0a0a 0a09 2320 6465 }....}....# de │ │ │ -00007e60: 6c65 7465 2070 726f 6365 7373 6564 2066 lete processed f │ │ │ -00007e70: 696c 6573 0a09 6d79 2024 6620 3d20 2224 iles..my $f = "$ │ │ │ -00007e80: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi │ │ │ -00007e90: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2 │ │ │ -00007ea0: 223b 0a09 6966 2028 2875 6e6c 696e 6b20 ";..if ((unlink │ │ │ -00007eb0: 2466 2920 213d 2031 290a 097b 0a09 2020 $f) != 1)..{.. │ │ │ -00007ec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00007ed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00007ee0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00007ef0: 2231 2063 616e 6e6f 7420 6465 6c65 7465 "1 cannot delete │ │ │ -00007f00: 203c 2466 3e22 5d29 3b0a 097d 0a09 656c <$f>"]);..}..el │ │ │ -00007f10: 7365 0a09 7b0a 0920 2020 2024 7072 4c6f se..{.. $prLo │ │ │ -00007f20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00007f30: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '- │ │ │ -00007f40: 7374 7227 203d 3e20 5b22 3120 6465 6c65 str' => ["1 dele │ │ │ -00007f50: 7465 6420 3c24 663e 225d 290a 0909 6966 ted <$f>"])...if │ │ │ -00007f60: 2024 7665 7262 6f73 653b 0a09 7d0a 0a09 $verbose;..}... │ │ │ -00007f70: 2466 203d 2022 2464 2f2e 7374 6f72 6542 $f = "$d/.storeB │ │ │ -00007f80: 6163 6b75 704c 696e 6b73 2f6c 696e 6b54 ackupLinks/linkT │ │ │ -00007f90: 6f22 3b0a 0969 6620 282d 6520 2466 290a o";..if (-e $f). │ │ │ -00007fa0: 097b 0a09 2020 2020 6966 2028 2875 6e6c .{.. if ((unl │ │ │ -00007fb0: 696e 6b20 2466 2920 213d 2031 290a 0920 ink $f) != 1).. │ │ │ -00007fc0: 2020 207b 0a09 0924 7072 4c6f 672d 3e70 {...$prLog->p │ │ │ -00007fd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00007fe0: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -00007ff0: 7374 7227 203d 3e20 5b22 3220 6361 6e6e str' => ["2 cann │ │ │ -00008000: 6f74 2064 656c 6574 6520 3c24 663e 225d ot delete <$f>"] │ │ │ -00008010: 293b 0a09 2020 2020 7d0a 0920 2020 2065 );.. }.. e │ │ │ -00008020: 6c73 650a 0920 2020 207b 0a09 0924 7072 lse.. {...$pr │ │ │ -00008030: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -00008040: 6427 203d 3e20 2749 272c 0a09 0909 2020 d' => 'I',.... │ │ │ -00008050: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -00008060: 3220 6465 6c65 7465 6420 3c24 663e 225d 2 deleted <$f>"] │ │ │ -00008070: 290a 0909 2020 2020 6966 2024 7665 7262 )... if $verb │ │ │ -00008080: 6f73 653b 0a09 2020 2020 7d0a 097d 0a0a ose;.. }..}.. │ │ │ -00008090: 2309 7072 696e 7420 2264 656c 6574 6520 #.print "delete │ │ │ -000080a0: 6c69 6e6b 546f 3a5c 6e22 3b0a 2320 2020 linkTo:\n";.# │ │ │ -000080b0: 2020 2020 7072 696e 7420 225c 7424 643a print "\t$d: │ │ │ -000080c0: 5c6e 223b 0a20 2020 2020 2020 206d 7920 \n";. my │ │ │ -000080d0: 246b 3b0a 096d 7920 2468 6173 6820 3d20 $k;..my $hash = │ │ │ -000080e0: 2424 6c69 6e6b 546f 4861 7368 7b24 647d $$linkToHash{$d} │ │ │ -000080f0: 3b0a 0966 6f72 6561 6368 2024 6b20 2873 ;..foreach $k (s │ │ │ -00008100: 6f72 7420 6b65 7973 2025 2468 6173 6829 ort keys %$hash) │ │ │ -00008110: 0a09 7b0a 0920 2020 2024 6620 3d20 2424 ..{.. $f = $$ │ │ │ -00008120: 6861 7368 7b24 6b7d 3b0a 2309 2020 2020 hash{$k};.#. │ │ │ -00008130: 7072 696e 7420 225c 745c 7424 6b20 2d3e print "\t\t$k -> │ │ │ -00008140: 2022 2c20 2424 6861 7368 7b24 6b7d 2c20 ", $$hash{$k}, │ │ │ -00008150: 225c 6e22 3b0a 0a09 2020 2020 6966 2028 "\n";... if ( │ │ │ -00008160: 2d65 2024 6629 0a09 2020 2020 7b0a 0909 -e $f).. {... │ │ │ -00008170: 6966 2028 2875 6e6c 696e 6b20 2466 2920 if ((unlink $f) │ │ │ -00008180: 213d 2031 290a 0909 7b0a 0909 2020 2020 != 1)...{... │ │ │ -00008190: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -000081a0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -000081b0: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -000081c0: 3320 6361 6e6e 6f74 2064 656c 6574 6520 3 cannot delete │ │ │ -000081d0: 3c24 663e 225d 293b 0a09 097d 0a09 0965 <$f>"]);...}...e │ │ │ -000081e0: 6c73 650a 0909 7b0a 0909 2020 2020 2470 lse...{... $p │ │ │ -000081f0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00008200: 6e64 2720 3d3e 2027 4927 2c0a 0909 0909 nd' => 'I',..... │ │ │ -00008210: 2020 272d 7374 7227 203d 3e20 5b22 3320 '-str' => ["3 │ │ │ -00008220: 6465 6c65 7465 6420 3c24 663e 225d 290a deleted <$f>"]). │ │ │ -00008230: 0909 0969 6620 2476 6572 626f 7365 3b0a ...if $verbose;. │ │ │ -00008240: 0909 7d0a 0920 2020 207d 0a0a 0920 2020 ..}.. }... │ │ │ -00008250: 2024 6620 3d20 2424 6c69 6e6b 4672 6f6d $f = $$linkFrom │ │ │ -00008260: 4861 7368 7b24 6b7d 7b24 647d 3b0a 2309 Hash{$k}{$d};.#. │ │ │ -00008270: 2020 2020 7072 696e 7420 2264 656c 6574 print "delet │ │ │ -00008280: 6520 6c69 6e6b 4672 6f6d 3a20 3c24 663e e linkFrom: <$f> │ │ │ -00008290: 5c6e 223b 0a09 2020 2020 6966 2028 2875 \n";.. if ((u │ │ │ -000082a0: 6e6c 696e 6b20 2466 2920 213d 2031 290a nlink $f) != 1). │ │ │ -000082b0: 0920 2020 207b 0a09 0924 7072 4c6f 672d . {...$prLog- │ │ │ -000082c0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -000082d0: 3e20 2745 272c 0a09 0909 2020 2020 2020 > 'E',.... │ │ │ -000082e0: 272d 7374 7227 203d 3e20 5b22 3320 6361 '-str' => ["3 ca │ │ │ -000082f0: 6e6e 6f74 2064 656c 6574 6520 3c24 663e nnot delete <$f> │ │ │ -00008300: 225d 293b 0a09 2020 2020 7d0a 0920 2020 "]);.. }.. │ │ │ -00008310: 2065 6c73 650a 0920 2020 207b 0a09 0924 else.. {...$ │ │ │ -00008320: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -00008330: 696e 6427 203d 3e20 2749 272c 0a09 0909 ind' => 'I',.... │ │ │ -00008340: 2020 2020 2020 272d 7374 7227 203d 3e20 '-str' => │ │ │ -00008350: 5b22 3320 6465 6c65 7465 6420 3c24 663e ["3 deleted <$f> │ │ │ -00008360: 225d 290a 0909 2020 2020 6966 2024 7665 "])... if $ve │ │ │ -00008370: 7262 6f73 653b 0a09 2020 2020 7d0a 0920 rbose;.. }.. │ │ │ -00008380: 2020 200a 097d 0a0a 2020 2020 2020 2020 ..}.. │ │ │ -00008390: 676f 746f 206e 6578 744c 6f6f 703b 0a20 goto nextLoop;. │ │ │ -000083a0: 2020 207d 0a0a 6e65 7874 4c6f 6f70 3a0a }..nextLoop:. │ │ │ -000083b0: 0a20 2020 2024 616c 6c4c 696e 6b73 203d . $allLinks = │ │ │ -000083c0: 206c 6174 654c 696e 6b73 2d3e 6e65 7728 lateLinks->new( │ │ │ -000083d0: 272d 6469 7273 2720 3d3e 205b 2462 6163 '-dirs' => [$bac │ │ │ -000083e0: 6b75 7044 6972 5d2c 0a09 0909 2020 2020 kupDir],.... │ │ │ -000083f0: 2020 2027 2d6b 696e 6427 203d 3e20 2772 '-kind' => 'r │ │ │ -00008400: 6563 7572 7369 7665 5365 6172 6368 272c ecursiveSearch', │ │ │ -00008410: 0a09 0909 2020 2020 2020 2027 2d63 6865 .... '-che │ │ │ -00008420: 636b 4c69 6e6b 4672 6f6d 436f 6e73 6973 ckLinkFromConsis │ │ │ -00008430: 7465 6e63 7927 203d 3e20 312c 0a09 0909 tency' => 1,.... │ │ │ -00008440: 2020 2020 2020 2027 2d76 6572 626f 7365 '-verbose │ │ │ -00008450: 2720 3d3e 2024 7665 7262 6f73 652c 0a09 ' => $verbose,.. │ │ │ -00008460: 0909 2020 2020 2020 2027 2d64 6562 7567 .. '-debug │ │ │ -00008470: 2720 3d3e 2024 6465 6275 672c 0a09 0909 ' => $debug,.... │ │ │ -00008480: 2020 2020 2020 2027 2d70 724c 6f67 2720 '-prLog' │ │ │ -00008490: 3d3e 2024 7072 4c6f 672c 0a09 0909 2020 => $prLog,.... │ │ │ -000084a0: 2020 2020 2027 2d69 6e74 6572 6163 7469 '-interacti │ │ │ -000084b0: 7665 2720 3d3e 2024 696e 7465 7261 6374 ve' => $interact │ │ │ -000084c0: 6976 6529 3b0a 0a7d 0a0a 2470 724c 6f67 ive);..}..$prLog │ │ │ -000084d0: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -000084e0: 3d3e 2027 4927 2c0a 0920 2020 2020 2027 => 'I',.. ' │ │ │ -000084f0: 2d73 7472 2720 3d3e 205b 2265 7665 7279 -str' => ["every │ │ │ -00008500: 7468 696e 6720 6973 2075 7064 6174 6564 thing is updated │ │ │ -00008510: 2c20 6e6f 7468 696e 6720 746f 2064 6f22 , nothing to do" │ │ │ -00008520: 5d29 0a20 2020 2075 6e6c 6573 7320 2475 ]). unless $u │ │ │ -00008530: 7064 6174 6544 6972 466c 6167 3b0a 0a0a pdateDirFlag;... │ │ │ -00008540: 6966 2028 2d65 2022 2462 6163 6b75 7044 if (-e "$backupD │ │ │ -00008550: 6972 2f24 6261 7365 5472 6565 436f 6e66 ir/$baseTreeConf │ │ │ -00008560: 2220 616e 6420 2464 656c 7461 4361 6368 " and $deltaCach │ │ │ -00008570: 6529 0a7b 0a20 2020 2023 0a20 2020 2023 e).{. #. # │ │ │ -00008580: 206d 6f76 6520 6261 636b 7570 7320 7768 move backups wh │ │ │ -00008590: 6963 6820 6172 6520 636f 7069 6564 2028 ich are copied ( │ │ │ -000085a0: 616e 6420 6c69 6e6b 6564 290a 2020 2020 and linked). │ │ │ -000085b0: 2320 746f 2061 6c6c 2062 6163 6b75 7043 # to all backupC │ │ │ -000085c0: 6f70 7920 6c6f 6361 7469 6f6e 730a 2020 opy locations. │ │ │ -000085d0: 2020 230a 2370 7269 6e74 2022 6b65 7973 #.#print "keys │ │ │ -000085e0: 2069 6e20 7365 7269 6573 546f 436f 7079 in seriesToCopy │ │ │ -000085f0: 203d 2022 2c20 6a6f 696e 2822 2022 2c20 = ", join(" ", │ │ │ -00008600: 6b65 7973 2025 7365 7269 6573 546f 436f keys %seriesToCo │ │ │ -00008610: 7079 292c 2022 5c6e 223b 0a20 2020 206d py), "\n";. m │ │ │ -00008620: 7920 2473 3b0a 2020 2020 666f 7265 6163 y $s;. foreac │ │ │ -00008630: 6820 2473 2028 736f 7274 206b 6579 7320 h $s (sort keys │ │ │ -00008640: 2573 6572 6965 7354 6f43 6f70 7929 0a20 %seriesToCopy). │ │ │ -00008650: 2020 207b 0a23 7072 696e 7420 222b 2b2b {.#print "+++ │ │ │ -00008660: 2b2b 2b73 6572 6965 7320 2473 2b5c 6e22 +++series $s+\n" │ │ │ -00008670: 3b0a 096e 6578 740a 0920 2020 2075 6e6c ;..next.. unl │ │ │ -00008680: 6573 7320 2d64 2022 2464 656c 7461 4361 ess -d "$deltaCa │ │ │ -00008690: 6368 652f 2473 223b 0a0a 0923 2072 6561 che/$s";...# rea │ │ │ -000086a0: 6420 636f 7079 2070 726f 746f 636f 6c20 d copy protocol │ │ │ -000086b0: 6669 6c65 7320 696e 2062 6163 6b75 7043 files in backupC │ │ │ -000086c0: 6f70 7920 7461 7267 6574 0a09 6d79 2028 opy target..my ( │ │ │ -000086d0: 4063 6f70 6965 6429 203d 0a09 2020 2020 @copied) =.. │ │ │ -000086e0: 263a 3a72 6561 6444 6972 5374 6275 2822 &::readDirStbu(" │ │ │ -000086f0: 2464 656c 7461 4361 6368 652f 2473 222c $deltaCache/$s", │ │ │ -00008700: 205f 5f46 494c 455f 5f2c 205f 5f4c 494e __FILE__, __LIN │ │ │ -00008710: 455f 5f2c 0a09 0909 2020 2027 5c41 5c64 E__,.... '\A\d │ │ │ -00008720: 7b34 7d5c 2e5c 647b 327d 5c2e 5c64 7b32 {4}\.\d{2}\.\d{2 │ │ │ -00008730: 7d5f 5c64 7b32 7d5c 2e5c 647b 327d 5c2e }_\d{2}\.\d{2}\. │ │ │ -00008740: 5c64 7b32 7d5c 2e6c 696e 6b65 645c 5a27 \d{2}\.linked\Z' │ │ │ -00008750: 2c0a 0909 0909 2020 2020 2020 2470 724c ,..... $prL │ │ │ -00008760: 6f67 293b 0a23 7072 696e 7420 222d 312d og);.#print "-1- │ │ │ -00008770: 5c6e 223b 0a09 6d79 2028 406d 7573 7442 \n";..my (@mustB │ │ │ -00008780: 6543 6f70 6965 6429 203d 2073 6f72 7420 eCopied) = sort │ │ │ -00008790: 6b65 7973 2025 7b24 7365 7269 6573 546f keys %{$seriesTo │ │ │ -000087a0: 436f 7079 7b24 737d 7d3b 0a0a 0975 6e6c Copy{$s}};...unl │ │ │ -000087b0: 6573 7320 2840 636f 7069 6564 290a 097b ess (@copied)..{ │ │ │ -000087c0: 0a09 2020 2020 2470 724c 6f67 2d3e 7072 .. $prLog->pr │ │ │ -000087d0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -000087e0: 4927 2c0a 0909 0920 2027 2d73 7472 2720 I',.... '-str' │ │ │ -000087f0: 3d3e 0a09 0909 2020 5b22 5c74 6465 6c74 =>.... ["\tdelt │ │ │ -00008800: 6143 6163 6865 2070 6f6f 6c20 6f66 2073 aCache pool of s │ │ │ -00008810: 6572 6965 7320 3c24 733e 2069 7320 656d eries <$s> is em │ │ │ -00008820: 7074 793a 222c 0a09 0909 2020 2022 5c74 pty:",.... "\t │ │ │ -00008830: 5c74 286d 7573 7420 6265 2063 6f70 6965 \t(must be copie │ │ │ -00008840: 6420 746f 3a20 3c22 202e 0a09 0909 2020 d to: <" ..... │ │ │ -00008850: 206a 6f69 6e28 273e 203c 272c 2040 6d75 join('> <', @mu │ │ │ -00008860: 7374 4265 436f 7069 6564 2920 2e20 273e stBeCopied) . '> │ │ │ -00008870: 2927 5d29 0a09 0969 6620 2476 6572 626f )'])...if $verbo │ │ │ -00008880: 7365 3b0a 0920 2020 206e 6578 743b 0a09 se;.. next;.. │ │ │ -00008890: 7d0a 0a09 6d79 2024 633b 0a09 666f 7265 }...my $c;..fore │ │ │ -000088a0: 6163 6820 2463 2028 4063 6f70 6965 6429 ach $c (@copied) │ │ │ -000088b0: 2020 2023 206c 6f6f 7020 6f76 6572 2061 # loop over a │ │ │ -000088c0: 6c6c 202e 6c69 6e6b 6564 2066 696c 6573 ll .linked files │ │ │ -000088d0: 2069 6e20 7468 6973 2073 6572 6965 730a in this series. │ │ │ -000088e0: 097b 0a23 7072 696e 7420 222d 322d 2463 .{.#print "-2-$c │ │ │ -000088f0: 2d5c 6e22 3b0a 0920 2020 206d 7920 2824 -\n";.. my ($ │ │ │ -00008900: 6344 6972 2920 3d20 2463 203d 7e20 2f5e cDir) = $c =~ /^ │ │ │ -00008910: 282e 2b29 5c2e 6c69 6e6b 6564 242f 3b0a (.+)\.linked$/;. │ │ │ -00008920: 0920 2020 206c 6f63 616c 202a 4649 4c45 . local *FILE │ │ │ -00008930: 3b0a 0920 2020 206f 7065 6e28 4649 4c45 ;.. open(FILE │ │ │ -00008940: 2c20 273c 272c 2022 2464 656c 7461 4361 , '<', "$deltaCa │ │ │ -00008950: 6368 652f 2473 2f24 6322 2920 6f72 0a09 che/$s/$c") or.. │ │ │ -00008960: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00008970: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -00008980: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00008990: 3e0a 0909 0920 2020 2020 205b 2263 616e >.... ["can │ │ │ -000089a0: 6e6f 7420 6f70 656e 203c 2464 656c 7461 not open <$delta │ │ │ -000089b0: 4361 6368 652f 2473 2f24 633e 225d 2c0a Cache/$s/$c>"],. │ │ │ -000089c0: 0909 0920 2020 2020 2027 2d65 7869 7427 ... '-exit' │ │ │ -000089d0: 203d 3e20 3129 3b0a 2370 7269 6e74 2022 => 1);.#print " │ │ │ -000089e0: 5c74 3c22 2c20 6a6f 696e 2822 3e20 3c22 \t<", join("> <" │ │ │ -000089f0: 2c20 406d 7573 7442 6543 6f70 6965 6429 , @mustBeCopied) │ │ │ -00008a00: 2c20 223e 5c6e 223b 0a23 7072 696e 7420 , ">\n";.#print │ │ │ -00008a10: 225c 7424 635c 6e22 3b0a 0920 2020 206d "\t$c\n";.. m │ │ │ -00008a20: 7920 2824 6c2c 2040 7265 616c 6c79 436f y ($l, @reallyCo │ │ │ -00008a30: 7069 6564 2c20 2572 6561 6c6c 7943 6f70 pied, %reallyCop │ │ │ -00008a40: 6965 6429 3b0a 0920 2020 2066 6f72 6561 ied);.. forea │ │ │ -00008a50: 6368 2024 6c20 283c 4649 4c45 3e29 0a09 ch $l ().. │ │ │ -00008a60: 2020 2020 7b0a 0909 6368 6f6d 7020 246c {...chomp $l │ │ │ -00008a70: 3b0a 0909 7075 7368 2040 7265 616c 6c79 ;...push @really │ │ │ -00008a80: 436f 7069 6564 2c20 246c 3b0a 0909 2472 Copied, $l;...$r │ │ │ -00008a90: 6561 6c6c 7943 6f70 6965 647b 246c 7d20 eallyCopied{$l} │ │ │ -00008aa0: 3d20 313b 0a09 2020 2020 7d0a 0920 2020 = 1;.. }.. │ │ │ -00008ab0: 2063 6c6f 7365 2846 494c 4529 3b0a 2370 close(FILE);.#p │ │ │ -00008ac0: 7269 6e74 2022 5c74 5c74 4072 6561 6c6c rint "\t\t@reall │ │ │ -00008ad0: 7943 6f70 6965 645c 6e22 3b0a 0a09 2020 yCopied\n";... │ │ │ -00008ae0: 2020 6d79 2024 6d76 4177 6179 203d 2031 my $mvAway = 1 │ │ │ -00008af0: 3b0a 0920 2020 2066 6f72 6561 6368 2024 ;.. foreach $ │ │ │ -00008b00: 6c20 2840 6d75 7374 4265 436f 7069 6564 l (@mustBeCopied │ │ │ -00008b10: 290a 0920 2020 207b 0a09 0975 6e6c 6573 ).. {...unles │ │ │ -00008b20: 7320 2865 7869 7374 7320 2472 6561 6c6c s (exists $reall │ │ │ -00008b30: 7943 6f70 6965 647b 246c 7d29 0a09 097b yCopied{$l})...{ │ │ │ -00008b40: 0a09 0920 2020 2024 7072 4c6f 672d 3e70 ... $prLog->p │ │ │ -00008b50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00008b60: 2749 272c 0a09 0909 0920 2027 2d73 7472 'I',..... '-str │ │ │ -00008b70: 2720 3d3e 0a09 0909 0920 205b 2263 6f70 ' =>..... ["cop │ │ │ -00008b80: 7969 6e67 206f 6620 7365 7269 6573 203c ying of series < │ │ │ -00008b90: 2473 3e20 746f 203c 2463 4469 723e 206e $s> to <$cDir> n │ │ │ -00008ba0: 6f74 2066 696e 6973 6865 643a 222c 0a09 ot finished:",.. │ │ │ -00008bb0: 0909 0920 2020 225c 746d 7573 7420 6265 ... "\tmust be │ │ │ -00008bc0: 2063 6f70 6965 6420 746f 3a20 3c22 202e copied to: <" . │ │ │ -00008bd0: 0a09 0909 0920 2020 6a6f 696e 2827 3e20 ..... join('> │ │ │ -00008be0: 3c27 2c20 406d 7573 7442 6543 6f70 6965 <', @mustBeCopie │ │ │ -00008bf0: 6429 202e 2027 3e27 2c0a 0909 0909 2020 d) . '>',..... │ │ │ -00008c00: 2022 5c74 616c 7265 6164 7920 636f 7069 "\talready copi │ │ │ -00008c10: 6564 3a20 3c22 202e 0a09 0909 0920 2020 ed: <" ...... │ │ │ -00008c20: 6a6f 696e 2827 3e20 3c27 2c20 4072 6561 join('> <', @rea │ │ │ -00008c30: 6c6c 7943 6f70 6965 6429 202e 2027 3e27 llyCopied) . '>' │ │ │ -00008c40: 5d29 0a09 0909 6966 2024 7665 7262 6f73 ])....if $verbos │ │ │ -00008c50: 653b 0a09 0920 2020 2024 6d76 4177 6179 e;... $mvAway │ │ │ -00008c60: 203d 2030 3b0a 0909 2020 2020 6c61 7374 = 0;... last │ │ │ -00008c70: 3b0a 0909 7d0a 0920 2020 207d 0a09 2020 ;...}.. }.. │ │ │ -00008c80: 2020 6966 2028 246d 7641 7761 7920 616e if ($mvAway an │ │ │ -00008c90: 640a 0909 2d64 2022 2464 656c 7461 4361 d...-d "$deltaCa │ │ │ -00008ca0: 6368 652f 2473 2f24 6344 6972 2229 2020 che/$s/$cDir") │ │ │ -00008cb0: 2320 6d76 2062 6163 6b75 700a 0920 2020 # mv backup.. │ │ │ -00008cc0: 207b 0a09 0924 7072 4c6f 672d 3e70 7269 {...$prLog->pri │ │ │ -00008cd0: 6e74 2827 2d6b 696e 6427 203d 3e20 2749 nt('-kind' => 'I │ │ │ -00008ce0: 272c 0a09 0909 2020 2020 2020 272d 7374 ',.... '-st │ │ │ -00008cf0: 7227 203d 3e0a 0909 0920 2020 2020 205b r' =>.... [ │ │ │ -00008d00: 2262 6163 6b75 7020 3c24 6465 6c74 6143 "backup <$deltaC │ │ │ -00008d10: 6163 6865 2f24 732f 2463 4469 723e 2063 ache/$s/$cDir> c │ │ │ -00008d20: 6f70 6965 6420 746f 203c 2220 2e0a 0909 opied to <" .... │ │ │ -00008d30: 0920 2020 2020 2020 6a6f 696e 2827 3e20 . join('> │ │ │ -00008d40: 3c27 2c20 4072 6561 6c6c 7943 6f70 6965 <', @reallyCopie │ │ │ -00008d50: 6429 202e 2027 3e27 2c0a 0909 0920 2020 d) . '>',.... │ │ │ -00008d60: 2020 2020 225c 746d 6f76 696e 6720 6261 "\tmoving ba │ │ │ -00008d70: 636b 7570 2074 6f20 3c24 6465 6c74 6143 ckup to <$deltaC │ │ │ -00008d80: 6163 6865 2f24 7042 2f24 733e 225d 293b ache/$pB/$s>"]); │ │ │ -00008d90: 0a09 096d 6b64 6972 2022 2464 656c 7461 ...mkdir "$delta │ │ │ -00008da0: 4361 6368 652f 2470 4222 0a09 0920 2020 Cache/$pB"... │ │ │ -00008db0: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d "$del │ │ │ -00008dc0: 7461 4361 6368 652f 2470 4222 3b0a 0909 taCache/$pB";... │ │ │ -00008dd0: 6d6b 6469 7220 2224 6465 6c74 6143 6163 mkdir "$deltaCac │ │ │ -00008de0: 6865 2f24 7042 2f24 7322 0a09 0920 2020 he/$pB/$s"... │ │ │ -00008df0: 2075 6e6c 6573 7320 2d64 2022 2464 656c unless -d "$del │ │ │ -00008e00: 7461 4361 6368 652f 2470 422f 2473 223b taCache/$pB/$s"; │ │ │ -00008e10: 0a09 0926 3a3a 6d76 436f 6d6d 2822 2464 ...&::mvComm("$d │ │ │ -00008e20: 656c 7461 4361 6368 652f 2473 2f24 6344 eltaCache/$s/$cD │ │ │ -00008e30: 6972 2220 3d3e 2022 2464 656c 7461 4361 ir" => "$deltaCa │ │ │ -00008e40: 6368 652f 2470 422f 2473 222c 0a09 0909 che/$pB/$s",.... │ │ │ -00008e50: 2020 272f 746d 702f 6d76 436f 6d6d 2d27 '/tmp/mvComm-' │ │ │ -00008e60: 2c20 2470 724c 6f67 293b 0a09 2020 2020 , $prLog);.. │ │ │ -00008e70: 7d0a 097d 0a20 2020 207d 0a0a 2020 2020 }..}. }.. │ │ │ -00008e80: 230a 2020 2020 2320 6368 6563 6b20 6966 #. # check if │ │ │ -00008e90: 2062 6163 6b75 7073 2069 6e20 2464 656c backups in $del │ │ │ -00008ea0: 7461 4361 6368 652f 7072 6f63 6573 7365 taCache/processe │ │ │ -00008eb0: 6442 6163 6b75 7073 2068 6176 6520 746f dBackups have to │ │ │ -00008ec0: 2062 6520 6465 6c65 7465 640a 2020 2020 be deleted. │ │ │ -00008ed0: 230a 2020 2020 6d79 2024 6465 6c44 6174 #. my $delDat │ │ │ -00008ee0: 6520 3d20 6461 7465 546f 6f6c 732d 3e6e e = dateTools->n │ │ │ -00008ef0: 6577 2829 3b0a 2020 2020 2464 656c 4461 ew();. $delDa │ │ │ -00008f00: 7465 2d3e 7375 6228 272d 7374 7227 203d te->sub('-str' = │ │ │ -00008f10: 3e20 2461 7263 6869 7665 4475 7261 7469 > $archiveDurati │ │ │ -00008f20: 6f6e 4465 6c74 6143 6163 6865 293b 0a20 onDeltaCache);. │ │ │ -00008f30: 2020 206d 7920 2464 656c 4461 7465 5374 my $delDateSt │ │ │ -00008f40: 7220 3d20 2464 656c 4461 7465 2d3e 6765 r = $delDate->ge │ │ │ -00008f50: 7444 6174 6554 696d 6528 293b 0a0a 2020 tDateTime();.. │ │ │ -00008f60: 2020 6c6f 6361 6c20 2a44 4952 3b0a 2020 local *DIR;. │ │ │ -00008f70: 2020 6d79 2024 6373 7062 203d 2022 2464 my $cspb = "$d │ │ │ -00008f80: 656c 7461 4361 6368 652f 2470 4222 3b0a eltaCache/$pB";. │ │ │ -00008f90: 2020 2020 6d6b 6469 7220 2463 7370 620a mkdir $cspb. │ │ │ -00008fa0: 0975 6e6c 6573 7320 2d64 2024 6373 7062 .unless -d $cspb │ │ │ -00008fb0: 3b0a 2020 2020 6f70 656e 6469 7228 4449 ;. opendir(DI │ │ │ -00008fc0: 522c 2024 6373 7062 2920 6f72 0a09 2020 R, $cspb) or.. │ │ │ -00008fd0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -00008fe0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -00008ff0: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -00009000: 2263 616e 6e6f 7420 6f70 656e 6469 7220 "cannot opendir │ │ │ -00009010: 3c24 6373 7062 3e2c 2065 7869 7469 6e67 <$cspb>, exiting │ │ │ -00009020: 225d 2c0a 0909 0920 2027 2d61 6464 2720 "],.... '-add' │ │ │ -00009030: 3d3e 205b 5f5f 4649 4c45 5f5f 2c20 5f5f => [__FILE__, __ │ │ │ -00009040: 4c49 4e45 5f5f 5d2c 0a09 0909 2020 272d LINE__],.... '- │ │ │ -00009050: 6578 6974 2720 3d3e 2031 293b 0a20 2020 exit' => 1);. │ │ │ -00009060: 206d 7920 2840 7365 7269 6573 293b 0a20 my (@series);. │ │ │ -00009070: 2020 2077 6869 6c65 2028 2473 203d 2072 while ($s = r │ │ │ -00009080: 6561 6464 6972 2044 4952 290a 2020 2020 eaddir DIR). │ │ │ -00009090: 7b0a 096e 6578 7420 6966 2028 2473 2065 {..next if ($s e │ │ │ -000090a0: 7120 272e 2720 6f72 2024 7320 6571 2027 q '.' or $s eq ' │ │ │ -000090b0: 2e2e 2729 3b0a 096d 7920 2465 203d 2022 ..');..my $e = " │ │ │ -000090c0: 2463 7370 622f 2473 223b 0a09 6e65 7874 $cspb/$s";..next │ │ │ -000090d0: 2069 6620 282d 6c20 2465 2061 6e64 206e if (-l $e and n │ │ │ -000090e0: 6f74 202d 6420 2465 293b 2020 2023 206f ot -d $e); # o │ │ │ -000090f0: 6e6c 7920 6469 7265 6374 6f72 6965 730a nly directories. │ │ │ -00009100: 096e 6578 7420 756e 6c65 7373 202d 6420 .next unless -d │ │ │ -00009110: 2465 3b0a 0970 7573 6820 4073 6572 6965 $e;..push @serie │ │ │ -00009120: 732c 2024 733b 0a20 2020 207d 0a20 2020 s, $s;. }. │ │ │ -00009130: 2063 6c6f 7365 6469 7228 4449 5229 3b0a closedir(DIR);. │ │ │ -00009140: 0a20 2020 206d 7920 2464 656c 5374 7269 . my $delStri │ │ │ -00009150: 6e67 3b0a 2020 2020 6966 2028 2464 6f6e ng;. if ($don │ │ │ -00009160: 7444 656c 496e 4465 6c74 6143 6163 6865 tDelInDeltaCache │ │ │ -00009170: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog- │ │ │ -00009180: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00009190: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ -000091a0: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -000091b0: 205b 2264 6f20 6e6f 7420 6465 6c65 7465 ["do not delete │ │ │ -000091c0: 2061 6e79 7468 696e 6720 696e 2064 656c anything in del │ │ │ -000091d0: 7461 4361 6368 6520 2220 2e0a 0909 2020 taCache " .... │ │ │ -000091e0: 2020 2020 2022 3c24 6465 6c74 6143 6163 "<$deltaCac │ │ │ -000091f0: 6865 3e20 7072 6f63 6573 7365 6442 6163 he> processedBac │ │ │ -00009200: 6b75 7073 2062 6563 6175 7365 2022 202e kups because " . │ │ │ -00009210: 0a09 0920 2020 2020 2020 222d 2d64 6f6e ... "--don │ │ │ -00009220: 7444 656c 496e 4465 6c74 6143 6163 6865 tDelInDeltaCache │ │ │ -00009230: 2069 7320 7365 7422 2c0a 0909 2020 2020 is set",... │ │ │ -00009240: 2020 2022 5c74 6167 6520 666f 7220 6465 "\tage for de │ │ │ -00009250: 6c65 7469 6f6e 2069 7320 3e20 2461 7263 letion is > $arc │ │ │ -00009260: 6869 7665 4475 7261 7469 6f6e 4465 6c74 hiveDurationDelt │ │ │ -00009270: 6143 6163 6865 2220 2e0a 0909 2020 2020 aCache" .... │ │ │ -00009280: 2020 2022 2028 6465 6c65 7465 2062 6163 " (delete bac │ │ │ -00009290: 6b75 7073 206f 6c64 6572 2074 6861 6e20 kups older than │ │ │ -000092a0: 2464 656c 4461 7465 5374 7229 225d 293b $delDateStr)"]); │ │ │ -000092b0: 0a09 2464 656c 5374 7269 6e67 203d 2027 ..$delString = ' │ │ │ -000092c0: 776f 756c 6420 6265 2064 656c 6574 6564 would be deleted │ │ │ -000092d0: 273b 0a20 2020 207d 0a20 2020 2065 6c73 ';. }. els │ │ │ -000092e0: 650a 2020 2020 7b0a 0924 7072 4c6f 672d e. {..$prLog- │ │ │ -000092f0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00009300: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ -00009310: 2d73 7472 2720 3d3e 0a09 0920 2020 2020 -str' =>... │ │ │ -00009320: 205b 2264 656c 6574 696e 6720 696e 2064 ["deleting in d │ │ │ -00009330: 656c 7461 4361 6368 6520 2220 2e0a 0909 eltaCache " .... │ │ │ -00009340: 2020 2020 2020 2022 3c24 6465 6c74 6143 "<$deltaC │ │ │ -00009350: 6163 6865 3e20 7072 6f63 6573 7365 6442 ache> processedB │ │ │ -00009360: 6163 6b75 7073 222c 0a09 0920 2020 2020 ackups",... │ │ │ -00009370: 2020 225c 7461 6765 2066 6f72 2064 656c "\tage for del │ │ │ -00009380: 6574 696f 6e20 6973 203e 2024 6172 6368 etion is > $arch │ │ │ -00009390: 6976 6544 7572 6174 696f 6e44 656c 7461 iveDurationDelta │ │ │ -000093a0: 4361 6368 6522 202e 0a09 0920 2020 2020 Cache" .... │ │ │ -000093b0: 2020 2220 2864 656c 6574 6520 6261 636b " (delete back │ │ │ -000093c0: 7570 7320 6f6c 6465 7220 7468 616e 2024 ups older than $ │ │ │ -000093d0: 6465 6c44 6174 6553 7472 2922 5d29 3b0a delDateStr)"]);. │ │ │ -000093e0: 0924 6465 6c53 7472 696e 6720 3d20 2764 .$delString = 'd │ │ │ -000093f0: 656c 6574 696e 6727 3b0a 2020 2020 7d0a eleting';. }. │ │ │ -00009400: 0a20 2020 206d 7920 2840 6465 6c44 6972 . my (@delDir │ │ │ -00009410: 7329 203d 2028 293b 0a20 2020 2066 6f72 s) = ();. for │ │ │ -00009420: 6561 6368 2024 7320 2840 7365 7269 6573 each $s (@series │ │ │ -00009430: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog- │ │ │ -00009440: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00009450: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ -00009460: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => ["check │ │ │ -00009470: 696e 6720 7365 7269 6573 203c 2473 3e22 ing series <$s>" │ │ │ -00009480: 5d29 3b0a 0a09 6d79 2024 6469 7273 203d ]);...my $dirs = │ │ │ -00009490: 0a09 2020 2020 616c 6c53 746f 7265 4261 .. allStoreBa │ │ │ -000094a0: 636b 7570 5365 7269 6573 2d3e 6e65 7728 ckupSeries->new( │ │ │ -000094b0: 272d 726f 6f74 4469 7227 203d 3e20 2224 '-rootDir' => "$ │ │ │ -000094c0: 6373 7062 2f24 7322 2c0a 0909 0909 2020 cspb/$s",..... │ │ │ -000094d0: 2020 2020 272d 6368 6563 6b53 756d 4669 '-checkSumFi │ │ │ -000094e0: 6c65 2720 3d3e 2024 6368 6563 6b53 756d le' => $checkSum │ │ │ -000094f0: 4669 6c65 2c0a 0909 0909 2020 2020 2020 File,..... │ │ │ -00009500: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -00009510: 6f67 293b 0a23 0909 0909 2020 2020 2020 og);.#.... │ │ │ -00009520: 272d 6162 7350 6174 6827 203d 3e20 3029 '-absPath' => 0) │ │ │ -00009530: 3b0a 096d 7920 2840 6469 7273 2920 3d20 ;..my (@dirs) = │ │ │ -00009540: 2464 6972 732d 3e67 6574 416c 6c46 696e $dirs->getAllFin │ │ │ -00009550: 6973 6865 6444 6972 7328 293b 2020 2023 ishedDirs(); # │ │ │ -00009560: 206f 6c64 6573 7420 6669 7273 740a 096d oldest first..m │ │ │ -00009570: 7920 2464 3b0a 0966 6f72 6561 6368 2024 y $d;..foreach $ │ │ │ -00009580: 6420 2840 6469 7273 290a 097b 0a09 2020 d (@dirs)..{.. │ │ │ -00009590: 2020 6d79 2028 2479 6561 722c 2024 6d6f my ($year, $mo │ │ │ -000095a0: 6e74 682c 2024 6461 792c 2024 686f 7572 nth, $day, $hour │ │ │ -000095b0: 2c20 246d 696e 2c20 2473 6563 2920 3d20 , $min, $sec) = │ │ │ -000095c0: 2464 203d 7e0a 0909 2f5c 4128 5c64 7b34 $d =~.../\A(\d{4 │ │ │ -000095d0: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\.(\d{2})\.(\d │ │ │ -000095e0: 7b32 7d29 5f28 5c64 7b32 7d29 5c2e 285c {2})_(\d{2})\.(\ │ │ │ -000095f0: 647b 327d 295c 2e28 5c64 7b32 7d29 5c5a d{2})\.(\d{2})\Z │ │ │ -00009600: 2f6f 3b0a 0920 2020 2069 6620 2824 6465 /o;.. if ($de │ │ │ -00009610: 6c44 6174 652d 3e63 6f6d 7061 7265 2827 lDate->compare(' │ │ │ -00009620: 2d79 6561 7227 203d 3e20 2479 6561 722c -year' => $year, │ │ │ -00009630: 0a09 0909 0920 2027 2d6d 6f6e 7468 2720 ..... '-month' │ │ │ -00009640: 3d3e 2024 6d6f 6e74 682c 0a09 0909 0920 => $month,..... │ │ │ -00009650: 2027 2d64 6179 2720 3d3e 2024 6461 792c '-day' => $day, │ │ │ -00009660: 0a09 0909 0920 2027 2d68 6f75 7227 203d ..... '-hour' = │ │ │ -00009670: 3e20 2468 6f75 722c 0a09 0909 0920 2027 > $hour,..... ' │ │ │ -00009680: 2d6d 696e 2720 3d3e 2024 6d69 6e2c 0a09 -min' => $min,.. │ │ │ -00009690: 0909 0920 2027 2d73 6563 2720 3d3e 2024 ... '-sec' => $ │ │ │ -000096a0: 7365 6329 203c 2030 290a 0920 2020 207b sec) < 0).. { │ │ │ -000096b0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -000096c0: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -000096d0: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -000096e0: 203d 3e20 5b22 5c74 6465 6c74 6143 6163 => ["\tdeltaCac │ │ │ -000096f0: 6865 3a20 2473 202d 3e20 2464 202d 2024 he: $s -> $d - $ │ │ │ -00009700: 6465 6c53 7472 696e 6722 5d29 3b0a 0909 delString"]);... │ │ │ -00009710: 7075 7368 2040 6465 6c44 6972 732c 2022 push @delDirs, " │ │ │ -00009720: 2473 2f24 6422 3b0a 0920 2020 207d 0a09 $s/$d";.. }.. │ │ │ -00009730: 2020 2020 656c 7365 0a09 2020 2020 7b0a else.. {. │ │ │ -00009740: 0909 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -00009750: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -00009760: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -00009770: 3d3e 205b 225c 7464 656c 7461 4361 6368 => ["\tdeltaCach │ │ │ -00009780: 653a 2024 7320 2d3e 2024 6420 2d20 6e6f e: $s -> $d - no │ │ │ -00009790: 7420 6f6c 6420 656e 6f75 6768 2074 6f20 t old enough to │ │ │ -000097a0: 6465 6c65 7465 225d 293b 0a09 2020 2020 delete"]);.. │ │ │ -000097b0: 7d0a 097d 0a20 2020 207d 0a20 2020 2075 }..}. }. u │ │ │ -000097c0: 6e6c 6573 7320 2824 646f 6e74 4465 6c49 nless ($dontDelI │ │ │ -000097d0: 6e44 656c 7461 4361 6368 6529 0a20 2020 nDeltaCache). │ │ │ -000097e0: 207b 0a09 6d79 2028 2473 756d 4279 7465 {..my ($sumByte │ │ │ -000097f0: 732c 2024 7375 6d46 696c 6573 2920 3d20 s, $sumFiles) = │ │ │ -00009800: 2830 2c20 3029 3b0a 0966 6f72 6561 6368 (0, 0);..foreach │ │ │ -00009810: 206d 7920 2464 2028 4064 656c 4469 7273 my $d (@delDirs │ │ │ -00009820: 290a 097b 0a09 2020 2020 2470 724c 6f67 )..{.. $prLog │ │ │ -00009830: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00009840: 3d3e 2027 4927 2c0a 0909 0920 2027 2d73 => 'I',.... '-s │ │ │ -00009850: 7472 2720 3d3e 205b 2264 656c 6574 696e tr' => ["deletin │ │ │ -00009860: 6720 2464 202e 2e2e 225d 293b 0a09 2020 g $d ..."]);.. │ │ │ -00009870: 2020 756e 6c69 6e6b 2022 2464 656c 7461 unlink "$delta │ │ │ -00009880: 4361 6368 652f 2464 2e63 6f70 6965 6422 Cache/$d.copied" │ │ │ -00009890: 2c20 2224 6465 6c74 6143 6163 6865 2f24 , "$deltaCache/$ │ │ │ -000098a0: 642e 6c69 6e6b 6564 223b 0a09 2020 2020 d.linked";.. │ │ │ -000098b0: 6d79 2024 7264 6420 3d20 7265 6375 7273 my $rdd = recurs │ │ │ -000098c0: 6976 6544 656c 4469 722d 3e6e 6577 2827 iveDelDir->new(' │ │ │ -000098d0: 2d64 6972 2720 3d3e 2022 2463 7370 622f -dir' => "$cspb/ │ │ │ -000098e0: 2464 222c 0a09 0909 0909 2020 2027 2d70 $d",...... '-p │ │ │ -000098f0: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -00009900: 3b0a 0920 2020 206d 7920 2824 6469 7273 ;.. my ($dirs │ │ │ -00009910: 2c20 2466 696c 6573 2c20 2462 7974 6573 , $files, $bytes │ │ │ -00009920: 2c20 246c 696e 6b73 2c20 2473 7461 7942 , $links, $stayB │ │ │ -00009930: 7974 6573 2920 3d0a 0909 2472 6464 2d3e ytes) =...$rdd-> │ │ │ -00009940: 6765 7453 7461 7469 7374 6963 7328 293b getStatistics(); │ │ │ -00009950: 0a09 2020 2020 2473 756d 4279 7465 7320 .. $sumBytes │ │ │ -00009960: 2b3d 2024 6279 7465 733b 0a09 2020 2020 += $bytes;.. │ │ │ -00009970: 2473 756d 4669 6c65 7320 2b3d 2024 6669 $sumFiles += $fi │ │ │ -00009980: 6c65 733b 0a09 2020 2020 6d79 2028 2462 les;.. my ($b │ │ │ -00009990: 2920 3d20 263a 3a68 756d 616e 5265 6164 ) = &::humanRead │ │ │ -000099a0: 6162 6c65 2824 6279 7465 7329 3b0a 0920 able($bytes);.. │ │ │ -000099b0: 2020 206d 7920 2824 7362 2920 3d20 263a my ($sb) = &: │ │ │ -000099c0: 3a68 756d 616e 5265 6164 6162 6c65 2824 :humanReadable($ │ │ │ -000099d0: 7374 6179 4279 7465 7329 3b0a 0920 2020 stayBytes);.. │ │ │ -000099e0: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -000099f0: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00009a00: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00009a10: 3e20 5b22 5c74 6672 6565 6420 2462 2028 > ["\tfreed $b ( │ │ │ -00009a20: 2462 7974 6573 292c 2024 6669 6c65 7320 $bytes), $files │ │ │ -00009a30: 6669 6c65 7322 5d29 3b0a 097d 0a09 6d79 files"]);..}..my │ │ │ -00009a40: 2028 2462 2920 3d20 263a 3a68 756d 616e ($b) = &::human │ │ │ -00009a50: 5265 6164 6162 6c65 2824 7375 6d42 7974 Readable($sumByt │ │ │ -00009a60: 6573 293b 0a09 2470 724c 6f67 2d3e 7072 es);..$prLog->pr │ │ │ -00009a70: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00009a80: 4927 2c0a 0909 2020 2020 2020 272d 7374 I',... '-st │ │ │ -00009a90: 7227 203d 3e0a 0909 2020 2020 2020 5b22 r' =>... [" │ │ │ -00009aa0: 7375 6d3a 2066 7265 6564 2024 6220 2824 sum: freed $b ($ │ │ │ -00009ab0: 7375 6d42 7974 6573 292c 2024 7375 6d46 sumBytes), $sumF │ │ │ -00009ac0: 696c 6573 2066 696c 6573 225d 290a 0920 iles files"]).. │ │ │ -00009ad0: 2020 2069 6620 2473 756d 4279 7465 733b if $sumBytes; │ │ │ -00009ae0: 0a0a 2020 2020 7d0a 7d0a 0a23 2053 7461 .. }.}..# Sta │ │ │ -00009af0: 7469 7374 696b 20fc 6265 7220 4461 7565 tistik .ber Daue │ │ │ -00009b00: 7220 756e 6420 4350 552d 5665 7262 7261 r und CPU-Verbra │ │ │ -00009b10: 7563 680a 0a6d 7920 2840 6c29 3b0a 6d79 uch..my (@l);.my │ │ │ -00009b20: 2028 2475 7365 722c 2473 7973 7465 6d2c ($user,$system, │ │ │ -00009b30: 2463 7573 6572 2c24 6373 7973 7465 6d29 $cuser,$csystem) │ │ │ -00009b40: 203d 2074 696d 6573 3b0a 6d79 2028 2474 = times;.my ($t │ │ │ -00009b50: 7265 6e6e 2920 3d20 222d 2d2d 2d2d 2d2d renn) = "------- │ │ │ -00009b60: 2b2d 2d2d 2d2d 2d2d 2d2d 2d2b 2d2d 2d2d +----------+---- │ │ │ -00009b70: 2d2d 2d2d 2d2d 223b 0a70 7573 6820 406c ------";.push @l │ │ │ -00009b80: 2c20 7370 7269 6e74 6628 2225 2d37 737c , sprintf("%-7s| │ │ │ -00009b90: 2531 3073 7c25 3130 7322 2c20 2220 5b73 %10s|%10s", " [s │ │ │ -00009ba0: 6563 5d22 2c20 2275 7365 7222 2c20 2273 ec]", "user", "s │ │ │ -00009bb0: 7973 7465 6d22 293b 0a70 7573 6820 406c ystem");.push @l │ │ │ -00009bc0: 2c20 2224 7472 656e 6e22 3b0a 7075 7368 , "$trenn";.push │ │ │ -00009bd0: 2040 6c2c 2073 7072 696e 7466 2822 252d @l, sprintf("%- │ │ │ -00009be0: 3773 7c25 3130 2e32 667c 2531 302e 3266 7s|%10.2f|%10.2f │ │ │ -00009bf0: 222c 2022 7072 6f63 6573 7322 2c20 2475 ", "process", $u │ │ │ -00009c00: 7365 722c 2024 7379 7374 656d 293b 0a70 ser, $system);.p │ │ │ -00009c10: 7573 6820 406c 2c20 7370 7269 6e74 6628 ush @l, sprintf( │ │ │ -00009c20: 2225 2d37 737c 2531 302e 3266 7c25 3130 "%-7s|%10.2f|%10 │ │ │ -00009c30: 2e32 6622 2c20 2263 6869 6c64 7322 2c20 .2f", "childs", │ │ │ -00009c40: 2463 7573 6572 2c20 2463 7379 7374 656d $cuser, $csystem │ │ │ -00009c50: 293b 0a70 7573 6820 406c 2c20 2224 7472 );.push @l, "$tr │ │ │ -00009c60: 656e 6e22 3b0a 6d79 2028 2475 2c20 2473 enn";.my ($u, $s │ │ │ -00009c70: 2920 3d20 2824 6375 7365 7220 2b20 2475 ) = ($cuser + $u │ │ │ -00009c80: 7365 722c 2024 6373 7973 7465 6d20 2b20 ser, $csystem + │ │ │ -00009c90: 2473 7973 7465 6d29 3b0a 7075 7368 2040 $system);.push @ │ │ │ -00009ca0: 6c2c 2073 7072 696e 7466 2822 252d 3773 l, sprintf("%-7s │ │ │ -00009cb0: 7c25 3130 2e32 667c 2531 302e 3266 203d |%10.2f|%10.2f = │ │ │ -00009cc0: 3e20 252e 3266 222c 2022 7375 6d22 2c20 > %.2f", "sum", │ │ │ -00009cd0: 2475 2c20 2473 2c20 2475 202b 2024 7329 $u, $s, $u + $s) │ │ │ -00009ce0: 3b0a 0a6d 7920 2840 7374 6172 7444 6174 ;..my (@startDat │ │ │ -00009cf0: 6529 203d 2028 293b 0a69 6620 2824 7374 e) = ();.if ($st │ │ │ -00009d00: 6172 7444 6174 6529 0a7b 0a20 2020 2070 artDate).{. p │ │ │ -00009d10: 7573 6820 4073 7461 7274 4461 7465 2c20 ush @startDate, │ │ │ -00009d20: 2720 2020 2020 2020 2020 2020 7072 6563 ' prec │ │ │ -00009d30: 6f6d 6d61 6e64 2064 7572 6174 696f 6e20 ommand duration │ │ │ -00009d40: 3d20 2720 2e0a 0924 7374 6172 7444 6174 = ' ...$startDat │ │ │ -00009d50: 652d 3e64 656c 7461 496e 5374 7228 272d e->deltaInStr('- │ │ │ -00009d60: 7365 636f 6e64 4461 7465 2720 3d3e 2024 secondDate' => $ │ │ │ -00009d70: 7374 6172 7444 6174 6529 3b0a 7d0a 0a6d startDate);.}..m │ │ │ -00009d80: 7920 2464 456e 6420 3d20 6461 7465 546f y $dEnd = dateTo │ │ │ -00009d90: 6f6c 732d 3e6e 6577 2829 3b0a 6d79 2024 ols->new();.my $ │ │ │ -00009da0: 6475 7261 7469 6f6e 203d 2024 7374 6172 duration = $star │ │ │ -00009db0: 7444 6174 652d 3e64 656c 7461 496e 5365 tDate->deltaInSe │ │ │ -00009dc0: 6373 2827 2d73 6563 6f6e 6444 6174 6527 cs('-secondDate' │ │ │ -00009dd0: 203d 3e20 2464 456e 6429 3b0a 2464 7572 => $dEnd);.$dur │ │ │ -00009de0: 6174 696f 6e20 3d20 3120 6966 2028 2464 ation = 1 if ($d │ │ │ -00009df0: 7572 6174 696f 6e20 3d3d 2030 293b 2020 uration == 0); │ │ │ -00009e00: 2023 204d 696e 696d 616c 6572 2057 6572 # Minimaler Wer │ │ │ -00009e10: 740a 0a24 7072 4c6f 672d 3e70 7269 6e74 t..$prLog->print │ │ │ -00009e20: 2827 2d6b 696e 6427 203d 3e20 2753 272c ('-kind' => 'S', │ │ │ -00009e30: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00009e40: 3e0a 0920 2020 2020 205b 2720 2020 2020 >.. [' │ │ │ -00009e50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00009e60: 2064 7572 6174 696f 6e20 3d20 2720 2e0a duration = ' .. │ │ │ -00009e70: 0920 2020 2020 2020 6461 7465 546f 6f6c . dateTool │ │ │ -00009e80: 733a 3a76 616c 546f 5374 7228 272d 7365 s::valToStr('-se │ │ │ -00009e90: 6327 203d 3e20 2464 7572 6174 696f 6e29 c' => $duration) │ │ │ -00009ea0: 2c0a 0920 2020 2020 2020 406c 0a09 2020 ,.. @l.. │ │ │ -00009eb0: 2020 2020 205d 293b 0a0a 756e 6c69 6e6b ]);..unlink │ │ │ -00009ec0: 2024 6c6f 636b 4669 6c65 3b0a 0a75 6e6c $lockFile;..unl │ │ │ -00009ed0: 6573 7320 2824 736b 6970 5379 6e63 290a ess ($skipSync). │ │ │ -00009ee0: 7b0a 2020 2020 2470 724c 6f67 2d3e 7072 {. $prLog->pr │ │ │ -00009ef0: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00009f00: 4927 2c0a 0909 2020 272d 7374 7227 203d I',... '-str' = │ │ │ -00009f10: 3e20 5b22 7379 6e63 696e 6720 2e2e 2e22 > ["syncing ..." │ │ │ -00009f20: 5d29 3b0a 2020 2020 7379 7374 656d 2022 ]);. system " │ │ │ -00009f30: 2f62 696e 2f73 796e 6322 3b0a 7d0a 0a0a /bin/sync";.}... │ │ │ -00009f40: 6d79 2024 656e 6320 3d20 2470 724c 6f67 my $enc = $prLog │ │ │ -00009f50: 2d3e 656e 636f 756e 7465 7265 6428 272d ->encountered('- │ │ │ -00009f60: 6b69 6e64 2720 3d3e 2027 5727 293b 0a6d kind' => 'W');.m │ │ │ -00009f70: 7920 2453 203d 2024 656e 6320 3e20 3120 y $S = $enc > 1 │ │ │ -00009f80: 3f20 2753 2720 3a20 2727 3b0a 2470 724c ? 'S' : '';.$prL │ │ │ -00009f90: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -00009fa0: 2720 3d3e 2027 5727 2c0a 0920 2020 2020 ' => 'W',.. │ │ │ -00009fb0: 2027 2d73 7472 2720 3d3e 205b 222d 2d20 '-str' => ["-- │ │ │ -00009fc0: 2465 6e63 2057 4152 4e49 4e47 2453 204f $enc WARNING$S O │ │ │ -00009fd0: 4343 5552 5245 4420 4455 5249 4e47 2054 CCURRED DURING T │ │ │ -00009fe0: 4845 2042 4143 4b55 5021 202d 2d22 5d29 HE BACKUP! --"]) │ │ │ -00009ff0: 0a20 2020 2069 6620 2465 6e63 3b0a 0a24 . if $enc;..$ │ │ │ -0000a000: 656e 6320 3d20 2470 724c 6f67 2d3e 656e enc = $prLog->en │ │ │ -0000a010: 636f 756e 7465 7265 6428 272d 6b69 6e64 countered('-kind │ │ │ -0000a020: 2720 3d3e 2027 4527 293b 0a24 5320 3d20 ' => 'E');.$S = │ │ │ -0000a030: 2465 6e63 203e 2031 203f 2027 5327 203a $enc > 1 ? 'S' : │ │ │ -0000a040: 2027 273b 0a24 7072 4c6f 672d 3e70 7269 '';.$prLog->pri │ │ │ -0000a050: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -0000a060: 272c 0a09 2020 2020 2020 272d 7374 7227 ',.. '-str' │ │ │ -0000a070: 203d 3e20 5b22 2d2d 2024 656e 6320 4552 => ["-- $enc ER │ │ │ -0000a080: 524f 5224 5320 4f43 4355 5252 4544 2044 ROR$S OCCURRED D │ │ │ -0000a090: 5552 494e 4720 5448 4520 4241 434b 5550 URING THE BACKUP │ │ │ -0000a0a0: 2120 2d2d 225d 290a 2020 2020 6966 2024 ! --"]). if $ │ │ │ -0000a0b0: 656e 633b 0a0a 0a24 7072 4c6f 672d 3e70 enc;...$prLog->p │ │ │ -0000a0c0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000a0d0: 275a 272c 0a09 2020 2020 2020 272d 7374 'Z',.. '-st │ │ │ -0000a0e0: 7227 203d 3e0a 0920 2020 2020 205b 2263 r' =>.. ["c │ │ │ -0000a0f0: 6865 636b 696e 6720 7265 6665 7265 6e63 hecking referenc │ │ │ -0000a100: 6573 2061 6e64 2063 6f70 7969 6e67 2069 es and copying i │ │ │ -0000a110: 6e20 3c24 6261 636b 7570 4469 723e 225d n <$backupDir>"] │ │ │ -0000a120: 293b 0a0a 6578 6974 2030 3b0a 0a0a 2323 );..exit 0;...## │ │ │ -0000a130: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a140: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a150: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a160: 0a23 2070 6163 6b61 6765 2070 7269 6e74 .# package print │ │ │ -0000a170: 4c6f 674d 756c 7469 706c 6520 6e65 6564 LogMultiple need │ │ │ -0000a180: 7320 7468 6973 2066 756e 6374 696f 6e0a s this function. │ │ │ -0000a190: 7375 6220 636c 6561 6e75 700a 7b0a 2020 sub cleanup.{. │ │ │ -0000a1a0: 2020 6d79 2024 7369 676e 616d 6520 3d20 my $signame = │ │ │ -0000a1b0: 7368 6966 743b 0a20 2020 206d 7920 2465 shift;. my $e │ │ │ -0000a1c0: 7869 7420 3d20 2873 6869 6674 2829 207c xit = (shift() | │ │ │ -0000a1d0: 7c20 3129 3b0a 0a20 2020 2065 7869 7420 | 1);.. exit │ │ │ -0000a1e0: 2465 7869 743b 0a7d 0a0a 0a23 2323 2323 $exit;.}...##### │ │ │ -0000a1f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a200: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a210: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -0000a220: 2323 2323 2323 230a 7375 6220 7570 6461 #######.sub upda │ │ │ -0000a230: 7465 4261 636b 7570 4469 720a 7b0a 2020 teBackupDir.{. │ │ │ -0000a240: 2020 6d79 2024 6469 7220 3d20 7368 6966 my $dir = shif │ │ │ -0000a250: 743b 0a20 2020 206d 7920 246e 6f43 6f6d t;. my $noCom │ │ │ -0000a260: 7072 6573 7320 3d20 7368 6966 743b 0a20 press = shift;. │ │ │ -0000a270: 2020 206d 7920 2470 726f 6772 6573 7352 my $progressR │ │ │ -0000a280: 6570 6f72 7420 3d20 7368 6966 743b 0a20 eport = shift;. │ │ │ -0000a290: 2020 206d 7920 2470 724c 6f67 203d 2073 my $prLog = s │ │ │ -0000a2a0: 6869 6674 3b0a 2020 2020 6d79 2024 696e hift;. my $in │ │ │ -0000a2b0: 7465 7261 6374 6976 6520 3d20 7368 6966 teractive = shif │ │ │ -0000a2c0: 743b 0a20 2020 206d 7920 2463 6f75 6e74 t;. my $count │ │ │ -0000a2d0: 203d 2073 6869 6674 3b0a 2020 2020 6d79 = shift;. my │ │ │ -0000a2e0: 2024 6261 636b 7570 5479 7065 203d 2073 $backupType = s │ │ │ -0000a2f0: 6869 6674 3b0a 0a20 2020 2023 0a20 2020 hift;.. #. │ │ │ -0000a300: 2023 2072 6561 6420 636f 6d70 7265 7373 # read compress │ │ │ -0000a310: 2066 726f 6d20 2e6d 6435 4368 6563 6b53 from .md5CheckS │ │ │ -0000a320: 756d 2e69 6e66 6f0a 2020 2020 230a 2020 um.info. #. │ │ │ -0000a330: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -0000a340: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -0000a350: 0909 2020 272d 7374 7227 203d 3e20 5b22 .. '-str' => [" │ │ │ -0000a360: 2824 636f 756e 7429 2075 7064 6174 696e ($count) updatin │ │ │ -0000a370: 6720 3c24 6469 723e 225d 293b 0a0a 2020 g <$dir>"]);.. │ │ │ -0000a380: 2020 6d79 2024 7263 7366 203d 2072 6561 my $rcsf = rea │ │ │ -0000a390: 6443 6865 636b 5375 6d46 696c 652d 3e6e dCheckSumFile->n │ │ │ -0000a3a0: 6577 2827 2d63 6865 636b 5375 6d46 696c ew('-checkSumFil │ │ │ -0000a3b0: 6527 203d 3e0a 0909 0909 2020 2020 2022 e' =>..... " │ │ │ -0000a3c0: 2464 6972 2f2e 6d64 3543 6865 636b 5375 $dir/.md5CheckSu │ │ │ -0000a3d0: 6d73 222c 0a09 0909 0920 2020 2020 272d ms",..... '- │ │ │ -0000a3e0: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -0000a3f0: 293b 0a0a 2320 2020 206d 7920 246d 6574 );..# my $met │ │ │ -0000a400: 6120 3d20 2472 6373 662d 3e67 6574 4d65 a = $rcsf->getMe │ │ │ -0000a410: 7461 5661 6c46 6965 6c64 2829 3b0a 0a23 taValField();..# │ │ │ -0000a420: 2020 2020 6d79 2028 2463 6f6d 7072 2c20 my ($compr, │ │ │ -0000a430: 4063 6f6d 7072 5061 7229 203d 2040 7b24 @comprPar) = @{$ │ │ │ -0000a440: 246d 6574 617b 2763 6f6d 7072 6573 7327 $meta{'compress' │ │ │ -0000a450: 7d7d 3b0a 2320 2020 206d 7920 2463 6f6d }};.# my $com │ │ │ -0000a460: 7072 506f 7374 6669 7820 3d20 2824 246d prPostfix = ($$m │ │ │ -0000a470: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})- │ │ │ -0000a480: 3e5b 305d 3b0a 2020 2020 6d79 2028 2463 >[0];. my ($c │ │ │ -0000a490: 6f6d 7072 2c20 4063 6f6d 7072 5061 7229 ompr, @comprPar) │ │ │ -0000a4a0: 203d 2040 7b24 7263 7366 2d3e 6765 7449 = @{$rcsf->getI │ │ │ -0000a4b0: 6e66 6f57 6974 6850 6172 2827 636f 6d70 nfoWithPar('comp │ │ │ -0000a4c0: 7265 7373 2729 7d3b 0a20 2020 206d 7920 ress')};. my │ │ │ -0000a4d0: 2463 6f6d 7072 506f 7374 6669 7820 3d20 $comprPostfix = │ │ │ -0000a4e0: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi │ │ │ -0000a4f0: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix') │ │ │ -0000a500: 3b0a 2370 7269 6e74 2022 636f 6d70 7220 ;.#print "compr │ │ │ -0000a510: 3d20 3c24 636f 6d70 723e 2c20 636f 6d70 = <$compr>, comp │ │ │ -0000a520: 7250 6172 203d 203c 4063 6f6d 7072 5061 rPar = <@comprPa │ │ │ -0000a530: 723e 5c6e 223b 0a20 2020 206d 7920 246c r>\n";. my $l │ │ │ -0000a540: 696e 6b54 6f52 6563 656e 7420 3d20 2472 inkToRecent = $r │ │ │ -0000a550: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith │ │ │ -0000a560: 5061 7228 276c 696e 6b54 6f52 6563 656e Par('linkToRecen │ │ │ -0000a570: 7427 293b 0a23 7072 696e 7420 226c 696e t');.#print "lin │ │ │ -0000a580: 6b54 6f52 6563 656e 7420 3d20 3c24 6c69 kToRecent = <$li │ │ │ -0000a590: 6e6b 546f 5265 6365 6e74 3e5c 6e22 3b0a nkToRecent>\n";. │ │ │ -0000a5a0: 0a20 2020 2023 0a20 2020 2023 2073 6574 . #. # set │ │ │ -0000a5b0: 206c 696e 6b73 2061 6e64 2063 6f6d 7072 links and compr │ │ │ -0000a5c0: 6573 730a 2020 2020 230a 2020 2020 6d79 ess. #. my │ │ │ -0000a5d0: 2028 256d 6435 546f 4669 6c65 293b 2020 (%md5ToFile); │ │ │ -0000a5e0: 2020 2020 2320 7374 6f72 6520 6d64 3573 # store md5s │ │ │ -0000a5f0: 756d 7320 6f66 2063 6f70 6965 6420 6669 ums of copied fi │ │ │ -0000a600: 6c65 7320 6265 6361 7573 650a 2020 2020 les because. │ │ │ -0000a610: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000a620: 2020 2020 2020 2320 6e75 6d62 6572 206f # number o │ │ │ -0000a630: 6620 6c69 6e6b 7320 6973 2065 7868 6175 f links is exhau │ │ │ -0000a640: 7374 6564 0a20 2020 206d 7920 2466 203d sted. my $f = │ │ │ -0000a650: 2022 2464 6972 2f2e 7374 6f72 6542 6163 "$dir/.storeBac │ │ │ -0000a660: 6b75 704c 696e 6b73 2f6c 696e 6b46 696c kupLinks/linkFil │ │ │ -0000a670: 652e 627a 3222 3b0a 0a20 2020 2072 6574 e.bz2";.. ret │ │ │ -0000a680: 7572 6e20 756e 6c65 7373 202d 6520 2466 urn unless -e $f │ │ │ -0000a690: 3b0a 0a20 2020 2023 0a20 2020 2023 0a20 ;.. #. #. │ │ │ -0000a6a0: 2020 2023 0a20 2020 2024 7072 4c6f 672d #. $prLog- │ │ │ -0000a6b0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0000a6c0: 3e20 2749 272c 0a09 0920 2027 2d73 7472 > 'I',... '-str │ │ │ -0000a6d0: 2720 3d3e 205b 2270 6861 7365 2031 3a20 ' => ["phase 1: │ │ │ -0000a6e0: 6d6b 6469 722c 2073 796d 6c69 6e6b 2061 mkdir, symlink a │ │ │ -0000a6f0: 6e64 2063 6f6d 7072 6573 7369 6e67 2066 nd compressing f │ │ │ -0000a700: 696c 6573 225d 293b 0a0a 2020 2020 6d79 iles"]);.. my │ │ │ -0000a710: 2024 6c3b 0a20 2020 206d 7920 2470 6172 $l;. my $par │ │ │ -0000a720: 466f 726b 5072 6f63 203d 2070 6172 616c ForkProc = paral │ │ │ -0000a730: 6c65 6c46 6f72 6b2d 3e6e 6577 2827 2d6d lelFork->new('-m │ │ │ -0000a740: 6178 5061 7261 6c6c 656c 2720 3d3e 2024 axParallel' => $ │ │ │ -0000a750: 6e6f 436f 6d70 7265 7373 2c0a 0909 0909 noCompress,..... │ │ │ -0000a760: 0927 2d70 724c 6f67 2720 3d3e 2024 7072 .'-prLog' => $pr │ │ │ -0000a770: 4c6f 672c 0a09 0909 0909 272d 6669 7273 Log,......'-firs │ │ │ -0000a780: 7446 6173 7427 203d 3e20 312c 0a09 0909 tFast' => 1,.... │ │ │ -0000a790: 0909 272d 6d61 7857 6169 7454 696d 6527 ..'-maxWaitTime' │ │ │ -0000a7a0: 203d 3e20 2e32 2c0a 0909 0909 0927 2d6e => .2,......'-n │ │ │ -0000a7b0: 6f4f 6657 6169 7453 7465 7073 2720 3d3e oOfWaitSteps' => │ │ │ -0000a7c0: 2031 3030 293b 0a0a 2020 2020 6d79 2024 100);.. my $ │ │ │ -0000a7d0: 6e6f 436f 6d70 7265 7373 6564 4669 6c65 noCompressedFile │ │ │ -0000a7e0: 7320 3d20 303b 0a20 2020 206d 7920 246e s = 0;. my $n │ │ │ -0000a7f0: 6f4d 6b64 6972 203d 2030 3b0a 2020 2020 oMkdir = 0;. │ │ │ -0000a800: 6d79 2024 6e6f 5379 6d4c 696e 6b20 3d20 my $noSymLink = │ │ │ -0000a810: 303b 0a20 2020 206d 7920 2824 6f6c 6453 0;. my ($oldS │ │ │ -0000a820: 697a 652c 2024 6e65 7753 697a 6529 203d ize, $newSize) = │ │ │ -0000a830: 2028 302c 2030 293b 0a20 2020 206d 7920 (0, 0);. my │ │ │ -0000a840: 246c 696e 6b46 696c 6520 3d20 7069 7065 $linkFile = pipe │ │ │ -0000a850: 4672 6f6d 466f 726b 2d3e 6e65 7728 272d FromFork->new('- │ │ │ -0000a860: 6578 6563 2720 3d3e 2027 627a 6970 3227 exec' => 'bzip2' │ │ │ -0000a870: 2c0a 0909 0909 2020 2020 2027 2d70 6172 ,..... '-par │ │ │ -0000a880: 616d 2720 3d3e 205b 272d 6427 5d2c 0a09 am' => ['-d'],.. │ │ │ -0000a890: 0909 0920 2020 2020 272d 7374 6469 6e27 ... '-stdin' │ │ │ -0000a8a0: 203d 3e20 2466 2c0a 0909 0909 2020 2020 => $f,..... │ │ │ -0000a8b0: 2027 2d6f 7574 5261 6e64 6f6d 2720 3d3e '-outRandom' => │ │ │ -0000a8c0: 2027 2f74 6d70 2f73 7462 7550 6970 6546 '/tmp/stbuPipeF │ │ │ -0000a8d0: 726f 6d31 302d 272c 0a09 0909 0920 2020 rom10-',..... │ │ │ -0000a8e0: 2020 272d 7072 4c6f 6727 203d 3e20 2470 '-prLog' => $p │ │ │ -0000a8f0: 724c 6f67 293b 0a0a 2020 2020 7768 696c rLog);.. whil │ │ │ -0000a900: 6520 2824 6c20 3d20 246c 696e 6b46 696c e ($l = $linkFil │ │ │ -0000a910: 652d 3e72 6561 6428 2929 0a20 2020 207b e->read()). { │ │ │ -0000a920: 0a09 6e65 7874 2069 6620 246c 203d 7e20 ..next if $l =~ │ │ │ -0000a930: 2f5e 232f 3b0a 0963 686f 6d70 2024 6c3b /^#/;..chomp $l; │ │ │ -0000a940: 0a09 6d79 2028 2477 6861 742c 2024 6d64 ..my ($what, $md │ │ │ -0000a950: 3529 203d 2073 706c 6974 282f 5c73 2b2f 5) = split(/\s+/ │ │ │ -0000a960: 2c20 246c 2c20 3229 3b0a 2370 7269 6e74 , $l, 2);.#print │ │ │ -0000a970: 2022 7768 6174 203d 2024 7768 6174 5c6e "what = $what\n │ │ │ -0000a980: 223b 0a0a 0969 6620 2824 7768 6174 2065 ";...if ($what e │ │ │ -0000a990: 7120 2764 6972 2729 0a09 7b0a 0920 2020 q 'dir')..{.. │ │ │ -0000a9a0: 2024 6d64 3520 3d7e 2073 2f5c 302f 5c6e $md5 =~ s/\0/\n │ │ │ -0000a9b0: 2f6f 673b 2020 2020 2320 6e61 6d65 206f /og; # name o │ │ │ -0000a9c0: 6620 6469 7265 6374 6f72 7921 0a09 2020 f directory!.. │ │ │ -0000a9d0: 2020 756e 6c65 7373 2028 2d64 2022 2464 unless (-d "$d │ │ │ -0000a9e0: 6972 2f24 6d64 3522 290a 0920 2020 207b ir/$md5").. { │ │ │ -0000a9f0: 0a09 0924 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -0000aa00: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -0000aa10: 0a09 0909 2020 2020 2020 272d 7374 7227 .... '-str' │ │ │ -0000aa20: 203d 3e0a 0909 0920 2020 2020 205b 2263 =>.... ["c │ │ │ -0000aa30: 616e 6e6f 7420 6372 6561 7465 2064 6972 annot create dir │ │ │ -0000aa40: 6563 746f 7279 203c 2464 6972 2f24 6d64 ectory <$dir/$md │ │ │ -0000aa50: 353e 225d 2c0a 0909 0920 2020 2020 2027 5>"],.... ' │ │ │ -0000aa60: 2d65 7869 7427 203d 3e20 3129 0a09 0920 -exit' => 1)... │ │ │ -0000aa70: 2020 2075 6e6c 6573 7320 6d6b 6469 7220 unless mkdir │ │ │ -0000aa80: 2224 6469 722f 246d 6435 222c 2030 3730 "$dir/$md5", 070 │ │ │ -0000aa90: 303b 0a09 2020 2020 7d0a 0920 2020 2024 0;.. }.. $ │ │ │ -0000aaa0: 6e6f 4d6b 6469 722b 2b3b 0a09 7d0a 0965 noMkdir++;..}..e │ │ │ -0000aab0: 6c73 6966 2028 2477 6861 7420 6571 2027 lsif ($what eq ' │ │ │ -0000aac0: 6c69 6e6b 2720 6f72 2024 7768 6174 2065 link' or $what e │ │ │ -0000aad0: 7120 276c 696e 6b62 6c6f 636b 2720 6f72 q 'linkblock' or │ │ │ -0000aae0: 0a09 2020 2020 2477 6861 7420 6571 2027 .. $what eq ' │ │ │ -0000aaf0: 6c69 6e6b 5379 6d6c 696e 6b27 290a 097b linkSymlink')..{ │ │ │ -0000ab00: 0a09 2020 2020 6d79 2024 6578 6973 7469 .. my $existi │ │ │ -0000ab10: 6e67 4669 6c65 203d 2024 6c69 6e6b 4669 ngFile = $linkFi │ │ │ -0000ab20: 6c65 2d3e 7265 6164 2829 3b0a 0920 2020 le->read();.. │ │ │ -0000ab30: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile = │ │ │ -0000ab40: 2022 2464 6972 2f24 6578 6973 7469 6e67 "$dir/$existing │ │ │ -0000ab50: 4669 6c65 223b 0a09 2020 2020 2470 724c File";.. $prL │ │ │ -0000ab60: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0000ab70: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -0000ab80: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -0000ab90: 6669 6c65 203c 2466 3e20 656e 6473 2075 file <$f> ends u │ │ │ -0000aba0: 6e65 7870 6563 7465 6420 6174 206c 696e nexpected at lin │ │ │ -0000abb0: 6520 242e 225d 2c0a 0909 0920 2027 2d65 e $."],.... '-e │ │ │ -0000abc0: 7869 7427 203d 3e20 3129 0a09 0975 6e6c xit' => 1)...unl │ │ │ -0000abd0: 6573 7320 2465 7869 7374 696e 6746 696c ess $existingFil │ │ │ -0000abe0: 653b 0a0a 0920 2020 206d 7920 246e 6577 e;... my $new │ │ │ -0000abf0: 4c69 6e6b 203d 2024 6c69 6e6b 4669 6c65 Link = $linkFile │ │ │ -0000ac00: 2d3e 7265 6164 2829 3b0a 0920 2020 2024 ->read();.. $ │ │ │ -0000ac10: 7072 4c6f 672d 3e70 7269 6e74 2827 2d6b prLog->print('-k │ │ │ -0000ac20: 696e 6427 203d 3e20 2757 272c 0a09 0909 ind' => 'W',.... │ │ │ -0000ac30: 2020 272d 7374 7227 203d 3e0a 0909 0920 '-str' =>.... │ │ │ -0000ac40: 205b 2266 696c 6520 3c24 663e 2065 6e64 ["file <$f> end │ │ │ -0000ac50: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at │ │ │ -0000ac60: 6c69 6e65 2024 2e22 5d2c 0a09 0909 2020 line $."],.... │ │ │ -0000ac70: 272d 6578 6974 2720 3d3e 2031 290a 0909 '-exit' => 1)... │ │ │ -0000ac80: 756e 6c65 7373 2024 6e65 774c 696e 6b3b unless $newLink; │ │ │ -0000ac90: 0a09 7d20 0a09 656c 7369 6620 2824 7768 ..} ..elsif ($wh │ │ │ -0000aca0: 6174 2065 7120 2773 796d 6c69 6e6b 2729 at eq 'symlink') │ │ │ -0000acb0: 0a09 7b0a 0920 2020 2024 6d64 3520 3d7e ..{.. $md5 =~ │ │ │ -0000acc0: 2073 2f5c 302f 5c6e 2f6f 673b 2020 2020 s/\0/\n/og; │ │ │ -0000acd0: 2023 2066 696c 6520 286e 6f74 206d 6435 # file (not md5 │ │ │ -0000ace0: 7375 6d29 0a09 2020 2020 246d 6435 203d sum).. $md5 = │ │ │ -0000acf0: 2022 2464 6972 2f24 6d64 3522 3b0a 0920 "$dir/$md5";.. │ │ │ -0000ad00: 2020 206d 7920 2474 6172 6765 7420 3d20 my $target = │ │ │ -0000ad10: 246c 696e 6b46 696c 652d 3e72 6561 6428 $linkFile->read( │ │ │ -0000ad20: 293b 0a09 2020 2020 2470 724c 6f67 2d3e );.. $prLog-> │ │ │ -0000ad30: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000ad40: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -0000ad50: 2720 3d3e 0a09 0909 2020 5b22 6669 6c65 ' =>.... ["file │ │ │ -0000ad60: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp │ │ │ -0000ad70: 6563 7465 6420 6174 206c 696e 6520 242e ected at line $. │ │ │ -0000ad80: 225d 2c0a 0909 0920 2027 2d65 7869 7427 "],.... '-exit' │ │ │ -0000ad90: 203d 3e20 3129 0a09 0975 6e6c 6573 7320 => 1)...unless │ │ │ -0000ada0: 2474 6172 6765 743b 0a09 2020 2020 6368 $target;.. ch │ │ │ -0000adb0: 6f6d 7020 2474 6172 6765 743b 0a09 2020 omp $target;.. │ │ │ -0000adc0: 2020 2474 6172 6765 7420 3d7e 2073 2f5c $target =~ s/\ │ │ │ -0000add0: 302f 5c6e 2f6f 673b 0a09 2020 2020 2470 0/\n/og;.. $p │ │ │ -0000ade0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0000adf0: 6e64 2720 3d3e 2027 4527 2c0a 0909 0920 nd' => 'E',.... │ │ │ -0000ae00: 2027 2d73 7472 2720 3d3e 0a09 0909 2020 '-str' =>.... │ │ │ -0000ae10: 5b22 6361 6e6e 6f74 2063 7265 6174 6520 ["cannot create │ │ │ -0000ae20: 7379 6d6c 696e 6b20 6672 6f6d 203c 246d symlink from <$m │ │ │ -0000ae30: 6435 3e20 2d3e 203c 2474 6172 6765 743e d5> -> <$target> │ │ │ -0000ae40: 225d 290a 0909 756e 6c65 7373 2073 796d "])...unless sym │ │ │ -0000ae50: 6c69 6e6b 2024 7461 7267 6574 2c20 246d link $target, $m │ │ │ -0000ae60: 6435 3b0a 0920 2020 2024 6e6f 5379 6d4c d5;.. $noSymL │ │ │ -0000ae70: 696e 6b2b 2b3b 0a09 7d0a 0965 6c73 6966 ink++;..}..elsif │ │ │ -0000ae80: 2028 2477 6861 7420 6571 2027 636f 6d70 ($what eq 'comp │ │ │ -0000ae90: 7265 7373 2729 0a09 7b0a 0920 2020 206d ress')..{.. m │ │ │ -0000aea0: 7920 2466 696c 6520 3d20 246c 696e 6b46 y $file = $linkF │ │ │ -0000aeb0: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. │ │ │ -0000aec0: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -0000aed0: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -0000aee0: 0909 0920 2027 2d73 7472 2720 3d3e 0a09 ... '-str' =>.. │ │ │ -0000aef0: 0909 2020 5b22 6669 6c65 203c 2466 3e20 .. ["file <$f> │ │ │ -0000af00: 656e 6473 2075 6e65 7870 6563 7465 6420 ends unexpected │ │ │ -0000af10: 6174 206c 696e 6520 242e 225d 2c0a 0909 at line $."],... │ │ │ -0000af20: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ -0000af30: 0a09 0975 6e6c 6573 7320 2466 696c 653b ...unless $file; │ │ │ -0000af40: 0a09 2020 2020 6368 6f6d 7020 2466 696c .. chomp $fil │ │ │ -0000af50: 653b 0a0a 0920 2020 2024 6669 6c65 203d e;... $file = │ │ │ -0000af60: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 ~ s/\0/\n/og;.. │ │ │ -0000af70: 2020 2024 6669 6c65 203d 2022 2464 6972 $file = "$dir │ │ │ -0000af80: 2f24 6669 6c65 223b 2020 2020 2020 2020 /$file"; │ │ │ -0000af90: 2320 6669 6c65 2074 6f20 636f 6d70 7265 # file to compre │ │ │ -0000afa0: 7373 0a09 2020 2020 6d79 2024 7374 203d ss.. my $st = │ │ │ -0000afb0: 2028 7374 6174 2824 6669 6c65 2929 5b37 (stat($file))[7 │ │ │ -0000afc0: 5d3b 0a09 2020 2020 246f 6c64 5369 7a65 ];.. $oldSize │ │ │ -0000afd0: 202b 3d20 2473 7420 6966 2064 6566 696e += $st if defin │ │ │ -0000afe0: 6564 2024 7374 3b0a 0920 2020 2024 6e6f ed $st;.. $no │ │ │ -0000aff0: 436f 6d70 7265 7373 6564 4669 6c65 732b CompressedFiles+ │ │ │ -0000b000: 2b3b 0a0a 0920 2020 2069 6620 2824 6d61 +;... if ($ma │ │ │ -0000b010: 696e 3a3a 494f 436f 6d70 7265 7373 4469 in::IOCompressDi │ │ │ -0000b020: 7265 6374 2061 6e64 0a09 0924 636f 6d70 rect and...$comp │ │ │ -0000b030: 7220 6571 2027 627a 6970 3227 290a 0920 r eq 'bzip2').. │ │ │ -0000b040: 2020 207b 0a09 096c 6f63 616c 202a 4649 {...local *FI │ │ │ -0000b050: 4c45 494e 3b0a 0909 7379 736f 7065 6e28 LEIN;...sysopen( │ │ │ -0000b060: 4649 4c45 494e 2c20 2466 696c 652c 204f FILEIN, $file, O │ │ │ -0000b070: 5f52 444f 4e4c 5929 206f 720a 0909 2020 _RDONLY) or... │ │ │ -0000b080: 2020 2470 724c 6f67 2d3e 7072 696e 7428 $prLog->print( │ │ │ -0000b090: 272d 6b69 6e64 2720 3d3e 2027 4527 2c0a '-kind' => 'E',. │ │ │ -0000b0a0: 0909 0909 2020 272d 7374 7227 203d 3e0a .... '-str' =>. │ │ │ -0000b0b0: 0909 0909 2020 5b22 6361 6e6e 6f74 206f .... ["cannot o │ │ │ -0000b0c0: 7065 6e20 3c24 6669 6c65 3e20 666f 7220 pen <$file> for │ │ │ -0000b0d0: 636f 6d70 7265 7373 696f 6e22 5d29 3b0a compression"]);. │ │ │ -0000b0e0: 0909 6d79 2024 627a 203d 206e 6577 2049 ..my $bz = new I │ │ │ -0000b0f0: 4f3a 3a43 6f6d 7072 6573 733a 3a42 7a69 O::Compress::Bzi │ │ │ -0000b100: 7032 2822 2466 696c 6524 636f 6d70 7250 p2("$file$comprP │ │ │ -0000b110: 6f73 7466 6978 222c 0a09 0909 0909 0920 ostfix",....... │ │ │ -0000b120: 426c 6f63 6b53 697a 6531 3030 4b20 3d3e BlockSize100K => │ │ │ -0000b130: 2039 293b 0a09 096d 7920 2462 7566 6665 9);...my $buffe │ │ │ -0000b140: 723b 0a09 0977 6869 6c65 2028 7379 7372 r;...while (sysr │ │ │ -0000b150: 6561 6428 4649 4c45 494e 2c20 2462 7566 ead(FILEIN, $buf │ │ │ -0000b160: 6665 722c 2031 3032 3529 290a 0909 7b0a fer, 1025))...{. │ │ │ -0000b170: 0909 2020 2020 756e 6c65 7373 2028 2462 .. unless ($b │ │ │ -0000b180: 7a2d 3e73 7973 7772 6974 6528 2462 7566 z->syswrite($buf │ │ │ -0000b190: 6665 7229 290a 0909 2020 2020 7b0a 0909 fer))... {... │ │ │ -0000b1a0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0000b1b0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -0000b1c0: 0909 0920 2020 2020 2027 2d73 7472 2720 ... '-str' │ │ │ -0000b1d0: 3d3e 0a09 0909 0920 2020 2020 205b 2277 =>..... ["w │ │ │ -0000b1e0: 7269 7469 6e67 2074 6f20 3c24 6669 6c65 riting to <$file │ │ │ -0000b1f0: 2463 6f6d 7072 506f 7374 6669 783e 2066 $comprPostfix> f │ │ │ -0000b200: 6169 6c65 6422 5d29 3b0a 0909 2020 2020 ailed"]);... │ │ │ -0000b210: 7d0a 0909 7d0a 0909 2462 7a2d 3e66 6c75 }...}...$bz->flu │ │ │ -0000b220: 7368 2829 3b0a 0909 2462 7a2d 3e65 6f66 sh();...$bz->eof │ │ │ -0000b230: 2829 3b0a 0909 636c 6f73 6528 4649 4c45 ();...close(FILE │ │ │ -0000b240: 494e 293b 0a0a 0909 246e 6577 5369 7a65 IN);....$newSize │ │ │ -0000b250: 202b 3d20 2873 7461 7428 2224 6669 6c65 += (stat("$file │ │ │ -0000b260: 2463 6f6d 7072 506f 7374 6669 7822 2929 $comprPostfix")) │ │ │ -0000b270: 5b37 5d3b 0a09 0924 7072 4c6f 672d 3e70 [7];...$prLog->p │ │ │ -0000b280: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000b290: 2745 272c 0a09 0909 2020 2020 2020 272d 'E',.... '- │ │ │ -0000b2a0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -0000b2b0: 2064 656c 6574 6520 3c24 6669 6c65 3e22 delete <$file>" │ │ │ -0000b2c0: 5d29 0a09 0920 2020 2069 6620 2875 6e6c ])... if (unl │ │ │ -0000b2d0: 696e 6b20 2466 696c 6529 2021 3d20 313b ink $file) != 1; │ │ │ -0000b2e0: 0a09 2020 2020 7d0a 0920 2020 2065 6c73 .. }.. els │ │ │ -0000b2f0: 650a 0920 2020 207b 0a09 096d 7920 2824 e.. {...my ($ │ │ │ -0000b300: 6f6c 642c 2024 6e65 7729 203d 0a09 0920 old, $new) =... │ │ │ -0000b310: 2020 2024 7061 7246 6f72 6b50 726f 632d $parForkProc- │ │ │ -0000b320: 3e61 6464 5f62 6c6f 636b 2827 2d65 7865 >add_block('-exe │ │ │ -0000b330: 6327 203d 3e20 2463 6f6d 7072 2c0a 0909 c' => $compr,... │ │ │ -0000b340: 0909 0920 2020 2027 2d70 6172 616d 2720 ... '-param' │ │ │ -0000b350: 3d3e 205c 4063 6f6d 7072 5061 722c 0a09 => \@comprPar,.. │ │ │ -0000b360: 0909 0909 2020 2020 272d 6f75 7452 616e .... '-outRan │ │ │ -0000b370: 646f 6d27 203d 3e20 272f 746d 702f 627a dom' => '/tmp/bz │ │ │ -0000b380: 6970 322d 272c 0a09 0909 0909 2020 2020 ip2-',...... │ │ │ -0000b390: 272d 7374 6469 6e27 203d 3e20 2466 696c '-stdin' => $fil │ │ │ -0000b3a0: 652c 0a09 0909 0909 2020 2020 272d 7374 e,...... '-st │ │ │ -0000b3b0: 646f 7574 2720 3d3e 2022 2466 696c 6524 dout' => "$file$ │ │ │ -0000b3c0: 636f 6d70 7250 6f73 7466 6978 222c 0a09 comprPostfix",.. │ │ │ -0000b3d0: 0909 0909 2020 2020 272d 6465 6c53 7464 .... '-delStd │ │ │ -0000b3e0: 6f75 7427 203d 3e20 276e 6f27 2c0a 0909 out' => 'no',... │ │ │ -0000b3f0: 0909 0920 2020 2027 2d69 6e66 6f27 203d ... '-info' = │ │ │ -0000b400: 3e20 2466 696c 6529 3b0a 0909 6966 2028 > $file);...if ( │ │ │ -0000b410: 246f 6c64 290a 0909 7b0a 0909 2020 2020 $old)...{... │ │ │ -0000b420: 6d79 2024 6620 3d20 246f 6c64 2d3e 6765 my $f = $old->ge │ │ │ -0000b430: 7428 272d 7768 6174 2720 3d3e 2027 696e t('-what' => 'in │ │ │ -0000b440: 666f 2729 3b0a 0909 2020 2020 263a 3a77 fo');... &::w │ │ │ -0000b450: 6169 7446 6f72 4669 6c65 2822 2466 2463 aitForFile("$f$c │ │ │ -0000b460: 6f6d 7072 506f 7374 6669 7822 293b 0a09 omprPostfix");.. │ │ │ -0000b470: 0920 2020 206d 7920 246f 7574 203d 2024 . my $out = $ │ │ │ -0000b480: 6f6c 642d 3e67 6574 5354 4445 5252 2829 old->getSTDERR() │ │ │ -0000b490: 3b0a 0909 2020 2020 2470 724c 6f67 2d3e ;... $prLog-> │ │ │ -0000b4a0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000b4b0: 2027 4527 2c0a 0909 0909 2020 272d 7374 'E',..... '-st │ │ │ -0000b4c0: 7227 203d 3e20 5b22 5354 4445 5252 206f r' => ["STDERR o │ │ │ -0000b4d0: 6620 3c24 636f 6d70 7220 4063 6f6d 7072 f <$compr @compr │ │ │ -0000b4e0: 5061 7220 2220 2e0a 0909 0909 0920 2020 Par " ....... │ │ │ -0000b4f0: 2020 223c 2466 203e 2466 2463 6f6d 7072 "<$f >$f$compr │ │ │ -0000b500: 506f 7374 6669 783e 3a22 2c20 4024 6f75 Postfix>:", @$ou │ │ │ -0000b510: 745d 290a 0909 0969 6620 2840 246f 7574 t])....if (@$out │ │ │ -0000b520: 203e 2030 293b 0a09 0920 2020 2024 6e65 > 0);... $ne │ │ │ -0000b530: 7753 697a 6520 2b3d 2028 7374 6174 2822 wSize += (stat(" │ │ │ -0000b540: 2466 2463 6f6d 7072 506f 7374 6669 7822 $f$comprPostfix" │ │ │ -0000b550: 2929 5b37 5d3b 0a09 0920 2020 2024 7072 ))[7];... $pr │ │ │ -0000b560: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0000b570: 6427 203d 3e20 2745 272c 0a09 0909 0920 d' => 'E',..... │ │ │ -0000b580: 2027 2d73 7472 2720 3d3e 205b 2263 616e '-str' => ["can │ │ │ -0000b590: 6e6f 7420 6465 6c65 7465 203c 2466 3e22 not delete <$f>" │ │ │ -0000b5a0: 5d29 0a09 0909 6966 2028 756e 6c69 6e6b ])....if (unlink │ │ │ -0000b5b0: 2024 6629 2021 3d20 313b 0a09 097d 0a09 $f) != 1;...}.. │ │ │ -0000b5c0: 2020 2020 7d0a 0920 2020 2024 7072 4c6f }.. $prLo │ │ │ -0000b5d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000b5e0: 203d 3e20 2753 272c 0a09 0909 2020 272d => 'S',.... '- │ │ │ -0000b5f0: 7374 7227 203d 3e0a 0909 0920 205b 2263 str' =>.... ["c │ │ │ -0000b600: 6f6d 7072 6573 7365 6420 246e 6f43 6f6d ompressed $noCom │ │ │ -0000b610: 7072 6573 7365 6446 696c 6573 2066 696c pressedFiles fil │ │ │ -0000b620: 6573 225d 290a 0909 6966 2028 2470 726f es"])...if ($pro │ │ │ -0000b630: 6772 6573 7352 6570 6f72 7420 616e 640a gressReport and. │ │ │ -0000b640: 0909 2020 2020 246e 6f43 6f6d 7072 6573 .. $noCompres │ │ │ -0000b650: 7365 6446 696c 6573 2025 2024 7072 6f67 sedFiles % $prog │ │ │ -0000b660: 7265 7373 5265 706f 7274 203d 3d20 3029 ressReport == 0) │ │ │ -0000b670: 3b0a 097d 0a09 656c 7365 0a09 7b0a 0920 ;..}..else..{.. │ │ │ -0000b680: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -0000b690: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -0000b6a0: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ -0000b6b0: 5b22 696c 6c65 6761 6c20 6b65 7977 6f72 ["illegal keywor │ │ │ -0000b6c0: 6420 3c24 7768 6174 3e20 2220 2e0a 0909 d <$what> " .... │ │ │ -0000b6d0: 0909 2020 2020 2022 6174 206c 696e 6520 .. "at line │ │ │ -0000b6e0: 242e 2069 6e20 6669 6c65 203c 2466 3e3a $. in file <$f>: │ │ │ -0000b6f0: 222c 0a09 0909 0920 2020 2020 225c 743c ",..... "\t< │ │ │ -0000b700: 246c 3e22 5d2c 0a09 0909 2020 272d 6578 $l>"],.... '-ex │ │ │ -0000b710: 6974 2720 3d3e 2031 293b 0a09 7d0a 2020 it' => 1);..}. │ │ │ -0000b720: 2020 7d0a 2020 2020 246c 696e 6b46 696c }. $linkFil │ │ │ -0000b730: 652d 3e77 6169 7428 293b 0a20 2020 206d e->wait();. m │ │ │ -0000b740: 7920 246f 7574 203d 2024 6c69 6e6b 4669 y $out = $linkFi │ │ │ -0000b750: 6c65 2d3e 6765 7453 5444 4552 5228 293b le->getSTDERR(); │ │ │ -0000b760: 0a20 2020 2069 6620 2840 246f 7574 290a . if (@$out). │ │ │ -0000b770: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -0000b780: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000b790: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -0000b7a0: 7472 2720 3d3e 205b 2272 6561 6469 6e67 tr' => ["reading │ │ │ -0000b7b0: 206c 696e 6b46 696c 6520 6669 6c65 2072 linkFile file r │ │ │ -0000b7c0: 6570 6f72 7473 2065 7272 6f72 733a 222c eports errors:", │ │ │ -0000b7d0: 0a09 0909 0920 4024 6f75 745d 293b 0a09 ..... @$out]);.. │ │ │ -0000b7e0: 6578 6974 2031 3b0a 2020 2020 7d0a 2020 exit 1;. }. │ │ │ -0000b7f0: 2020 246c 696e 6b46 696c 652d 3e63 6c6f $linkFile->clo │ │ │ -0000b800: 7365 2829 3b0a 2020 2020 6d79 2024 6f6c se();. my $ol │ │ │ -0000b810: 643b 0a20 2020 2077 6869 6c65 2028 246f d;. while ($o │ │ │ -0000b820: 6c64 203d 2024 7061 7246 6f72 6b50 726f ld = $parForkPro │ │ │ -0000b830: 632d 3e77 6169 7446 6f72 416c 6c4a 6f62 c->waitForAllJob │ │ │ -0000b840: 7328 2929 0a20 2020 207b 0a09 246e 6f43 s()). {..$noC │ │ │ -0000b850: 6f6d 7072 6573 7365 6446 696c 6573 2b2b ompressedFiles++ │ │ │ -0000b860: 3b0a 0926 3a3a 7761 6974 466f 7246 696c ;..&::waitForFil │ │ │ -0000b870: 6528 2224 6624 636f 6d70 7250 6f73 7466 e("$f$comprPostf │ │ │ -0000b880: 6978 2229 3b0a 2009 6d79 2024 6620 3d20 ix");. .my $f = │ │ │ -0000b890: 246f 6c64 2d3e 6765 7428 272d 7768 6174 $old->get('-what │ │ │ -0000b8a0: 2720 3d3e 2027 696e 666f 2729 3b0a 0924 ' => 'info');..$ │ │ │ -0000b8b0: 6e65 7753 697a 6520 2b3d 2028 7374 6174 newSize += (stat │ │ │ -0000b8c0: 2822 2466 2463 6f6d 7072 506f 7374 6669 ("$f$comprPostfi │ │ │ -0000b8d0: 7822 2929 5b37 5d3b 0a09 6d79 2024 6f75 x"))[7];..my $ou │ │ │ -0000b8e0: 7420 3d20 246f 6c64 2d3e 6765 7453 5444 t = $old->getSTD │ │ │ -0000b8f0: 4552 5228 293b 0a09 2470 724c 6f67 2d3e ERR();..$prLog-> │ │ │ -0000b900: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000b910: 2027 4527 2c0a 0909 2020 2020 2020 272d 'E',... '- │ │ │ -0000b920: 7374 7227 203d 3e20 5b22 5354 4445 5252 str' => ["STDERR │ │ │ -0000b930: 206f 6620 3c24 636f 6d70 7220 4063 6f6d of <$compr @com │ │ │ -0000b940: 7072 5061 7220 2220 2e0a 0909 0909 2022 prPar " ...... " │ │ │ -0000b950: 3c24 6620 3e24 6624 636f 6d70 7250 6f73 <$f >$f$comprPos │ │ │ -0000b960: 7466 6978 3e3a 222c 2040 246f 7574 5d29 tfix>:", @$out]) │ │ │ -0000b970: 0a09 2020 2020 6966 2028 4024 6f75 7420 .. if (@$out │ │ │ -0000b980: 3e20 3029 3b0a 0924 7072 4c6f 672d 3e70 > 0);..$prLog->p │ │ │ -0000b990: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000b9a0: 2745 272c 0a09 0920 2020 2020 2027 2d73 'E',... '-s │ │ │ -0000b9b0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -0000b9c0: 6465 6c65 7465 203c 2466 3e22 5d29 0a09 delete <$f>"]).. │ │ │ -0000b9d0: 2020 2020 6966 2028 756e 6c69 6e6b 2024 if (unlink $ │ │ │ -0000b9e0: 6629 2021 3d20 313b 0a20 2020 207d 0a0a f) != 1;. }.. │ │ │ -0000b9f0: 6966 2028 2462 6163 6b75 7054 7970 6520 if ($backupType │ │ │ -0000ba00: 6571 2027 636f 7079 2720 616e 6420 246c eq 'copy' and $l │ │ │ -0000ba10: 696e 6b54 6f52 6563 656e 7429 0a7b 0a20 inkToRecent).{. │ │ │ -0000ba20: 2020 206d 7920 2824 5f64 2c20 246c 696e my ($_d, $lin │ │ │ -0000ba30: 6b29 203d 2026 3a3a 7370 6c69 7446 696c k) = &::splitFil │ │ │ -0000ba40: 6544 6972 2824 6469 7229 3b0a 2370 7269 eDir($dir);.#pri │ │ │ -0000ba50: 6e74 2022 5f64 203d 203c 245f 643e 2c20 nt "_d = <$_d>, │ │ │ -0000ba60: 6c69 6e6b 203d 203c 246c 696e 6b3e 5c6e link = <$link>\n │ │ │ -0000ba70: 223b 0a20 2020 2069 6620 282d 6c20 2224 ";. if (-l "$ │ │ │ -0000ba80: 5f64 2f24 6c69 6e6b 546f 5265 6365 6e74 _d/$linkToRecent │ │ │ -0000ba90: 2229 0a20 2020 207b 0a09 756e 6c69 6e6b "). {..unlink │ │ │ -0000baa0: 2022 245f 642f 246c 696e 6b54 6f52 6563 "$_d/$linkToRec │ │ │ -0000bab0: 656e 7422 3b0a 0a09 2470 724c 6f67 2d3e ent";...$prLog-> │ │ │ -0000bac0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000bad0: 2027 5727 2c0a 0909 2020 2020 2020 272d 'W',... '- │ │ │ -0000bae0: 7374 7227 203d 3e20 5b22 6361 6e6e 6f74 str' => ["cannot │ │ │ -0000baf0: 2063 7265 6174 6520 7379 6d6c 696e 6b20 create symlink │ │ │ -0000bb00: 6c69 6e6b 546f 5265 6365 6e74 2022 202e linkToRecent " . │ │ │ -0000bb10: 0a09 0909 0920 223c 246c 696e 6b54 6f52 ..... "<$linkToR │ │ │ -0000bb20: 6563 656e 743e 225d 290a 0920 2020 2075 ecent>"]).. u │ │ │ -0000bb30: 6e6c 6573 7320 7379 6d6c 696e 6b20 246c nless symlink $l │ │ │ -0000bb40: 696e 6b2c 2022 245f 642f 246c 696e 6b54 ink, "$_d/$linkT │ │ │ -0000bb50: 6f52 6563 656e 7422 3b0a 092b 2b24 6e6f oRecent";..++$no │ │ │ -0000bb60: 5379 6d4c 696e 6b3b 0a23 7072 696e 7420 SymLink;.#print │ │ │ -0000bb70: 2231 2073 796d 6c69 6e6b 2024 6c69 6e6b "1 symlink $link │ │ │ -0000bb80: 2c20 5f64 2f24 6c69 6e6b 546f 5265 6365 , _d/$linkToRece │ │ │ -0000bb90: 6e74 5c6e 223b 0a20 2020 207d 0a20 2020 nt\n";. }. │ │ │ -0000bba0: 2065 6c73 6966 2028 2d65 2022 245f 642f elsif (-e "$_d/ │ │ │ -0000bbb0: 246c 696e 6b54 6f52 6563 656e 7422 290a $linkToRecent"). │ │ │ -0000bbc0: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -0000bbd0: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000bbe0: 2757 272c 0a09 0920 2020 2020 2027 2d73 'W',... '-s │ │ │ -0000bbf0: 7472 2720 3d3e 205b 2263 616e 6e6f 7420 tr' => ["cannot │ │ │ -0000bc00: 6465 6c65 7465 203c 246c 696e 6b54 6f52 delete <$linkToR │ │ │ -0000bc10: 6563 656e 743e 2022 202e 0a09 0909 0920 ecent> " ...... │ │ │ -0000bc20: 2228 6f70 7469 6f6e 206c 696e 6b54 6f52 "(option linkToR │ │ │ -0000bc30: 6563 656e 7429 3a20 2220 2e0a 0909 0909 ecent): " ...... │ │ │ -0000bc40: 2022 6973 206e 6f74 2061 2073 796d 626f "is not a symbo │ │ │ -0000bc50: 6c69 6320 6c69 6e6b 2022 202e 0a09 0909 lic link " ..... │ │ │ -0000bc60: 0920 226f 7220 6e6f 2070 6572 6d69 7373 . "or no permiss │ │ │ -0000bc70: 6f6e 7322 5d29 3b0a 2020 2020 7d0a 2020 ons"]);. }. │ │ │ -0000bc80: 2020 656c 7365 2020 2020 2320 646f 6573 else # does │ │ │ -0000bc90: 206e 6f74 2065 7869 7374 2c20 6372 6561 not exist, crea │ │ │ -0000bca0: 7465 2061 206e 6577 206f 6e65 0a20 2020 te a new one. │ │ │ -0000bcb0: 207b 0a09 2470 724c 6f67 2d3e 7072 696e {..$prLog->prin │ │ │ -0000bcc0: 7428 272d 6b69 6e64 2720 3d3e 2027 5727 t('-kind' => 'W' │ │ │ -0000bcd0: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ -0000bce0: 203d 3e20 5b22 6361 6e6e 6f74 2063 7265 => ["cannot cre │ │ │ -0000bcf0: 6174 6520 7379 6d6c 696e 6b20 6c69 6e6b ate symlink link │ │ │ -0000bd00: 546f 5265 6365 6e74 2022 202e 0a09 0909 ToRecent " ..... │ │ │ -0000bd10: 0920 223c 246c 696e 6b54 6f52 6563 656e . "<$linkToRecen │ │ │ -0000bd20: 743e 225d 290a 0920 2020 2075 6e6c 6573 t>"]).. unles │ │ │ -0000bd30: 7320 7379 6d6c 696e 6b20 246c 696e 6b2c s symlink $link, │ │ │ -0000bd40: 2022 245f 642f 246c 696e 6b54 6f52 6563 "$_d/$linkToRec │ │ │ -0000bd50: 656e 7422 3b0a 092b 2b24 6e6f 5379 6d4c ent";..++$noSymL │ │ │ -0000bd60: 696e 6b3b 0a23 7072 696e 7420 2232 2073 ink;.#print "2 s │ │ │ -0000bd70: 796d 6c69 6e6b 2024 6c69 6e6b 2c20 5f64 ymlink $link, _d │ │ │ -0000bd80: 2f24 6c69 6e6b 546f 5265 6365 6e74 5c6e /$linkToRecent\n │ │ │ -0000bd90: 223b 0a20 2020 207d 0a7d 0a0a 2020 2020 ";. }.}.. │ │ │ -0000bda0: 6d79 2024 7065 7263 656e 7420 3d20 246f my $percent = $o │ │ │ -0000bdb0: 6c64 5369 7a65 203f 2024 6e65 7753 697a ldSize ? $newSiz │ │ │ -0000bdc0: 6520 2f20 246f 6c64 5369 7a65 202a 2031 e / $oldSize * 1 │ │ │ -0000bdd0: 3030 203a 2030 3b0a 2020 2020 2470 724c 00 : 0;. $prL │ │ │ -0000bde0: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0000bdf0: 2720 3d3e 2027 5327 2c0a 0909 2020 272d ' => 'S',... '- │ │ │ -0000be00: 7374 7227 203d 3e20 5b22 6372 6561 7465 str' => ["create │ │ │ -0000be10: 6420 246e 6f4d 6b64 6972 2064 6972 6563 d $noMkdir direc │ │ │ -0000be20: 746f 7269 6573 222c 0a09 0909 2020 2020 tories",.... │ │ │ -0000be30: 2022 6372 6561 7465 6420 246e 6f53 796d "created $noSym │ │ │ -0000be40: 4c69 6e6b 2073 796d 626f 6c69 6320 6c69 Link symbolic li │ │ │ -0000be50: 6e6b 7322 2c0a 0909 0920 2020 2020 2263 nks",.... "c │ │ │ -0000be60: 6f6d 7072 6573 7365 6420 246e 6f43 6f6d ompressed $noCom │ │ │ -0000be70: 7072 6573 7365 6446 696c 6573 2066 696c pressedFiles fil │ │ │ -0000be80: 6573 222c 0a09 0909 2020 2020 2022 7573 es",.... "us │ │ │ -0000be90: 6564 2022 202e 2028 263a 3a68 756d 616e ed " . (&::human │ │ │ -0000bea0: 5265 6164 6162 6c65 2824 6e65 7753 697a Readable($newSiz │ │ │ -0000beb0: 6529 295b 305d 202e 0a09 0909 2020 2020 e))[0] ..... │ │ │ -0000bec0: 2022 2069 6e73 7465 6164 206f 6620 2220 " instead of " │ │ │ -0000bed0: 2e20 2826 3a3a 6875 6d61 6e52 6561 6461 . (&::humanReada │ │ │ -0000bee0: 626c 6528 246f 6c64 5369 7a65 2929 5b30 ble($oldSize))[0 │ │ │ -0000bef0: 5d20 2e0a 0909 0920 2020 2020 2220 2824 ] ..... " ($ │ │ │ -0000bf00: 6e65 7753 697a 6520 3c2d 2024 6f6c 6453 newSize <- $oldS │ │ │ -0000bf10: 697a 6520 3b20 2220 2e0a 0909 0920 2020 ize ; " ..... │ │ │ -0000bf20: 2020 2873 7072 696e 7466 2022 252e 3166 (sprintf "%.1f │ │ │ -0000bf30: 222c 2024 7065 7263 656e 7429 202e 2022 ", $percent) . " │ │ │ -0000bf40: 2529 225d 293b 0a0a 2020 2020 230a 2020 %)"]);.. #. │ │ │ -0000bf50: 2020 2320 7365 7420 6861 7264 206c 696e # set hard lin │ │ │ -0000bf60: 6b73 0a20 2020 2023 0a20 2020 2024 7072 ks. #. $pr │ │ │ -0000bf70: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0000bf80: 6427 203d 3e20 2749 272c 0a09 0920 2027 d' => 'I',... ' │ │ │ -0000bf90: 2d73 7472 2720 3d3e 205b 2270 6861 7365 -str' => ["phase │ │ │ -0000bfa0: 2032 3a20 7365 7474 696e 6720 6861 7264 2: setting hard │ │ │ -0000bfb0: 206c 696e 6b73 225d 293b 0a0a 2020 2020 links"]);.. │ │ │ -0000bfc0: 6d79 2024 7769 7468 426c 6f63 6b65 6446 my $withBlockedF │ │ │ -0000bfd0: 696c 6573 203d 2030 3b0a 2020 2020 6d79 iles = 0;. my │ │ │ -0000bfe0: 2024 6e6f 4861 7264 4c69 6e6b 7320 3d20 $noHardLinks = │ │ │ -0000bff0: 303b 0a20 2020 206d 7920 246e 6f43 6f70 0;. my $noCop │ │ │ -0000c000: 6965 6446 696c 6573 203d 2030 3b0a 2020 iedFiles = 0;. │ │ │ -0000c010: 2020 6d79 2024 7072 203d 2024 7072 6f67 my $pr = $prog │ │ │ -0000c020: 7265 7373 5265 706f 7274 202a 2032 3030 ressReport * 200 │ │ │ -0000c030: 3b0a 2020 2020 246c 696e 6b46 696c 6520 ;. $linkFile │ │ │ -0000c040: 3d20 7069 7065 4672 6f6d 466f 726b 2d3e = pipeFromFork-> │ │ │ -0000c050: 6e65 7728 272d 6578 6563 2720 3d3e 2027 new('-exec' => ' │ │ │ -0000c060: 627a 6970 3227 2c0a 0909 0909 2020 272d bzip2',..... '- │ │ │ -0000c070: 7061 7261 6d27 203d 3e20 5b27 2d64 275d param' => ['-d'] │ │ │ -0000c080: 2c0a 0909 0909 2020 272d 7374 6469 6e27 ,..... '-stdin' │ │ │ -0000c090: 203d 3e20 2466 2c0a 0909 0909 2020 272d => $f,..... '- │ │ │ -0000c0a0: 6f75 7452 616e 646f 6d27 203d 3e20 272f outRandom' => '/ │ │ │ -0000c0b0: 746d 702f 7374 6275 5069 7065 4672 6f6d tmp/stbuPipeFrom │ │ │ -0000c0c0: 3131 2d27 2c0a 0909 0909 2020 272d 7072 11-',..... '-pr │ │ │ -0000c0d0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -0000c0e0: 0a0a 2020 2020 6c6f 6361 6c20 2a42 4c4f .. local *BLO │ │ │ -0000c0f0: 434b 4d44 353b 0a20 2020 2069 6620 282d CKMD5;. if (- │ │ │ -0000c100: 6520 2224 6469 722f 2e6d 6435 426c 6f63 e "$dir/.md5Bloc │ │ │ -0000c110: 6b43 6865 636b 5375 6d73 2229 2020 2320 kCheckSums") # │ │ │ -0000c120: 6e6f 7720 2835 7468 2061 7072 696c 2032 now (5th april 2 │ │ │ -0000c130: 3031 3229 2061 6c77 6179 7320 7772 6974 012) always writ │ │ │ -0000c140: 6573 0a20 2020 207b 2020 2020 2020 2020 es. { │ │ │ -0000c150: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000c160: 2020 2020 2020 2020 2020 2320 636f 6d70 # comp │ │ │ -0000c170: 6c65 7465 2c20 636f 6d70 7265 7373 6564 lete, compressed │ │ │ -0000c180: 2066 696c 652e 2072 656d 6169 6e73 0a09 file. remains.. │ │ │ -0000c190: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile │ │ │ -0000c1a0: 7320 3d20 313b 2020 2020 2020 2020 2023 s = 1; # │ │ │ -0000c1b0: 2066 6f72 2063 6f6d 7061 7469 6269 6c69 for compatibili │ │ │ -0000c1c0: 7479 0a09 6f70 656e 2842 4c4f 434b 4d44 ty..open(BLOCKMD │ │ │ -0000c1d0: 352c 2022 3e3e 222c 2022 2464 6972 2f2e 5, ">>", "$dir/. │ │ │ -0000c1e0: 6d64 3542 6c6f 636b 4368 6563 6b53 756d md5BlockCheckSum │ │ │ -0000c1f0: 7322 2920 6f72 0a09 2020 2020 2470 724c s") or.. $prL │ │ │ -0000c200: 6f67 2d3e 7072 696e 7428 272d 6b69 6e64 og->print('-kind │ │ │ -0000c210: 2720 3d3e 2027 4527 2c0a 0909 0920 2027 ' => 'E',.... ' │ │ │ -0000c220: 2d73 7472 2720 3d3e 0a09 0909 2020 5b22 -str' =>.... [" │ │ │ -0000c230: 6361 6e6e 6f74 2061 7070 656e 6420 746f cannot append to │ │ │ -0000c240: 203c 2464 6972 2f2e 6d64 3542 6c6f 636b <$dir/.md5Block │ │ │ -0000c250: 4368 6563 6b53 756d 733e 225d 2c0a 0909 CheckSums>"],... │ │ │ -0000c260: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ -0000c270: 3b0a 2020 2020 7d0a 2020 2020 6d79 2024 ;. }. my $ │ │ │ -0000c280: 6d69 7373 4c69 6e6b 7320 3d0a 096d 6973 missLinks =..mis │ │ │ -0000c290: 7369 6e67 4c69 6e6b 732d 3e6e 6577 2827 singLinks->new(' │ │ │ -0000c2a0: 2d62 6163 6b75 7044 6972 2720 3d3e 2024 -backupDir' => $ │ │ │ -0000c2b0: 6469 722c 0a09 0909 2020 272d 6d69 7373 dir,.... '-miss │ │ │ -0000c2c0: 696e 674c 696e 6b46 696c 6527 203d 3e20 ingLinkFile' => │ │ │ -0000c2d0: 222e 6d64 3543 6865 636b 5375 6d73 2e66 ".md5CheckSums.f │ │ │ -0000c2e0: 6169 6c22 2c0a 0909 2020 272d 6d69 7373 ail",... '-miss │ │ │ -0000c2f0: 696e 674c 696e 6b42 6c6f 636b 4669 6c65 ingLinkBlockFile │ │ │ -0000c300: 2720 3d3e 2022 2e6d 6435 426c 6f63 6b43 ' => ".md5BlockC │ │ │ -0000c310: 6865 636b 5375 6d73 2e66 6169 6c22 2c0a heckSums.fail",. │ │ │ -0000c320: 0909 0920 2027 2d70 724c 6f67 2720 3d3e ... '-prLog' => │ │ │ -0000c330: 2024 7072 4c6f 6729 3b0a 0a20 2020 2077 $prLog);.. w │ │ │ -0000c340: 6869 6c65 2028 246c 203d 2024 6c69 6e6b hile ($l = $link │ │ │ -0000c350: 4669 6c65 2d3e 7265 6164 2829 290a 2020 File->read()). │ │ │ -0000c360: 2020 7b0a 096e 6578 7420 6966 2024 6c20 {..next if $l │ │ │ -0000c370: 3d7e 202f 5e23 2f3b 0a09 6368 6f6d 7020 =~ /^#/;..chomp │ │ │ -0000c380: 246c 3b0a 096d 7920 2824 7768 6174 2c20 $l;..my ($what, │ │ │ -0000c390: 246d 6435 2920 3d20 7370 6c69 7428 2f5c $md5) = split(/\ │ │ │ -0000c3a0: 732b 2f2c 2024 6c2c 2032 293b 0a09 6d79 s+/, $l, 2);..my │ │ │ -0000c3b0: 2024 6c69 6e65 4e72 203d 2024 6c69 6e6b $lineNr = $link │ │ │ -0000c3c0: 4669 6c65 2d3e 6765 7428 272d 7768 6174 File->get('-what │ │ │ -0000c3d0: 2720 3d3e 2027 6c69 6e65 4e72 2729 3b0a ' => 'lineNr');. │ │ │ -0000c3e0: 0969 6620 2824 7768 6174 2065 7120 276c .if ($what eq 'l │ │ │ -0000c3f0: 696e 6b27 290a 097b 0a09 2020 2020 6d79 ink')..{.. my │ │ │ -0000c400: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile = │ │ │ -0000c410: 2024 6c69 6e6b 4669 6c65 2d3e 7265 6164 $linkFile->read │ │ │ -0000c420: 2829 3b0a 0920 2020 2024 6578 6973 7469 ();.. $existi │ │ │ -0000c430: 6e67 4669 6c65 203d 2022 2464 6972 2f24 ngFile = "$dir/$ │ │ │ -0000c440: 6578 6973 7469 6e67 4669 6c65 223b 0a09 existingFile";.. │ │ │ -0000c450: 2020 2020 2470 724c 6f67 2d3e 7072 696e $prLog->prin │ │ │ -0000c460: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -0000c470: 2c0a 0909 0920 2027 2d73 7472 2720 3d3e ,.... '-str' => │ │ │ -0000c480: 205b 2266 696c 6520 3c24 663e 2065 6e64 ["file <$f> end │ │ │ -0000c490: 7320 756e 6578 7065 6374 6564 2061 7420 s unexpected at │ │ │ -0000c4a0: 6c69 6e65 2024 6c69 6e65 4e72 225d 2c0a line $lineNr"],. │ │ │ -0000c4b0: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -0000c4c0: 3129 0a09 0975 6e6c 6573 7320 2465 7869 1)...unless $exi │ │ │ -0000c4d0: 7374 696e 6746 696c 653b 0a09 2020 2020 stingFile;.. │ │ │ -0000c4e0: 6368 6f6d 7020 2465 7869 7374 696e 6746 chomp $existingF │ │ │ -0000c4f0: 696c 653b 0a09 2020 2020 2465 7869 7374 ile;.. $exist │ │ │ -0000c500: 696e 6746 696c 6520 3d7e 2073 2f5c 302f ingFile =~ s/\0/ │ │ │ -0000c510: 5c6e 2f6f 673b 0a0a 0920 2020 206d 7920 \n/og;... my │ │ │ -0000c520: 246e 6577 4c69 6e6b 203d 2024 6c69 6e6b $newLink = $link │ │ │ -0000c530: 4669 6c65 2d3e 7265 6164 2829 3b0a 0920 File->read();.. │ │ │ -0000c540: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -0000c550: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -0000c560: 0a09 0909 2020 272d 7374 7227 203d 3e20 .... '-str' => │ │ │ -0000c570: 5b22 6669 6c65 203c 2466 3e20 656e 6473 ["file <$f> ends │ │ │ -0000c580: 2075 6e65 7870 6563 7465 6420 6174 206c unexpected at l │ │ │ -0000c590: 696e 6520 246c 696e 654e 7222 5d2c 0a09 ine $lineNr"],.. │ │ │ -0000c5a0: 0909 2020 272d 6578 6974 2720 3d3e 2031 .. '-exit' => 1 │ │ │ -0000c5b0: 290a 0909 756e 6c65 7373 2024 6e65 774c )...unless $newL │ │ │ -0000c5c0: 696e 6b3b 0a09 2020 2020 6368 6f6d 7020 ink;.. chomp │ │ │ -0000c5d0: 246e 6577 4c69 6e6b 3b0a 0920 2020 2024 $newLink;.. $ │ │ │ -0000c5e0: 6e65 774c 696e 6b20 3d7e 2073 2f5c 302f newLink =~ s/\0/ │ │ │ -0000c5f0: 5c6e 2f6f 673b 0a09 2020 2020 246e 6577 \n/og;.. $new │ │ │ -0000c600: 4c69 6e6b 203d 2022 2464 6972 2f24 6e65 Link = "$dir/$ne │ │ │ -0000c610: 774c 696e 6b22 3b0a 0920 2020 2024 6578 wLink";.. $ex │ │ │ -0000c620: 6973 7469 6e67 4669 6c65 203d 2024 6d64 istingFile = $md │ │ │ -0000c630: 3554 6f46 696c 657b 246d 6435 7d20 6966 5ToFile{$md5} if │ │ │ -0000c640: 2065 7869 7374 7320 246d 6435 546f 4669 exists $md5ToFi │ │ │ -0000c650: 6c65 7b24 6d64 357d 3b0a 0920 2020 206d le{$md5};.. m │ │ │ -0000c660: 7920 2468 6c20 3d20 2d31 3b0a 0920 2020 y $hl = -1;.. │ │ │ -0000c670: 2069 6620 2824 6d61 7848 6172 644c 696e if ($maxHardLin │ │ │ -0000c680: 6b73 203e 2030 290a 0920 2020 207b 0a09 ks > 0).. {.. │ │ │ -0000c690: 0924 686c 203d 2028 7374 6174 2824 6578 .$hl = (stat($ex │ │ │ -0000c6a0: 6973 7469 6e67 4669 6c65 2929 5b33 5d3b istingFile))[3]; │ │ │ -0000c6b0: 0a23 7072 696e 7420 2224 6578 6973 7469 .#print "$existi │ │ │ -0000c6c0: 6e67 4669 6c65 3a20 2468 6c20 6861 7264 ngFile: $hl hard │ │ │ -0000c6d0: 6c69 6e6b 7320 2824 6d61 7848 6172 644c links ($maxHardL │ │ │ -0000c6e0: 696e 6b73 295c 6e22 3b0a 0920 2020 207d inks)\n";.. } │ │ │ -0000c6f0: 0a09 2020 2020 6966 2028 2468 6c20 3c20 .. if ($hl < │ │ │ -0000c700: 246d 6178 4861 7264 4c69 6e6b 7320 616e $maxHardLinks an │ │ │ -0000c710: 6420 6c69 6e6b 2024 6578 6973 7469 6e67 d link $existing │ │ │ -0000c720: 4669 6c65 2c20 246e 6577 4c69 6e6b 290a File, $newLink). │ │ │ -0000c730: 0920 2020 207b 0a09 0924 6e6f 4861 7264 . {...$noHard │ │ │ -0000c740: 4c69 6e6b 732b 2b3b 0a09 0924 7072 4c6f Links++;...$prLo │ │ │ -0000c750: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000c760: 203d 3e20 2753 272c 0a09 0909 2020 2020 => 'S',.... │ │ │ -0000c770: 2020 272d 7374 7227 203d 3e20 5b22 6c69 '-str' => ["li │ │ │ -0000c780: 6e6b 6564 2024 6e6f 4861 7264 4c69 6e6b nked $noHardLink │ │ │ -0000c790: 7320 6669 6c65 7322 5d29 0a09 0909 6966 s files"])....if │ │ │ -0000c7a0: 2028 2470 7220 616e 6420 246e 6f48 6172 ($pr and $noHar │ │ │ -0000c7b0: 644c 696e 6b73 2025 2024 7072 203d 3d20 dLinks % $pr == │ │ │ -0000c7c0: 3029 3b0a 0920 2020 207d 0a09 2020 2020 0);.. }.. │ │ │ -0000c7d0: 656c 7365 0a09 2020 2020 7b0a 0909 2320 else.. {...# │ │ │ -0000c7e0: 636f 7079 2066 696c 650a 2020 2020 2020 copy file. │ │ │ -0000c7f0: 2020 2020 2020 2020 2020 756e 6c65 7373 unless │ │ │ -0000c800: 2028 263a 3a63 6f70 7946 696c 6528 2224 (&::copyFile("$ │ │ │ -0000c810: 6578 6973 7469 6e67 4669 6c65 222c 2022 existingFile", " │ │ │ -0000c820: 246e 6577 4c69 6e6b 222c 2024 7072 4c6f $newLink", $prLo │ │ │ -0000c830: 6729 290a 2020 2020 2020 2020 2020 2020 g)). │ │ │ -0000c840: 2020 2020 7b0a 2020 2020 2020 2020 2020 {. │ │ │ -0000c850: 2020 2020 2020 2020 2020 2470 724c 6f67 $prLog │ │ │ -0000c860: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -0000c870: 3d3e 2027 4527 2c0a 2020 2020 2020 2020 => 'E',. │ │ │ -0000c880: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000c890: 2020 2020 2020 2020 2020 272d 7374 7227 '-str' │ │ │ -0000c8a0: 203d 3e20 5b22 636f 756c 6420 6e6f 7420 => ["could not │ │ │ -0000c8b0: 6c69 6e6b 2f63 6f70 7920 2220 2e0a 0909 link/copy " .... │ │ │ -0000c8c0: 0909 0920 2020 2020 2224 6578 6973 7469 ... "$existi │ │ │ -0000c8d0: 6e67 4669 6c65 2024 6e65 774c 696e 6b22 ngFile $newLink" │ │ │ -0000c8e0: 5d29 3b0a 2309 0920 2020 2024 6d69 7373 ]);.#.. $miss │ │ │ -0000c8f0: 4c69 6e6b 732d 3e77 7269 7465 456e 7472 Links->writeEntr │ │ │ -0000c900: 7928 272d 6368 6563 6b73 756d 2720 3d3e y('-checksum' => │ │ │ -0000c910: 2024 6d64 352c 0a23 0909 0909 0920 2020 $md5,.#..... │ │ │ -0000c920: 272d 6669 6c65 2720 3d3e 2024 6e65 774c '-file' => $newL │ │ │ -0000c930: 696e 6b29 3b0a 2020 2020 2020 2020 2020 ink);. │ │ │ -0000c940: 2020 2020 2020 2020 2020 6e65 7874 3b0a next;. │ │ │ -0000c950: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -0000c960: 7d0a 0909 246e 6f43 6f70 6965 6446 696c }...$noCopiedFil │ │ │ -0000c970: 6573 2b2b 3b0a 0909 246d 6435 546f 4669 es++;...$md5ToFi │ │ │ -0000c980: 6c65 7b24 6d64 357d 203d 2024 6e65 774c le{$md5} = $newL │ │ │ -0000c990: 696e 6b3b 0a09 2020 2020 7d0a 097d 0a09 ink;.. }..}.. │ │ │ -0000c9a0: 656c 7369 6620 2824 7768 6174 2065 7120 elsif ($what eq │ │ │ -0000c9b0: 2764 6972 2729 0a09 7b0a 097d 0a09 656c 'dir')..{..}..el │ │ │ -0000c9c0: 7369 6620 2824 7768 6174 2065 7120 2763 sif ($what eq 'c │ │ │ -0000c9d0: 6f6d 7072 6573 7327 206f 7220 2477 6861 ompress' or $wha │ │ │ -0000c9e0: 7420 6571 2027 7379 6d6c 696e 6b27 290a t eq 'symlink'). │ │ │ -0000c9f0: 097b 0a09 2020 2020 6d79 2024 6669 6c65 .{.. my $file │ │ │ -0000ca00: 203d 2024 6c69 6e6b 4669 6c65 2d3e 7265 = $linkFile->re │ │ │ -0000ca10: 6164 2829 3b0a 0920 2020 2024 7072 4c6f ad();.. $prLo │ │ │ -0000ca20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000ca30: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ -0000ca40: 7374 7227 203d 3e20 5b22 6669 6c65 203c str' => ["file < │ │ │ -0000ca50: 2466 3e20 656e 6473 2075 6e65 7870 6563 $f> ends unexpec │ │ │ -0000ca60: 7465 6420 6174 206c 696e 6520 246c 696e ted at line $lin │ │ │ -0000ca70: 654e 7222 5d2c 0a09 0909 2020 272d 6578 eNr"],.... '-ex │ │ │ -0000ca80: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle │ │ │ -0000ca90: 7373 2024 6669 6c65 3b0a 097d 0a09 656c ss $file;..}..el │ │ │ -0000caa0: 7369 6620 2824 7768 6174 2065 7120 276c sif ($what eq 'l │ │ │ -0000cab0: 696e 6b53 796d 6c69 6e6b 2729 0a09 7b0a inkSymlink')..{. │ │ │ -0000cac0: 0920 2020 206d 7920 2465 7869 7374 696e . my $existin │ │ │ -0000cad0: 6746 696c 6520 3d20 246c 696e 6b46 696c gFile = $linkFil │ │ │ -0000cae0: 652d 3e72 6561 6428 293b 0a09 2020 2020 e->read();.. │ │ │ -0000caf0: 2465 7869 7374 696e 6746 696c 6520 3d20 $existingFile = │ │ │ -0000cb00: 2224 6469 722f 2465 7869 7374 696e 6746 "$dir/$existingF │ │ │ -0000cb10: 696c 6522 3b0a 0920 2020 2024 7072 4c6f ile";.. $prLo │ │ │ -0000cb20: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000cb30: 203d 3e20 2745 272c 0a09 0909 2020 272d => 'E',.... '- │ │ │ -0000cb40: 7374 7227 203d 3e20 5b22 6669 6c65 203c str' => ["file < │ │ │ -0000cb50: 2466 3e20 656e 6473 2075 6e65 7870 6563 $f> ends unexpec │ │ │ -0000cb60: 7465 6420 6174 206c 696e 6520 246c 696e ted at line $lin │ │ │ -0000cb70: 654e 7222 5d2c 0a09 0909 2020 272d 6578 eNr"],.... '-ex │ │ │ -0000cb80: 6974 2720 3d3e 2031 290a 0909 756e 6c65 it' => 1)...unle │ │ │ -0000cb90: 7373 2024 6578 6973 7469 6e67 4669 6c65 ss $existingFile │ │ │ -0000cba0: 3b0a 0920 2020 2063 686f 6d70 2024 6578 ;.. chomp $ex │ │ │ -0000cbb0: 6973 7469 6e67 4669 6c65 3b0a 0920 2020 istingFile;.. │ │ │ -0000cbc0: 2024 6578 6973 7469 6e67 4669 6c65 203d $existingFile = │ │ │ -0000cbd0: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0a09 ~ s/\0/\n/og;... │ │ │ -0000cbe0: 2020 2020 6d79 2024 6e65 774c 696e 6b20 my $newLink │ │ │ -0000cbf0: 3d20 246c 696e 6b46 696c 652d 3e72 6561 = $linkFile->rea │ │ │ -0000cc00: 6428 293b 0a09 2020 2020 2470 724c 6f67 d();.. $prLog │ │ │ -0000cc10: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -0000cc20: 3d3e 2027 4527 2c0a 0909 0920 2027 2d73 => 'E',.... '-s │ │ │ -0000cc30: 7472 2720 3d3e 205b 2266 696c 6520 3c24 tr' => ["file <$ │ │ │ -0000cc40: 663e 2065 6e64 7320 756e 6578 7065 6374 f> ends unexpect │ │ │ -0000cc50: 6564 2061 7420 6c69 6e65 2024 6c69 6e65 ed at line $line │ │ │ -0000cc60: 4e72 225d 2c0a 0909 0920 2027 2d65 7869 Nr"],.... '-exi │ │ │ -0000cc70: 7427 203d 3e20 3129 0a09 0975 6e6c 6573 t' => 1)...unles │ │ │ -0000cc80: 7320 246e 6577 4c69 6e6b 3b0a 0920 2020 s $newLink;.. │ │ │ -0000cc90: 2063 686f 6d70 2024 6e65 774c 696e 6b3b chomp $newLink; │ │ │ -0000cca0: 0a09 2020 2020 246e 6577 4c69 6e6b 203d .. $newLink = │ │ │ -0000ccb0: 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a 0920 ~ s/\0/\n/og;.. │ │ │ -0000ccc0: 2020 2024 6e65 774c 696e 6b20 3d20 2224 $newLink = "$ │ │ │ -0000ccd0: 6469 722f 246e 6577 4c69 6e6b 223b 0a09 dir/$newLink";.. │ │ │ -0000cce0: 2020 2020 6d79 2024 686c 203d 202d 313b my $hl = -1; │ │ │ -0000ccf0: 0a09 2020 2020 6966 2028 246d 6178 4861 .. if ($maxHa │ │ │ -0000cd00: 7264 4c69 6e6b 7320 203e 2030 290a 0920 rdLinks > 0).. │ │ │ -0000cd10: 2020 207b 0a09 0924 686c 203d 2028 6c73 {...$hl = (ls │ │ │ -0000cd20: 7461 7428 2465 7869 7374 696e 6746 696c tat($existingFil │ │ │ -0000cd30: 6529 295b 335d 3b0a 2370 7269 6e74 2022 e))[3];.#print " │ │ │ -0000cd40: 2465 7869 7374 696e 6746 696c 653a 2024 $existingFile: $ │ │ │ -0000cd50: 686c 2068 6172 646c 696e 6b73 206f 6e20 hl hardlinks on │ │ │ -0000cd60: 7379 6d6c 696e 6b73 2028 246d 6178 4861 symlinks ($maxHa │ │ │ -0000cd70: 7264 4c69 6e6b 7329 5c6e 223b 0a09 2020 rdLinks)\n";.. │ │ │ -0000cd80: 2020 7d0a 0920 2020 2069 6620 2824 686c }.. if ($hl │ │ │ -0000cd90: 203c 2024 6d61 7848 6172 644c 696e 6b73 < $maxHardLinks │ │ │ -0000cda0: 2061 6e64 206c 696e 6b20 2465 7869 7374 and link $exist │ │ │ -0000cdb0: 696e 6746 696c 652c 2024 6e65 774c 696e ingFile, $newLin │ │ │ -0000cdc0: 6b29 0a09 2020 2020 7b0a 0909 246e 6f48 k).. {...$noH │ │ │ -0000cdd0: 6172 644c 696e 6b73 2b2b 3b0a 0909 2470 ardLinks++;...$p │ │ │ -0000cde0: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0000cdf0: 6e64 2720 3d3e 2027 5327 2c0a 0909 0920 nd' => 'S',.... │ │ │ -0000ce00: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -0000ce10: 226c 696e 6b65 6420 246e 6f48 6172 644c "linked $noHardL │ │ │ -0000ce20: 696e 6b73 2066 696c 6573 225d 290a 0909 inks files"])... │ │ │ -0000ce30: 0969 6620 2824 7072 2061 6e64 2024 6e6f .if ($pr and $no │ │ │ -0000ce40: 4861 7264 4c69 6e6b 7320 2520 2470 7220 HardLinks % $pr │ │ │ -0000ce50: 3d3d 2030 293b 0a09 2020 2020 7d0a 0920 == 0);.. }.. │ │ │ -0000ce60: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ -0000ce70: 0923 2063 7265 6174 6520 7379 6d6c 696e .# create symlin │ │ │ -0000ce80: 6b0a 0909 2470 724c 6f67 2d3e 7072 696e k...$prLog->prin │ │ │ -0000ce90: 7428 272d 6b69 6e64 2720 3d3e 2027 4527 t('-kind' => 'E' │ │ │ -0000cea0: 2c0a 0909 0920 2020 2020 2027 2d73 7472 ,.... '-str │ │ │ -0000ceb0: 2720 3d3e 0a09 0909 2020 2020 2020 5b22 ' =>.... [" │ │ │ -0000cec0: 6361 6e6e 6f74 2063 7265 6174 6520 7379 cannot create sy │ │ │ -0000ced0: 6d6c 696e 6b20 6672 6f6d 203c 246e 6577 mlink from <$new │ │ │ -0000cee0: 4c69 6e6b 3e20 2d3e 203c 246d 6435 3e22 Link> -> <$md5>" │ │ │ -0000cef0: 5d29 0a09 0975 6e6c 6573 7320 7379 6d6c ])...unless syml │ │ │ -0000cf00: 696e 6b20 246d 6435 2c20 246e 6577 4c69 ink $md5, $newLi │ │ │ -0000cf10: 6e6b 3b0a 0920 2020 2024 6e6f 5379 6d4c nk;.. $noSymL │ │ │ -0000cf20: 696e 6b2b 2b3b 0a09 2020 2020 7d0a 097d ink++;.. }..} │ │ │ -0000cf30: 0a09 656c 7369 6620 2824 7768 6174 2065 ..elsif ($what e │ │ │ -0000cf40: 7120 276c 696e 6b62 6c6f 636b 2729 0a09 q 'linkblock').. │ │ │ -0000cf50: 7b0a 0920 2020 206d 7920 2465 7869 7374 {.. my $exist │ │ │ -0000cf60: 696e 6746 696c 6520 3d20 246c 696e 6b46 ingFile = $linkF │ │ │ -0000cf70: 696c 652d 3e72 6561 6428 293b 0a09 2020 ile->read();.. │ │ │ -0000cf80: 2020 2465 7869 7374 696e 6746 696c 6520 $existingFile │ │ │ -0000cf90: 3d20 2224 6469 722f 2465 7869 7374 696e = "$dir/$existin │ │ │ -0000cfa0: 6746 696c 6522 3b0a 0920 2020 2024 7072 gFile";.. $pr │ │ │ -0000cfb0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0000cfc0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ -0000cfd0: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => ["file │ │ │ -0000cfe0: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp │ │ │ -0000cff0: 6563 7465 6420 6174 206c 696e 6520 246c ected at line $l │ │ │ -0000d000: 696e 654e 7222 5d2c 0a09 0909 2020 272d ineNr"],.... '- │ │ │ -0000d010: 6578 6974 2720 3d3e 2031 290a 0909 756e exit' => 1)...un │ │ │ -0000d020: 6c65 7373 2024 6578 6973 7469 6e67 4669 less $existingFi │ │ │ -0000d030: 6c65 3b0a 0920 2020 2063 686f 6d70 2024 le;.. chomp $ │ │ │ -0000d040: 6578 6973 7469 6e67 4669 6c65 3b0a 0920 existingFile;.. │ │ │ -0000d050: 2020 2024 6578 6973 7469 6e67 4669 6c65 $existingFile │ │ │ -0000d060: 203d 7e20 732f 5c30 2f5c 6e2f 6f67 3b0a =~ s/\0/\n/og;. │ │ │ -0000d070: 0a09 2020 2020 6d79 2024 6e65 774c 696e .. my $newLin │ │ │ -0000d080: 6b20 3d20 246c 696e 6b46 696c 652d 3e72 k = $linkFile->r │ │ │ -0000d090: 6561 6428 293b 0a09 2020 2020 246e 6577 ead();.. $new │ │ │ -0000d0a0: 4c69 6e6b 203d 2022 2464 6972 2f24 6e65 Link = "$dir/$ne │ │ │ -0000d0b0: 774c 696e 6b22 3b0a 0920 2020 2024 7072 wLink";.. $pr │ │ │ -0000d0c0: 4c6f 672d 3e70 7269 6e74 2827 2d6b 696e Log->print('-kin │ │ │ -0000d0d0: 6427 203d 3e20 2745 272c 0a09 0909 2020 d' => 'E',.... │ │ │ -0000d0e0: 272d 7374 7227 203d 3e20 5b22 6669 6c65 '-str' => ["file │ │ │ -0000d0f0: 203c 2466 3e20 656e 6473 2075 6e65 7870 <$f> ends unexp │ │ │ -0000d100: 6563 7465 6420 6174 206c 696e 6520 246c ected at line $l │ │ │ -0000d110: 696e 654e 7222 5d2c 0a09 0909 2020 272d ineNr"],.... '- │ │ │ -0000d120: 6578 6974 2720 3d3e 2031 290a 0909 756e exit' => 1)...un │ │ │ -0000d130: 6c65 7373 2024 6e65 774c 696e 6b3b 0a09 less $newLink;.. │ │ │ -0000d140: 2020 2020 6368 6f6d 7020 246e 6577 4c69 chomp $newLi │ │ │ -0000d150: 6e6b 3b0a 0920 2020 2024 6e65 774c 696e nk;.. $newLin │ │ │ -0000d160: 6b20 3d7e 2073 2f5c 302f 5c6e 2f6f 673b k =~ s/\0/\n/og; │ │ │ -0000d170: 0a0a 0920 2020 2024 6e6f 4861 7264 4c69 ... $noHardLi │ │ │ -0000d180: 6e6b 7320 2b3d 0a09 0926 3a3a 6861 7264 nks +=...&::hard │ │ │ -0000d190: 4c69 6e6b 4469 7228 2465 7869 7374 696e LinkDir($existin │ │ │ -0000d1a0: 6746 696c 652c 2024 6e65 774c 696e 6b2c gFile, $newLink, │ │ │ -0000d1b0: 2027 5c41 5c64 2e2a 272c 0a09 0909 2020 '\A\d.*',.... │ │ │ -0000d1c0: 2020 2020 2075 6e64 6566 2c20 756e 6465 undef, unde │ │ │ -0000d1d0: 662c 2075 6e64 6566 2c20 2470 724c 6f67 f, undef, $prLog │ │ │ -0000d1e0: 2c20 246d 6178 4861 7264 4c69 6e6b 732c , $maxHardLinks, │ │ │ -0000d1f0: 0a09 0909 2020 2020 2020 2022 2e6d 6435 .... ".md5 │ │ │ -0000d200: 426c 6f63 6b43 6865 636b 5375 6d73 2e62 BlockCheckSums.b │ │ │ -0000d210: 7a32 2229 3b0a 0a09 2020 2020 6966 2028 z2");... if ( │ │ │ -0000d220: 2477 6974 6842 6c6f 636b 6564 4669 6c65 $withBlockedFile │ │ │ -0000d230: 7329 0a09 2020 2020 7b0a 0909 6d79 2024 s).. {...my $ │ │ │ -0000d240: 626c 6f63 6b4c 6f63 616c 203d 0a09 0920 blockLocal =... │ │ │ -0000d250: 2020 2070 6970 6546 726f 6d46 6f72 6b2d pipeFromFork- │ │ │ -0000d260: 3e6e 6577 2827 2d65 7865 6327 203d 3e20 >new('-exec' => │ │ │ -0000d270: 2762 7a69 7032 272c 0a09 0909 0920 2020 'bzip2',..... │ │ │ -0000d280: 2020 2027 2d70 6172 616d 2720 3d3e 205b '-param' => [ │ │ │ -0000d290: 272d 6427 5d2c 0a09 0909 0920 2020 2020 '-d'],..... │ │ │ -0000d2a0: 2027 2d73 7464 696e 2720 3d3e 2022 246e '-stdin' => "$n │ │ │ -0000d2b0: 6577 4c69 6e6b 2f2e 6d64 3542 6c6f 636b ewLink/.md5Block │ │ │ -0000d2c0: 4368 6563 6b53 756d 732e 627a 3222 2c0a CheckSums.bz2",. │ │ │ -0000d2d0: 0909 0909 2020 2020 2020 272d 6f75 7452 .... '-outR │ │ │ -0000d2e0: 616e 646f 6d27 203d 3e20 272f 746d 702f andom' => '/tmp/ │ │ │ -0000d2f0: 7374 6275 5069 7065 4672 6f6d 3132 2d27 stbuPipeFrom12-' │ │ │ -0000d300: 2c0a 0909 0909 2020 2020 2020 272d 7072 ,..... '-pr │ │ │ -0000d310: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -0000d320: 0a0a 0909 6d79 2024 6c3b 0a09 0977 6869 ....my $l;...whi │ │ │ -0000d330: 6c65 2028 246c 203d 2024 626c 6f63 6b4c le ($l = $blockL │ │ │ -0000d340: 6f63 616c 2d3e 7265 6164 2829 290a 0909 ocal->read())... │ │ │ -0000d350: 7b0a 0909 2020 2020 7072 696e 7420 424c {... print BL │ │ │ -0000d360: 4f43 4b4d 4435 2024 6c3b 0a09 097d 0a09 OCKMD5 $l;...}.. │ │ │ -0000d370: 0924 626c 6f63 6b4c 6f63 616c 2d3e 7761 .$blockLocal->wa │ │ │ -0000d380: 6974 2829 3b0a 0909 6d79 2024 6f75 7420 it();...my $out │ │ │ -0000d390: 3d20 2462 6c6f 636b 4c6f 6361 6c2d 3e67 = $blockLocal->g │ │ │ -0000d3a0: 6574 5354 4445 5252 2829 3b0a 0909 6966 etSTDERR();...if │ │ │ -0000d3b0: 2028 4024 6f75 7429 0a09 097b 0a09 0920 (@$out)...{... │ │ │ -0000d3c0: 2020 2024 7072 4c6f 672d 3e70 7269 6e74 $prLog->print │ │ │ -0000d3d0: 2827 2d6b 696e 6427 203d 3e20 2745 272c ('-kind' => 'E', │ │ │ -0000d3e0: 0a09 0909 0920 2027 2d73 7472 2720 3d3e ..... '-str' => │ │ │ -0000d3f0: 205b 2272 6561 6469 6e67 206c 696e 6b46 ["reading linkF │ │ │ -0000d400: 696c 6520 6669 6c65 2072 6570 6f72 7473 ile file reports │ │ │ -0000d410: 2065 7272 6f72 733a 222c 0a09 0909 0909 errors:",...... │ │ │ -0000d420: 2020 2020 2040 246f 7574 5d29 3b0a 0909 @$out]);... │ │ │ -0000d430: 2020 2020 6578 6974 2031 3b0a 0909 7d0a exit 1;...}. │ │ │ -0000d440: 0909 2462 6c6f 636b 4c6f 6361 6c2d 3e63 ..$blockLocal->c │ │ │ -0000d450: 6c6f 7365 2829 3b0a 0920 2020 207d 0a09 lose();.. }.. │ │ │ -0000d460: 7d0a 0965 6c73 650a 097b 0a09 2020 2020 }..else..{.. │ │ │ -0000d470: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -0000d480: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0909 kind' => 'E',... │ │ │ -0000d490: 0920 2027 2d73 7472 2720 3d3e 205b 2269 . '-str' => ["i │ │ │ -0000d4a0: 6c6c 6567 616c 206b 6579 776f 7264 203c llegal keyword < │ │ │ -0000d4b0: 2477 6861 743e 2022 202e 0a09 0909 0920 $what> " ...... │ │ │ -0000d4c0: 2020 2020 2261 7420 6c69 6e65 2024 6c69 "at line $li │ │ │ -0000d4d0: 6e65 4e72 2069 6e20 6669 6c65 203c 2466 neNr in file <$f │ │ │ -0000d4e0: 3e3a 222c 0a09 0909 2020 2020 2020 2020 >:",.... │ │ │ -0000d4f0: 2020 2020 2022 5c74 3c24 6c3e 225d 2c0a "\t<$l>"],. │ │ │ -0000d500: 0909 0920 2027 2d65 7869 7427 203d 3e20 ... '-exit' => │ │ │ -0000d510: 3129 3b0a 097d 0a0a 2020 2020 7d0a 2020 1);..}.. }. │ │ │ -0000d520: 2020 6966 2028 2477 6974 6842 6c6f 636b if ($withBlock │ │ │ -0000d530: 6564 4669 6c65 7329 0a20 2020 207b 0a09 edFiles). {.. │ │ │ -0000d540: 636c 6f73 6528 424c 4f43 4b4d 4435 2920 close(BLOCKMD5) │ │ │ -0000d550: 6f72 0a09 2020 2020 2470 724c 6f67 2d3e or.. $prLog-> │ │ │ -0000d560: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000d570: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -0000d580: 2720 3d3e 0a09 0909 2020 5b22 6361 6e6e ' =>.... ["cann │ │ │ -0000d590: 6f74 2063 6c6f 7365 2066 696c 6520 3c24 ot close file <$ │ │ │ -0000d5a0: 6469 722f 2e6d 6435 426c 6f63 6b43 6865 dir/.md5BlockChe │ │ │ -0000d5b0: 636b 5375 6d73 3e22 5d2c 0a09 0909 2020 ckSums>"],.... │ │ │ -0000d5c0: 272d 6578 6974 2720 3d3e 2031 293b 0a20 '-exit' => 1);. │ │ │ -0000d5d0: 2020 207d 0a20 2020 2024 6c69 6e6b 4669 }. $linkFi │ │ │ -0000d5e0: 6c65 2d3e 7761 6974 2829 3b0a 2020 2020 le->wait();. │ │ │ -0000d5f0: 246f 7574 203d 2024 6c69 6e6b 4669 6c65 $out = $linkFile │ │ │ -0000d600: 2d3e 6765 7453 5444 4552 5228 293b 0a20 ->getSTDERR();. │ │ │ -0000d610: 2020 2069 6620 2840 246f 7574 290a 2020 if (@$out). │ │ │ -0000d620: 2020 7b0a 0924 7072 4c6f 672d 3e70 7269 {..$prLog->pri │ │ │ -0000d630: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -0000d640: 272c 0a09 0920 2020 2020 2027 2d73 7472 ',... '-str │ │ │ -0000d650: 2720 3d3e 205b 2272 6561 6469 6e67 206c ' => ["reading l │ │ │ -0000d660: 696e 6b46 696c 6520 6669 6c65 2072 6570 inkFile file rep │ │ │ -0000d670: 6f72 7473 2065 7272 6f72 733a 222c 0a09 orts errors:",.. │ │ │ -0000d680: 0909 0920 4024 6f75 745d 293b 0a09 6578 ... @$out]);..ex │ │ │ -0000d690: 6974 2031 3b0a 2020 2020 7d0a 2020 2020 it 1;. }. │ │ │ -0000d6a0: 246c 696e 6b46 696c 652d 3e63 6c6f 7365 $linkFile->close │ │ │ -0000d6b0: 2829 3b0a 2020 2020 2470 724c 6f67 2d3e ();. $prLog-> │ │ │ -0000d6c0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000d6d0: 2027 5327 2c0a 0909 2020 272d 7374 7227 'S',... '-str' │ │ │ -0000d6e0: 203d 3e20 5b22 6c69 6e6b 6564 2024 6e6f => ["linked $no │ │ │ -0000d6f0: 4861 7264 4c69 6e6b 7320 6669 6c65 7322 HardLinks files" │ │ │ -0000d700: 5d29 3b0a 2020 2020 2470 724c 6f67 2d3e ]);. $prLog-> │ │ │ -0000d710: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000d720: 2027 5327 2c0a 0909 2020 272d 7374 7227 'S',... '-str' │ │ │ -0000d730: 203d 3e20 5b22 636f 7069 6564 2024 6e6f => ["copied $no │ │ │ -0000d740: 436f 7069 6564 4669 6c65 7320 6669 6c65 CopiedFiles file │ │ │ -0000d750: 7322 5d29 0a09 6966 2024 6e6f 436f 7069 s"])..if $noCopi │ │ │ -0000d760: 6564 4669 6c65 733b 0a0a 2020 2020 6d79 edFiles;.. my │ │ │ -0000d770: 2024 636f 6d70 724d 6435 426c 6f63 6b43 $comprMd5BlockC │ │ │ -0000d780: 6865 636b 5375 6d73 3b0a 2020 2020 6966 heckSums;. if │ │ │ -0000d790: 2028 2477 6974 6842 6c6f 636b 6564 4669 ($withBlockedFi │ │ │ -0000d7a0: 6c65 7320 616e 6420 2d65 2022 2464 6972 les and -e "$dir │ │ │ -0000d7b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2e62 /.md5CheckSums.b │ │ │ -0000d7c0: 7a32 2229 0a20 2020 207b 0a09 2320 636f z2"). {..# co │ │ │ -0000d7d0: 6d70 7265 7373 202e 6d64 3542 6c6f 636b mpress .md5Block │ │ │ -0000d7e0: 4368 6563 6b53 756d 730a 0924 636f 6d70 CheckSums..$comp │ │ │ -0000d7f0: 724d 6435 426c 6f63 6b43 6865 636b 5375 rMd5BlockCheckSu │ │ │ -0000d800: 6d73 203d 0a09 2020 2020 666f 726b 5072 ms =.. forkPr │ │ │ -0000d810: 6f63 2d3e 6e65 7728 272d 6578 6563 2720 oc->new('-exec' │ │ │ -0000d820: 3d3e 2027 627a 6970 3227 2c0a 0909 0920 => 'bzip2',.... │ │ │ -0000d830: 2027 2d70 6172 616d 2720 3d3e 205b 2224 '-param' => ["$ │ │ │ -0000d840: 6469 722f 2e6d 6435 426c 6f63 6b43 6865 dir/.md5BlockChe │ │ │ -0000d850: 636b 5375 6d73 225d 2c0a 0909 0920 2027 ckSums"],.... ' │ │ │ -0000d860: 2d6f 7574 5261 6e64 6f6d 2720 3d3e 0a09 -outRandom' =>.. │ │ │ -0000d870: 0909 2020 272f 746d 702f 7374 6275 2d63 .. '/tmp/stbu-c │ │ │ -0000d880: 6f6d 7072 2d27 2c0a 0909 0920 2027 2d70 ompr-',.... '-p │ │ │ -0000d890: 724c 6f67 2720 3d3e 2024 7072 4c6f 6729 rLog' => $prLog) │ │ │ -0000d8a0: 3b0a 2020 2020 7d0a 0a20 2020 2023 0a20 ;. }.. #. │ │ │ -0000d8b0: 2020 2023 2073 6574 2066 696c 6520 7065 # set file pe │ │ │ -0000d8c0: 726d 6973 7369 6f6e 730a 2020 2020 230a rmissions. #. │ │ │ -0000d8d0: 2020 2020 6d79 2024 7072 6573 6572 7665 my $preserve │ │ │ -0000d8e0: 5065 726d 7320 3d0a 0924 7263 7366 2d3e Perms =..$rcsf-> │ │ │ -0000d8f0: 6765 7449 6e66 6f57 6974 6850 6172 2827 getInfoWithPar(' │ │ │ -0000d900: 7072 6573 6572 7665 5065 726d 7327 2920 preservePerms') │ │ │ -0000d910: 6571 2027 6e6f 2720 3f20 3020 3a20 313b eq 'no' ? 0 : 1; │ │ │ -0000d920: 0a20 2020 2024 7072 203d 2024 7072 6f67 . $pr = $prog │ │ │ -0000d930: 7265 7373 5265 706f 7274 202a 2032 3030 ressReport * 200 │ │ │ -0000d940: 303b 0a20 2020 2069 6620 2824 7072 6573 0;. if ($pres │ │ │ -0000d950: 6572 7665 5065 726d 7329 0a20 2020 207b ervePerms). { │ │ │ -0000d960: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -0000d970: 272d 6b69 6e64 2720 3d3e 2027 4927 2c0a '-kind' => 'I',. │ │ │ -0000d980: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0000d990: 3e20 5b22 7068 6173 6520 333a 2073 6574 > ["phase 3: set │ │ │ -0000d9a0: 7469 6e67 2066 696c 6520 7065 726d 6973 ting file permis │ │ │ -0000d9b0: 7369 6f6e 7322 5d29 3b0a 096d 7920 2463 sions"]);..my $c │ │ │ -0000d9c0: 6f6d 7072 506f 7374 6669 7820 3d20 2472 omprPostfix = $r │ │ │ -0000d9d0: 6373 662d 3e67 6574 496e 666f 5769 7468 csf->getInfoWith │ │ │ -0000d9e0: 5061 7228 2770 6f73 7466 6978 2729 3b0a Par('postfix');. │ │ │ -0000d9f0: 0a09 6d79 2024 6e6f 4669 6c65 7320 3d20 ..my $noFiles = │ │ │ -0000da00: 303b 0a09 6d79 2024 7263 7366 203d 2072 0;..my $rcsf = r │ │ │ -0000da10: 6561 6443 6865 636b 5375 6d46 696c 652d eadCheckSumFile- │ │ │ -0000da20: 3e6e 6577 2827 2d63 6865 636b 5375 6d46 >new('-checkSumF │ │ │ -0000da30: 696c 6527 203d 3e20 2224 6469 722f 2e6d ile' => "$dir/.m │ │ │ -0000da40: 6435 4368 6563 6b53 756d 7322 2c0a 0909 d5CheckSums",... │ │ │ -0000da50: 0909 0920 272d 7072 4c6f 6727 203d 3e20 ... '-prLog' => │ │ │ -0000da60: 2470 724c 6f67 293b 0a09 6d79 2028 246d $prLog);..my ($m │ │ │ -0000da70: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $ │ │ │ -0000da80: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode │ │ │ -0000da90: 4261 636b 7570 2c20 2463 7469 6d65 2c20 Backup, $ctime, │ │ │ -0000daa0: 246d 7469 6d65 2c20 2461 7469 6d65 2c0a $mtime, $atime,. │ │ │ -0000dab0: 0920 2020 2024 7369 7a65 2c20 2475 6964 . $size, $uid │ │ │ -0000dac0: 2c20 2467 6964 2c20 246d 6f64 652c 2024 , $gid, $mode, $ │ │ │ -0000dad0: 6629 3b0a 0977 6869 6c65 2028 2828 246d f);..while ((($m │ │ │ -0000dae0: 6435 7375 6d2c 2024 636f 6d70 722c 2024 d5sum, $compr, $ │ │ │ -0000daf0: 6465 7649 6e6f 6465 2c20 2469 6e6f 6465 devInode, $inode │ │ │ -0000db00: 4261 636b 7570 2c20 2463 7469 6d65 2c20 Backup, $ctime, │ │ │ -0000db10: 246d 7469 6d65 2c0a 0909 2024 6174 696d $mtime,... $atim │ │ │ -0000db20: 652c 2024 7369 7a65 2c20 2475 6964 2c20 e, $size, $uid, │ │ │ -0000db30: 2467 6964 2c20 246d 6f64 652c 2024 6629 $gid, $mode, $f) │ │ │ -0000db40: 203d 2024 7263 7366 2d3e 6e65 7874 4c69 = $rcsf->nextLi │ │ │ -0000db50: 6e65 2829 2920 3e20 3029 0a09 7b0a 0920 ne()) > 0)..{.. │ │ │ -0000db60: 2020 206d 7920 2466 696c 6520 3d20 2224 my $file = "$ │ │ │ -0000db70: 6469 722f 2466 223b 0a09 2020 2020 6e65 dir/$f";.. ne │ │ │ -0000db80: 7874 2069 6620 2824 6d64 3573 756d 2065 xt if ($md5sum e │ │ │ -0000db90: 7120 2764 6972 2729 3b0a 0a09 2020 2020 q 'dir');... │ │ │ -0000dba0: 2466 696c 6520 2e3d 2024 636f 6d70 7250 $file .= $comprP │ │ │ -0000dbb0: 6f73 7466 6978 2069 6620 2463 6f6d 7072 ostfix if $compr │ │ │ -0000dbc0: 2065 7120 2763 273b 0a0a 0920 2020 2069 eq 'c';... i │ │ │ -0000dbd0: 6620 286e 6f74 202d 6c20 2466 696c 6520 f (not -l $file │ │ │ -0000dbe0: 616e 6420 6e6f 7420 2d65 2024 6669 6c65 and not -e $file │ │ │ -0000dbf0: 290a 0920 2020 207b 0a09 0924 7072 4c6f ).. {...$prLo │ │ │ -0000dc00: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000dc10: 203d 3e20 2745 272c 0a09 0909 2020 2020 => 'E',.... │ │ │ -0000dc20: 2020 272d 7374 7227 203d 3e20 5b22 6361 '-str' => ["ca │ │ │ -0000dc30: 6e6e 6f74 2061 6363 6573 7320 3c24 6669 nnot access <$fi │ │ │ -0000dc40: 6c65 3e22 5d29 3b0a 0909 246d 6973 734c le>"]);...$missL │ │ │ -0000dc50: 696e 6b73 2d3e 7772 6974 6545 6e74 7279 inks->writeEntry │ │ │ -0000dc60: 2827 2d63 6865 636b 7375 6d27 203d 3e20 ('-checksum' => │ │ │ -0000dc70: 246d 6435 7375 6d2c 0a09 0909 0920 2020 $md5sum,..... │ │ │ -0000dc80: 2020 2020 272d 6669 6c65 2720 3d3e 2024 '-file' => $ │ │ │ -0000dc90: 6629 3b0a 0909 6e65 7874 3b0a 0920 2020 f);...next;.. │ │ │ -0000dca0: 207d 0a09 2020 2020 246e 6f46 696c 6573 }.. $noFiles │ │ │ -0000dcb0: 2b2b 3b0a 0920 2020 2024 7072 4c6f 672d ++;.. $prLog- │ │ │ -0000dcc0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -0000dcd0: 3e20 2753 272c 0a09 0909 2020 272d 7374 > 'S',.... '-st │ │ │ -0000dce0: 7227 203d 3e20 5b22 7365 7420 7065 726d r' => ["set perm │ │ │ -0000dcf0: 6973 7369 6f6e 7320 6f66 2024 6e6f 4669 issions of $noFi │ │ │ -0000dd00: 6c65 7320 6669 6c65 7322 5d29 0a09 0909 les files"]).... │ │ │ -0000dd10: 6966 2028 2470 7220 616e 6420 246e 6f46 if ($pr and $noF │ │ │ -0000dd20: 696c 6573 2025 2024 7072 203d 3d20 3029 iles % $pr == 0) │ │ │ -0000dd30: 3b0a 0a09 2020 2020 6e65 7874 2069 6620 ;... next if │ │ │ -0000dd40: 246d 6435 7375 6d20 6571 2027 7379 6d6c $md5sum eq 'syml │ │ │ -0000dd50: 696e 6b27 3b0a 0a09 2020 2020 7574 696d ink';... utim │ │ │ -0000dd60: 6520 2461 7469 6d65 2c20 246d 7469 6d65 e $atime, $mtime │ │ │ -0000dd70: 2c20 2466 696c 653b 0a09 2020 2020 6368 , $file;.. ch │ │ │ -0000dd80: 6f77 6e20 2475 6964 2c20 2467 6964 2c20 own $uid, $gid, │ │ │ -0000dd90: 2466 696c 653b 0a09 2020 2020 6966 2028 $file;.. if ( │ │ │ -0000dda0: 2463 6f6d 7072 2065 7120 2762 2729 2020 $compr eq 'b') │ │ │ -0000ddb0: 2020 2020 2020 2023 2062 6c6f 636b 2066 # block f │ │ │ -0000ddc0: 696c 650a 0920 2020 207b 0a09 096c 6f63 ile.. {...loc │ │ │ -0000ddd0: 616c 202a 4246 4449 523b 0a09 0969 6620 al *BFDIR;...if │ │ │ -0000dde0: 286f 7065 6e64 6972 2842 4644 4952 2c20 (opendir(BFDIR, │ │ │ -0000ddf0: 2466 696c 6529 290a 0909 7b0a 0909 2020 $file))...{... │ │ │ -0000de00: 2020 6d79 2024 6266 656e 7472 793b 0a09 my $bfentry;.. │ │ │ -0000de10: 0920 2020 2077 6869 6c65 2028 2462 6665 . while ($bfe │ │ │ -0000de20: 6e74 7279 203d 2072 6561 6464 6972 2042 ntry = readdir B │ │ │ -0000de30: 4644 4952 290a 0909 2020 2020 7b0a 0909 FDIR)... {... │ │ │ -0000de40: 0969 6620 2824 6266 656e 7472 7920 3d7e .if ($bfentry =~ │ │ │ -0000de50: 202f 5c41 5c2e 6d64 3542 6c6f 636b 4368 /\A\.md5BlockCh │ │ │ -0000de60: 6563 6b53 756d 732f 290a 0909 097b 0a09 eckSums/)....{.. │ │ │ -0000de70: 0909 2020 2020 6368 6d6f 6420 3036 3434 .. chmod 0644 │ │ │ -0000de80: 2c20 2224 6669 6c65 2f24 6266 656e 7472 , "$file/$bfentr │ │ │ -0000de90: 7922 3b0a 0909 097d 0a09 0909 656c 7365 y";....}....else │ │ │ -0000dea0: 0a09 0909 7b0a 0909 0920 2020 2075 7469 ....{.... uti │ │ │ -0000deb0: 6d65 2024 6174 696d 652c 2024 6d74 696d me $atime, $mtim │ │ │ -0000dec0: 652c 2022 2466 696c 652f 2462 6665 6e74 e, "$file/$bfent │ │ │ -0000ded0: 7279 223b 0a09 0909 2020 2020 6368 6f77 ry";.... chow │ │ │ -0000dee0: 6e20 2475 6964 2c20 2467 6964 2c20 2224 n $uid, $gid, "$ │ │ │ -0000def0: 6669 6c65 2f24 6266 656e 7472 7922 3b0a file/$bfentry";. │ │ │ -0000df00: 0909 0920 2020 2063 686d 6f64 2024 6d6f ... chmod $mo │ │ │ -0000df10: 6465 2c20 2224 6669 6c65 2f24 6266 656e de, "$file/$bfen │ │ │ -0000df20: 7472 7922 3b0a 0909 097d 0a09 0909 246e try";....}....$n │ │ │ -0000df30: 6f46 696c 6573 2b2b 3b0a 0909 2020 2020 oFiles++;... │ │ │ -0000df40: 7d0a 0909 2020 2020 636c 6f73 6564 6972 }... closedir │ │ │ -0000df50: 2842 4644 4952 293b 0a09 097d 0a09 0965 (BFDIR);...}...e │ │ │ -0000df60: 6c73 650a 0909 7b0a 0909 2020 2020 2470 lse...{... $p │ │ │ -0000df70: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0000df80: 6e64 2720 3d3e 2027 4527 2c0a 0909 0909 nd' => 'E',..... │ │ │ -0000df90: 2020 272d 7374 7227 203d 3e0a 0909 0909 '-str' =>..... │ │ │ -0000dfa0: 2020 5b22 6361 6e6e 6f74 206f 7065 6e64 ["cannot opend │ │ │ -0000dfb0: 6972 203c 2466 696c 653e 2074 6f20 7365 ir <$file> to se │ │ │ -0000dfc0: 7420 7065 726d 6973 7369 6f6e 7322 5d2c t permissions"], │ │ │ -0000dfd0: 0a09 0909 0920 2027 2d61 6464 2720 3d3e ..... '-add' => │ │ │ -0000dfe0: 205b 5f5f 4649 4c45 5f5f 2c20 5f5f 4c49 [__FILE__, __LI │ │ │ -0000dff0: 4e45 5f5f 5d29 3b0a 0909 7d0a 0a09 0924 NE__]);...}....$ │ │ │ -0000e000: 6d6f 6465 2026 3d20 3037 3737 3b20 2020 mode &= 0777; │ │ │ -0000e010: 2023 2073 7472 6970 2073 7065 6369 616c # strip special │ │ │ -0000e020: 2070 6572 6d69 7373 696f 6e73 0a09 0924 permissions...$ │ │ │ -0000e030: 6d6f 6465 207c 3d20 3031 3131 3b20 2020 mode |= 0111; │ │ │ -0000e040: 2023 2061 6464 2064 6972 6563 746f 7279 # add directory │ │ │ -0000e050: 2070 6572 6d69 7373 696f 6e73 0a09 2020 permissions.. │ │ │ -0000e060: 2020 7d0a 0920 2020 2063 686d 6f64 2024 }.. chmod $ │ │ │ -0000e070: 6d6f 6465 2c20 2466 696c 653b 0a09 7d0a mode, $file;..}. │ │ │ -0000e080: 0a09 2470 724c 6f67 2d3e 7072 696e 7428 ..$prLog->print( │ │ │ -0000e090: 272d 6b69 6e64 2720 3d3e 2027 5327 2c0a '-kind' => 'S',. │ │ │ -0000e0a0: 0909 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -0000e0b0: 3e20 5b22 7365 7420 7065 726d 6973 7369 > ["set permissi │ │ │ -0000e0c0: 6f6e 7320 666f 7220 246e 6f46 696c 6573 ons for $noFiles │ │ │ -0000e0d0: 2066 696c 6573 225d 293b 0a20 2020 207d files"]);. } │ │ │ -0000e0e0: 0a20 2020 2065 6c73 650a 2020 2020 7b0a . else. {. │ │ │ -0000e0f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0000e100: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -0000e110: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -0000e120: 205b 2270 6861 7365 2033 3a20 6669 6c65 ["phase 3: file │ │ │ -0000e130: 2070 6572 6d69 7373 696f 6e73 206e 6f74 permissions not │ │ │ -0000e140: 2073 6574 2062 6563 6175 7365 2022 202e set because " . │ │ │ -0000e150: 0a09 0909 0920 2270 7265 7365 7276 6550 ..... "preserveP │ │ │ -0000e160: 6572 6d73 206e 6f74 2073 6574 2069 6e20 erms not set in │ │ │ -0000e170: 7374 6f72 6542 6163 6b75 702e 706c 225d storeBackup.pl"] │ │ │ -0000e180: 293b 0a20 2020 207d 0a0a 2020 2020 6966 );. }.. if │ │ │ -0000e190: 2028 2477 6974 6842 6c6f 636b 6564 4669 ($withBlockedFi │ │ │ -0000e1a0: 6c65 7320 616e 6420 2d65 2022 2464 6972 les and -e "$dir │ │ │ -0000e1b0: 2f2e 6d64 3543 6865 636b 5375 6d73 2e62 /.md5CheckSums.b │ │ │ -0000e1c0: 7a32 2229 0a20 2020 207b 0a09 2320 636f z2"). {..# co │ │ │ -0000e1d0: 6d70 7265 7373 202e 6d64 3542 6c6f 636b mpress .md5Block │ │ │ -0000e1e0: 4368 6563 6b53 756d 730a 0924 636f 6d70 CheckSums..$comp │ │ │ -0000e1f0: 724d 6435 426c 6f63 6b43 6865 636b 5375 rMd5BlockCheckSu │ │ │ -0000e200: 6d73 2d3e 7761 6974 2829 3b0a 096d 7920 ms->wait();..my │ │ │ -0000e210: 246f 7574 203d 2024 636f 6d70 724d 6435 $out = $comprMd5 │ │ │ -0000e220: 426c 6f63 6b43 6865 636b 5375 6d73 2d3e BlockCheckSums-> │ │ │ -0000e230: 6765 7453 5444 4f55 5428 293b 0a09 2470 getSTDOUT();..$p │ │ │ -0000e240: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -0000e250: 6e64 2720 3d3e 2027 5727 2c0a 0909 2020 nd' => 'W',... │ │ │ -0000e260: 2020 2020 272d 7374 7227 203d 3e20 5b22 '-str' => [" │ │ │ -0000e270: 5354 4445 5252 206f 6620 3c75 6e61 6d65 STDERR of :", @$out]).. │ │ │ -0000e290: 2020 6966 2028 4024 6f75 7420 3e20 3029 if (@$out > 0) │ │ │ -0000e2a0: 3b0a 0924 6f75 7420 3d20 2463 6f6d 7072 ;..$out = $compr │ │ │ -0000e2b0: 4d64 3542 6c6f 636b 4368 6563 6b53 756d Md5BlockCheckSum │ │ │ -0000e2c0: 732d 3e67 6574 5354 4445 5252 2829 3b0a s->getSTDERR();. │ │ │ -0000e2d0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -0000e2e0: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -0000e2f0: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -0000e300: 205b 2253 5444 4552 5220 6f66 203c 756e ["STDERR of :", @$out]). │ │ │ -0000e320: 0920 2020 2069 6620 2840 246f 7574 203e . if (@$out > │ │ │ -0000e330: 2030 293b 0a20 2020 207d 0a0a 2020 2020 0);. }.. │ │ │ -0000e340: 230a 2020 2020 2320 7365 7420 6469 7265 #. # set dire │ │ │ -0000e350: 6374 6f72 7920 7065 726d 6973 7369 6f6e ctory permission │ │ │ -0000e360: 730a 2020 2020 230a 2020 2020 6966 2028 s. #. if ( │ │ │ -0000e370: 2470 7265 7365 7276 6550 6572 6d73 290a $preservePerms). │ │ │ -0000e380: 2020 2020 7b0a 0924 7072 4c6f 672d 3e70 {..$prLog->p │ │ │ -0000e390: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -0000e3a0: 2749 272c 0a09 0920 2020 2020 2027 2d73 'I',... '-s │ │ │ -0000e3b0: 7472 2720 3d3e 205b 2270 6861 7365 2034 tr' => ["phase 4 │ │ │ -0000e3c0: 3a20 7365 7474 696e 6720 6469 7265 6374 : setting direct │ │ │ -0000e3d0: 6f72 7920 7065 726d 6973 7369 6f6e 7322 ory permissions" │ │ │ -0000e3e0: 5d29 3b0a 2309 6d79 2024 636f 6d70 7250 ]);.#.my $comprP │ │ │ -0000e3f0: 6f73 7466 6978 203d 2028 2424 6d65 7461 ostfix = ($$meta │ │ │ -0000e400: 7b27 706f 7374 6669 7827 7d29 2d3e 5b30 {'postfix'})->[0 │ │ │ -0000e410: 5d3b 0a09 6d79 2024 636f 6d70 7250 6f73 ];..my $comprPos │ │ │ -0000e420: 7466 6978 203d 2024 7263 7366 2d3e 6765 tfix = $rcsf->ge │ │ │ -0000e430: 7449 6e66 6f57 6974 6850 6172 2827 706f tInfoWithPar('po │ │ │ -0000e440: 7374 6669 7827 293b 0a0a 096d 7920 246e stfix');...my $n │ │ │ -0000e450: 6f44 6972 7320 3d20 303b 0a09 6d79 2024 oDirs = 0;..my $ │ │ │ -0000e460: 7263 7366 203d 2072 6561 6443 6865 636b rcsf = readCheck │ │ │ -0000e470: 5375 6d46 696c 652d 3e6e 6577 2827 2d63 SumFile->new('-c │ │ │ -0000e480: 6865 636b 5375 6d46 696c 6527 203d 3e20 heckSumFile' => │ │ │ -0000e490: 2224 6469 722f 2e6d 6435 4368 6563 6b53 "$dir/.md5CheckS │ │ │ -0000e4a0: 756d 7322 2c0a 0909 0909 0920 272d 7072 ums",...... '-pr │ │ │ -0000e4b0: 4c6f 6727 203d 3e20 2470 724c 6f67 293b Log' => $prLog); │ │ │ -0000e4c0: 0a09 6d79 2028 246d 6435 7375 6d2c 2024 ..my ($md5sum, $ │ │ │ -0000e4d0: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode │ │ │ -0000e4e0: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, │ │ │ -0000e4f0: 2463 7469 6d65 2c20 246d 7469 6d65 2c20 $ctime, $mtime, │ │ │ -0000e500: 2461 7469 6d65 2c0a 0920 2020 2024 7369 $atime,.. $si │ │ │ -0000e510: 7a65 2c20 2475 6964 2c20 2467 6964 2c20 ze, $uid, $gid, │ │ │ -0000e520: 246d 6f64 652c 2024 6629 3b0a 0977 6869 $mode, $f);..whi │ │ │ -0000e530: 6c65 2028 2828 246d 6435 7375 6d2c 2024 le ((($md5sum, $ │ │ │ -0000e540: 636f 6d70 722c 2024 6465 7649 6e6f 6465 compr, $devInode │ │ │ -0000e550: 2c20 2469 6e6f 6465 4261 636b 7570 2c20 , $inodeBackup, │ │ │ -0000e560: 2463 7469 6d65 2c20 246d 7469 6d65 2c0a $ctime, $mtime,. │ │ │ -0000e570: 0909 2024 6174 696d 652c 2024 7369 7a65 .. $atime, $size │ │ │ -0000e580: 2c20 2475 6964 2c20 2467 6964 2c20 246d , $uid, $gid, $m │ │ │ -0000e590: 6f64 652c 2024 6629 203d 2024 7263 7366 ode, $f) = $rcsf │ │ │ -0000e5a0: 2d3e 6e65 7874 4c69 6e65 2829 2920 3e20 ->nextLine()) > │ │ │ -0000e5b0: 3029 0a09 7b0a 0920 2020 206d 7920 2466 0)..{.. my $f │ │ │ -0000e5c0: 696c 6520 3d20 2224 6469 722f 2466 223b ile = "$dir/$f"; │ │ │ -0000e5d0: 0a09 2020 2020 6966 2028 246d 6435 7375 .. if ($md5su │ │ │ -0000e5e0: 6d20 6571 2027 6469 7227 290a 0920 2020 m eq 'dir').. │ │ │ -0000e5f0: 207b 0a09 0975 6e6c 6573 7320 282d 6520 {...unless (-e │ │ │ -0000e600: 2466 696c 6529 0a09 097b 0a09 0920 2020 $file)...{... │ │ │ -0000e610: 2024 7072 4c6f 672d 3e70 7269 6e74 2827 $prLog->print(' │ │ │ -0000e620: 2d6b 696e 6427 203d 3e20 2745 272c 0a09 -kind' => 'E',.. │ │ │ -0000e630: 0909 0920 2027 2d73 7472 2720 3d3e 205b ... '-str' => [ │ │ │ -0000e640: 2263 616e 6e6f 7420 6163 6365 7373 203c "cannot access < │ │ │ -0000e650: 2466 696c 653e 225d 293b 0a09 0920 2020 $file>"]);... │ │ │ -0000e660: 206e 6578 743b 0a09 097d 0a09 0963 686f next;...}...cho │ │ │ -0000e670: 776e 2024 7569 642c 2024 6769 642c 2024 wn $uid, $gid, $ │ │ │ -0000e680: 6669 6c65 3b0a 0909 6368 6d6f 6420 246d file;...chmod $m │ │ │ -0000e690: 6f64 652c 2024 6669 6c65 3b0a 0909 7574 ode, $file;...ut │ │ │ -0000e6a0: 696d 6520 2461 7469 6d65 2c20 246d 7469 ime $atime, $mti │ │ │ -0000e6b0: 6d65 2c20 2466 696c 653b 0a0a 0909 246e me, $file;....$n │ │ │ -0000e6c0: 6f44 6972 732b 2b3b 0a09 0924 7072 4c6f oDirs++;...$prLo │ │ │ -0000e6d0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -0000e6e0: 203d 3e20 2753 272c 0a09 0909 2020 272d => 'S',.... '- │ │ │ -0000e6f0: 7374 7227 203d 3e20 5b22 7365 7420 7065 str' => ["set pe │ │ │ -0000e700: 726d 6973 7369 6f6e 7320 6f66 2024 6e6f rmissions of $no │ │ │ -0000e710: 4469 7273 2064 6972 6563 746f 7269 6573 Dirs directories │ │ │ -0000e720: 225d 290a 0909 0969 6620 2824 7072 2061 "])....if ($pr a │ │ │ -0000e730: 6e64 2024 6e6f 4469 7273 2025 2024 7072 nd $noDirs % $pr │ │ │ -0000e740: 203d 3d20 3029 3b0a 0920 2020 207d 0a09 == 0);.. }.. │ │ │ -0000e750: 7d0a 0a09 2470 724c 6f67 2d3e 7072 696e }...$prLog->prin │ │ │ -0000e760: 7428 272d 6b69 6e64 2720 3d3e 2027 5327 t('-kind' => 'S' │ │ │ -0000e770: 2c0a 0909 2020 2020 2020 272d 7374 7227 ,... '-str' │ │ │ -0000e780: 203d 3e20 5b22 7365 7420 7065 726d 6973 => ["set permis │ │ │ -0000e790: 7369 6f6e 7320 666f 7220 246e 6f44 6972 sions for $noDir │ │ │ -0000e7a0: 7320 6469 7265 6374 6f72 6965 7322 5d29 s directories"]) │ │ │ -0000e7b0: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -0000e7c0: 0a20 2020 207b 0a09 2470 724c 6f67 2d3e . {..$prLog-> │ │ │ -0000e7d0: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -0000e7e0: 2027 4927 2c0a 0909 2020 2020 2020 272d 'I',... '- │ │ │ -0000e7f0: 7374 7227 203d 3e20 5b22 7068 6173 6520 str' => ["phase │ │ │ -0000e800: 343a 2064 6972 6563 746f 7279 2070 6572 4: directory per │ │ │ -0000e810: 6d69 7373 696f 6e73 206e 6f74 2073 6574 missions not set │ │ │ -0000e820: 2062 6563 6175 7365 2022 202e 0a09 0909 because " ..... │ │ │ -0000e830: 0920 2270 7265 7365 7276 6550 6572 6d73 . "preservePerms │ │ │ -0000e840: 206e 6f74 2073 6574 2069 6e20 7374 6f72 not set in stor │ │ │ -0000e850: 6542 6163 6b75 702e 706c 225d 293b 0a20 eBackup.pl"]);. │ │ │ -0000e860: 2020 207d 0a0a 7d0a }..}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7055 7064 6174 6542 6163 6b75 700a pUpdateBackup. │ │ ├── ./usr/bin/storeBackupVersions │ │ │ @@ -1,1082 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#...$ │ │ │ -00000300: 6d61 696e 3a3a 5354 4f52 4542 4143 4b55 main::STOREBACKU │ │ │ -00000310: 5056 4552 5349 4f4e 203d 2075 6e64 6566 PVERSION = undef │ │ │ -00000320: 3b0a 0a75 7365 2046 636e 746c 2071 7728 ;..use Fcntl qw( │ │ │ -00000330: 4f5f 5244 5752 204f 5f43 5245 4154 293b O_RDWR O_CREAT); │ │ │ -00000340: 0a75 7365 2046 696c 653a 3a43 6f70 793b .use File::Copy; │ │ │ -00000350: 0a75 7365 2050 4f53 4958 3b0a 7573 6520 .use POSIX;.use │ │ │ -00000360: 4469 6765 7374 3a3a 4d44 3520 7177 286d Digest::MD5 qw(m │ │ │ -00000370: 6435 5f68 6578 293b 0a0a 7573 6520 7374 d5_hex);..use st │ │ │ -00000380: 7269 6374 3b0a 0a0a 7375 6220 6c69 6250 rict;...sub libP │ │ │ -00000390: 6174 680a 7b0a 2020 2020 6d79 2024 6669 ath.{. my $fi │ │ │ -000003a0: 6c65 203d 2073 6869 6674 3b0a 0a20 2020 le = shift;.. │ │ │ -000003b0: 206d 7920 2464 6972 3b0a 0a20 2020 2023 my $dir;.. # │ │ │ -000003c0: 2046 616c 6c73 2044 6174 6569 2073 656c Falls Datei sel │ │ │ -000003d0: 6273 7420 6569 6e20 7379 6d6c 696e 6b20 bst ein symlink │ │ │ -000003e0: 6973 742c 2073 6f6c 616e 6765 2066 6f6c ist, solange fol │ │ │ -000003f0: 6765 6e2c 2062 6973 2061 7566 6765 6cf6 gen, bis aufgel. │ │ │ -00000400: 7374 0a20 2020 2069 6620 282d 6620 2466 st. if (-f $f │ │ │ -00000410: 696c 6529 0a20 2020 207b 0a09 7768 696c ile). {..whil │ │ │ -00000420: 6520 282d 6c20 2466 696c 6529 0a09 7b0a e (-l $file)..{. │ │ │ -00000430: 0920 2020 206d 7920 246c 696e 6b20 3d20 . my $link = │ │ │ -00000440: 7265 6164 6c69 6e6b 2824 6669 6c65 293b readlink($file); │ │ │ -00000450: 0a0a 0920 2020 2069 6620 2873 7562 7374 ... if (subst │ │ │ -00000460: 7228 246c 696e 6b2c 2030 2c20 3129 206e r($link, 0, 1) n │ │ │ -00000470: 6520 222f 2229 0a09 2020 2020 7b0a 0909 e "/").. {... │ │ │ -00000480: 2466 696c 6520 3d7e 2073 2f5b 5e5c 2f5d $file =~ s/[^\/] │ │ │ -00000490: 2b24 2f24 6c69 6e6b 2f3b 0a09 2020 2020 +$/$link/;.. │ │ │ -000004a0: 7d0a 0920 2020 2065 6c73 650a 0920 2020 }.. else.. │ │ │ -000004b0: 207b 0a09 0924 6669 6c65 203d 2024 6c69 {...$file = $li │ │ │ -000004c0: 6e6b 3b0a 0920 2020 207d 0a09 7d0a 0a09 nk;.. }..}... │ │ │ -000004d0: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = │ │ │ -000004e0: 2673 706c 6974 4669 6c65 4469 7228 2466 &splitFileDir($f │ │ │ -000004f0: 696c 6529 3b0a 0924 6669 6c65 203d 2022 ile);..$file = " │ │ │ -00000500: 2f24 6669 6c65 223b 0a20 2020 207d 0a20 /$file";. }. │ │ │ -00000510: 2020 2065 6c73 650a 2020 2020 7b0a 0970 else. {..p │ │ │ -00000520: 7269 6e74 2053 5444 4552 5220 223c 2466 rint STDERR "<$f │ │ │ -00000530: 696c 653e 2064 6f65 7320 6e6f 7420 6578 ile> does not ex │ │ │ -00000540: 6973 7421 5c6e 223b 0a09 6578 6974 2031 ist!\n";..exit 1 │ │ │ -00000550: 3b0a 2020 2020 7d0a 0a20 2020 2024 6469 ;. }.. $di │ │ │ -00000560: 7220 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 r .= "/../lib"; │ │ │ -00000570: 2020 2020 2020 2020 2020 2320 5066 6164 # Pfad │ │ │ -00000580: 207a 7520 6465 6e20 4269 626c 696f 7468 zu den Biblioth │ │ │ -00000590: 656b 656e 0a20 2020 206d 7920 246f 6c64 eken. my $old │ │ │ -000005a0: 4469 7220 3d20 602f 6269 6e2f 7077 6460 Dir = `/bin/pwd` │ │ │ -000005b0: 3b0a 2020 2020 6368 6f6d 7020 246f 6c64 ;. chomp $old │ │ │ -000005c0: 4469 723b 0a20 2020 2069 6620 2863 6864 Dir;. if (chd │ │ │ -000005d0: 6972 2024 6469 7229 0a20 2020 207b 0a09 ir $dir). {.. │ │ │ -000005e0: 6d79 2024 6162 7344 6972 203d 2060 2f62 my $absDir = `/b │ │ │ -000005f0: 696e 2f70 7764 603b 0a09 6368 6f70 2024 in/pwd`;..chop $ │ │ │ -00000600: 6162 7344 6972 3b0a 0963 6864 6972 2024 absDir;..chdir $ │ │ │ -00000610: 6f6c 6444 6972 3b0a 0a09 7265 7475 726e oldDir;...return │ │ │ -00000620: 2028 2673 706c 6974 4669 6c65 4469 7228 (&splitFileDir( │ │ │ -00000630: 2224 6162 7344 6972 2466 696c 6522 2929 "$absDir$file")) │ │ │ -00000640: 3b0a 2020 2020 7d0a 2020 2020 656c 7365 ;. }. else │ │ │ -00000650: 0a20 2020 207b 0a09 7072 696e 7420 5354 . {..print ST │ │ │ -00000660: 4445 5252 2022 3c24 6469 723e 2064 6f65 DERR "<$dir> doe │ │ │ -00000670: 7320 6e6f 7420 6578 6973 742c 2065 7869 s not exist, exi │ │ │ -00000680: 7469 6e67 5c6e 223b 0a20 2020 207d 0a7d ting\n";. }.} │ │ │ -00000690: 0a73 7562 2073 706c 6974 4669 6c65 4469 .sub splitFileDi │ │ │ -000006a0: 720a 7b0a 2020 2020 6d79 2024 6e61 6d65 r.{. my $name │ │ │ -000006b0: 203d 2073 6869 6674 3b0a 0a20 2020 2072 = shift;.. r │ │ │ -000006c0: 6574 7572 6e20 2827 2e27 2c20 246e 616d eturn ('.', $nam │ │ │ -000006d0: 6529 2075 6e6c 6573 7320 2824 6e61 6d65 e) unless ($name │ │ │ -000006e0: 203d 7e2f 5c2f 2f29 3b20 2020 2023 206e =~/\//); # n │ │ │ -000006f0: 7572 2065 696e 6661 6368 6572 2044 6174 ur einfacher Dat │ │ │ -00000700: 6569 6e61 6d65 0a0a 2020 2020 6d79 2028 einame.. my ( │ │ │ -00000710: 2464 6972 2c20 2466 696c 6529 203d 2024 $dir, $file) = $ │ │ │ -00000720: 6e61 6d65 203d 7e20 2f5e 282e 2a29 5c2f name =~ /^(.*)\/ │ │ │ -00000730: 282e 2a29 242f 733b 0a20 2020 2024 6469 (.*)$/s;. $di │ │ │ -00000740: 7220 3d20 272f 2720 6966 2028 2464 6972 r = '/' if ($dir │ │ │ -00000750: 2065 7120 2727 293b 2020 2020 2020 2020 eq ''); │ │ │ -00000760: 2020 2020 2020 2020 2020 2023 2067 696c # gil │ │ │ -00000770: 742c 2066 616c 6c73 207a 2e42 2e20 2f66 t, falls z.B. /f │ │ │ -00000780: 696c 656e 616d 650a 2020 2020 7265 7475 ilename. retu │ │ │ -00000790: 726e 2028 2464 6972 2c20 2466 696c 6529 rn ($dir, $file) │ │ │ -000007a0: 3b0a 7d0a 6d79 2028 2472 6571 2c20 2470 ;.}.my ($req, $p │ │ │ -000007b0: 726f 6729 203d 2026 6c69 6250 6174 6828 rog) = &libPath( │ │ │ -000007c0: 2430 293b 0a75 6e73 6869 6674 2040 494e $0);.unshift @IN │ │ │ -000007d0: 432c 2022 2472 6571 223b 0a0a 7265 7175 C, "$req";..requ │ │ │ -000007e0: 6972 6520 2763 6865 636b 5061 7261 6d32 ire 'checkParam2 │ │ │ -000007f0: 2e70 6c27 3b0a 7265 7175 6972 6520 2763 .pl';.require 'c │ │ │ -00000800: 6865 636b 4f62 6a50 6172 2e70 6c27 3b0a heckObjPar.pl';. │ │ │ -00000810: 7265 7175 6972 6520 2770 724c 6f67 2e70 require 'prLog.p │ │ │ -00000820: 6c27 3b0a 7265 7175 6972 6520 2776 6572 l';.require 'ver │ │ │ -00000830: 7369 6f6e 2e70 6c27 3b0a 7265 7175 6972 sion.pl';.requir │ │ │ -00000840: 6520 2766 696c 6544 6972 2e70 6c27 3b0a e 'fileDir.pl';. │ │ │ -00000850: 7265 7175 6972 6520 2766 6f72 6b50 726f require 'forkPro │ │ │ -00000860: 632e 706c 273b 0a72 6571 7569 7265 2027 c.pl';.require ' │ │ │ -00000870: 6875 6d61 6e52 6561 642e 706c 273b 0a72 humanRead.pl';.r │ │ │ -00000880: 6571 7569 7265 2027 6461 7465 546f 6f6c equire 'dateTool │ │ │ -00000890: 732e 706c 273b 0a72 6571 7569 7265 2027 s.pl';.require ' │ │ │ -000008a0: 7374 6f72 6542 6163 6b75 704c 6962 2e70 storeBackupLib.p │ │ │ -000008b0: 6c27 3b0a 0a6d 7920 2463 6865 636b 5375 l';..my $checkSu │ │ │ -000008c0: 6d46 696c 6520 3d20 272e 6d64 3543 6865 mFile = '.md5Che │ │ │ -000008d0: 636b 5375 6d73 273b 0a0a 3d68 6561 6431 ckSums';..=head1 │ │ │ -000008e0: 204e 414d 450a 0a73 746f 7265 4261 636b NAME..storeBack │ │ │ -000008f0: 7570 5665 7273 696f 6e73 2e70 6c20 2d20 upVersions.pl - │ │ │ -00000900: 6c6f 6361 7465 7320 6469 6666 6572 656e locates differen │ │ │ -00000910: 7420 7665 7273 696f 6e73 206f 6620 6120 t versions of a │ │ │ -00000920: 6669 6c65 2073 6176 6564 2077 6974 6820 file saved with │ │ │ -00000930: 7374 6f72 6542 6163 6b75 702e 706c 2e0a storeBackup.pl.. │ │ │ -00000940: 0a3d 6865 6164 3120 5359 4e4f 5053 4953 .=head1 SYNOPSIS │ │ │ -00000950: 0a0a 0973 746f 7265 4261 636b 7570 5665 ...storeBackupVe │ │ │ -00000960: 7273 696f 6e73 2e70 6c20 2d66 2066 696c rsions.pl -f fil │ │ │ -00000970: 6520 5b2d 6220 726f 6f74 5d20 205b 2d76 e [-b root] [-v │ │ │ -00000980: 5d0a 0920 5b2d 6c20 5b2d 6120 7c20 5b2d ].. [-l [-a | [- │ │ │ -00000990: 735d 205b 2d75 5d20 5b2d 675d 205b 2d4d s] [-u] [-g] [-M │ │ │ -000009a0: 5d20 5b2d 635d 205b 2d6d 5d5d 5d0a 0a3d ] [-c] [-m]]]..= │ │ │ -000009b0: 6865 6164 3120 4f50 5449 4f4e 530a 0a3d head1 OPTIONS..= │ │ │ -000009c0: 6f76 6572 2038 0a0a 3d69 7465 6d20 423c over 8..=item B< │ │ │ -000009d0: 2d2d 6669 6c65 3e2c 2042 3c2d 663e 0a0a --file>, B<-f>.. │ │ │ -000009e0: 2020 2020 6669 6c65 206e 616d 6520 286e file name (n │ │ │ -000009f0: 616d 6520 696e 2074 6865 2062 6163 6b75 ame in the backu │ │ │ -00000a00: 702c 2070 726f 6261 626c 7920 7769 7468 p, probably with │ │ │ -00000a10: 2073 7566 6669 780a 2020 2020 6672 6f6d suffix. from │ │ │ -00000a20: 2063 6f6d 7072 6573 7369 6f6e 290a 0a3d compression)..= │ │ │ -00000a30: 6974 656d 2042 3c2d 2d62 6163 6b75 7052 item B<--backupR │ │ │ -00000a40: 6f6f 743e 2042 3c2d 623e 0a0a 2020 2020 oot> B<-b>.. │ │ │ -00000a50: 726f 6f74 206f 6620 7374 6f72 6542 6163 root of storeBac │ │ │ -00000a60: 6b75 7020 7472 6565 2c20 6e6f 726d 616c kup tree, normal │ │ │ -00000a70: 6c79 206e 6f74 206e 6565 6465 640a 0a3d ly not needed..= │ │ │ -00000a80: 6974 656d 2042 3c2d 2d76 6572 626f 7365 item B<--verbose │ │ │ -00000a90: 3e2c 2042 3c2d 763e 0a0a 2020 2020 7072 >, B<-v>.. pr │ │ │ -00000aa0: 696e 7420 7665 7262 6f73 6520 6d65 7373 int verbose mess │ │ │ -00000ab0: 6167 6573 0a0a 3d69 7465 6d20 423c 2d2d ages..=item B<-- │ │ │ -00000ac0: 6c6f 6361 7465 5361 6d65 3e2c 2042 3c2d locateSame>, B<- │ │ │ -00000ad0: 6c3e 0a0a 2020 2020 6c6f 6361 7465 2073 l>.. locate s │ │ │ -00000ae0: 616d 6520 6669 6c65 2077 6974 6820 6f74 ame file with ot │ │ │ -00000af0: 6865 7220 6e61 6d65 730a 0a3d 6974 656d her names..=item │ │ │ -00000b00: 2042 3c2d 2d73 686f 7741 6c6c 3e2c 2042 B<--showAll>, B │ │ │ -00000b10: 3c2d 413e 0a0a 2020 2020 7361 6d65 2061 <-A>.. same a │ │ │ -00000b20: 733a 205b 2d73 202d 7520 2d67 202d 4d20 s: [-s -u -g -M │ │ │ -00000b30: 2d63 202d 6d5d 0a0a 3d69 7465 6d20 423c -c -m]..=item B< │ │ │ -00000b40: 2d2d 7369 7a65 3e2c 2042 3c2d 733e 0a0a --size>, B<-s>.. │ │ │ -00000b50: 2020 2020 7368 6f77 2073 697a 6520 2868 show size (h │ │ │ -00000b60: 756d 616e 2072 6561 6461 626c 6529 206f uman readable) o │ │ │ -00000b70: 6620 736f 7572 6365 2066 696c 650a 0a3d f source file..= │ │ │ -00000b80: 6974 656d 2042 3c2d 2d75 6964 3e2c 2042 item B<--uid>, B │ │ │ -00000b90: 3c2d 753e 0a0a 2020 2020 7368 6f77 2075 <-u>.. show u │ │ │ -00000ba0: 6964 206f 6620 736f 7572 6365 2066 696c id of source fil │ │ │ -00000bb0: 650a 0a3d 6974 656d 2042 3c2d 2d67 6964 e..=item B<--gid │ │ │ -00000bc0: 3e2c 2042 3c2d 673e 0a0a 2020 2020 7368 >, B<-g>.. sh │ │ │ -00000bd0: 6f77 2067 6964 206f 6620 736f 7572 6365 ow gid of source │ │ │ -00000be0: 2066 696c 650a 0a3d 6974 656d 2042 3c2d file..=item B<- │ │ │ -00000bf0: 2d6d 6f64 653e 2c20 423c 2d4d 3e0a 0a20 -mode>, B<-M>.. │ │ │ -00000c00: 2020 2073 686f 7720 7065 726d 6973 7369 show permissi │ │ │ -00000c10: 6f6e 7320 6f66 2073 6f75 7263 6520 6669 ons of source fi │ │ │ -00000c20: 6c65 0a0a 3d69 7465 6d20 423c 2d2d 6374 le..=item B<--ct │ │ │ -00000c30: 696d 653e 2c20 423c 2d63 3e0a 0a20 2020 ime>, B<-c>.. │ │ │ -00000c40: 2073 686f 7720 6372 6561 7469 6f6e 2074 show creation t │ │ │ -00000c50: 696d 6520 6f66 2073 6f75 7263 6520 6669 ime of source fi │ │ │ -00000c60: 6c65 0a0a 3d69 7465 6d20 423c 2d2d 6d74 le..=item B<--mt │ │ │ -00000c70: 696d 653e 2c20 423c 2d6d 3e0a 0a20 2020 ime>, B<-m>.. │ │ │ -00000c80: 2073 686f 7720 6d6f 6469 6679 2074 696d show modify tim │ │ │ -00000c90: 6520 6f66 2073 6f75 7263 6520 6669 6c65 e of source file │ │ │ -00000ca0: 0a0a 3d69 7465 6d20 423c 2d2d 6174 696d ..=item B<--atim │ │ │ -00000cb0: 653e 2c20 423c 2d61 3e0a 0a20 2020 2073 e>, B<-a>.. s │ │ │ -00000cc0: 686f 7720 6163 6365 7373 2074 696d 6520 how access time │ │ │ -00000cd0: 6f66 2073 6f75 7263 6520 6669 6c65 0a0a of source file.. │ │ │ -00000ce0: 3d62 6163 6b0a 0a49 7420 646f 6573 206e =back..It does n │ │ │ -00000cf0: 6f74 2061 6c77 6179 7320 776f 726b 2063 ot always work c │ │ │ -00000d00: 6f72 7265 6374 6c79 2077 6865 6e20 6120 orrectly when a │ │ │ -00000d10: 6669 6c65 2069 7320 7361 7665 6420 626c file is saved bl │ │ │ -00000d20: 6f63 6b65 6420 2a61 6e64 2a0a 6e6f 6e2d ocked *and*.non- │ │ │ -00000d30: 626c 6f63 6b65 6420 696e 2064 6966 6665 blocked in diffe │ │ │ -00000d40: 7265 6e74 2062 6163 6b75 7073 2e20 496e rent backups. In │ │ │ -00000d50: 2073 7563 6820 6361 7365 732c 2075 7365 such cases, use │ │ │ -00000d60: 206f 7074 696f 6e20 423c 2d2d 6c6f 6361 option B<--loca │ │ │ -00000d70: 7465 5361 6d65 3e2e 0a0a 3d68 6561 6431 teSame>...=head1 │ │ │ -00000d80: 2043 4f50 5952 4947 4854 0a0a 436f 7079 COPYRIGHT..Copy │ │ │ -00000d90: 7269 6768 7420 2863 2920 3230 3032 2d32 right (c) 2002-2 │ │ │ -00000da0: 3032 3220 6279 2048 6569 6e7a 2d4a 6f73 022 by Heinz-Jos │ │ │ -00000db0: 6566 2043 6c61 6573 2028 7365 6520 5245 ef Claes (see RE │ │ │ -00000dc0: 4144 4d45 290a 5075 626c 6973 6865 6420 ADME).Published │ │ │ -00000dd0: 756e 6465 7220 7468 6520 474e 5520 4765 under the GNU Ge │ │ │ -00000de0: 6e65 7261 6c20 5075 626c 6963 204c 6963 neral Public Lic │ │ │ -00000df0: 656e 7365 2076 3320 6f72 2061 6e79 206c ense v3 or any l │ │ │ -00000e00: 6174 6572 2076 6572 7369 6f6e 0a0a 3d63 ater version..=c │ │ │ -00000e10: 7574 0a0a 6d79 2024 4865 6c70 203d 2026 ut..my $Help = & │ │ │ -00000e20: 3a3a 6765 7450 6f64 3254 6578 7428 2430 ::getPod2Text($0 │ │ │ -00000e30: 293b 0a0a 2670 7269 6e74 5665 7273 696f );..&printVersio │ │ │ -00000e40: 6e28 5c40 4152 4756 2c20 272d 5627 2c20 n(\@ARGV, '-V', │ │ │ -00000e50: 272d 2d76 6572 7369 6f6e 2729 3b0a 0a6d '--version');..m │ │ │ -00000e60: 7920 2443 6865 636b 5061 7220 3d0a 2020 y $CheckPar =. │ │ │ -00000e70: 2020 4368 6563 6b50 6172 616d 2d3e 6e65 CheckParam->ne │ │ │ -00000e80: 7728 272d 616c 6c6f 774c 6973 7473 2720 w('-allowLists' │ │ │ -00000e90: 3d3e 2027 6e6f 272c 0a09 0920 2020 2027 => 'no',... ' │ │ │ -00000ea0: 2d6c 6973 7427 203d 3e20 5b4f 7074 696f -list' => [Optio │ │ │ -00000eb0: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00000ec0: 3e20 2766 696c 6527 2c0a 0909 0909 0920 > 'file',...... │ │ │ -00000ed0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00000ee0: 3d3e 2027 2d66 272c 0a09 0909 0909 2020 => '-f',...... │ │ │ -00000ef0: 2020 272d 636c 5f61 6c69 6173 2720 3d3e '-cl_alias' => │ │ │ -00000f00: 2027 2d2d 6669 6c65 272c 0a09 0909 0909 '--file',...... │ │ │ -00000f10: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00000f20: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ -00000f30: 272d 6d75 7374 5f62 6527 203d 3e20 2779 '-must_be' => 'y │ │ │ -00000f40: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option │ │ │ -00000f50: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -00000f60: 2027 6261 636b 7570 526f 6f74 272c 0a09 'backupRoot',.. │ │ │ -00000f70: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00000f80: 696f 6e27 203d 3e20 272d 6227 2c0a 0909 ion' => '-b',... │ │ │ -00000f90: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00000fa0: 7327 203d 3e20 272d 2d62 6163 6b75 7052 s' => '--backupR │ │ │ -00000fb0: 6f6f 7427 2c0a 0909 0909 0920 2020 2027 oot',...... ' │ │ │ -00000fc0: 2d64 6566 6175 6c74 2720 3d3e 2027 2729 -default' => '') │ │ │ -00000fd0: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00000fe0: 7728 272d 6e61 6d65 2720 3d3e 2027 7665 w('-name' => 've │ │ │ -00000ff0: 7262 6f73 6527 2c0a 0909 0909 0920 2020 rbose',...... │ │ │ -00001000: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001010: 2027 2d76 272c 0a09 0909 0909 2020 2020 '-v',...... │ │ │ -00001020: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001030: 2d2d 7665 7262 6f73 6527 292c 0a09 0909 --verbose'),.... │ │ │ -00001040: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -00001050: 616d 6527 203d 3e20 276c 6f63 6174 6553 ame' => 'locateS │ │ │ -00001060: 616d 6527 2c0a 0909 0909 0920 2020 2027 ame',...... ' │ │ │ -00001070: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001080: 2d6c 272c 0a09 0909 0909 2020 2020 272d -l',...... '- │ │ │ -00001090: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -000010a0: 6c6f 6361 7465 5361 6d65 2729 2c0a 0909 locateSame'),... │ │ │ -000010b0: 0909 4f70 7469 6f6e 2d3e 6e65 7728 272d ..Option->new('- │ │ │ -000010c0: 6e61 6d65 2720 3d3e 2027 7368 6f77 416c name' => 'showAl │ │ │ -000010d0: 6c27 2c0a 0909 0909 0920 2020 2027 2d63 l',...... '-c │ │ │ -000010e0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d41 l_option' => '-A │ │ │ -000010f0: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001100: 5f61 6c69 6173 2720 3d3e 2027 2d2d 7368 _alias' => '--sh │ │ │ -00001110: 6f77 416c 6c27 2c0a 0909 0909 0920 2020 owAll',...... │ │ │ -00001120: 2027 2d6f 6e6c 795f 6966 2720 3d3e 2027 '-only_if' => ' │ │ │ -00001130: 5b6c 6f63 6174 6553 616d 655d 272c 0a09 [locateSame]',.. │ │ │ -00001140: 0909 0909 2020 2020 272d 636f 6d6d 656e .... '-commen │ │ │ -00001150: 7427 203d 3e0a 0909 0909 222d 7320 6361 t' =>....."-s ca │ │ │ -00001160: 6e20 6f6e 6c79 2062 6520 7573 6520 696e n only be use in │ │ │ -00001170: 2063 6f6e 6a75 6e63 7469 6f6e 2077 6974 conjunction wit │ │ │ -00001180: 6820 2d6c 5c6e 2229 2c0a 0909 0909 4f70 h -l\n"),.....Op │ │ │ -00001190: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -000011a0: 2720 3d3e 2027 7369 7a65 272c 0a09 0909 ' => 'size',.... │ │ │ -000011b0: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -000011c0: 6e27 203d 3e20 272d 7327 2c0a 0909 0909 n' => '-s',..... │ │ │ -000011d0: 0920 2020 2027 2d63 6c5f 616c 6961 7327 . '-cl_alias' │ │ │ -000011e0: 203d 3e20 272d 2d73 697a 6527 2c0a 0909 => '--size',... │ │ │ -000011f0: 0909 0920 2020 2027 2d6f 6e6c 795f 6966 ... '-only_if │ │ │ -00001200: 2720 3d3e 0a09 0909 0909 2020 2020 275b ' =>...... '[ │ │ │ -00001210: 6c6f 6361 7465 5361 6d65 5d20 616e 6420 locateSame] and │ │ │ -00001220: 6e6f 7420 5b73 686f 7741 6c6c 5d27 292c not [showAll]'), │ │ │ -00001230: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00001240: 2827 2d6e 616d 6527 203d 3e20 2775 6964 ('-name' => 'uid │ │ │ -00001250: 272c 0a09 0909 0909 2020 2020 272d 636c ',...... '-cl │ │ │ -00001260: 5f6f 7074 696f 6e27 203d 3e20 272d 7527 _option' => '-u' │ │ │ -00001270: 2c0a 0909 0909 0920 2020 2027 2d63 6c5f ,...... '-cl_ │ │ │ -00001280: 616c 6961 7327 203d 3e20 272d 2d75 6964 alias' => '--uid │ │ │ -00001290: 272c 0a09 0909 0909 2020 2020 272d 6f6e ',...... '-on │ │ │ -000012a0: 6c79 5f69 6627 203d 3e0a 0909 0909 0920 ly_if' =>...... │ │ │ -000012b0: 2020 2027 5b6c 6f63 6174 6553 616d 655d '[locateSame] │ │ │ -000012c0: 2061 6e64 206e 6f74 205b 7368 6f77 416c and not [showAl │ │ │ -000012d0: 6c5d 2729 2c0a 0909 0909 4f70 7469 6f6e l]'),.....Option │ │ │ -000012e0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -000012f0: 2027 6769 6427 2c0a 0909 0909 0920 2020 'gid',...... │ │ │ -00001300: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00001310: 2027 2d67 272c 0a09 0909 0909 2020 2020 '-g',...... │ │ │ -00001320: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00001330: 2d2d 6769 6427 2c0a 0909 0909 0920 2020 --gid',...... │ │ │ -00001340: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>.. │ │ │ -00001350: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate │ │ │ -00001360: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s │ │ │ -00001370: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O │ │ │ -00001380: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001390: 6527 203d 3e20 276d 6f64 6527 2c0a 0909 e' => 'mode',... │ │ │ -000013a0: 0909 0920 2020 2027 2d63 6c5f 6f70 7469 ... '-cl_opti │ │ │ -000013b0: 6f6e 2720 3d3e 2027 2d4d 272c 0a09 0909 on' => '-M',.... │ │ │ -000013c0: 0909 2020 2020 272d 636c 5f61 6c69 6173 .. '-cl_alias │ │ │ -000013d0: 2720 3d3e 2027 2d2d 6d6f 6465 272c 0a09 ' => '--mode',.. │ │ │ -000013e0: 0909 0909 2020 2020 272d 6f6e 6c79 5f69 .... '-only_i │ │ │ -000013f0: 6627 203d 3e0a 0909 0909 0920 2020 2027 f' =>...... ' │ │ │ -00001400: 5b6c 6f63 6174 6553 616d 655d 2061 6e64 [locateSame] and │ │ │ -00001410: 206e 6f74 205b 7368 6f77 416c 6c5d 2729 not [showAll]') │ │ │ -00001420: 2c0a 0909 0909 4f70 7469 6f6e 2d3e 6e65 ,.....Option->ne │ │ │ -00001430: 7728 272d 6e61 6d65 2720 3d3e 2027 6374 w('-name' => 'ct │ │ │ -00001440: 696d 6527 2c0a 0909 0909 0920 2020 2027 ime',...... ' │ │ │ -00001450: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001460: 2d63 272c 0a09 0909 0909 2020 2020 272d -c',...... '- │ │ │ -00001470: 636c 5f61 6c69 6173 2720 3d3e 2027 2d2d cl_alias' => '-- │ │ │ -00001480: 6374 696d 6527 2c0a 0909 0909 0920 2020 ctime',...... │ │ │ -00001490: 2027 2d6f 6e6c 795f 6966 2720 3d3e 0a09 '-only_if' =>.. │ │ │ -000014a0: 0909 0909 2020 2020 275b 6c6f 6361 7465 .... '[locate │ │ │ -000014b0: 5361 6d65 5d20 616e 6420 6e6f 7420 5b73 Same] and not [s │ │ │ -000014c0: 686f 7741 6c6c 5d27 292c 0a09 0909 094f howAll]'),.....O │ │ │ -000014d0: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -000014e0: 6527 203d 3e20 276d 7469 6d65 272c 0a09 e' => 'mtime',.. │ │ │ -000014f0: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00001500: 696f 6e27 203d 3e20 272d 6d27 2c0a 0909 ion' => '-m',... │ │ │ -00001510: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00001520: 7327 203d 3e20 272d 2d6d 7469 6d65 272c s' => '--mtime', │ │ │ -00001530: 0a09 0909 0909 2020 2020 272d 6f6e 6c79 ...... '-only │ │ │ -00001540: 5f69 6627 203d 3e0a 0909 0909 0920 2020 _if' =>...... │ │ │ -00001550: 2027 5b6c 6f63 6174 6553 616d 655d 2061 '[locateSame] a │ │ │ -00001560: 6e64 206e 6f74 205b 7368 6f77 416c 6c5d nd not [showAll] │ │ │ -00001570: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00001580: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001590: 6174 696d 6527 2c0a 0909 0909 0920 2020 atime',...... │ │ │ -000015a0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -000015b0: 2027 2d61 272c 0a09 0909 0909 2020 2020 '-a',...... │ │ │ -000015c0: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -000015d0: 2d2d 6174 696d 6527 2c0a 0909 0909 0920 --atime',...... │ │ │ -000015e0: 2020 2027 2d6f 6e6c 795f 6966 2720 3d3e '-only_if' => │ │ │ -000015f0: 0a09 0909 0909 2020 2020 275b 6c6f 6361 ...... '[loca │ │ │ -00001600: 7465 5361 6d65 5d20 616e 6420 6e6f 7420 teSame] and not │ │ │ -00001610: 5b73 686f 7741 6c6c 5d27 290a 0909 0909 [showAll]')..... │ │ │ -00001620: 5d0a 0909 2020 2020 293b 0a0a 2443 6865 ]... );..$Che │ │ │ -00001630: 636b 5061 722d 3e63 6865 636b 2827 2d61 ckPar->check('-a │ │ │ -00001640: 7267 7627 203d 3e20 5c40 4152 4756 2c0a rgv' => \@ARGV,. │ │ │ -00001650: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001660: 2027 2d68 656c 7027 203d 3e20 2448 656c '-help' => $Hel │ │ │ -00001670: 700a 2020 2020 2020 2020 2020 2020 2020 p. │ │ │ -00001680: 2020 2029 3b0a 0a23 2041 7573 7765 7274 );..# Auswert │ │ │ -00001690: 756e 6720 6465 7220 5061 7261 6d65 7465 ung der Paramete │ │ │ -000016a0: 720a 6d79 2024 6669 6c65 203d 2024 4368 r.my $file = $Ch │ │ │ -000016b0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000016c0: 7468 5061 7228 2766 696c 6527 293b 0a6d thPar('file');.m │ │ │ -000016d0: 7920 2476 6572 626f 7365 203d 2024 4368 y $verbose = $Ch │ │ │ -000016e0: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -000016f0: 7468 6f75 7450 6172 2827 7665 7262 6f73 thoutPar('verbos │ │ │ -00001700: 6527 293b 0a6d 7920 2462 6163 6b75 7052 e');.my $backupR │ │ │ -00001710: 6f6f 7420 3d20 2443 6865 636b 5061 722d oot = $CheckPar- │ │ │ -00001720: 3e67 6574 4f70 7457 6974 6850 6172 2827 >getOptWithPar(' │ │ │ -00001730: 6261 636b 7570 526f 6f74 2729 3b0a 6d79 backupRoot');.my │ │ │ -00001740: 2024 6c6f 6361 7465 5361 6d65 203d 2024 $locateSame = $ │ │ │ -00001750: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -00001760: 5769 7468 6f75 7450 6172 2827 6c6f 6361 WithoutPar('loca │ │ │ -00001770: 7465 5361 6d65 2729 3b0a 6d79 2024 7368 teSame');.my $sh │ │ │ -00001780: 6f77 416c 6c20 3d20 2443 6865 636b 5061 owAll = $CheckPa │ │ │ -00001790: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -000017a0: 5061 7228 2773 686f 7741 6c6c 2729 3b0a Par('showAll');. │ │ │ -000017b0: 6d79 2024 7368 6f77 5369 7a65 203d 2024 my $showSize = $ │ │ │ -000017c0: 4368 6563 6b50 6172 2d3e 6765 744f 7074 CheckPar->getOpt │ │ │ -000017d0: 5769 7468 6f75 7450 6172 2827 7369 7a65 WithoutPar('size │ │ │ -000017e0: 2729 207c 2024 7368 6f77 416c 6c3b 0a6d ') | $showAll;.m │ │ │ -000017f0: 7920 2473 686f 7755 4944 203d 2024 4368 y $showUID = $Ch │ │ │ -00001800: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00001810: 7468 6f75 7450 6172 2827 7569 6427 2920 thoutPar('uid') │ │ │ -00001820: 7c20 2473 686f 7741 6c6c 3b0a 6d79 2024 | $showAll;.my $ │ │ │ -00001830: 7368 6f77 4749 4420 3d20 2443 6865 636b showGID = $Check │ │ │ -00001840: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00001850: 7574 5061 7228 2767 6964 2729 207c 2024 utPar('gid') | $ │ │ │ -00001860: 7368 6f77 416c 6c3b 0a6d 7920 2473 686f showAll;.my $sho │ │ │ -00001870: 774d 6f64 6520 3d20 2443 6865 636b 5061 wMode = $CheckPa │ │ │ -00001880: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -00001890: 5061 7228 276d 6f64 6527 2920 7c20 2473 Par('mode') | $s │ │ │ -000018a0: 686f 7741 6c6c 3b0a 6d79 2024 7368 6f77 howAll;.my $show │ │ │ -000018b0: 4354 696d 6520 3d20 2443 6865 636b 5061 CTime = $CheckPa │ │ │ -000018c0: 722d 3e67 6574 4f70 7457 6974 686f 7574 r->getOptWithout │ │ │ -000018d0: 5061 7228 2763 7469 6d65 2729 207c 2024 Par('ctime') | $ │ │ │ -000018e0: 7368 6f77 416c 6c3b 0a6d 7920 2473 686f showAll;.my $sho │ │ │ -000018f0: 774d 5469 6d65 203d 2024 4368 6563 6b50 wMTime = $CheckP │ │ │ -00001900: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00001910: 7450 6172 2827 6d74 696d 6527 2920 7c20 tPar('mtime') | │ │ │ -00001920: 2473 686f 7741 6c6c 3b0a 6d79 2024 7368 $showAll;.my $sh │ │ │ -00001930: 6f77 4154 696d 6520 3d20 2443 6865 636b owATime = $Check │ │ │ -00001940: 5061 722d 3e67 6574 4f70 7457 6974 686f Par->getOptWitho │ │ │ -00001950: 7574 5061 7228 2761 7469 6d65 2729 207c utPar('atime') | │ │ │ -00001960: 2024 7368 6f77 416c 6c3b 0a0a 6d79 2024 $showAll;..my $ │ │ │ -00001970: 6620 3d20 2466 696c 653b 0a6d 7920 2466 f = $file;.my $f │ │ │ -00001980: 696c 6520 3d20 2661 6273 6f6c 7574 6550 ile = &absoluteP │ │ │ -00001990: 6174 6828 2466 696c 6529 3b0a 0a6d 7920 ath($file);..my │ │ │ -000019a0: 2470 724c 6f67 203d 2070 7269 6e74 4c6f $prLog = printLo │ │ │ -000019b0: 672d 3e6e 6577 2827 2d6b 696e 6427 203d g->new('-kind' = │ │ │ -000019c0: 3e20 5b27 493a 494e 464f 272c 2027 573a > ['I:INFO', 'W: │ │ │ -000019d0: 5741 524e 494e 4727 2c20 2745 3a45 5252 WARNING', 'E:ERR │ │ │ -000019e0: 4f52 272c 0a09 0909 0920 2020 2020 2027 OR',..... ' │ │ │ -000019f0: 533a 5354 4154 4953 5449 4327 2c20 2744 S:STATISTIC', 'D │ │ │ -00001a00: 3a44 4542 5547 272c 2027 563a 5645 5253 :DEBUG', 'V:VERS │ │ │ -00001a10: 494f 4e27 5d29 3b0a 0a24 7072 4c6f 672d ION']);..$prLog- │ │ │ -00001a20: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00001a30: 3e20 2756 272c 0a09 2020 2020 2020 272d > 'V',.. '- │ │ │ -00001a40: 7374 7227 203d 3e20 5b22 7374 6f72 6542 str' => ["storeB │ │ │ -00001a50: 6163 6b75 7056 6572 7369 6f6e 732e 706c ackupVersions.pl │ │ │ -00001a60: 2c20 246d 6169 6e3a 3a53 544f 5245 4241 , $main::STOREBA │ │ │ -00001a70: 434b 5550 5645 5253 494f 4e22 5d29 0a20 CKUPVERSION"]). │ │ │ -00001a80: 2020 2069 6620 2476 6572 626f 7365 3b0a if $verbose;. │ │ │ -00001a90: 0a23 0a23 206d 6435 4368 6563 6b53 756d .#.# md5CheckSum │ │ │ -00001aa0: 202d 2044 6174 6569 2066 696e 6465 6e0a - Datei finden. │ │ │ -00001ab0: 2470 724c 6f67 2d3e 7072 696e 7428 272d $prLog->print('- │ │ │ -00001ac0: 6b69 6e64 2720 3d3e 2027 4527 2c0a 0920 kind' => 'E',.. │ │ │ -00001ad0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -00001ae0: 2266 696c 6520 3c24 663e 2064 6f65 7320 "file <$f> does │ │ │ -00001af0: 6e6f 7420 6578 6973 7422 5d2c 0a09 2020 not exist"],.. │ │ │ -00001b00: 2020 2020 272d 6578 6974 2720 3d3e 2031 '-exit' => 1 │ │ │ -00001b10: 290a 2020 2020 756e 6c65 7373 2028 2d66 ). unless (-f │ │ │ -00001b20: 2024 6620 6f72 202d 6420 2466 293b 0a0a $f or -d $f);.. │ │ │ -00001b30: 6966 2028 2462 6163 6b75 7052 6f6f 7429 if ($backupRoot) │ │ │ -00001b40: 0a7b 0a20 2020 2024 7072 4c6f 672d 3e70 .{. $prLog->p │ │ │ -00001b50: 7269 6e74 2827 2d6b 696e 6427 203d 3e20 rint('-kind' => │ │ │ -00001b60: 2745 272c 0a09 0920 2027 2d73 7472 2720 'E',... '-str' │ │ │ -00001b70: 3d3e 205b 2264 6972 6563 746f 7279 203c => ["directory < │ │ │ -00001b80: 2462 6163 6b75 7052 6f6f 743e 2064 6f65 $backupRoot> doe │ │ │ -00001b90: 7320 6e6f 7420 6578 6973 7422 5d2c 0a09 s not exist"],.. │ │ │ -00001ba0: 0920 2027 2d65 7869 7427 203d 3e20 3129 . '-exit' => 1) │ │ │ -00001bb0: 0a09 756e 6c65 7373 2028 2d64 2024 6261 ..unless (-d $ba │ │ │ -00001bc0: 636b 7570 526f 6f74 293b 0a20 2020 2024 ckupRoot);. $ │ │ │ -00001bd0: 6261 636b 7570 526f 6f74 203d 2026 6162 backupRoot = &ab │ │ │ -00001be0: 736f 6c75 7465 5061 7468 2824 6261 636b solutePath($back │ │ │ -00001bf0: 7570 526f 6f74 293b 0a7d 0a65 6c73 650a upRoot);.}.else. │ │ │ -00001c00: 7b0a 2020 2020 6d79 2028 2464 6972 2c20 {. my ($dir, │ │ │ -00001c10: 2478 2920 3d20 2673 706c 6974 4669 6c65 $x) = &splitFile │ │ │ -00001c20: 4469 7228 2466 696c 6529 3b0a 2020 2020 Dir($file);. │ │ │ -00001c30: 2462 6163 6b75 7052 6f6f 7420 3d20 756e $backupRoot = un │ │ │ -00001c40: 6465 663b 0a20 2020 2064 6f0a 2020 2020 def;. do. │ │ │ -00001c50: 7b0a 0923 2066 6573 7473 7465 6c6c 656e {..# feststellen │ │ │ -00001c60: 2c20 6f62 2065 696e 6520 2e6d 6435 7375 , ob eine .md5su │ │ │ -00001c70: 6d20 4461 7465 6920 766f 7268 616e 6465 m Datei vorhande │ │ │ -00001c80: 6e20 6973 740a 0969 6620 282d 6620 2224 n ist..if (-f "$ │ │ │ -00001c90: 6469 722f 2463 6865 636b 5375 6d46 696c dir/$checkSumFil │ │ │ -00001ca0: 6522 206f 7220 2d66 2022 2464 6972 2f24 e" or -f "$dir/$ │ │ │ -00001cb0: 6368 6563 6b53 756d 4669 6c65 2e62 7a32 checkSumFile.bz2 │ │ │ -00001cc0: 2229 0a09 7b0a 0920 2020 2024 7072 4c6f ")..{.. $prLo │ │ │ -00001cd0: 672d 3e70 7269 6e74 2827 2d6b 696e 6427 g->print('-kind' │ │ │ -00001ce0: 203d 3e20 2749 272c 0a09 0909 2020 272d => 'I',.... '- │ │ │ -00001cf0: 7374 7227 203d 3e20 5b22 666f 756e 6420 str' => ["found │ │ │ -00001d00: 696e 666f 2066 696c 6520 3c24 6368 6563 info file <$chec │ │ │ -00001d10: 6b53 756d 4669 6c65 3e20 696e 2022 202e kSumFile> in " . │ │ │ -00001d20: 0a09 0909 0920 2020 2020 2264 6972 6563 ..... "direc │ │ │ -00001d30: 746f 7279 203c 2464 6972 3e22 5d29 0a09 tory <$dir>"]).. │ │ │ -00001d40: 0969 6620 2824 7665 7262 6f73 6529 3b0a .if ($verbose);. │ │ │ -00001d50: 0920 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -00001d60: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -00001d70: 272c 0a09 0909 2020 272d 7374 7227 203d ',.... '-str' = │ │ │ -00001d80: 3e0a 0909 0920 205b 2266 6f75 6e64 2069 >.... ["found i │ │ │ -00001d90: 6e66 6f20 6669 6c65 203c 2463 6865 636b nfo file <$check │ │ │ -00001da0: 5375 6d46 696c 653e 2061 2073 6563 6f6e SumFile> a secon │ │ │ -00001db0: 6420 7469 6d65 2069 6e20 2220 2e0a 0909 d time in " .... │ │ │ -00001dc0: 0920 2020 223c 2464 6972 3e2c 2066 6972 . "<$dir>, fir │ │ │ -00001dd0: 7374 2074 696d 6520 666f 756e 6420 696e st time found in │ │ │ -00001de0: 203c 2462 6163 6b75 7052 6f6f 743e 225d <$backupRoot>"] │ │ │ -00001df0: 2c0a 0909 0920 2027 2d65 7869 7427 203d ,.... '-exit' = │ │ │ -00001e00: 3e20 3129 0a09 0969 6620 2824 6261 636b > 1)...if ($back │ │ │ -00001e10: 7570 526f 6f74 293b 0a0a 0920 2020 2024 upRoot);... $ │ │ │ -00001e20: 6261 636b 7570 526f 6f74 203d 2024 6469 backupRoot = $di │ │ │ -00001e30: 723b 0a09 7d0a 0a09 2824 6469 722c 2024 r;..}...($dir, $ │ │ │ -00001e40: 7829 203d 2026 7370 6c69 7446 696c 6544 x) = &splitFileD │ │ │ -00001e50: 6972 2824 6469 7229 3b0a 2020 2020 7d20 ir($dir);. } │ │ │ -00001e60: 7768 696c 6520 2824 6469 7220 6e65 2027 while ($dir ne ' │ │ │ -00001e70: 2f27 293b 0a0a 2020 2020 2470 724c 6f67 /');.. $prLog │ │ │ -00001e80: 2d3e 7072 696e 7428 272d 6b69 6e64 2720 ->print('-kind' │ │ │ -00001e90: 3d3e 2027 4527 2c0a 0909 2020 272d 7374 => 'E',... '-st │ │ │ -00001ea0: 7227 203d 3e20 5b22 6469 6420 6e6f 7420 r' => ["did not │ │ │ -00001eb0: 6669 6e64 2069 6e66 6f20 6669 6c65 203c find info file < │ │ │ -00001ec0: 2463 6865 636b 5375 6d46 696c 653e 225d $checkSumFile>"] │ │ │ -00001ed0: 2c0a 0909 2020 272d 6578 6974 2720 3d3e ,... '-exit' => │ │ │ -00001ee0: 2031 290a 0975 6e6c 6573 7320 2824 6261 1)..unless ($ba │ │ │ -00001ef0: 636b 7570 526f 6f74 293b 0a7d 0a0a 6d79 ckupRoot);.}..my │ │ │ -00001f00: 2024 6368 6563 6b53 756d 4669 6c65 526f $checkSumFileRo │ │ │ -00001f10: 6f74 203d 2024 6368 6563 6b53 756d 4669 ot = $checkSumFi │ │ │ -00001f20: 6c65 3b0a 2463 6865 636b 5375 6d46 696c le;.$checkSumFil │ │ │ -00001f30: 6552 6f6f 7420 2e3d 2022 2e62 7a32 2220 eRoot .= ".bz2" │ │ │ -00001f40: 6966 2028 2d66 2022 2462 6163 6b75 7052 if (-f "$backupR │ │ │ -00001f50: 6f6f 742f 2463 6865 636b 5375 6d46 696c oot/$checkSumFil │ │ │ -00001f60: 652e 627a 3222 293b 0a24 7072 4c6f 672d e.bz2");.$prLog- │ │ │ -00001f70: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00001f80: 3e20 2745 272c 0a09 2020 2020 2020 272d > 'E',.. '- │ │ │ -00001f90: 7374 7227 203d 3e20 5b22 6e6f 2069 6e66 str' => ["no inf │ │ │ -00001fa0: 6f20 6669 6c65 203c 2463 6865 636b 5375 o file <$checkSu │ │ │ -00001fb0: 6d46 696c 6552 6f6f 743e 2069 6e20 3c24 mFileRoot> in <$ │ │ │ -00001fc0: 6261 636b 7570 526f 6f74 3e22 5d2c 0a09 backupRoot>"],.. │ │ │ -00001fd0: 2020 2020 2020 272d 6578 6974 2720 3d3e '-exit' => │ │ │ -00001fe0: 2031 290a 2020 2020 756e 6c65 7373 2028 1). unless ( │ │ │ -00001ff0: 2d66 2022 2462 6163 6b75 7052 6f6f 742f -f "$backupRoot/ │ │ │ -00002000: 2463 6865 636b 5375 6d46 696c 6552 6f6f $checkSumFileRoo │ │ │ -00002010: 7422 293b 0a0a 2320 6a65 747a 7420 2472 t");..# jetzt $r │ │ │ -00002020: 6573 746f 7265 5472 6565 2072 656c 6174 estoreTree relat │ │ │ -00002030: 6976 207a 7520 2462 6163 6b75 7052 6f6f iv zu $backupRoo │ │ │ -00002040: 7420 6d61 6368 656e 0a6d 7920 2466 696c t machen.my $fil │ │ │ -00002050: 6557 6974 6852 656c 5061 7468 203d 2073 eWithRelPath = s │ │ │ -00002060: 7562 7374 7228 2466 696c 652c 206c 656e ubstr($file, len │ │ │ -00002070: 6774 6828 2462 6163 6b75 7052 6f6f 7429 gth($backupRoot) │ │ │ -00002080: 202b 2031 293b 0a6d 7920 2824 7374 6f72 + 1);.my ($stor │ │ │ -00002090: 6542 6163 6b75 7041 6c6c 5472 6565 732c eBackupAllTrees, │ │ │ -000020a0: 2024 6669 6c65 4461 7465 4469 7229 203d $fileDateDir) = │ │ │ -000020b0: 2026 7370 6c69 7446 696c 6544 6972 2824 &splitFileDir($ │ │ │ -000020c0: 6261 636b 7570 526f 6f74 293b 0a0a 2320 backupRoot);..# │ │ │ -000020d0: 5e5e 5e0a 2320 4265 6973 7069 656c 3a20 ^^^.# Beispiel: │ │ │ -000020e0: 2020 2020 2020 2020 2020 2028 2f74 6d70 (/tmp │ │ │ -000020f0: 2f73 7462 752f 3230 3031 2e31 322e 3230 /stbu/2001.12.20 │ │ │ -00002100: 5f31 362e 3231 2e35 392f 7065 726c 2f4a _16.21.59/perl/J │ │ │ -00002110: 756c 6961 6e2e 632e 627a 3229 0a23 2024 ulian.c.bz2).# $ │ │ │ -00002120: 6261 636b 7570 526f 6f74 2062 6569 6e68 backupRoot beinh │ │ │ -00002130: 616c 7465 7420 6a65 747a 7420 6465 6e20 altet jetzt den │ │ │ -00002140: 5066 6164 207a 756d 2041 7263 6869 760a Pfad zum Archiv. │ │ │ -00002150: 2320 2020 2020 2020 2020 2020 2020 2020 # │ │ │ -00002160: 2020 2020 2020 2028 2f74 6d70 2f73 7462 (/tmp/stb │ │ │ -00002170: 752f 3230 3031 2e31 322e 3230 5f31 362e u/2001.12.20_16. │ │ │ -00002180: 3231 2e35 3929 0a23 2024 6669 6c65 2062 21.59).# $file b │ │ │ -00002190: 6569 6e68 616c 7465 7420 6469 6520 4461 einhaltet die Da │ │ │ -000021a0: 7465 6920 6d69 7420 6b6f 6d70 6c65 7474 tei mit komplett │ │ │ -000021b0: 656e 2c20 6162 736f 6c75 7465 6e20 5066 en, absoluten Pf │ │ │ -000021c0: 6164 0a23 2020 2020 2020 2020 2020 2020 ad.# │ │ │ -000021d0: 2020 2020 2020 2020 2020 282f 746d 702f (/tmp/ │ │ │ -000021e0: 7374 6275 2f32 3030 312e 3132 2e32 305f stbu/2001.12.20_ │ │ │ -000021f0: 3136 2e32 312e 3539 2f70 6572 6c2f 4a75 16.21.59/perl/Ju │ │ │ -00002200: 6c69 616e 2e63 2e62 7a32 290a 2320 2466 lian.c.bz2).# $f │ │ │ -00002210: 696c 6557 6974 6852 656c 5061 7468 2062 ileWithRelPath b │ │ │ -00002220: 6569 6e68 616c 7465 7420 6a65 747a 7420 einhaltet jetzt │ │ │ -00002230: 6465 6e20 7265 6c61 7469 7665 6e20 5066 den relativen Pf │ │ │ -00002240: 6164 2069 6e6e 6572 6861 6c62 2064 6573 ad innerhalb des │ │ │ -00002250: 2041 7263 6869 7673 0a23 2020 2020 2020 Archivs.# │ │ │ -00002260: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002270: 2870 6572 6c2f 4a75 6c69 616e 2e63 2e62 (perl/Julian.c.b │ │ │ -00002280: 7a32 290a 2320 2473 746f 7265 4261 636b z2).# $storeBack │ │ │ -00002290: 7570 416c 6c54 7265 6573 2062 6569 6e68 upAllTrees beinh │ │ │ -000022a0: 616c 7465 7420 6465 6e20 526f 6f74 2d50 altet den Root-P │ │ │ -000022b0: 6661 6420 6465 7320 7374 6f72 6542 6163 fad des storeBac │ │ │ -000022c0: 6b75 7020 286f 6265 7268 616c 620a 2320 kup (oberhalb.# │ │ │ -000022d0: 2020 2020 2064 6572 2044 6174 756d 2044 der Datum D │ │ │ -000022e0: 6972 6563 746f 7269 6573 290a 2320 2020 irectories).# │ │ │ -000022f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00002300: 2020 2028 2f74 6d70 2f73 7462 7529 0a23 (/tmp/stbu).# │ │ │ -00002310: 2024 6669 6c65 4461 7465 4469 7220 6265 $fileDateDir be │ │ │ -00002320: 696e 6861 6c74 6574 2064 656e 204e 616d inhaltet den Nam │ │ │ -00002330: 656e 2064 6573 2044 6174 756d 2d44 6972 en des Datum-Dir │ │ │ -00002340: 7320 6465 7320 6765 7375 6368 7465 6e20 s des gesuchten │ │ │ -00002350: 6669 6c65 730a 2320 2020 2020 2020 2020 files.# │ │ │ -00002360: 2020 2020 2020 2020 2020 2020 2028 3230 (20 │ │ │ -00002370: 3031 2e31 322e 3230 5f31 362e 3231 2e35 01.12.20_16.21.5 │ │ │ -00002380: 3929 0a0a 2370 7269 6e74 2022 6261 636b 9)..#print "back │ │ │ -00002390: 7570 526f 6f74 203d 2024 6261 636b 7570 upRoot = $backup │ │ │ -000023a0: 526f 6f74 5c6e 223b 0a23 7072 696e 7420 Root\n";.#print │ │ │ -000023b0: 2266 696c 6520 3d20 2466 696c 655c 6e22 "file = $file\n" │ │ │ -000023c0: 3b0a 2370 7269 6e74 2022 6669 6c65 5769 ;.#print "fileWi │ │ │ -000023d0: 7468 5265 6c50 6174 6820 3d20 2466 696c thRelPath = $fil │ │ │ -000023e0: 6557 6974 6852 656c 5061 7468 5c6e 223b eWithRelPath\n"; │ │ │ -000023f0: 0a23 7072 696e 7420 2273 746f 7265 4261 .#print "storeBa │ │ │ -00002400: 636b 7570 416c 6c54 7265 6573 203d 2024 ckupAllTrees = $ │ │ │ -00002410: 7374 6f72 6542 6163 6b75 7041 6c6c 5472 storeBackupAllTr │ │ │ -00002420: 6565 735c 6e22 3b0a 2370 7269 6e74 2022 ees\n";.#print " │ │ │ -00002430: 6669 6c65 4461 7465 4469 7220 3d20 2466 fileDateDir = $f │ │ │ -00002440: 696c 6544 6174 6544 6972 5c6e 5c6e 223b ileDateDir\n\n"; │ │ │ -00002450: 0a0a 0a24 7072 4c6f 672d 3e70 7269 6e74 ...$prLog->print │ │ │ -00002460: 2827 2d6b 696e 6427 203d 3e20 2749 272c ('-kind' => 'I', │ │ │ -00002470: 0a09 2020 2020 2020 272d 7374 7227 203d .. '-str' = │ │ │ -00002480: 3e20 5b22 6368 6563 6b69 6e67 2066 6f72 > ["checking for │ │ │ -00002490: 203c 2466 696c 6557 6974 6852 656c 5061 <$fileWithRelPa │ │ │ -000024a0: 7468 3e22 5d29 0a20 2020 2069 6620 2476 th>"]). if $v │ │ │ -000024b0: 6572 626f 7365 3b0a 0a23 2056 6572 7369 erbose;..# Versi │ │ │ -000024c0: 6f6e 732d 4469 7265 6374 6f72 6965 7320 ons-Directories │ │ │ -000024d0: 756e 7465 7220 2462 6163 6b75 7052 6f6f unter $backupRoo │ │ │ -000024e0: 7420 6569 6e6c 6573 656e 0a6d 7920 2840 t einlesen.my (@ │ │ │ -000024f0: 616c 6c44 6972 7329 203d 2028 263a 3a72 allDirs) = (&::r │ │ │ -00002500: 6561 6441 6c6c 4261 636b 7570 4469 7273 eadAllBackupDirs │ │ │ -00002510: 2824 7374 6f72 6542 6163 6b75 7041 6c6c ($storeBackupAll │ │ │ -00002520: 5472 6565 732c 2024 7072 4c6f 672c 2031 Trees, $prLog, 1 │ │ │ -00002530: 2929 3b0a 2370 7269 6e74 2022 616c 6c44 ));.#print "allD │ │ │ -00002540: 6972 7320 3d5c 6e22 2c20 6a6f 696e 2822 irs =\n", join(" │ │ │ -00002550: 5c6e 222c 2040 616c 6c44 6972 7329 2c20 \n", @allDirs), │ │ │ -00002560: 225c 6e22 3b0a 0a23 2063 6865 636b 2066 "\n";..# check f │ │ │ -00002570: 6f72 206c 6174 654c 696e 6b73 0a6d 7920 or lateLinks.my │ │ │ -00002580: 2825 6c69 6e6b 4669 6c65 293b 0a6d 7920 (%linkFile);.my │ │ │ -00002590: 2824 642c 2040 6429 3b0a 666f 7265 6163 ($d, @d);.foreac │ │ │ -000025a0: 6820 2464 2028 4061 6c6c 4469 7273 290a h $d (@allDirs). │ │ │ -000025b0: 7b0a 2020 2020 6966 2028 2d65 2022 2464 {. if (-e "$d │ │ │ -000025c0: 2f2e 7374 6f72 6542 6163 6b75 704c 696e /.storeBackupLin │ │ │ -000025d0: 6b73 2f6c 696e 6b46 696c 652e 627a 3222 ks/linkFile.bz2" │ │ │ -000025e0: 290a 2020 2020 7b0a 0970 7573 6820 4064 ). {..push @d │ │ │ -000025f0: 2c20 2220 2024 6422 3b0a 0924 6c69 6e6b , " $d";..$link │ │ │ -00002600: 4669 6c65 7b24 647d 203d 2031 3b0a 2020 File{$d} = 1;. │ │ │ -00002610: 2020 7d0a 7d0a 2470 724c 6f67 2d3e 7072 }.}.$prLog->pr │ │ │ -00002620: 696e 7428 272d 6b69 6e64 2720 3d3e 2027 int('-kind' => ' │ │ │ -00002630: 5727 2c0a 0920 2020 2020 2027 2d73 7472 W',.. '-str │ │ │ -00002640: 2720 3d3e 205b 2266 6f75 6e64 2075 6e72 ' => ["found unr │ │ │ -00002650: 6573 6f6c 7665 6420 6c69 6e6b 7320 696e esolved links in │ │ │ -00002660: 203a 2022 2c0a 0909 0920 4064 2c0a 0909 : ",.... @d,... │ │ │ -00002670: 0920 2270 6c65 6173 6520 7275 6e20 7374 . "please run st │ │ │ -00002680: 6f72 6542 6163 6b75 7055 7064 6174 6542 oreBackupUpdateB │ │ │ -00002690: 6163 6b75 702e 706c 222c 0a09 0909 2022 ackup.pl",.... " │ │ │ -000026a0: 6765 6e65 7261 7465 6420 6c69 7374 2077 generated list w │ │ │ -000026b0: 696c 6c20 6e6f 7420 6265 2063 6f6d 706c ill not be compl │ │ │ -000026c0: 6574 6521 222c 0a09 0909 2022 225d 290a ete!",.... ""]). │ │ │ -000026d0: 2020 2020 6966 2040 643b 0a0a 0a23 205a if @d;...# Z │ │ │ -000026e0: 7565 7273 7420 6469 6520 4461 7465 6965 uerst die Dateie │ │ │ -000026f0: 6e20 6469 7265 6b74 2061 7566 2045 7869 n direkt auf Exi │ │ │ -00002700: 7374 656e 7a20 fc62 6572 7072 fc66 656e stenz .berpr.fen │ │ │ -00002710: 0a23 2064 616e 6e20 6d64 352d 5375 6d6d .# dann md5-Summ │ │ │ -00002720: 656e 2062 6572 6563 686e 656e 2c20 756d en berechnen, um │ │ │ -00002730: 2075 6e74 6572 7363 6869 6564 6c69 6368 unterschiedlich │ │ │ -00002740: 6520 5374 e46e 6465 2066 6573 747a 7573 e St.nde festzus │ │ │ -00002750: 7465 6c6c 656e 0a6d 7920 2840 6669 6c65 tellen.my (@file │ │ │ -00002760: 732c 2040 6d64 3573 756d 2c20 4064 6972 s, @md5sum, @dir │ │ │ -00002770: 732c 2024 656e 7472 7929 3b0a 6d79 2024 s, $entry);.my $ │ │ │ -00002780: 6d64 3573 756d 426c 6f63 6b20 3d20 756e md5sumBlock = un │ │ │ -00002790: 6465 663b 0a6d 7920 246c 6173 7449 6e6f def;.my $lastIno │ │ │ -000027a0: 6465 203d 2075 6e64 6566 3b0a 666f 7265 de = undef;.fore │ │ │ -000027b0: 6163 6820 2465 6e74 7279 2028 4061 6c6c ach $entry (@all │ │ │ -000027c0: 4469 7273 290a 7b0a 2020 2020 6966 2028 Dirs).{. if ( │ │ │ -000027d0: 6578 6973 7473 2024 6c69 6e6b 4669 6c65 exists $linkFile │ │ │ -000027e0: 7b24 656e 7472 797d 290a 2020 2020 7b0a {$entry}). {. │ │ │ -000027f0: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00002800: 2d6b 696e 6427 203d 3e20 2757 272c 0a09 -kind' => 'W',.. │ │ │ -00002810: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -00002820: 205b 2273 6b69 7070 696e 6720 3c24 656e ["skipping <$en │ │ │ -00002830: 7472 793e 225d 293b 0a09 6e65 7874 3b0a try>"]);..next;. │ │ │ -00002840: 2020 2020 7d0a 0a20 2020 206d 7920 2466 }.. my $f │ │ │ -00002850: 203d 2024 656e 7472 7920 2e20 272f 2720 = $entry . '/' │ │ │ -00002860: 2e20 2466 696c 6557 6974 6852 656c 5061 . $fileWithRelPa │ │ │ -00002870: 7468 3b0a 2020 2020 6966 2028 2d66 2024 th;. if (-f $ │ │ │ -00002880: 6629 0a20 2020 207b 0a09 7075 7368 2040 f). {..push @ │ │ │ -00002890: 6669 6c65 732c 2024 663b 0a09 7075 7368 files, $f;..push │ │ │ -000028a0: 2040 6469 7273 2c20 2465 6e74 7279 3b0a @dirs, $entry;. │ │ │ -000028b0: 0a09 2320 6572 7374 206d 616c 2070 72fc ..# erst mal pr. │ │ │ -000028c0: 6665 6e2c 206f 6220 696e 6f64 6520 6964 fen, ob inode id │ │ │ -000028d0: 656e 7469 7363 6820 6973 740a 096d 7920 entisch ist..my │ │ │ -000028e0: 2824 696e 6f64 652c 2024 7369 7a65 2920 ($inode, $size) │ │ │ -000028f0: 3d20 2873 7461 7428 2466 2929 5b31 2c37 = (stat($f))[1,7 │ │ │ -00002900: 5d3b 0a09 6966 2028 2469 6e6f 6465 203d ];..if ($inode = │ │ │ -00002910: 3d20 246c 6173 7449 6e6f 6465 290a 097b = $lastInode)..{ │ │ │ -00002920: 0a09 2020 2020 7075 7368 2040 6d64 3573 .. push @md5s │ │ │ -00002930: 756d 2c20 246d 6435 7375 6d5b 406d 6435 um, $md5sum[@md5 │ │ │ -00002940: 7375 6d20 2d20 315d 3b20 2023 206c 6574 sum - 1]; # let │ │ │ -00002950: 7a74 6520 6d64 3520 5375 6d6d 6520 6b6f zte md5 Summe ko │ │ │ -00002960: 7069 6572 656e 0a09 2020 2020 6e65 7874 pieren.. next │ │ │ -00002970: 3b20 2020 2020 2020 2020 2020 2020 2023 ; # │ │ │ -00002980: 206d 6435 2053 756d 6d65 206d 7573 7320 md5 Summe muss │ │ │ -00002990: 6e69 6368 7420 6265 7265 6368 6e65 7420 nicht berechnet │ │ │ -000029a0: 7765 7264 656e 0a09 7d0a 0924 6c61 7374 werden..}..$last │ │ │ -000029b0: 496e 6f64 6520 3d20 2469 6e6f 6465 3b0a Inode = $inode;. │ │ │ -000029c0: 0a09 2320 6d64 3520 5375 6d6d 6520 6d75 ..# md5 Summe mu │ │ │ -000029d0: 7373 2062 6572 6563 686e 6574 2077 6572 ss berechnet wer │ │ │ -000029e0: 6465 6e0a 096d 7920 246d 6435 203d 2026 den..my $md5 = & │ │ │ -000029f0: 3a3a 6361 6c63 4669 6c65 4d44 3553 756d ::calcFileMD5Sum │ │ │ -00002a00: 2822 2466 2229 3b0a 0924 7072 4c6f 672d ("$f");..$prLog- │ │ │ -00002a10: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00002a20: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -00002a30: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => ["could │ │ │ -00002a40: 206e 6f74 2072 6561 6420 3c24 663e 225d not read <$f>"] │ │ │ -00002a50: 290a 0920 2020 2075 6e6c 6573 7320 246d ).. unless $m │ │ │ -00002a60: 6435 3b0a 0a09 7075 7368 2040 6d64 3573 d5;...push @md5s │ │ │ -00002a70: 756d 2c20 246d 6435 3b0a 2020 2020 7d0a um, $md5;. }. │ │ │ -00002a80: 2020 2020 656c 7369 6620 282d 6420 2466 elsif (-d $f │ │ │ -00002a90: 2920 2020 2020 2020 2320 626c 6f63 6b65 ) # blocke │ │ │ -00002aa0: 6420 6669 6c65 0a20 2020 207b 0a09 2320 d file. {..# │ │ │ -00002ab0: 6d64 3520 7375 6d20 6f66 2062 6c6f 636b md5 sum of block │ │ │ -00002ac0: 2063 6865 636b 2073 756d 2066 696c 650a check sum file. │ │ │ -00002ad0: 096d 7920 2466 426c 6f63 6b20 3d20 2224 .my $fBlock = "$ │ │ │ -00002ae0: 662f 2e6d 6435 426c 6f63 6b43 6865 636b f/.md5BlockCheck │ │ │ -00002af0: 5375 6d73 2e62 7a32 223b 0a09 756e 6c65 Sums.bz2";..unle │ │ │ -00002b00: 7373 2028 2d66 2024 6642 6c6f 636b 290a ss (-f $fBlock). │ │ │ -00002b10: 097b 0a09 2020 2020 2470 724c 6f67 2d3e .{.. $prLog-> │ │ │ -00002b20: 7072 696e 7428 272d 6b69 6e64 2720 3d3e print('-kind' => │ │ │ -00002b30: 2027 4527 2c0a 0909 0920 2027 2d73 7472 'E',.... '-str │ │ │ -00002b40: 2720 3d3e 205b 2263 616e 6e6f 7420 6f70 ' => ["cannot op │ │ │ -00002b50: 656e 203c 2466 426c 6f63 6b3e 225d 293b en <$fBlock>"]); │ │ │ -00002b60: 0a09 2020 2020 6e65 7874 3b0a 097d 0a09 .. next;..}.. │ │ │ -00002b70: 6d79 2024 6d64 3520 3d20 263a 3a63 616c my $md5 = &::cal │ │ │ -00002b80: 6346 696c 654d 4435 5375 6d28 2224 6642 cFileMD5Sum("$fB │ │ │ -00002b90: 6c6f 636b 2229 3b0a 0924 7072 4c6f 672d lock");..$prLog- │ │ │ -00002ba0: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00002bb0: 3e20 2745 272c 0a09 0920 2020 2020 2027 > 'E',... ' │ │ │ -00002bc0: 2d73 7472 2720 3d3e 205b 2263 6f75 6c64 -str' => ["could │ │ │ -00002bd0: 206e 6f74 2072 6561 6420 3c24 6642 6c6f not read <$fBlo │ │ │ -00002be0: 636b 3e22 5d29 0a09 2020 2020 756e 6c65 ck>"]).. unle │ │ │ -00002bf0: 7373 2024 6d64 353b 0a09 7075 7368 2040 ss $md5;..push @ │ │ │ -00002c00: 6669 6c65 732c 2024 663b 0a09 7075 7368 files, $f;..push │ │ │ -00002c10: 2040 6469 7273 2c20 2465 6e74 7279 3b0a @dirs, $entry;. │ │ │ -00002c20: 0970 7573 6820 406d 6435 7375 6d2c 2024 .push @md5sum, $ │ │ │ -00002c30: 6d64 353b 0a20 2020 207d 0a7d 0a0a 2370 md5;. }.}..#p │ │ │ -00002c40: 7269 6e74 2022 6669 6c65 7320 3d20 5c6e rint "files = \n │ │ │ -00002c50: 222c 206a 6f69 6e28 225c 6e22 2c20 4066 ", join("\n", @f │ │ │ -00002c60: 696c 6573 292c 2022 5c6e 223b 0a23 7072 iles), "\n";.#pr │ │ │ -00002c70: 696e 7420 226d 6435 7320 3d20 5c6e 222c int "md5s = \n", │ │ │ -00002c80: 206a 6f69 6e28 225c 6e22 2c20 406d 6435 join("\n", @md5 │ │ │ -00002c90: 7375 6d29 2c20 225c 6e22 3b0a 0a23 2055 sum), "\n";..# U │ │ │ -00002ca0: 6e74 6572 7363 6869 6564 6c69 6368 6520 nterschiedliche │ │ │ -00002cb0: 5665 7273 696f 6e65 6e20 6d65 726b 656e Versionen merken │ │ │ -00002cc0: 0a6d 7920 2824 692c 2024 6a29 3b0a 6d79 .my ($i, $j);.my │ │ │ -00002cd0: 2028 4076 6572 7369 6f6e 4669 6c65 7329 (@versionFiles) │ │ │ -00002ce0: 203d 2024 6669 6c65 735b 305d 3b0a 6d79 = $files[0];.my │ │ │ -00002cf0: 2028 4076 6572 7369 6f6e 4469 7273 2920 (@versionDirs) │ │ │ -00002d00: 3d20 2464 6972 735b 305d 3b0a 6d79 2024 = $dirs[0];.my $ │ │ │ -00002d10: 6c61 7374 6d64 3520 3d20 246d 6435 7375 lastmd5 = $md5su │ │ │ -00002d20: 6d5b 305d 3b0a 7072 696e 7466 2822 2532 m[0];.printf("%2 │ │ │ -00002d30: 6420 2573 5c6e 222c 2031 2c20 2476 6572 d %s\n", 1, $ver │ │ │ -00002d40: 7369 6f6e 4669 6c65 735b 305d 2920 756e sionFiles[0]) un │ │ │ -00002d50: 6c65 7373 2024 6c6f 6361 7465 5361 6d65 less $locateSame │ │ │ -00002d60: 3b0a 666f 7220 2824 6a20 3d20 302c 2024 ;.for ($j = 0, $ │ │ │ -00002d70: 6920 3d20 3120 3b20 2469 203c 2040 6669 i = 1 ; $i < @fi │ │ │ -00002d80: 6c65 7320 3b20 2469 2b2b 290a 7b0a 2020 les ; $i++).{. │ │ │ -00002d90: 2020 6966 2028 246d 6435 7375 6d5b 2469 if ($md5sum[$i │ │ │ -00002da0: 5d20 6e65 2024 6c61 7374 6d64 3529 0a20 ] ne $lastmd5). │ │ │ -00002db0: 2020 207b 0a09 246c 6173 746d 6435 203d {..$lastmd5 = │ │ │ -00002dc0: 2024 6d64 3573 756d 5b24 695d 3b0a 092b $md5sum[$i];..+ │ │ │ -00002dd0: 2b24 6a3b 0a09 2476 6572 7369 6f6e 4669 +$j;..$versionFi │ │ │ -00002de0: 6c65 735b 246a 5d20 3d20 2466 696c 6573 les[$j] = $files │ │ │ -00002df0: 5b24 695d 3b0a 0924 7665 7273 696f 6e44 [$i];..$versionD │ │ │ -00002e00: 6972 735b 246a 5d20 3d20 2464 6972 735b irs[$j] = $dirs[ │ │ │ -00002e10: 2469 5d3b 0a09 7072 696e 7466 2822 2532 $i];..printf("%2 │ │ │ -00002e20: 6420 2573 5c6e 222c 2024 6a20 2b20 312c d %s\n", $j + 1, │ │ │ -00002e30: 2024 7665 7273 696f 6e46 696c 6573 5b24 $versionFiles[$ │ │ │ -00002e40: 6a5d 2920 756e 6c65 7373 2024 6c6f 6361 j]) unless $loca │ │ │ -00002e50: 7465 5361 6d65 3b0a 2020 2020 7d0a 7d0a teSame;. }.}. │ │ │ -00002e60: 0a65 7869 7420 3020 756e 6c65 7373 2024 .exit 0 unless $ │ │ │ -00002e70: 6c6f 6361 7465 5361 6d65 3b0a 0a6d 7920 locateSame;..my │ │ │ -00002e80: 2576 6572 7369 6f6e 4d44 3573 756d 3b20 %versionMD5sum; │ │ │ -00002e90: 2023 206d 6435 2053 756d 6d65 6e20 6dfc # md5 Summen m. │ │ │ -00002ea0: 7373 656e 2061 7573 2024 6368 6563 6b53 ssen aus $checkS │ │ │ -00002eb0: 756d 4669 6c65 2067 656c 6573 656e 2077 umFile gelesen w │ │ │ -00002ec0: 6572 6465 6e2c 0a20 2020 2020 2020 2020 erden,. │ │ │ -00002ed0: 2020 2020 2020 2020 2020 2023 2064 6120 # da │ │ │ -00002ee0: 616e 736f 6e73 7465 6e20 6b6f 6d70 7269 ansonsten kompri │ │ │ -00002ef0: 6d69 6572 7465 2044 6174 6569 656e 206d mierte Dateien m │ │ │ -00002f00: 6974 206e 6963 6874 2d6b 6f6d 7072 696d it nicht-komprim │ │ │ -00002f10: 6965 7274 656e 0a20 2020 2020 2020 2020 ierten. │ │ │ -00002f20: 2020 2020 2020 2020 2020 2023 2076 6572 # ver │ │ │ -00002f30: 676c 6963 6865 6e20 77fc 7264 656e 210a glichen w.rden!. │ │ │ -00002f40: 6d79 2025 7665 7273 696f 6e53 697a 653b my %versionSize; │ │ │ -00002f50: 2020 2020 2320 6b65 7920 3d20 6d64 3573 # key = md5s │ │ │ -00002f60: 756d 2028 7769 6520 6f62 656e 292c 2076 um (wie oben), v │ │ │ -00002f70: 616c 7565 203d 2073 697a 6520 6175 7320 alue = size aus │ │ │ -00002f80: 2463 6865 636b 5375 6d46 696c 650a 6d79 $checkSumFile.my │ │ │ -00002f90: 2025 7665 7273 696f 6e55 4944 3b20 2020 %versionUID; │ │ │ -00002fa0: 2020 2320 6b65 7920 3d20 6d64 3573 756d # key = md5sum │ │ │ -00002fb0: 2028 7769 6520 6f62 656e 292c 2076 616c (wie oben), val │ │ │ -00002fc0: 7565 203d 2075 6964 2061 7573 2024 6368 ue = uid aus $ch │ │ │ -00002fd0: 6563 6b53 756d 4669 6c65 0a6d 7920 2576 eckSumFile.my %v │ │ │ -00002fe0: 6572 7369 6f6e 4749 443b 2020 2020 2023 ersionGID; # │ │ │ -00002ff0: 206b 6579 203d 206d 6435 7375 6d20 2877 key = md5sum (w │ │ │ -00003000: 6965 206f 6265 6e29 2c20 7661 6c75 6520 ie oben), value │ │ │ -00003010: 3d20 7569 6420 6175 7320 2463 6865 636b = uid aus $check │ │ │ -00003020: 5375 6d46 696c 650a 6d79 2025 7665 7273 SumFile.my %vers │ │ │ -00003030: 696f 6e4d 6f64 653b 2020 2020 2320 6b65 ionMode; # ke │ │ │ -00003040: 7920 3d20 6d64 3573 756d 2028 7769 6520 y = md5sum (wie │ │ │ -00003050: 6f62 656e 292c 2076 616c 7565 203d 206d oben), value = m │ │ │ -00003060: 6f64 6520 6175 7320 2463 6865 636b 5375 ode aus $checkSu │ │ │ -00003070: 6d46 696c 650a 6d79 2025 7665 7273 696f mFile.my %versio │ │ │ -00003080: 6e43 5469 6d65 3b20 2020 2320 6b65 7920 nCTime; # key │ │ │ -00003090: 3d20 6d64 3573 756d 2028 7769 6520 6f62 = md5sum (wie ob │ │ │ -000030a0: 656e 292c 2076 616c 7565 203d 2063 7469 en), value = cti │ │ │ -000030b0: 6d65 2061 7573 2024 6368 6563 6b53 756d me aus $checkSum │ │ │ -000030c0: 4669 6c65 0a6d 7920 2576 6572 7369 6f6e File.my %version │ │ │ -000030d0: 4d54 696d 653b 2020 2023 206b 6579 203d MTime; # key = │ │ │ -000030e0: 206d 6435 7375 6d20 2877 6965 206f 6265 md5sum (wie obe │ │ │ -000030f0: 6e29 2c20 7661 6c75 6520 3d20 6d74 696d n), value = mtim │ │ │ -00003100: 6520 6175 7320 2463 6865 636b 5375 6d46 e aus $checkSumF │ │ │ -00003110: 696c 650a 6d79 2025 7665 7273 696f 6e43 ile.my %versionC │ │ │ -00003120: 6f6d 7072 3b20 2020 2320 6b65 7920 3d20 ompr; # key = │ │ │ -00003130: 6d64 3573 756d 2028 7769 6520 6f62 656e md5sum (wie oben │ │ │ -00003140: 292c 2076 616c 7565 203d 2063 7c75 2061 ), value = c|u a │ │ │ -00003150: 7573 2024 6368 6563 6b53 756d 4669 6c65 us $checkSumFile │ │ │ -00003160: 0a6d 7920 2840 7665 7273 696f 6e4d 4435 .my (@versionMD5 │ │ │ -00003170: 7329 3b0a 6d79 2028 4064 756d 6d79 293b s);.my (@dummy); │ │ │ -00003180: 0a0a 6d79 2024 616c 6c20 3d20 4076 6572 ..my $all = @ver │ │ │ -00003190: 7369 6f6e 4469 7273 202b 2040 616c 6c44 sionDirs + @allD │ │ │ -000031a0: 6972 733b 0a6d 7920 2461 6c6c 436f 756e irs;.my $allCoun │ │ │ -000031b0: 7420 3d20 303b 0a6d 7920 2461 6c6c 4163 t = 0;.my $allAc │ │ │ -000031c0: 7443 6f75 6e74 203d 2030 3b0a 666f 7265 tCount = 0;.fore │ │ │ -000031d0: 6163 6820 2465 6e74 7279 2028 4076 6572 ach $entry (@ver │ │ │ -000031e0: 7369 6f6e 4469 7273 2920 2020 2320 6a65 sionDirs) # je │ │ │ -000031f0: 747a 7420 616c 6c65 207a 7572 2044 6174 tzt alle zur Dat │ │ │ -00003200: 6569 202a 6765 7370 6569 6368 6572 7465 ei *gespeicherte │ │ │ -00003210: 6e2a 0a7b 2020 2020 2020 2020 2020 2020 n*.{ │ │ │ -00003220: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00003230: 2020 2023 2075 6e74 6572 7363 6869 6564 # unterschied │ │ │ -00003240: 6c69 6368 656e 206d 6435 2053 756d 6d65 lichen md5 Summe │ │ │ -00003250: 6e20 6c61 6465 6e0a 2020 2020 6966 2028 n laden. if ( │ │ │ -00003260: 2476 6572 626f 7365 290a 2020 2020 7b0a $verbose). {. │ │ │ -00003270: 0924 7072 4c6f 672d 3e70 7269 6e74 2827 .$prLog->print(' │ │ │ -00003280: 2d6b 696e 6427 203d 3e20 2749 272c 0a09 -kind' => 'I',.. │ │ │ -00003290: 0920 2020 2020 2027 2d73 7472 2720 3d3e . '-str' => │ │ │ -000032a0: 205b 2272 6561 6469 6e67 203c 2465 6e74 ["reading <$ent │ │ │ -000032b0: 7279 3e22 5d29 3b0a 2020 2020 7d0a 2020 ry>"]);. }. │ │ │ -000032c0: 2020 656c 7365 0a20 2020 207b 0a09 6966 else. {..if │ │ │ -000032d0: 2028 2461 6c6c 436f 756e 742b 2b20 2f20 ($allCount++ / │ │ │ -000032e0: 2461 6c6c 203e 3d20 2461 6c6c 4163 7443 $all >= $allActC │ │ │ -000032f0: 6f75 6e74 202f 2031 3029 0a09 7b0a 0920 ount / 10)..{.. │ │ │ -00003300: 2020 2070 7269 6e74 2022 2461 6c6c 4163 print "$allAc │ │ │ -00003310: 7443 6f75 6e74 2022 3b0a 0920 2020 2053 tCount ";.. S │ │ │ -00003320: 5444 4f55 542d 3e61 7574 6f66 6c75 7368 TDOUT->autoflush │ │ │ -00003330: 2831 293b 0a09 2020 2020 2461 6c6c 4163 (1);.. $allAc │ │ │ -00003340: 7443 6f75 6e74 2b2b 3b0a 097d 0a20 2020 tCount++;..}. │ │ │ -00003350: 207d 0a0a 2020 2020 6d79 2024 666f 756e }.. my $foun │ │ │ -00003360: 6420 3d20 303b 0a20 2020 206d 7920 2472 d = 0;. my $r │ │ │ -00003370: 6373 6620 3d20 7265 6164 4368 6563 6b53 csf = readCheckS │ │ │ -00003380: 756d 4669 6c65 2d3e 6e65 7728 272d 6368 umFile->new('-ch │ │ │ -00003390: 6563 6b53 756d 4669 6c65 2720 3d3e 2022 eckSumFile' => " │ │ │ -000033a0: 2465 6e74 7279 2f24 6368 6563 6b53 756d $entry/$checkSum │ │ │ -000033b0: 4669 6c65 222c 0a09 0909 0920 2020 2020 File",..... │ │ │ -000033c0: 272d 7072 4c6f 6727 203d 3e20 2470 724c '-prLog' => $prL │ │ │ -000033d0: 6f67 293b 0a09 0909 0920 2020 2020 0a23 og);..... .# │ │ │ -000033e0: 2020 2020 6d79 2024 6d65 7461 203d 2024 my $meta = $ │ │ │ -000033f0: 7263 7366 2d3e 6765 744d 6574 6156 616c rcsf->getMetaVal │ │ │ -00003400: 4669 656c 6428 293b 0a23 2020 2020 6d79 Field();.# my │ │ │ -00003410: 2024 706f 7374 6669 7820 3d20 2824 246d $postfix = ($$m │ │ │ -00003420: 6574 617b 2770 6f73 7466 6978 277d 292d eta{'postfix'})- │ │ │ -00003430: 3e5b 305d 3b20 2020 2023 2070 6f73 7466 >[0]; # postf │ │ │ -00003440: 6978 2028 6b6f 6d70 722e 206f 6465 7220 ix (kompr. oder │ │ │ -00003450: 6e69 6368 7429 206d 6572 6b65 6e0a 2020 nicht) merken. │ │ │ -00003460: 2020 6d79 2024 706f 7374 6669 7820 3d20 my $postfix = │ │ │ -00003470: 2472 6373 662d 3e67 6574 496e 666f 5769 $rcsf->getInfoWi │ │ │ -00003480: 7468 5061 7228 2770 6f73 7466 6978 2729 thPar('postfix') │ │ │ -00003490: 3b0a 0a20 2020 206d 7920 2824 6d64 3573 ;.. my ($md5s │ │ │ -000034a0: 756d 2c20 2463 6f6d 7072 2c20 2464 6576 um, $compr, $dev │ │ │ -000034b0: 496e 6f64 652c 2024 696e 6f64 6542 6163 Inode, $inodeBac │ │ │ -000034c0: 6b75 702c 2024 6374 696d 652c 2024 6d74 kup, $ctime, $mt │ │ │ -000034d0: 696d 652c 2024 6174 696d 652c 0a09 2473 ime, $atime,..$s │ │ │ -000034e0: 697a 652c 2024 7569 642c 2024 6769 642c ize, $uid, $gid, │ │ │ -000034f0: 2024 6d6f 6465 2c20 2466 696c 656e 616d $mode, $filenam │ │ │ -00003500: 6529 3b0a 2020 2020 7768 696c 6520 2828 e);. while (( │ │ │ -00003510: 2824 6d64 3573 756d 2c20 2463 6f6d 7072 ($md5sum, $compr │ │ │ -00003520: 2c20 2464 6576 496e 6f64 652c 2024 696e , $devInode, $in │ │ │ -00003530: 6f64 6542 6163 6b75 702c 2024 6374 696d odeBackup, $ctim │ │ │ -00003540: 652c 2024 6d74 696d 652c 2024 6174 696d e, $mtime, $atim │ │ │ -00003550: 652c 0a09 2020 2020 2473 697a 652c 2024 e,.. $size, $ │ │ │ -00003560: 7569 642c 2024 6769 642c 2024 6d6f 6465 uid, $gid, $mode │ │ │ -00003570: 2c20 2466 696c 656e 616d 6529 203d 2024 , $filename) = $ │ │ │ -00003580: 7263 7366 2d3e 6e65 7874 4c69 6e65 2829 rcsf->nextLine() │ │ │ -00003590: 2920 3e20 3029 0a20 2020 207b 0a09 2466 ) > 0). {..$f │ │ │ -000035a0: 696c 656e 616d 6520 2e3d 2024 706f 7374 ilename .= $post │ │ │ -000035b0: 6669 7820 6966 2024 636f 6d70 7220 6571 fix if $compr eq │ │ │ -000035c0: 2027 6327 3b0a 0a09 6966 2028 2466 696c 'c';...if ($fil │ │ │ -000035d0: 6557 6974 6852 656c 5061 7468 2065 7120 eWithRelPath eq │ │ │ -000035e0: 2466 696c 656e 616d 6529 0a09 7b0a 0920 $filename)..{.. │ │ │ -000035f0: 2020 2070 7573 6820 4076 6572 7369 6f6e push @version │ │ │ -00003600: 4d44 3573 2c20 246d 6435 7375 6d3b 2020 MD5s, $md5sum; │ │ │ -00003610: 2020 2020 2023 204f 7269 6769 6e61 6c20 # Original │ │ │ -00003620: 6d64 3520 5375 6d6d 6520 6d65 726b 656e md5 Summe merken │ │ │ -00003630: 0a09 2020 2020 7075 7368 2040 6475 6d6d .. push @dumm │ │ │ -00003640: 792c 2024 656e 7472 793b 0a09 2020 2020 y, $entry;.. │ │ │ -00003650: 2476 6572 7369 6f6e 4d44 3573 756d 7b24 $versionMD5sum{$ │ │ │ -00003660: 6d64 3573 756d 7d20 3d20 5b5d 3b0a 0920 md5sum} = [];.. │ │ │ -00003670: 2020 2024 7665 7273 696f 6e53 697a 657b $versionSize{ │ │ │ -00003680: 246d 6435 7375 6d7d 203d 2024 7369 7a65 $md5sum} = $size │ │ │ -00003690: 3b0a 0920 2020 2024 7665 7273 696f 6e55 ;.. $versionU │ │ │ -000036a0: 4944 7b24 6d64 3573 756d 7d20 3d20 2475 ID{$md5sum} = $u │ │ │ -000036b0: 6964 3b0a 0920 2020 2024 7665 7273 696f id;.. $versio │ │ │ -000036c0: 6e47 4944 7b24 6d64 3573 756d 7d20 3d20 nGID{$md5sum} = │ │ │ -000036d0: 2467 6964 3b0a 0920 2020 2024 7665 7273 $gid;.. $vers │ │ │ -000036e0: 696f 6e4d 6f64 657b 246d 6435 7375 6d7d ionMode{$md5sum} │ │ │ -000036f0: 203d 2024 6d6f 6465 3b0a 0920 2020 2024 = $mode;.. $ │ │ │ -00003700: 7665 7273 696f 6e43 5469 6d65 7b24 6d64 versionCTime{$md │ │ │ -00003710: 3573 756d 7d20 3d20 2463 7469 6d65 3b0a 5sum} = $ctime;. │ │ │ -00003720: 0920 2020 2024 7665 7273 696f 6e4d 5469 . $versionMTi │ │ │ -00003730: 6d65 7b24 6d64 3573 756d 7d20 3d20 246d me{$md5sum} = $m │ │ │ -00003740: 7469 6d65 3b0a 0920 2020 2024 7665 7273 time;.. $vers │ │ │ -00003750: 696f 6e43 6f6d 7072 7b24 6d64 3573 756d ionCompr{$md5sum │ │ │ -00003760: 7d20 3d20 2463 6f6d 7072 3b0a 0920 2020 } = $compr;.. │ │ │ -00003770: 2024 666f 756e 6420 3d20 313b 0a09 2020 $found = 1;.. │ │ │ -00003780: 2020 6c61 7374 3b0a 097d 0a20 2020 207d last;..}. } │ │ │ -00003790: 0a20 2020 2024 7072 4c6f 672d 3e70 7269 . $prLog->pri │ │ │ -000037a0: 6e74 2827 2d6b 696e 6427 203d 3e20 2745 nt('-kind' => 'E │ │ │ -000037b0: 272c 0a20 2020 2020 2020 2020 2020 2020 ',. │ │ │ -000037c0: 2020 2020 2027 2d73 7472 2720 3d3e 205b '-str' => [ │ │ │ -000037d0: 2263 616e 6e6f 7420 6669 6e64 203c 2466 "cannot find <$f │ │ │ -000037e0: 696c 6557 6974 6852 656c 5061 7468 3e20 ileWithRelPath> │ │ │ -000037f0: 696e 203c 2465 6e74 7279 3e22 5d29 0a20 in <$entry>"]). │ │ │ -00003800: 2020 2020 2020 2069 6620 2824 666f 756e if ($foun │ │ │ -00003810: 6420 3d3d 2030 293b 0a7d 0a28 4076 6572 d == 0);.}.(@ver │ │ │ -00003820: 7369 6f6e 4469 7273 2920 3d20 2840 6475 sionDirs) = (@du │ │ │ -00003830: 6d6d 7929 3b0a 0a23 7072 696e 7420 225c mmy);..#print "\ │ │ │ -00003840: 6e4f 7269 6769 6e61 6c2d 4d44 352d 5375 nOriginal-MD5-Su │ │ │ -00003850: 6d6d 656e 3a5c 6e22 3b0a 2370 7269 6e74 mmen:\n";.#print │ │ │ -00003860: 2022 7665 7273 696f 6e46 696c 6573 203d "versionFiles = │ │ │ -00003870: 205c 6e22 2c20 6a6f 696e 2822 5c6e 222c \n", join("\n", │ │ │ -00003880: 2040 7665 7273 696f 6e46 696c 6573 292c @versionFiles), │ │ │ -00003890: 2022 5c6e 223b 0a23 7072 696e 7420 2276 "\n";.#print "v │ │ │ -000038a0: 6572 7369 6f6e 4d44 3573 203d 205c 6e22 ersionMD5s = \n" │ │ │ -000038b0: 2c20 6a6f 696e 2822 5c6e 222c 2040 7665 , join("\n", @ve │ │ │ -000038c0: 7273 696f 6e4d 4435 7329 2c20 225c 6e22 rsionMD5s), "\n" │ │ │ -000038d0: 3b0a 0a23 0a23 2041 6c6c 6520 2463 6865 ;..#.# Alle $che │ │ │ -000038e0: 636b 5375 6d46 696c 6573 2064 7572 6368 ckSumFiles durch │ │ │ -000038f0: 6765 6865 6e20 756e 6420 4461 7465 6965 gehen und Dateie │ │ │ -00003900: 6e20 6d69 7420 7061 7373 656e 6465 6e20 n mit passenden │ │ │ -00003910: 4d44 3520 5375 6d6d 656e 206d 6572 6b65 MD5 Summen merke │ │ │ -00003920: 6e0a 230a 666f 7265 6163 6820 2465 6e74 n.#.foreach $ent │ │ │ -00003930: 7279 2028 4061 6c6c 4469 7273 290a 7b0a ry (@allDirs).{. │ │ │ -00003940: 2020 2020 6966 2028 2476 6572 626f 7365 if ($verbose │ │ │ -00003950: 290a 2020 2020 7b0a 0924 7072 4c6f 672d ). {..$prLog- │ │ │ -00003960: 3e70 7269 6e74 2827 2d6b 696e 6427 203d >print('-kind' = │ │ │ -00003970: 3e20 2749 272c 0a09 0920 2020 2020 2027 > 'I',... ' │ │ │ -00003980: 2d73 7472 2720 3d3e 205b 2263 6865 636b -str' => ["check │ │ │ -00003990: 696e 6720 3c24 656e 7472 793e 225d 293b ing <$entry>"]); │ │ │ -000039a0: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -000039b0: 2020 2020 7b0a 0969 6620 2824 616c 6c43 {..if ($allC │ │ │ -000039c0: 6f75 6e74 2b2b 202f 2024 616c 6c20 3e3d ount++ / $all >= │ │ │ -000039d0: 2024 616c 6c41 6374 436f 756e 7420 2f20 $allActCount / │ │ │ -000039e0: 3130 290a 097b 0a09 2020 2020 7072 696e 10)..{.. prin │ │ │ -000039f0: 7420 2224 616c 6c41 6374 436f 756e 7420 t "$allActCount │ │ │ -00003a00: 223b 0a09 2020 2020 5354 444f 5554 2d3e ";.. STDOUT-> │ │ │ -00003a10: 6175 746f 666c 7573 6828 3129 3b0a 0920 autoflush(1);.. │ │ │ -00003a20: 2020 2024 616c 6c41 6374 436f 756e 742b $allActCount+ │ │ │ -00003a30: 2b3b 0a09 7d0a 2020 2020 7d0a 0a20 2020 +;..}. }.. │ │ │ -00003a40: 206d 7920 2472 6373 6620 3d20 7265 6164 my $rcsf = read │ │ │ -00003a50: 4368 6563 6b53 756d 4669 6c65 2d3e 6e65 CheckSumFile->ne │ │ │ -00003a60: 7728 272d 6368 6563 6b53 756d 4669 6c65 w('-checkSumFile │ │ │ -00003a70: 2720 3d3e 2022 2465 6e74 7279 2f24 6368 ' => "$entry/$ch │ │ │ -00003a80: 6563 6b53 756d 4669 6c65 222c 0a09 0909 eckSumFile",.... │ │ │ -00003a90: 0920 2020 2020 272d 7072 4c6f 6727 203d . '-prLog' = │ │ │ -00003aa0: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. │ │ │ -00003ab0: 6d79 2028 246d 6435 7375 6d2c 2024 636f my ($md5sum, $co │ │ │ -00003ac0: 6d70 722c 2024 6465 7649 6e6f 6465 2c20 mpr, $devInode, │ │ │ -00003ad0: 2469 6e6f 6465 4261 636b 7570 2c20 2463 $inodeBackup, $c │ │ │ -00003ae0: 7469 6d65 2c20 246d 7469 6d65 2c20 2461 time, $mtime, $a │ │ │ -00003af0: 7469 6d65 2c0a 0924 7369 7a65 2c20 2475 time,..$size, $u │ │ │ -00003b00: 6964 2c20 2467 6964 2c20 246d 6f64 652c id, $gid, $mode, │ │ │ -00003b10: 2024 6669 6c65 6e61 6d65 293b 0a20 2020 $filename);. │ │ │ -00003b20: 2077 6869 6c65 2028 2828 246d 6435 7375 while ((($md5su │ │ │ -00003b30: 6d2c 2024 636f 6d70 722c 2024 6465 7649 m, $compr, $devI │ │ │ -00003b40: 6e6f 6465 2c20 2469 6e6f 6465 4261 636b node, $inodeBack │ │ │ -00003b50: 7570 2c20 2463 7469 6d65 2c20 246d 7469 up, $ctime, $mti │ │ │ -00003b60: 6d65 2c20 2461 7469 6d65 2c0a 0920 2020 me, $atime,.. │ │ │ -00003b70: 2024 7369 7a65 2c20 2475 6964 2c20 2467 $size, $uid, $g │ │ │ -00003b80: 6964 2c20 246d 6f64 652c 2024 6669 6c65 id, $mode, $file │ │ │ -00003b90: 6e61 6d65 2920 3d20 2472 6373 662d 3e6e name) = $rcsf->n │ │ │ -00003ba0: 6578 744c 696e 6528 2929 203e 2030 290a extLine()) > 0). │ │ │ -00003bb0: 2020 2020 7b0a 0a09 6966 2028 6578 6973 {...if (exis │ │ │ -00003bc0: 7473 2824 7665 7273 696f 6e4d 4435 7375 ts($versionMD5su │ │ │ -00003bd0: 6d7b 246d 6435 7375 6d7d 2929 0a09 7b0a m{$md5sum}))..{. │ │ │ -00003be0: 0920 2020 2070 7573 6820 407b 2476 6572 . push @{$ver │ │ │ -00003bf0: 7369 6f6e 4d44 3573 756d 7b24 6d64 3573 sionMD5sum{$md5s │ │ │ -00003c00: 756d 7d7d 2c20 2224 656e 7472 792f 2466 um}}, "$entry/$f │ │ │ -00003c10: 696c 656e 616d 6522 3b0a 2309 2020 2020 ilename";.#. │ │ │ -00003c20: 7072 696e 7420 2224 6d64 3573 756d 2024 print "$md5sum $ │ │ │ -00003c30: 656e 7472 792f 2466 696c 656e 616d 655c entry/$filename\ │ │ │ -00003c40: 6e22 3b0a 097d 0a20 2020 207d 0a23 2020 n";..}. }.# │ │ │ -00003c50: 2020 636c 6f73 6528 4649 4c45 293b 0a7d close(FILE);.} │ │ │ -00003c60: 0a70 7269 6e74 2022 5c6e 2220 756e 6c65 .print "\n" unle │ │ │ -00003c70: 7373 2024 7665 7262 6f73 653b 0a0a 0a23 ss $verbose;...# │ │ │ -00003c80: 2041 7573 6761 6265 3a0a 0a23 2053 6f72 Ausgabe:..# Sor │ │ │ -00003c90: 7469 6572 656e 2064 6572 2067 6566 756e tieren der gefun │ │ │ -00003ca0: 6465 6e65 6e20 4461 7465 6965 6e20 7072 denen Dateien pr │ │ │ -00003cb0: 6f20 6d64 3520 5375 6d6d 650a 666f 7265 o md5 Summe.fore │ │ │ -00003cc0: 6163 6820 2465 6e74 7279 2028 6b65 7973 ach $entry (keys │ │ │ -00003cd0: 2025 7665 7273 696f 6e4d 4435 7375 6d29 %versionMD5sum) │ │ │ -00003ce0: 0a7b 0a20 2020 2040 7b24 7665 7273 696f .{. @{$versio │ │ │ -00003cf0: 6e4d 4435 7375 6d7b 2465 6e74 7279 7d7d nMD5sum{$entry}} │ │ │ -00003d00: 203d 2073 6f72 7420 407b 2476 6572 7369 = sort @{$versi │ │ │ -00003d10: 6f6e 4d44 3573 756d 7b24 656e 7472 797d onMD5sum{$entry} │ │ │ -00003d20: 7d3b 0a7d 0a0a 2320 4175 6662 6175 656e };.}..# Aufbauen │ │ │ -00003d30: 2065 696e 6572 204c 6973 7465 2c20 6469 einer Liste, di │ │ │ -00003d40: 6520 736f 2073 6f72 7469 6572 7420 7765 e so sortiert we │ │ │ -00003d50: 7264 656e 206b 616e 6e2c 2064 61df 2064 rden kann, da. d │ │ │ -00003d60: 6965 20e4 6c74 6573 7465 6e0a 2320 4461 ie .ltesten.# Da │ │ │ -00003d70: 7465 696e 616d 656e 2064 6965 2065 7273 teinamen die ers │ │ │ -00003d80: 7465 6e20 5665 7273 696f 6e73 6e75 6d6d ten Versionsnumm │ │ │ -00003d90: 6572 6e20 6265 6b6f 6d6d 656e 0a6d 7920 ern bekommen.my │ │ │ -00003da0: 406c 6973 743b 0a66 6f72 6561 6368 2024 @list;.foreach $ │ │ │ -00003db0: 656e 7472 7920 286b 6579 7320 2576 6572 entry (keys %ver │ │ │ -00003dc0: 7369 6f6e 4d44 3573 756d 290a 7b0a 2020 sionMD5sum).{. │ │ │ -00003dd0: 2020 7075 7368 2040 6c69 7374 2c20 7b0a push @list, {. │ │ │ -00003de0: 0927 6d64 3527 203d 3e20 2465 6e74 7279 .'md5' => $entry │ │ │ -00003df0: 2c0a 0927 6c69 7374 2720 3d3e 2024 7665 ,..'list' => $ve │ │ │ -00003e00: 7273 696f 6e4d 4435 7375 6d7b 2465 6e74 rsionMD5sum{$ent │ │ │ -00003e10: 7279 7d2c 0a09 2773 697a 6527 203d 3e20 ry},..'size' => │ │ │ -00003e20: 2476 6572 7369 6f6e 5369 7a65 7b24 656e $versionSize{$en │ │ │ -00003e30: 7472 797d 2c0a 0927 7569 6427 203d 3e20 try},..'uid' => │ │ │ -00003e40: 2476 6572 7369 6f6e 5549 447b 2465 6e74 $versionUID{$ent │ │ │ -00003e50: 7279 7d2c 0a09 2767 6964 2720 3d3e 2024 ry},..'gid' => $ │ │ │ -00003e60: 7665 7273 696f 6e47 4944 7b24 656e 7472 versionGID{$entr │ │ │ -00003e70: 797d 2c0a 0927 6d6f 6465 2720 3d3e 2024 y},..'mode' => $ │ │ │ -00003e80: 7665 7273 696f 6e4d 6f64 657b 2465 6e74 versionMode{$ent │ │ │ -00003e90: 7279 7d2c 0a09 2763 7469 6d65 2720 3d3e ry},..'ctime' => │ │ │ -00003ea0: 2024 7665 7273 696f 6e43 5469 6d65 7b24 $versionCTime{$ │ │ │ -00003eb0: 656e 7472 797d 2c0a 0927 6d74 696d 6527 entry},..'mtime' │ │ │ -00003ec0: 203d 3e20 2476 6572 7369 6f6e 4d54 696d => $versionMTim │ │ │ -00003ed0: 657b 2465 6e74 7279 7d2c 0a09 2763 6f6d e{$entry},..'com │ │ │ -00003ee0: 7072 2720 3d3e 2024 7665 7273 696f 6e43 pr' => $versionC │ │ │ -00003ef0: 6f6d 7072 7b24 656e 7472 797d 0a20 2020 ompr{$entry}. │ │ │ -00003f00: 207d 3b0a 7d0a 2469 203d 2031 3b0a 666f };.}.$i = 1;.fo │ │ │ -00003f10: 7265 6163 6820 2465 6e74 7279 2028 2073 reach $entry ( s │ │ │ -00003f20: 6f72 7420 7b20 2461 2d3e 7b27 6c69 7374 ort { $a->{'list │ │ │ -00003f30: 277d 5b30 5d20 636d 7020 2462 2d3e 7b27 '}[0] cmp $b->{' │ │ │ -00003f40: 6c69 7374 277d 5b30 5d20 7d20 406c 6973 list'}[0] } @lis │ │ │ -00003f50: 7420 290a 7b0a 2020 2020 6d79 2024 7076 t ).{. my $pv │ │ │ -00003f60: 7320 3d20 2727 3b0a 2020 2020 6966 2028 s = '';. if ( │ │ │ -00003f70: 2473 686f 7753 697a 6529 0a20 2020 207b $showSize). { │ │ │ -00003f80: 0a09 2470 7673 203d 2027 2027 202e 2028 ..$pvs = ' ' . ( │ │ │ -00003f90: 2668 756d 616e 5265 6164 6162 6c65 2824 &humanReadable($ │ │ │ -00003fa0: 656e 7472 792d 3e7b 2773 697a 6527 7d29 entry->{'size'}) │ │ │ -00003fb0: 295b 305d 202e 2027 2027 202e 0a09 2020 )[0] . ' ' ... │ │ │ -00003fc0: 2020 2465 6e74 7279 2d3e 7b27 7369 7a65 $entry->{'size │ │ │ -00003fd0: 277d 202e 2027 2062 7974 6573 2027 3b0a '} . ' bytes ';. │ │ │ -00003fe0: 2020 2020 6966 2028 2465 6e74 7279 2d3e if ($entry-> │ │ │ -00003ff0: 7b27 636f 6d70 7227 7d20 6571 2027 6327 {'compr'} eq 'c' │ │ │ -00004000: 290a 2020 2020 7b0a 0924 7076 7320 2e3d ). {..$pvs .= │ │ │ -00004010: 2027 2863 6f6d 7072 6573 7365 6429 273b '(compressed)'; │ │ │ -00004020: 0a20 2020 207d 0a20 2020 2065 6c73 650a . }. else. │ │ │ -00004030: 2020 2020 7b0a 0924 7076 7320 2e3d 2027 {..$pvs .= ' │ │ │ -00004040: 286e 6f74 2063 6f6d 7072 6573 7365 6429 (not compressed) │ │ │ -00004050: 273b 0a20 2020 207d 0a20 2020 207d 0a20 ';. }. }. │ │ │ -00004060: 2020 2070 7269 6e74 2022 2469 3a24 7076 print "$i:$pv │ │ │ -00004070: 7320 286d 6435 3d22 2c20 2465 6e74 7279 s (md5=", $entry │ │ │ -00004080: 2d3e 7b27 6d64 3527 7d2c 2022 295c 6e22 ->{'md5'}, ")\n" │ │ │ -00004090: 3b0a 2020 2020 6d79 2040 703b 0a20 2020 ;. my @p;. │ │ │ -000040a0: 2070 7573 6820 4070 2c20 2775 6964 203d push @p, 'uid = │ │ │ -000040b0: 2027 202e 2024 656e 7472 792d 3e7b 2775 ' . $entry->{'u │ │ │ -000040c0: 6964 277d 2069 6620 2473 686f 7755 4944 id'} if $showUID │ │ │ -000040d0: 3b0a 2020 2020 7075 7368 2040 702c 2027 ;. push @p, ' │ │ │ -000040e0: 6769 6420 3d20 2720 2e20 2465 6e74 7279 gid = ' . $entry │ │ │ -000040f0: 2d3e 7b27 6769 6427 7d20 2069 6620 2473 ->{'gid'} if $s │ │ │ -00004100: 686f 7747 4944 3b0a 2020 2020 7075 7368 howGID;. push │ │ │ -00004110: 2040 702c 2073 7072 696e 7466 2822 6d6f @p, sprintf("mo │ │ │ -00004120: 6465 203d 2030 256f 222c 2024 656e 7472 de = 0%o", $entr │ │ │ -00004130: 792d 3e7b 276d 6f64 6527 7d29 2069 6620 y->{'mode'}) if │ │ │ -00004140: 2473 686f 774d 6f64 653b 0a20 2020 2070 $showMode;. p │ │ │ -00004150: 7269 6e74 2027 2020 2020 272c 206a 6f69 rint ' ', joi │ │ │ -00004160: 6e28 272c 2027 2c20 4070 292c 2022 5c6e n(', ', @p), "\n │ │ │ -00004170: 2220 6966 2028 4070 293b 0a20 2020 2040 " if (@p);. @ │ │ │ -00004180: 7020 3d20 2829 3b0a 2020 2020 6966 2028 p = ();. if ( │ │ │ -00004190: 2473 686f 7743 5469 6d65 290a 2020 2020 $showCTime). │ │ │ -000041a0: 7b0a 096d 7920 2464 203d 2064 6174 6554 {..my $d = dateT │ │ │ -000041b0: 6f6f 6c73 2d3e 6e65 7728 272d 756e 6978 ools->new('-unix │ │ │ -000041c0: 5469 6d65 2720 3d3e 2024 656e 7472 792d Time' => $entry- │ │ │ -000041d0: 3e7b 2763 7469 6d65 277d 293b 0a09 7075 >{'ctime'});..pu │ │ │ -000041e0: 7368 2040 702c 2027 6374 696d 6520 3d20 sh @p, 'ctime = │ │ │ -000041f0: 2720 2e20 2464 2d3e 6765 7444 6174 6554 ' . $d->getDateT │ │ │ -00004200: 696d 6528 293b 0a20 2020 207d 0a20 2020 ime();. }. │ │ │ -00004210: 2069 6620 2824 7368 6f77 4d54 696d 6529 if ($showMTime) │ │ │ -00004220: 0a20 2020 207b 0a09 6d79 2024 6420 3d20 . {..my $d = │ │ │ -00004230: 6461 7465 546f 6f6c 732d 3e6e 6577 2827 dateTools->new(' │ │ │ -00004240: 2d75 6e69 7854 696d 6527 203d 3e20 2465 -unixTime' => $e │ │ │ -00004250: 6e74 7279 2d3e 7b27 6d74 696d 6527 7d29 ntry->{'mtime'}) │ │ │ -00004260: 3b0a 0970 7573 6820 4070 2c20 276d 7469 ;..push @p, 'mti │ │ │ -00004270: 6d65 203d 2027 202e 2024 642d 3e67 6574 me = ' . $d->get │ │ │ -00004280: 4461 7465 5469 6d65 2829 3b0a 2020 2020 DateTime();. │ │ │ -00004290: 7d0a 2020 2020 6966 2028 2473 686f 7741 }. if ($showA │ │ │ -000042a0: 5469 6d65 290a 2020 2020 7b0a 096d 7920 Time). {..my │ │ │ -000042b0: 2464 203d 2064 6174 6554 6f6f 6c73 2d3e $d = dateTools-> │ │ │ -000042c0: 6e65 7728 272d 756e 6978 5469 6d65 2720 new('-unixTime' │ │ │ -000042d0: 3d3e 2024 656e 7472 792d 3e7b 2761 7469 => $entry->{'ati │ │ │ -000042e0: 6d65 277d 293b 0a09 7075 7368 2040 702c me'});..push @p, │ │ │ -000042f0: 2027 6174 696d 6520 3d20 2720 2e20 2464 'atime = ' . $d │ │ │ -00004300: 2d3e 6765 7444 6174 6554 696d 6528 293b ->getDateTime(); │ │ │ -00004310: 0a20 2020 207d 0a20 2020 2070 7269 6e74 . }. print │ │ │ -00004320: 2027 2020 2020 272c 206a 6f69 6e28 272c ' ', join(', │ │ │ -00004330: 2027 2c20 4070 292c 2022 5c6e 2220 6966 ', @p), "\n" if │ │ │ -00004340: 2028 4070 293b 0a20 2020 2070 7269 6e74 (@p);. print │ │ │ -00004350: 2022 5c74 223b 0a20 2020 2070 7269 6e74 "\t";. print │ │ │ -00004360: 206a 6f69 6e28 225c 6e5c 7422 2c20 407b join("\n\t", @{ │ │ │ -00004370: 2465 6e74 7279 2d3e 7b27 6c69 7374 277d $entry->{'list'} │ │ │ -00004380: 7d29 2c20 225c 6e22 3b0a 2020 2020 2b2b }), "\n";. ++ │ │ │ -00004390: 2469 3b0a 7d0a 0a65 7869 7420 303b 0a $i;.}..exit 0;. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 7056 6572 7369 6f6e 730a pVersions. │ │ ├── ./usr/bin/storeBackup_du │ │ │ @@ -1,419 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4865 696e 7a2d 4a6f 7365 t (C) Heinz-Jose │ │ │ -00000030: 6620 436c 6165 7320 2832 3030 322d 3230 f Claes (2002-20 │ │ │ -00000040: 3232 290a 2320 2020 2020 2020 2020 2020 22).# │ │ │ -00000050: 2020 2020 2020 686a 636c 6165 7340 7765 hjclaes@we │ │ │ -00000060: 622e 6465 0a23 2020 200a 2320 2020 5468 b.de.# .# Th │ │ │ -00000070: 6973 2070 726f 6772 616d 2069 7320 6672 is program is fr │ │ │ -00000080: 6565 2073 6f66 7477 6172 653a 2079 6f75 ee software: you │ │ │ -00000090: 2063 616e 2072 6564 6973 7472 6962 7574 can redistribut │ │ │ -000000a0: 6520 6974 2061 6e64 2f6f 7220 6d6f 6469 e it and/or modi │ │ │ -000000b0: 6679 0a23 2020 2069 7420 756e 6465 7220 fy.# it under │ │ │ -000000c0: 7468 6520 7465 726d 7320 6f66 2074 6865 the terms of the │ │ │ -000000d0: 2047 4e55 2047 656e 6572 616c 2050 7562 GNU General Pub │ │ │ -000000e0: 6c69 6320 4c69 6365 6e73 6520 6173 2070 lic License as p │ │ │ -000000f0: 7562 6c69 7368 6564 2062 790a 2320 2020 ublished by.# │ │ │ -00000100: 7468 6520 4672 6565 2053 6f66 7477 6172 the Free Softwar │ │ │ -00000110: 6520 466f 756e 6461 7469 6f6e 2c20 6569 e Foundation, ei │ │ │ -00000120: 7468 6572 2076 6572 7369 6f6e 2033 206f ther version 3 o │ │ │ -00000130: 6620 7468 6520 4c69 6365 6e73 652c 206f f the License, o │ │ │ -00000140: 720a 2320 2020 2861 7420 796f 7572 206f r.# (at your o │ │ │ -00000150: 7074 696f 6e29 2061 6e79 206c 6174 6572 ption) any later │ │ │ -00000160: 2076 6572 7369 6f6e 2e0a 0a23 2020 2054 version...# T │ │ │ -00000170: 6869 7320 7072 6f67 7261 6d20 6973 2064 his program is d │ │ │ -00000180: 6973 7472 6962 7574 6564 2069 6e20 7468 istributed in th │ │ │ -00000190: 6520 686f 7065 2074 6861 7420 6974 2077 e hope that it w │ │ │ -000001a0: 696c 6c20 6265 2075 7365 6675 6c2c 0a23 ill be useful,.# │ │ │ -000001b0: 2020 2062 7574 2057 4954 484f 5554 2041 but WITHOUT A │ │ │ -000001c0: 4e59 2057 4152 5241 4e54 593b 2077 6974 NY WARRANTY; wit │ │ │ -000001d0: 686f 7574 2065 7665 6e20 7468 6520 696d hout even the im │ │ │ -000001e0: 706c 6965 6420 7761 7272 616e 7479 206f plied warranty o │ │ │ -000001f0: 660a 2320 2020 4d45 5243 4841 4e54 4142 f.# MERCHANTAB │ │ │ -00000200: 494c 4954 5920 6f72 2046 4954 4e45 5353 ILITY or FITNESS │ │ │ -00000210: 2046 4f52 2041 2050 4152 5449 4355 4c41 FOR A PARTICULA │ │ │ -00000220: 5220 5055 5250 4f53 452e 2020 5365 6520 R PURPOSE. See │ │ │ -00000230: 7468 650a 2320 2020 474e 5520 4765 6e65 the.# GNU Gene │ │ │ -00000240: 7261 6c20 5075 626c 6963 204c 6963 656e ral Public Licen │ │ │ -00000250: 7365 2066 6f72 206d 6f72 6520 6465 7461 se for more deta │ │ │ -00000260: 696c 732e 0a23 0a23 2020 2059 6f75 2073 ils..#.# You s │ │ │ -00000270: 686f 756c 6420 6861 7665 2072 6563 6569 hould have recei │ │ │ -00000280: 7665 6420 6120 636f 7079 206f 6620 7468 ved a copy of th │ │ │ -00000290: 6520 474e 5520 4765 6e65 7261 6c20 5075 e GNU General Pu │ │ │ -000002a0: 626c 6963 204c 6963 656e 7365 0a23 2020 blic License.# │ │ │ -000002b0: 2061 6c6f 6e67 2077 6974 6820 7468 6973 along with this │ │ │ -000002c0: 2070 726f 6772 616d 2e20 2049 6620 6e6f program. If no │ │ │ -000002d0: 742c 2073 6565 203c 6874 7470 3a2f 2f77 t, see ..#..use Fc │ │ │ -00000300: 6e74 6c20 7177 284f 5f52 4457 5220 4f5f ntl qw(O_RDWR O_ │ │ │ -00000310: 4352 4541 5429 3b0a 7573 6520 504f 5349 CREAT);.use POSI │ │ │ -00000320: 583b 0a0a 246d 6169 6e3a 3a53 544f 5245 X;..$main::STORE │ │ │ -00000330: 4241 434b 5550 5645 5253 494f 4e20 3d20 BACKUPVERSION = │ │ │ -00000340: 756e 6465 663b 0a0a 7573 6520 7374 7269 undef;..use stri │ │ │ -00000350: 6374 3b0a 0a0a 7375 6220 6c69 6250 6174 ct;...sub libPat │ │ │ -00000360: 680a 7b0a 2020 2020 6d79 2024 6669 6c65 h.{. my $file │ │ │ -00000370: 203d 2073 6869 6674 3b0a 0a20 2020 206d = shift;.. m │ │ │ -00000380: 7920 2464 6972 3b0a 0a20 2020 2023 2046 y $dir;.. # F │ │ │ -00000390: 616c 6c73 2044 6174 6569 2073 656c 6273 alls Datei selbs │ │ │ -000003a0: 7420 6569 6e20 7379 6d6c 696e 6b20 6973 t ein symlink is │ │ │ -000003b0: 742c 2073 6f6c 616e 6765 2066 6f6c 6765 t, solange folge │ │ │ -000003c0: 6e2c 2062 6973 2061 7566 6765 6cf6 7374 n, bis aufgel.st │ │ │ -000003d0: 0a20 2020 2069 6620 282d 6620 2466 696c . if (-f $fil │ │ │ -000003e0: 6529 0a20 2020 207b 0a09 7768 696c 6520 e). {..while │ │ │ -000003f0: 282d 6c20 2466 696c 6529 0a09 7b0a 0920 (-l $file)..{.. │ │ │ -00000400: 2020 206d 7920 246c 696e 6b20 3d20 7265 my $link = re │ │ │ -00000410: 6164 6c69 6e6b 2824 6669 6c65 293b 0a0a adlink($file);.. │ │ │ -00000420: 0920 2020 2069 6620 2873 7562 7374 7228 . if (substr( │ │ │ -00000430: 246c 696e 6b2c 2030 2c20 3129 206e 6520 $link, 0, 1) ne │ │ │ -00000440: 222f 2229 0a09 2020 2020 7b0a 0909 2466 "/").. {...$f │ │ │ -00000450: 696c 6520 3d7e 2073 2f5b 5e5c 2f5d 2b24 ile =~ s/[^\/]+$ │ │ │ -00000460: 2f24 6c69 6e6b 2f3b 0a09 2020 2020 7d0a /$link/;.. }. │ │ │ -00000470: 0920 2020 2065 6c73 650a 0920 2020 207b . else.. { │ │ │ -00000480: 0a09 0924 6669 6c65 203d 2024 6c69 6e6b ...$file = $link │ │ │ -00000490: 3b0a 0920 2020 207d 0a09 7d0a 0a09 2824 ;.. }..}...($ │ │ │ -000004a0: 6469 722c 2024 6669 6c65 2920 3d20 2673 dir, $file) = &s │ │ │ -000004b0: 706c 6974 4669 6c65 4469 7228 2466 696c plitFileDir($fil │ │ │ -000004c0: 6529 3b0a 0924 6669 6c65 203d 2022 2f24 e);..$file = "/$ │ │ │ -000004d0: 6669 6c65 223b 0a20 2020 207d 0a20 2020 file";. }. │ │ │ -000004e0: 2065 6c73 650a 2020 2020 7b0a 0970 7269 else. {..pri │ │ │ -000004f0: 6e74 2053 5444 4552 5220 223c 2466 696c nt STDERR "<$fil │ │ │ -00000500: 653e 2064 6f65 7320 6e6f 7420 6578 6973 e> does not exis │ │ │ -00000510: 7421 5c6e 223b 0a09 6578 6974 2031 3b0a t!\n";..exit 1;. │ │ │ -00000520: 2020 2020 7d0a 0a20 2020 2024 6469 7220 }.. $dir │ │ │ -00000530: 2e3d 2022 2f2e 2e2f 6c69 6222 3b20 2020 .= "/../lib"; │ │ │ -00000540: 2020 2020 2020 2020 2320 5066 6164 207a # Pfad z │ │ │ -00000550: 7520 6465 6e20 4269 626c 696f 7468 656b u den Bibliothek │ │ │ -00000560: 656e 0a20 2020 206d 7920 246f 6c64 4469 en. my $oldDi │ │ │ -00000570: 7220 3d20 602f 6269 6e2f 7077 6460 3b0a r = `/bin/pwd`;. │ │ │ -00000580: 2020 2020 6368 6f6d 7020 246f 6c64 4469 chomp $oldDi │ │ │ -00000590: 723b 0a20 2020 2069 6620 2863 6864 6972 r;. if (chdir │ │ │ -000005a0: 2024 6469 7229 0a20 2020 207b 0a09 6d79 $dir). {..my │ │ │ -000005b0: 2024 6162 7344 6972 203d 2060 2f62 696e $absDir = `/bin │ │ │ -000005c0: 2f70 7764 603b 0a09 6368 6f70 2024 6162 /pwd`;..chop $ab │ │ │ -000005d0: 7344 6972 3b0a 0963 6864 6972 2024 6f6c sDir;..chdir $ol │ │ │ -000005e0: 6444 6972 3b0a 0a09 7265 7475 726e 2028 dDir;...return ( │ │ │ -000005f0: 2673 706c 6974 4669 6c65 4469 7228 2224 &splitFileDir("$ │ │ │ -00000600: 6162 7344 6972 2466 696c 6522 2929 3b0a absDir$file"));. │ │ │ -00000610: 2020 2020 7d0a 2020 2020 656c 7365 0a20 }. else. │ │ │ -00000620: 2020 207b 0a09 7072 696e 7420 5354 4445 {..print STDE │ │ │ -00000630: 5252 2022 3c24 6469 723e 2064 6f65 7320 RR "<$dir> does │ │ │ -00000640: 6e6f 7420 6578 6973 742c 2065 7869 7469 not exist, exiti │ │ │ -00000650: 6e67 5c6e 223b 0a20 2020 207d 0a7d 0a73 ng\n";. }.}.s │ │ │ -00000660: 7562 2073 706c 6974 4669 6c65 4469 720a ub splitFileDir. │ │ │ -00000670: 7b0a 2020 2020 6d79 2024 6e61 6d65 203d {. my $name = │ │ │ -00000680: 2073 6869 6674 3b0a 0a20 2020 2072 6574 shift;.. ret │ │ │ -00000690: 7572 6e20 2827 2e27 2c20 246e 616d 6529 urn ('.', $name) │ │ │ -000006a0: 2075 6e6c 6573 7320 2824 6e61 6d65 203d unless ($name = │ │ │ -000006b0: 7e2f 5c2f 2f29 3b20 2020 2023 206e 7572 ~/\//); # nur │ │ │ -000006c0: 2065 696e 6661 6368 6572 2044 6174 6569 einfacher Datei │ │ │ -000006d0: 6e61 6d65 0a0a 2020 2020 6d79 2028 2464 name.. my ($d │ │ │ -000006e0: 6972 2c20 2466 696c 6529 203d 2024 6e61 ir, $file) = $na │ │ │ -000006f0: 6d65 203d 7e20 2f5e 282e 2a29 5c2f 282e me =~ /^(.*)\/(. │ │ │ -00000700: 2a29 242f 733b 0a20 2020 2024 6469 7220 *)$/s;. $dir │ │ │ -00000710: 3d20 272f 2720 6966 2028 2464 6972 2065 = '/' if ($dir e │ │ │ -00000720: 7120 2727 293b 2020 2020 2020 2020 2020 q ''); │ │ │ -00000730: 2020 2020 2020 2020 2023 2067 696c 742c # gilt, │ │ │ -00000740: 2066 616c 6c73 207a 2e42 2e20 2f66 696c falls z.B. /fil │ │ │ -00000750: 656e 616d 650a 2020 2020 7265 7475 726e ename. return │ │ │ -00000760: 2028 2464 6972 2c20 2466 696c 6529 3b0a ($dir, $file);. │ │ │ -00000770: 7d0a 6d79 2028 2472 6571 2c20 2470 726f }.my ($req, $pro │ │ │ -00000780: 6729 203d 2026 6c69 6250 6174 6828 2430 g) = &libPath($0 │ │ │ -00000790: 293b 0a75 6e73 6869 6674 2040 494e 432c );.unshift @INC, │ │ │ -000007a0: 2022 2472 6571 223b 0a0a 0a72 6571 7569 "$req";...requi │ │ │ -000007b0: 7265 2027 6368 6563 6b50 6172 616d 322e re 'checkParam2. │ │ │ -000007c0: 706c 273b 0a72 6571 7569 7265 2027 7665 pl';.require 've │ │ │ -000007d0: 7273 696f 6e2e 706c 273b 0a72 6571 7569 rsion.pl';.requi │ │ │ -000007e0: 7265 2027 6875 6d61 6e52 6561 642e 706c re 'humanRead.pl │ │ │ -000007f0: 273b 0a72 6571 7569 7265 2027 7374 6f72 ';.require 'stor │ │ │ -00000800: 6542 6163 6b75 704c 6962 2e70 6c27 3b0a eBackupLib.pl';. │ │ │ -00000810: 7265 7175 6972 6520 2766 696c 6544 6972 require 'fileDir │ │ │ -00000820: 2e70 6c27 3b0a 0a0a 3d68 6561 6431 204e .pl';...=head1 N │ │ │ -00000830: 414d 450a 0a73 746f 7265 4261 636b 7570 AME..storeBackup │ │ │ -00000840: 5f64 752e 706c 202d 2065 7661 6c75 6174 _du.pl - evaluat │ │ │ -00000850: 6573 2074 6865 2064 6973 6b20 7573 6167 es the disk usag │ │ │ -00000860: 6520 696e 206f 6e65 206f 7220 6d6f 7265 e in one or more │ │ │ -00000870: 2062 6163 6b75 7020 6469 7265 6374 6f72 backup director │ │ │ -00000880: 6965 732e 0a0a 3d68 6561 6431 2053 594e ies...=head1 SYN │ │ │ -00000890: 4f50 5349 530a 0a20 2020 2073 746f 7265 OPSIS.. store │ │ │ -000008a0: 4261 636b 7570 5f64 752e 706c 205b 2d76 Backup_du.pl [-v │ │ │ -000008b0: 5d20 5b2d 6c5d 2062 6163 6b75 7064 6972 ] [-l] backupdir │ │ │ -000008c0: 7320 2e2e 2e0a 0a3d 6865 6164 3120 4f50 s .....=head1 OP │ │ │ -000008d0: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8.. │ │ │ -000008e0: 3d69 7465 6d20 423c 2d2d 7665 7262 6f73 =item B<--verbos │ │ │ -000008f0: 653e 2c20 423c 2d76 3e0a 0a20 2020 2050 e>, B<-v>.. P │ │ │ -00000900: 7269 6e74 2061 6363 756d 756c 6174 6564 rint accumulated │ │ │ -00000910: 2076 616c 7565 7320 666f 7220 6d75 6c74 values for mult │ │ │ -00000920: 6970 6c65 2076 6572 7369 6f6e 7320 2864 iple versions (d │ │ │ -00000930: 6179 7329 0a20 2020 206f 6620 6261 636b ays). of back │ │ │ -00000940: 7570 6564 2066 696c 6573 2e20 5368 6f77 uped files. Show │ │ │ -00000950: 7320 7468 6520 7374 6570 7320 7768 656e s the steps when │ │ │ -00000960: 2063 616c 6375 6c61 7469 6e67 2074 6865 calculating the │ │ │ -00000970: 0a20 2020 2073 7061 6365 2075 7365 6420 . space used │ │ │ -00000980: 6279 2074 6865 2073 7065 6369 6669 6564 by the specified │ │ │ -00000990: 2062 6163 6b75 7073 0a0a 3d69 7465 6d20 backups..=item │ │ │ -000009a0: 423c 2d2d 6c69 6e6b 733e 2c20 423c 2d6c B<--links>, B<-l │ │ │ -000009b0: 3e0a 0a20 2020 2041 6c73 6f20 7072 696e >.. Also prin │ │ │ -000009c0: 7420 7374 6174 6973 7469 6320 6162 6f75 t statistic abou │ │ │ -000009d0: 7420 686f 7720 6d61 6e79 206c 696e 6b73 t how many links │ │ │ -000009e0: 2074 6865 2066 696c 6573 2068 6176 650a the files have. │ │ │ -000009f0: 2020 2020 616e 6420 686f 7720 6d75 6368 and how much │ │ │ -00000a00: 2073 7061 6365 2074 6869 7320 7361 7665 space this save │ │ │ -00000a10: 732e 0a0a 3d62 6163 6b0a 0a3d 6865 6164 s...=back..=head │ │ │ -00000a20: 3120 434f 5059 5249 4748 540a 0a43 6f70 1 COPYRIGHT..Cop │ │ │ -00000a30: 7972 6967 6874 2028 6329 2032 3030 322d yright (c) 2002- │ │ │ -00000a40: 3230 3232 2062 7920 4865 696e 7a2d 4a6f 2022 by Heinz-Jo │ │ │ -00000a50: 7365 6620 436c 6165 7320 2873 6565 2052 sef Claes (see R │ │ │ -00000a60: 4541 444d 4529 2e0a 5075 626c 6973 6865 EADME)..Publishe │ │ │ -00000a70: 6420 756e 6465 7220 7468 6520 474e 5520 d under the GNU │ │ │ -00000a80: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000a90: 6963 656e 7365 2076 3320 6f72 2061 6e79 icense v3 or any │ │ │ -00000aa0: 206c 6174 6572 2076 6572 7369 6f6e 0a0a later version.. │ │ │ -00000ab0: 3d63 7574 0a0a 6d79 2024 4865 6c70 203d =cut..my $Help = │ │ │ -00000ac0: 2026 3a3a 6765 7450 6f64 3254 6578 7428 &::getPod2Text( │ │ │ -00000ad0: 2430 293b 0a0a 6469 6520 2224 4865 6c70 $0);..die "$Help │ │ │ -00000ae0: 2220 756e 6c65 7373 2040 4152 4756 3b0a " unless @ARGV;. │ │ │ -00000af0: 0a26 7072 696e 7456 6572 7369 6f6e 285c .&printVersion(\ │ │ │ -00000b00: 4041 5247 562c 2027 2d56 2729 3b0a 0a0a @ARGV, '-V');... │ │ │ -00000b10: 6d79 2024 4368 6563 6b50 6172 203d 0a20 my $CheckPar =. │ │ │ -00000b20: 2020 2043 6865 636b 5061 7261 6d2d 3e6e CheckParam->n │ │ │ -00000b30: 6577 2827 2d61 6c6c 6f77 4c69 7374 7327 ew('-allowLists' │ │ │ -00000b40: 203d 3e20 2779 6573 272c 0a09 0920 2020 => 'yes',... │ │ │ -00000b50: 2027 2d6c 6973 7427 203d 3e20 5b4f 7074 '-list' => [Opt │ │ │ -00000b60: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00000b70: 203d 3e20 2776 6572 626f 7365 272c 0a09 => 'verbose',.. │ │ │ -00000b80: 0909 0909 2020 2020 272d 636c 5f6f 7074 .... '-cl_opt │ │ │ -00000b90: 696f 6e27 203d 3e20 272d 7627 2c0a 0909 ion' => '-v',... │ │ │ -00000ba0: 0909 0920 2020 2027 2d63 6c5f 616c 6961 ... '-cl_alia │ │ │ -00000bb0: 7327 203d 3e20 272d 2d76 6572 626f 7365 s' => '--verbose │ │ │ -00000bc0: 2729 2c0a 0909 0909 4f70 7469 6f6e 2d3e '),.....Option-> │ │ │ -00000bd0: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00000be0: 6c69 6e6b 7327 2c0a 0909 0909 0920 2020 links',...... │ │ │ -00000bf0: 2027 2d63 6c5f 6f70 7469 6f6e 2720 3d3e '-cl_option' => │ │ │ -00000c00: 2027 2d6c 272c 0a09 0909 0909 2020 2020 '-l',...... │ │ │ -00000c10: 272d 636c 5f61 6c69 6173 2720 3d3e 2027 '-cl_alias' => ' │ │ │ -00000c20: 2d2d 6c69 6e6b 7327 290a 0909 0909 5d0a --links').....]. │ │ │ -00000c30: 0909 2020 2020 293b 0a0a 2443 6865 636b .. );..$Check │ │ │ -00000c40: 5061 722d 3e63 6865 636b 2827 2d61 7267 Par->check('-arg │ │ │ -00000c50: 7627 203d 3e20 5c40 4152 4756 2c0a 2020 v' => \@ARGV,. │ │ │ -00000c60: 2020 2020 2020 2020 2020 2020 2020 2027 ' │ │ │ -00000c70: 2d68 656c 7027 203d 3e20 2448 656c 700a -help' => $Help. │ │ │ -00000c80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000c90: 2029 3b0a 0a6d 7920 2476 6572 626f 7365 );..my $verbose │ │ │ -00000ca0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00000cb0: 744f 7074 5769 7468 6f75 7450 6172 2827 tOptWithoutPar(' │ │ │ -00000cc0: 7665 7262 6f73 6527 293b 0a6d 7920 246c verbose');.my $l │ │ │ -00000cd0: 696e 6b73 203d 2024 4368 6563 6b50 6172 inks = $CheckPar │ │ │ -00000ce0: 2d3e 6765 744f 7074 5769 7468 6f75 7450 ->getOptWithoutP │ │ │ -00000cf0: 6172 2827 6c69 6e6b 7327 293b 0a0a 7072 ar('links');..pr │ │ │ -00000d00: 696e 7420 2273 746f 7265 4261 636b 7570 int "storeBackup │ │ │ -00000d10: 5f64 752e 706c 2c20 246d 6169 6e3a 3a53 _du.pl, $main::S │ │ │ -00000d20: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO │ │ │ -00000d30: 4e5c 6e22 0a20 2020 2069 6620 2476 6572 N\n". if $ver │ │ │ -00000d40: 626f 7365 3b0a 0a64 6965 2022 6469 7265 bose;..die "dire │ │ │ -00000d50: 6374 6f72 6965 7320 6d69 7373 696e 6720 ctories missing │ │ │ -00000d60: 696e 2061 7267 756d 656e 7420 6c69 7374 in argument list │ │ │ -00000d70: 220a 2020 2020 6966 2028 2443 6865 636b ". if ($Check │ │ │ -00000d80: 5061 722d 3e67 6574 4c69 7374 5061 7228 Par->getListPar( │ │ │ -00000d90: 2920 3d3d 2030 293b 0a0a 2320 5072 fc66 ) == 0);..# Pr.f │ │ │ -00000da0: 656e 2c20 6f62 2044 6972 6563 746f 7269 en, ob Directori │ │ │ -00000db0: 6573 20fc 6265 7268 6175 7074 2065 7869 es .berhaupt exi │ │ │ -00000dc0: 7374 6965 7265 6e0a 6d79 2024 643b 0a66 stieren.my $d;.f │ │ │ -00000dd0: 6f72 6561 6368 2024 6420 2824 4368 6563 oreach $d ($Chec │ │ │ -00000de0: 6b50 6172 2d3e 6765 744c 6973 7450 6172 kPar->getListPar │ │ │ -00000df0: 2829 290a 7b0a 2020 2020 6469 6520 223c ()).{. die "< │ │ │ -00000e00: 2464 3e20 646f 6573 206e 6f74 2065 7869 $d> does not exi │ │ │ -00000e10: 7374 2220 756e 6c65 7373 2028 2d65 2024 st" unless (-e $ │ │ │ -00000e20: 6429 3b0a 2020 2020 6469 6520 223c 2464 d);. die "<$d │ │ │ -00000e30: 3e20 6973 206e 6f74 2061 2064 6972 6563 > is not a direc │ │ │ -00000e40: 746f 7269 6573 2220 756e 6c65 7373 2028 tories" unless ( │ │ │ -00000e50: 2d64 2024 6429 3b0a 7d0a 0a0a 0a25 6d61 -d $d);.}....%ma │ │ │ -00000e60: 696e 3a3a 6e6f 4c69 6e6b 733b 2020 2020 in::noLinks; │ │ │ -00000e70: 2320 6b65 7920 3d20 696e 6f64 652c 0a20 # key = inode,. │ │ │ -00000e80: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000e90: 2020 2320 2020 2020 2020 2020 2020 2020 # │ │ │ -00000ea0: 2027 7369 7a65 2720 2020 203d 3e20 4461 'size' => Da │ │ │ -00000eb0: 7465 6967 72f6 df65 2028 6569 6e7a 656c teigr..e (einzel │ │ │ -00000ec0: 6e65 2044 6174 6569 290a 2020 2020 2020 ne Datei). │ │ │ -00000ed0: 2020 2020 2020 2020 2020 2020 2023 2020 # │ │ │ -00000ee0: 2020 2020 2020 2020 2020 2020 2772 6573 'res │ │ │ -00000ef0: 744e 6f4c 696e 6b73 2720 3d3e 2062 6973 tNoLinks' => bis │ │ │ -00000f00: 6865 7220 6765 7ae4 686c 7465 2041 6e7a her gez.hlte Anz │ │ │ -00000f10: 6168 6c20 4c69 6e6b 730a 0a24 6d61 696e ahl Links..$main │ │ │ -00000f20: 3a3a 7375 6d4c 6f63 616c 203d 2030 3b0a ::sumLocal = 0;. │ │ │ -00000f30: 406d 6169 6e3a 3a6e 6f46 696c 6573 5769 @main::noFilesWi │ │ │ -00000f40: 7468 4c69 6e6b 7320 3d20 2829 3b0a 406d thLinks = ();.@m │ │ │ -00000f50: 6169 6e3a 3a73 697a 6546 696c 6573 5769 ain::sizeFilesWi │ │ │ -00000f60: 7468 4c69 6e6b 7320 3d20 2829 3b0a 0a0a thLinks = ();... │ │ │ -00000f70: 6d79 2024 7320 3d20 2727 3b0a 666f 7265 my $s = '';.fore │ │ │ -00000f80: 6163 6820 2464 2028 2443 6865 636b 5061 ach $d ($CheckPa │ │ │ -00000f90: 722d 3e67 6574 4c69 7374 5061 7228 2929 r->getListPar()) │ │ │ -00000fa0: 0a7b 0a20 2020 2069 6620 282d 6520 2224 .{. if (-e "$ │ │ │ -00000fb0: 642f 2e73 746f 7265 4261 636b 7570 4c69 d/.storeBackupLi │ │ │ -00000fc0: 6e6b 732f 6c69 6e6b 4669 6c65 2e62 7a32 nks/linkFile.bz2 │ │ │ -00000fd0: 2229 0a20 2020 207b 0a09 7072 696e 7420 "). {..print │ │ │ -00000fe0: 223c 2464 3e20 6166 6665 6374 6564 2062 "<$d> affected b │ │ │ -00000ff0: 7920 756e 7265 736f 6c76 6564 206c 696e y unresolved lin │ │ │ -00001000: 6b73 2c20 736b 6970 7069 6e67 5c6e 223b ks, skipping\n"; │ │ │ -00001010: 0a09 6e65 7874 3b0a 2020 2020 7d0a 2020 ..next;. }. │ │ │ -00001020: 2020 7072 696e 7420 225f 5f5f 5f5f 5f5f print "_______ │ │ │ -00001030: 5f63 6865 636b 696e 6720 2464 202e 2e2e _checking $d ... │ │ │ -00001040: 5c6e 2220 6966 2028 2476 6572 626f 7365 \n" if ($verbose │ │ │ -00001050: 293b 0a20 2020 2063 6864 6972 2022 2464 );. chdir "$d │ │ │ -00001060: 223b 0a20 2020 2026 7472 6176 6572 7365 ";. &traverse │ │ │ -00001070: 5472 6565 7328 293b 0a20 2020 2063 6864 Trees();. chd │ │ │ -00001080: 6972 2022 2e2e 223b 0a20 2020 2069 6620 ir "..";. if │ │ │ -00001090: 2824 7665 7262 6f73 6529 0a20 2020 207b ($verbose). { │ │ │ -000010a0: 0a09 7072 696e 7420 2220 7375 6d4c 6f63 ..print " sumLoc │ │ │ -000010b0: 616c 203d 2022 2c20 2668 756d 616e 5265 al = ", &humanRe │ │ │ -000010c0: 6164 6162 6c65 2824 6d61 696e 3a3a 7375 adable($main::su │ │ │ -000010d0: 6d4c 6f63 616c 292c 2022 2473 5c6e 223b mLocal), "$s\n"; │ │ │ -000010e0: 0a09 6d79 2024 7375 6d53 6861 7265 643b ..my $sumShared; │ │ │ -000010f0: 0a09 666f 7265 6163 6820 2464 2028 6b65 ..foreach $d (ke │ │ │ -00001100: 7973 2025 6d61 696e 3a3a 6e6f 4c69 6e6b ys %main::noLink │ │ │ -00001110: 7329 0a09 7b0a 0920 2020 2024 7375 6d53 s)..{.. $sumS │ │ │ -00001120: 6861 7265 6420 2b3d 2024 6d61 696e 3a3a hared += $main:: │ │ │ -00001130: 6e6f 4c69 6e6b 737b 2464 7d7b 2773 697a noLinks{$d}{'siz │ │ │ -00001140: 6527 7d3b 0a09 7d0a 0970 7269 6e74 2022 e'};..}..print " │ │ │ -00001150: 7375 6d53 6861 7265 6420 3d20 222c 2026 sumShared = ", & │ │ │ -00001160: 6875 6d61 6e52 6561 6461 626c 6528 2473 humanReadable($s │ │ │ -00001170: 756d 5368 6172 6564 292c 2022 2473 5c6e umShared), "$s\n │ │ │ -00001180: 223b 0a09 2473 203d 2022 2028 6163 6375 ";..$s = " (accu │ │ │ -00001190: 6d75 6c61 7465 6429 223b 0a20 2020 207d mulated)";. } │ │ │ -000011a0: 0a7d 0a0a 2320 5a75 7361 6d6d 656e 7265 .}..# Zusammenre │ │ │ -000011b0: 6368 6e65 6e20 6465 7220 4572 6765 626e chnen der Ergebn │ │ │ -000011c0: 6973 7365 0a75 6e6c 6573 7320 2824 7665 isse.unless ($ve │ │ │ -000011d0: 7262 6f73 6529 0a7b 0a20 2020 2070 7269 rbose).{. pri │ │ │ -000011e0: 6e74 2022 2073 756d 4c6f 6361 6c20 3d20 nt " sumLocal = │ │ │ -000011f0: 222c 2026 6875 6d61 6e52 6561 6461 626c ", &humanReadabl │ │ │ -00001200: 6528 246d 6169 6e3a 3a73 756d 4c6f 6361 e($main::sumLoca │ │ │ -00001210: 6c29 2c20 225c 6e22 3b0a 2020 2020 6d79 l), "\n";. my │ │ │ -00001220: 2024 7375 6d53 6861 7265 643b 0a20 2020 $sumShared;. │ │ │ -00001230: 2066 6f72 6561 6368 2024 6420 286b 6579 foreach $d (key │ │ │ -00001240: 7320 256d 6169 6e3a 3a6e 6f4c 696e 6b73 s %main::noLinks │ │ │ -00001250: 290a 2020 2020 7b0a 0924 7375 6d53 6861 ). {..$sumSha │ │ │ -00001260: 7265 6420 2b3d 2024 6d61 696e 3a3a 6e6f red += $main::no │ │ │ -00001270: 4c69 6e6b 737b 2464 7d7b 2773 697a 6527 Links{$d}{'size' │ │ │ -00001280: 7d3b 0a20 2020 207d 0a20 2020 2070 7269 };. }. pri │ │ │ -00001290: 6e74 2022 7375 6d53 6861 7265 6420 3d20 nt "sumShared = │ │ │ -000012a0: 222c 2026 6875 6d61 6e52 6561 6461 626c ", &humanReadabl │ │ │ -000012b0: 6528 2473 756d 5368 6172 6564 292c 2022 e($sumShared), " │ │ │ -000012c0: 5c6e 223b 0a7d 0a0a 6966 2028 246c 696e \n";.}..if ($lin │ │ │ -000012d0: 6b73 290a 7b0a 2020 2020 7072 696e 7420 ks).{. print │ │ │ -000012e0: 225c 6e6c 696e 6b73 207c 2020 6669 6c65 "\nlinks | file │ │ │ -000012f0: 7320 7c20 7369 7a65 207c 206c 202a 2073 s | size | l * s │ │ │ -00001300: 207c 206c 6573 735c 6e22 3b0a 2020 2020 | less\n";. │ │ │ -00001310: 7072 696e 7420 222d 2d2d 2d2d 2d2b 2d2d print "------+-- │ │ │ -00001320: 2d2d 2d2d 2d2d 2b2d 2d2d 2d2d 2d2b 2d2d ------+------+-- │ │ │ -00001330: 2d2d 2d2d 202b 2d2d 2d2d 2d5c 6e22 3b0a ---- +-----\n";. │ │ │ -00001340: 2020 2020 666f 7220 2824 6420 3d20 3120 for ($d = 1 │ │ │ -00001350: 3b20 2464 203c 2040 6d61 696e 3a3a 6e6f ; $d < @main::no │ │ │ -00001360: 4669 6c65 7357 6974 684c 696e 6b73 203b FilesWithLinks ; │ │ │ -00001370: 2024 642b 2b29 0a20 2020 207b 0a09 6e65 $d++). {..ne │ │ │ -00001380: 7874 2075 6e6c 6573 7320 246d 6169 6e3a xt unless $main: │ │ │ -00001390: 3a6e 6f46 696c 6573 5769 7468 4c69 6e6b :noFilesWithLink │ │ │ -000013a0: 735b 2464 5d3b 0a09 6d79 2024 6c73 203d s[$d];..my $ls = │ │ │ -000013b0: 2024 6420 2a20 246d 6169 6e3a 3a73 697a $d * $main::siz │ │ │ -000013c0: 6546 696c 6573 5769 7468 4c69 6e6b 735b eFilesWithLinks[ │ │ │ -000013d0: 2464 5d3b 0a09 7072 696e 7466 2822 2025 $d];..printf(" % │ │ │ -000013e0: 3464 207c 2025 3664 207c 2025 7320 7c20 4d | %6d | %s | │ │ │ -000013f0: 2025 7320 7c20 2573 5c6e 222c 2024 642c %s | %s\n", $d, │ │ │ -00001400: 2024 6d61 696e 3a3a 6e6f 4669 6c65 7357 $main::noFilesW │ │ │ -00001410: 6974 684c 696e 6b73 5b24 645d 2c0a 0920 ithLinks[$d],.. │ │ │ -00001420: 2020 2020 2020 2668 756d 616e 5265 6164 &humanRead │ │ │ -00001430: 6162 6c65 2824 6d61 696e 3a3a 7369 7a65 able($main::size │ │ │ -00001440: 4669 6c65 7357 6974 684c 696e 6b73 5b24 FilesWithLinks[$ │ │ │ -00001450: 645d 292c 0a09 2020 2020 2020 2026 6875 d]),.. &hu │ │ │ -00001460: 6d61 6e52 6561 6461 626c 6528 246c 7329 manReadable($ls) │ │ │ -00001470: 2c0a 0920 2020 2020 2020 2668 756d 616e ,.. &human │ │ │ -00001480: 5265 6164 6162 6c65 2824 6c73 202d 2024 Readable($ls - $ │ │ │ -00001490: 6d61 696e 3a3a 7369 7a65 4669 6c65 7357 main::sizeFilesW │ │ │ -000014a0: 6974 684c 696e 6b73 5b24 645d 2929 3b0a ithLinks[$d]));. │ │ │ -000014b0: 2020 2020 7d0a 7d0a 0a65 7869 7420 303b }.}..exit 0; │ │ │ -000014c0: 0a0a 0a23 2323 2323 2323 2323 2323 2323 ...############# │ │ │ -000014d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000014e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000014f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00001500: 2323 2323 2323 2323 230a 7375 6220 7472 #########.sub tr │ │ │ -00001510: 6176 6572 7365 5472 6565 730a 7b0a 2020 averseTrees.{. │ │ │ -00001520: 2020 6c6f 6361 6c20 2a44 4952 3b0a 2020 local *DIR;. │ │ │ -00001530: 2020 6f70 656e 6469 7228 4449 522c 2027 opendir(DIR, ' │ │ │ -00001540: 2e27 293b 0a0a 2020 2020 6d79 2024 663b .');.. my $f; │ │ │ -00001550: 0a20 2020 2077 6869 6c65 2028 2466 203d . while ($f = │ │ │ -00001560: 2072 6561 6464 6972 2044 4952 290a 2020 readdir DIR). │ │ │ -00001570: 2020 7b0a 0969 6620 282d 6c20 2466 290a {..if (-l $f). │ │ │ -00001580: 097b 0a09 2020 2020 6d79 2028 2469 6e6f .{.. my ($ino │ │ │ -00001590: 6465 2c20 246e 6c69 6e6b 2c20 2473 697a de, $nlink, $siz │ │ │ -000015a0: 6529 203d 2028 6c73 7461 7428 2466 2929 e) = (lstat($f)) │ │ │ -000015b0: 5b31 2c33 2c37 5d3b 0a09 2020 2020 6966 [1,3,7];.. if │ │ │ -000015c0: 2028 6465 6669 6e65 6428 246d 6169 6e3a (defined($main: │ │ │ -000015d0: 3a6e 6f4c 696e 6b73 7b24 696e 6f64 657d :noLinks{$inode} │ │ │ -000015e0: 2929 0a09 2020 2020 7b0a 0909 6966 2028 )).. {...if ( │ │ │ -000015f0: 2d2d 246d 6169 6e3a 3a6e 6f4c 696e 6b73 --$main::noLinks │ │ │ -00001600: 7b24 696e 6f64 657d 7b27 7265 7374 4e6f {$inode}{'restNo │ │ │ -00001610: 4c69 6e6b 7327 7d20 3d3d 2030 290a 0909 Links'} == 0)... │ │ │ -00001620: 7b0a 0909 2020 2020 246d 6169 6e3a 3a73 {... $main::s │ │ │ -00001630: 756d 4c6f 6361 6c20 2b3d 2024 6d61 696e umLocal += $main │ │ │ -00001640: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode │ │ │ -00001650: 7d7b 2773 697a 6527 7d3b 0a09 0920 2020 }{'size'};... │ │ │ -00001660: 2064 656c 6574 6520 246d 6169 6e3a 3a6e delete $main::n │ │ │ -00001670: 6f4c 696e 6b73 7b24 696e 6f64 657d 3b0a oLinks{$inode};. │ │ │ -00001680: 0909 2020 2020 6e65 7874 3b0a 0909 7d0a .. next;...}. │ │ │ -00001690: 0920 2020 207d 0a09 2020 2020 656c 7365 . }.. else │ │ │ -000016a0: 0a09 2020 2020 7b0a 0909 6966 2028 246e .. {...if ($n │ │ │ -000016b0: 6c69 6e6b 203d 3d20 3129 0a09 097b 0a09 link == 1)...{.. │ │ │ -000016c0: 0920 2020 2024 6d61 696e 3a3a 7375 6d4c . $main::sumL │ │ │ -000016d0: 6f63 616c 202b 3d20 2473 697a 653b 0a09 ocal += $size;.. │ │ │ -000016e0: 0920 2020 206e 6578 743b 0a09 097d 0a09 . next;...}.. │ │ │ -000016f0: 0924 6d61 696e 3a3a 6e6f 4c69 6e6b 737b .$main::noLinks{ │ │ │ -00001700: 2469 6e6f 6465 7d7b 2773 697a 6527 7d20 $inode}{'size'} │ │ │ -00001710: 3d20 2473 697a 653b 0a09 0924 6d61 696e = $size;...$main │ │ │ -00001720: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode │ │ │ -00001730: 7d7b 2772 6573 744e 6f4c 696e 6b73 277d }{'restNoLinks'} │ │ │ -00001740: 203d 2024 6e6c 696e 6b20 2d20 313b 0a09 = $nlink - 1;.. │ │ │ -00001750: 2020 2020 7d0a 097d 0a09 656c 7369 6620 }..}..elsif │ │ │ -00001760: 282d 6620 2466 290a 097b 0a09 2020 2020 (-f $f)..{.. │ │ │ -00001770: 6d79 2028 2469 6e6f 6465 2c20 246e 6c69 my ($inode, $nli │ │ │ -00001780: 6e6b 2c20 2473 697a 6529 203d 2028 7374 nk, $size) = (st │ │ │ -00001790: 6174 2824 6629 295b 312c 332c 375d 3b0a at($f))[1,3,7];. │ │ │ -000017a0: 0920 2020 2069 6620 2864 6566 696e 6564 . if (defined │ │ │ -000017b0: 2824 6d61 696e 3a3a 6e6f 4c69 6e6b 737b ($main::noLinks{ │ │ │ -000017c0: 2469 6e6f 6465 7d29 290a 0920 2020 207b $inode})).. { │ │ │ -000017d0: 0a09 0969 6620 282d 2d24 6d61 696e 3a3a ...if (--$main:: │ │ │ -000017e0: 6e6f 4c69 6e6b 737b 2469 6e6f 6465 7d7b noLinks{$inode}{ │ │ │ -000017f0: 2772 6573 744e 6f4c 696e 6b73 277d 203d 'restNoLinks'} = │ │ │ -00001800: 3d20 3029 0a09 097b 0a09 0920 2020 2024 = 0)...{... $ │ │ │ -00001810: 6d61 696e 3a3a 7375 6d4c 6f63 616c 202b main::sumLocal + │ │ │ -00001820: 3d20 246d 6169 6e3a 3a6e 6f4c 696e 6b73 = $main::noLinks │ │ │ -00001830: 7b24 696e 6f64 657d 7b27 7369 7a65 277d {$inode}{'size'} │ │ │ -00001840: 3b0a 0909 2020 2020 6465 6c65 7465 2024 ;... delete $ │ │ │ -00001850: 6d61 696e 3a3a 6e6f 4c69 6e6b 737b 2469 main::noLinks{$i │ │ │ -00001860: 6e6f 6465 7d3b 0a09 0920 2020 206e 6578 node};... nex │ │ │ -00001870: 743b 0a09 097d 0a09 2020 2020 7d0a 0920 t;...}.. }.. │ │ │ -00001880: 2020 2065 6c73 650a 0920 2020 207b 0a09 else.. {.. │ │ │ -00001890: 092b 2b24 6d61 696e 3a3a 6e6f 4669 6c65 .++$main::noFile │ │ │ -000018a0: 7357 6974 684c 696e 6b73 5b24 6e6c 696e sWithLinks[$nlin │ │ │ -000018b0: 6b5d 3b0a 0909 246d 6169 6e3a 3a73 697a k];...$main::siz │ │ │ -000018c0: 6546 696c 6573 5769 7468 4c69 6e6b 735b eFilesWithLinks[ │ │ │ -000018d0: 246e 6c69 6e6b 5d20 2b3d 2024 7369 7a65 $nlink] += $size │ │ │ -000018e0: 3b0a 0909 6966 2028 246e 6c69 6e6b 203d ;...if ($nlink = │ │ │ -000018f0: 3d20 3129 0a09 097b 0a09 0920 2020 2024 = 1)...{... $ │ │ │ -00001900: 6d61 696e 3a3a 7375 6d4c 6f63 616c 202b main::sumLocal + │ │ │ -00001910: 3d20 2473 697a 653b 0a09 0920 2020 206e = $size;... n │ │ │ -00001920: 6578 743b 0a09 097d 0a09 0924 6d61 696e ext;...}...$main │ │ │ -00001930: 3a3a 6e6f 4c69 6e6b 737b 2469 6e6f 6465 ::noLinks{$inode │ │ │ -00001940: 7d7b 2773 697a 6527 7d20 3d20 2473 697a }{'size'} = $siz │ │ │ -00001950: 653b 0a09 0924 6d61 696e 3a3a 6e6f 4c69 e;...$main::noLi │ │ │ -00001960: 6e6b 737b 2469 6e6f 6465 7d7b 2772 6573 nks{$inode}{'res │ │ │ -00001970: 744e 6f4c 696e 6b73 277d 203d 2024 6e6c tNoLinks'} = $nl │ │ │ -00001980: 696e 6b20 2d20 313b 0a09 2020 2020 7d0a ink - 1;.. }. │ │ │ -00001990: 097d 0a09 656c 7369 6620 282d 6420 2466 .}..elsif (-d $f │ │ │ -000019a0: 290a 097b 0a09 2020 2020 6e65 7874 2069 )..{.. next i │ │ │ -000019b0: 6620 2824 6620 6571 2027 2e27 206f 7220 f ($f eq '.' or │ │ │ -000019c0: 2466 2065 7120 272e 2e27 293b 0a09 2020 $f eq '..');.. │ │ │ -000019d0: 2020 6368 6469 7220 2224 6622 3b0a 0920 chdir "$f";.. │ │ │ -000019e0: 2020 2026 7472 6176 6572 7365 5472 6565 &traverseTree │ │ │ -000019f0: 7328 293b 0a09 2020 2020 6368 6469 7220 s();.. chdir │ │ │ -00001a00: 222e 2e22 3b0a 097d 0a20 2020 207d 0a20 "..";..}. }. │ │ │ -00001a10: 2020 2063 6c6f 7365 2844 4952 293b 0a7d close(DIR);.} │ │ │ -00001a20: 0a . │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 705f 6475 0a p_du. │ │ ├── ./usr/bin/storeBackupls │ │ │ @@ -1,707 +1,4 @@ │ │ │ -00000000: 2321 202f 7573 722f 6269 6e2f 7065 726c #! /usr/bin/perl │ │ │ -00000010: 0a0a 230a 2320 2020 436f 7079 7269 6768 ..#.# Copyrigh │ │ │ -00000020: 7420 2843 2920 4472 2e20 4865 696e 7a2d t (C) Dr. Heinz- │ │ │ -00000030: 4a6f 7365 6620 436c 6165 7320 2832 3030 Josef Claes (200 │ │ │ -00000040: 322d 3230 3232 290a 2320 2020 2020 2020 2-2022).# │ │ │ -00000050: 2020 2020 2020 2020 2020 686a 636c 6165 hjclae │ │ │ -00000060: 7340 7765 622e 6465 0a23 2020 200a 2320 s@web.de.# .# │ │ │ -00000070: 2020 5468 6973 2070 726f 6772 616d 2069 This program i │ │ │ -00000080: 7320 6672 6565 2073 6f66 7477 6172 653a s free software: │ │ │ -00000090: 2079 6f75 2063 616e 2072 6564 6973 7472 you can redistr │ │ │ -000000a0: 6962 7574 6520 6974 2061 6e64 2f6f 7220 ibute it and/or │ │ │ -000000b0: 6d6f 6469 6679 0a23 2020 2069 7420 756e modify.# it un │ │ │ -000000c0: 6465 7220 7468 6520 7465 726d 7320 6f66 der the terms of │ │ │ -000000d0: 2074 6865 2047 4e55 2047 656e 6572 616c the GNU General │ │ │ -000000e0: 2050 7562 6c69 6320 4c69 6365 6e73 6520 Public License │ │ │ -000000f0: 6173 2070 7562 6c69 7368 6564 2062 790a as published by. │ │ │ -00000100: 2320 2020 7468 6520 4672 6565 2053 6f66 # the Free Sof │ │ │ -00000110: 7477 6172 6520 466f 756e 6461 7469 6f6e tware Foundation │ │ │ -00000120: 2c20 6569 7468 6572 2076 6572 7369 6f6e , either version │ │ │ -00000130: 2033 206f 6620 7468 6520 4c69 6365 6e73 3 of the Licens │ │ │ -00000140: 652c 206f 720a 2320 2020 2861 7420 796f e, or.# (at yo │ │ │ -00000150: 7572 206f 7074 696f 6e29 2061 6e79 206c ur option) any l │ │ │ -00000160: 6174 6572 2076 6572 7369 6f6e 2e0a 0a23 ater version...# │ │ │ -00000170: 2020 2054 6869 7320 7072 6f67 7261 6d20 This program │ │ │ -00000180: 6973 2064 6973 7472 6962 7574 6564 2069 is distributed i │ │ │ -00000190: 6e20 7468 6520 686f 7065 2074 6861 7420 n the hope that │ │ │ -000001a0: 6974 2077 696c 6c20 6265 2075 7365 6675 it will be usefu │ │ │ -000001b0: 6c2c 0a23 2020 2062 7574 2057 4954 484f l,.# but WITHO │ │ │ -000001c0: 5554 2041 4e59 2057 4152 5241 4e54 593b UT ANY WARRANTY; │ │ │ -000001d0: 2077 6974 686f 7574 2065 7665 6e20 7468 without even th │ │ │ -000001e0: 6520 696d 706c 6965 6420 7761 7272 616e e implied warran │ │ │ -000001f0: 7479 206f 660a 2320 2020 4d45 5243 4841 ty of.# MERCHA │ │ │ -00000200: 4e54 4142 494c 4954 5920 6f72 2046 4954 NTABILITY or FIT │ │ │ -00000210: 4e45 5353 2046 4f52 2041 2050 4152 5449 NESS FOR A PARTI │ │ │ -00000220: 4355 4c41 5220 5055 5250 4f53 452e 2020 CULAR PURPOSE. │ │ │ -00000230: 5365 6520 7468 650a 2320 2020 474e 5520 See the.# GNU │ │ │ -00000240: 4765 6e65 7261 6c20 5075 626c 6963 204c General Public L │ │ │ -00000250: 6963 656e 7365 2066 6f72 206d 6f72 6520 icense for more │ │ │ -00000260: 6465 7461 696c 732e 0a23 0a23 2020 2059 details..#.# Y │ │ │ -00000270: 6f75 2073 686f 756c 6420 6861 7665 2072 ou should have r │ │ │ -00000280: 6563 6569 7665 6420 6120 636f 7079 206f eceived a copy o │ │ │ -00000290: 6620 7468 6520 474e 5520 4765 6e65 7261 f the GNU Genera │ │ │ -000002a0: 6c20 5075 626c 6963 204c 6963 656e 7365 l Public License │ │ │ -000002b0: 0a23 2020 2061 6c6f 6e67 2077 6974 6820 .# along with │ │ │ -000002c0: 7468 6973 2070 726f 6772 616d 2e20 2049 this program. I │ │ │ -000002d0: 6620 6e6f 742c 2073 6565 203c 6874 7470 f not, see ..#.#.. │ │ │ -00000300: 7573 6520 4663 6e74 6c20 7177 284f 5f52 use Fcntl qw(O_R │ │ │ -00000310: 4457 5220 4f5f 4352 4541 5429 3b0a 7573 DWR O_CREAT);.us │ │ │ -00000320: 6520 4669 6c65 3a3a 436f 7079 3b0a 7573 e File::Copy;.us │ │ │ -00000330: 6520 504f 5349 583b 0a75 7365 2044 6967 e POSIX;.use Dig │ │ │ -00000340: 6573 743a 3a4d 4435 2071 7728 6d64 355f est::MD5 qw(md5_ │ │ │ -00000350: 6865 7829 3b0a 0a0a 246d 6169 6e3a 3a53 hex);...$main::S │ │ │ -00000360: 544f 5245 4241 434b 5550 5645 5253 494f TOREBACKUPVERSIO │ │ │ -00000370: 4e20 3d20 756e 6465 663b 0a0a 7573 6520 N = undef;..use │ │ │ -00000380: 7374 7269 6374 3b0a 0a73 7562 206c 6962 strict;..sub lib │ │ │ -00000390: 5061 7468 0a7b 0a20 2020 206d 7920 2466 Path.{. my $f │ │ │ -000003a0: 696c 6520 3d20 7368 6966 743b 0a0a 2020 ile = shift;.. │ │ │ -000003b0: 2020 6d79 2024 6469 723b 0a0a 2020 2020 my $dir;.. │ │ │ -000003c0: 2320 4661 6c6c 7320 4461 7465 6920 7365 # Falls Datei se │ │ │ -000003d0: 6c62 7374 2065 696e 2073 796d 6c69 6e6b lbst ein symlink │ │ │ -000003e0: 2069 7374 2c20 736f 6c61 6e67 6520 666f ist, solange fo │ │ │ -000003f0: 6c67 656e 2c20 6269 7320 6175 6667 656c lgen, bis aufgel │ │ │ -00000400: f673 740a 2020 2020 6966 2028 2d66 2024 .st. if (-f $ │ │ │ -00000410: 6669 6c65 290a 2020 2020 7b0a 0977 6869 file). {..whi │ │ │ -00000420: 6c65 2028 2d6c 2024 6669 6c65 290a 097b le (-l $file)..{ │ │ │ -00000430: 0a09 2020 2020 6d79 2024 6c69 6e6b 203d .. my $link = │ │ │ -00000440: 2072 6561 646c 696e 6b28 2466 696c 6529 readlink($file) │ │ │ -00000450: 3b0a 0a09 2020 2020 6966 2028 7375 6273 ;... if (subs │ │ │ -00000460: 7472 2824 6c69 6e6b 2c20 302c 2031 2920 tr($link, 0, 1) │ │ │ -00000470: 6e65 2022 2f22 290a 0920 2020 207b 0a09 ne "/").. {.. │ │ │ -00000480: 0924 6669 6c65 203d 7e20 732f 5b5e 5c2f .$file =~ s/[^\/ │ │ │ -00000490: 5d2b 242f 246c 696e 6b2f 3b0a 0920 2020 ]+$/$link/;.. │ │ │ -000004a0: 207d 0a09 2020 2020 656c 7365 0a09 2020 }.. else.. │ │ │ -000004b0: 2020 7b0a 0909 2466 696c 6520 3d20 246c {...$file = $l │ │ │ -000004c0: 696e 6b3b 0a09 2020 2020 7d0a 097d 0a0a ink;.. }..}.. │ │ │ -000004d0: 0928 2464 6972 2c20 2466 696c 6529 203d .($dir, $file) = │ │ │ -000004e0: 2026 7370 6c69 7446 696c 6544 6972 2824 &splitFileDir($ │ │ │ -000004f0: 6669 6c65 293b 0a09 2466 696c 6520 3d20 file);..$file = │ │ │ -00000500: 222f 2466 696c 6522 3b0a 2020 2020 7d0a "/$file";. }. │ │ │ -00000510: 2020 2020 656c 7365 0a20 2020 207b 0a09 else. {.. │ │ │ -00000520: 7072 696e 7420 5354 4445 5252 2022 3c24 print STDERR "<$ │ │ │ -00000530: 6669 6c65 3e20 646f 6573 206e 6f74 2065 file> does not e │ │ │ -00000540: 7869 7374 215c 6e22 3b0a 0965 7869 7420 xist!\n";..exit │ │ │ -00000550: 313b 0a20 2020 207d 0a0a 2020 2020 2464 1;. }.. $d │ │ │ -00000560: 6972 202e 3d20 222f 2e2e 2f6c 6962 223b ir .= "/../lib"; │ │ │ -00000570: 2020 2020 2020 2020 2020 2023 2050 6661 # Pfa │ │ │ -00000580: 6420 7a75 2064 656e 2042 6962 6c69 6f74 d zu den Bibliot │ │ │ -00000590: 6865 6b65 6e0a 2020 2020 6d79 2024 6f6c heken. my $ol │ │ │ -000005a0: 6444 6972 203d 2060 2f62 696e 2f70 7764 dDir = `/bin/pwd │ │ │ -000005b0: 603b 0a20 2020 2063 686f 6d70 2024 6f6c `;. chomp $ol │ │ │ -000005c0: 6444 6972 3b0a 2020 2020 6966 2028 6368 dDir;. if (ch │ │ │ -000005d0: 6469 7220 2464 6972 290a 2020 2020 7b0a dir $dir). {. │ │ │ -000005e0: 096d 7920 2461 6273 4469 7220 3d20 602f .my $absDir = `/ │ │ │ -000005f0: 6269 6e2f 7077 6460 3b0a 0963 686f 7020 bin/pwd`;..chop │ │ │ -00000600: 2461 6273 4469 723b 0a09 6368 6469 7220 $absDir;..chdir │ │ │ -00000610: 246f 6c64 4469 723b 0a0a 0972 6574 7572 $oldDir;...retur │ │ │ -00000620: 6e20 2826 7370 6c69 7446 696c 6544 6972 n (&splitFileDir │ │ │ -00000630: 2822 2461 6273 4469 7224 6669 6c65 2229 ("$absDir$file") │ │ │ -00000640: 293b 0a20 2020 207d 0a20 2020 2065 6c73 );. }. els │ │ │ -00000650: 650a 2020 2020 7b0a 0970 7269 6e74 2053 e. {..print S │ │ │ -00000660: 5444 4552 5220 223c 2464 6972 3e20 646f TDERR "<$dir> do │ │ │ -00000670: 6573 206e 6f74 2065 7869 7374 2c20 6578 es not exist, ex │ │ │ -00000680: 6974 696e 675c 6e22 3b0a 2020 2020 7d0a iting\n";. }. │ │ │ -00000690: 7d0a 7375 6220 7370 6c69 7446 696c 6544 }.sub splitFileD │ │ │ -000006a0: 6972 0a7b 0a20 2020 206d 7920 246e 616d ir.{. my $nam │ │ │ -000006b0: 6520 3d20 7368 6966 743b 0a0a 2020 2020 e = shift;.. │ │ │ -000006c0: 7265 7475 726e 2028 272e 272c 2024 6e61 return ('.', $na │ │ │ -000006d0: 6d65 2920 756e 6c65 7373 2028 246e 616d me) unless ($nam │ │ │ -000006e0: 6520 3d7e 2f5c 2f2f 293b 2020 2020 2320 e =~/\//); # │ │ │ -000006f0: 6e75 7220 6569 6e66 6163 6865 7220 4461 nur einfacher Da │ │ │ -00000700: 7465 696e 616d 650a 0a20 2020 206d 7920 teiname.. my │ │ │ -00000710: 2824 6469 722c 2024 6669 6c65 2920 3d20 ($dir, $file) = │ │ │ -00000720: 246e 616d 6520 3d7e 202f 5e28 2e2a 295c $name =~ /^(.*)\ │ │ │ -00000730: 2f28 2e2a 2924 2f73 3b0a 2020 2020 2464 /(.*)$/s;. $d │ │ │ -00000740: 6972 203d 2027 2f27 2069 6620 2824 6469 ir = '/' if ($di │ │ │ -00000750: 7220 6571 2027 2729 3b20 2020 2020 2020 r eq ''); │ │ │ -00000760: 2020 2020 2020 2020 2020 2020 2320 6769 # gi │ │ │ -00000770: 6c74 2c20 6661 6c6c 7320 7a2e 422e 202f lt, falls z.B. / │ │ │ -00000780: 6669 6c65 6e61 6d65 0a20 2020 2072 6574 filename. ret │ │ │ -00000790: 7572 6e20 2824 6469 722c 2024 6669 6c65 urn ($dir, $file │ │ │ -000007a0: 293b 0a7d 0a6d 7920 2824 7265 712c 2024 );.}.my ($req, $ │ │ │ -000007b0: 7072 6f67 2920 3d20 266c 6962 5061 7468 prog) = &libPath │ │ │ -000007c0: 2824 3029 3b0a 756e 7368 6966 7420 4049 ($0);.unshift @I │ │ │ -000007d0: 4e43 2c20 2224 7265 7122 3b0a 0a0a 7265 NC, "$req";...re │ │ │ -000007e0: 7175 6972 6520 2763 6865 636b 5061 7261 quire 'checkPara │ │ │ -000007f0: 6d32 2e70 6c27 3b0a 7265 7175 6972 6520 m2.pl';.require │ │ │ -00000800: 2764 6174 6554 6f6f 6c73 2e70 6c27 3b0a 'dateTools.pl';. │ │ │ -00000810: 7265 7175 6972 6520 2776 6572 7369 6f6e require 'version │ │ │ -00000820: 2e70 6c27 3b0a 7265 7175 6972 6520 2773 .pl';.require 's │ │ │ -00000830: 746f 7265 4261 636b 7570 4c69 622e 706c toreBackupLib.pl │ │ │ -00000840: 273b 0a72 6571 7569 7265 2027 7072 4c6f ';.require 'prLo │ │ │ -00000850: 672e 706c 273b 0a72 6571 7569 7265 2027 g.pl';.require ' │ │ │ -00000860: 6669 6c65 4469 722e 706c 273b 0a72 6571 fileDir.pl';.req │ │ │ -00000870: 7569 7265 2027 7374 6f72 6542 6163 6b75 uire 'storeBacku │ │ │ -00000880: 704c 6962 2e70 6c27 3b0a 0a6d 7920 246b pLib.pl';..my $k │ │ │ -00000890: 6565 7041 6c6c 203d 2027 3330 6427 3b0a eepAll = '30d';. │ │ │ -000008a0: 6d79 2024 6b65 6570 4475 706c 6963 6174 my $keepDuplicat │ │ │ -000008b0: 6520 3d20 2737 6427 3b0a 246d 6169 6e3a e = '7d';.$main: │ │ │ -000008c0: 3a63 6865 636b 5375 6d46 696c 6520 3d20 :checkSumFile = │ │ │ -000008d0: 272e 6d64 3543 6865 636b 5375 6d73 273b '.md5CheckSums'; │ │ │ -000008e0: 0a24 6d61 696e 3a3a 6368 6d6f 644d 4435 .$main::chmodMD5 │ │ │ -000008f0: 4669 6c65 203d 2027 3036 3030 273b 0a6d File = '0600';.m │ │ │ -00000900: 7920 2463 6865 636b 5375 6d46 696c 6520 y $checkSumFile │ │ │ -00000910: 3d20 272e 6d64 3543 6865 636b 5375 6d73 = '.md5CheckSums │ │ │ -00000920: 273b 0a0a 3d68 6561 6431 204e 414d 450a ';..=head1 NAME. │ │ │ -00000930: 0a73 746f 7265 4261 636b 7570 6c73 2e70 .storeBackupls.p │ │ │ -00000940: 6c20 2d20 4c69 7374 7320 6261 636b 7570 l - Lists backup │ │ │ -00000950: 2064 6972 6563 746f 7269 6573 2067 656e directories gen │ │ │ -00000960: 6572 6174 6564 2077 6974 6820 7374 6f72 erated with stor │ │ │ -00000970: 6542 6163 6b75 702e 706c 2077 6974 6820 eBackup.pl with │ │ │ -00000980: 7765 656b 2064 6179 2e75 6e73 6869 6674 week day.unshift │ │ │ -00000990: 2040 494e 432c 2022 2472 6571 223b 0a5f @INC, "$req";._ │ │ │ -000009a0: 0a0a 3d68 6561 6431 2053 594e 4f50 5349 ..=head1 SYNOPSI │ │ │ -000009b0: 530a 0a20 2020 2073 746f 7265 4261 636b S.. storeBack │ │ │ -000009c0: 7570 6c73 2e70 6c20 2d66 2063 6f6e 6669 upls.pl -f confi │ │ │ -000009d0: 6746 696c 6520 5b2d 2d70 7269 6e74 5d20 gFile [--print] │ │ │ -000009e0: 5b73 746f 7265 4261 636b 7570 2d64 6972 [storeBackup-dir │ │ │ -000009f0: 5d0a 2020 2020 7374 6f72 6542 6163 6b75 ]. storeBacku │ │ │ -00000a00: 706c 732e 706c 205b 2d76 5d20 5b2d 2d70 pls.pl [-v] [--p │ │ │ -00000a10: 7269 6e74 5d20 7374 6f72 6542 6163 6b75 rint] storeBacku │ │ │ -00000a20: 702d 6469 720a 0a3d 6865 6164 3120 4f50 p-dir..=head1 OP │ │ │ -00000a30: 5449 4f4e 530a 0a3d 6f76 6572 2038 0a0a TIONS..=over 8.. │ │ │ -00000a40: 3d69 7465 6d20 423c 2d2d 7665 7262 6f73 =item B<--verbos │ │ │ -00000a50: 653e 2c20 423c 2d76 3e0a 0a20 2020 2061 e>, B<-v>.. a │ │ │ -00000a60: 6464 6974 696f 6e61 6c20 696e 666f 726d dditional inform │ │ │ -00000a70: 6174 696f 6e20 6162 6f75 7420 7468 6520 ation about the │ │ │ -00000a80: 6261 636b 7570 2064 6972 6563 746f 7269 backup directori │ │ │ -00000a90: 6573 0a0a 3d69 7465 6d20 423c 2d2d 7072 es..=item B<--pr │ │ │ -00000aa0: 696e 743e 0a0a 2020 2020 7072 696e 7420 int>.. print │ │ │ -00000ab0: 636f 6e66 6967 7572 6174 696f 6e20 7265 configuration re │ │ │ -00000ac0: 6164 2066 726f 6d20 636f 6e66 6967 7572 ad from configur │ │ │ -00000ad0: 6174 696f 6e20 6669 6c65 2061 6e64 2073 ation file and s │ │ │ -00000ae0: 746f 700a 0a3d 6974 656d 2042 3c2d 2d66 top..=item B<--f │ │ │ -00000af0: 696c 653e 2c20 423c 2d66 3e0a 0a20 2020 ile>, B<-f>.. │ │ │ -00000b00: 2063 6f6e 6669 6775 7261 7469 6f6e 2066 configuration f │ │ │ -00000b10: 696c 653b 2061 6e61 6c79 7365 2062 6163 ile; analyse bac │ │ │ -00000b20: 6b75 7073 2064 6570 656e 6469 6e67 206f kups depending o │ │ │ -00000b30: 6e0a 2020 2020 6b65 6570 2070 6172 616d n. keep param │ │ │ -00000b40: 6574 6572 7320 696e 2063 6f6e 6669 6775 eters in configu │ │ │ -00000b50: 7261 7469 6f6e 2066 696c 650a 0a3d 6974 ration file..=it │ │ │ -00000b60: 656d 2046 3c73 746f 7265 4261 636b 7570 em F.. direc │ │ │ -00000b80: 746f 7279 2077 6865 7265 2074 6865 2073 tory where the s │ │ │ -00000b90: 746f 7265 4261 636b 7570 2064 6972 6563 toreBackup direc │ │ │ -00000ba0: 746f 7269 6573 2061 7265 0a20 2020 206f tories are. o │ │ │ -00000bb0: 7665 7277 7269 7465 7320 7468 6520 7061 verwrites the pa │ │ │ -00000bc0: 7468 2069 6e20 7468 6520 636f 6e66 6967 th in the config │ │ │ -00000bd0: 2066 696c 6520 6966 2075 7365 6420 7769 file if used wi │ │ │ -00000be0: 7468 202d 660a 0a3d 6261 636b 0a0a 3d68 th -f..=back..=h │ │ │ -00000bf0: 6561 6431 2043 4f50 5952 4947 4854 0a0a ead1 COPYRIGHT.. │ │ │ -00000c00: 436f 7079 7269 6768 7420 2863 2920 3230 Copyright (c) 20 │ │ │ -00000c10: 3032 2d32 3032 3220 6279 2048 6569 6e7a 02-2022 by Heinz │ │ │ -00000c20: 2d4a 6f73 6566 2043 6c61 6573 2028 7365 -Josef Claes (se │ │ │ -00000c30: 6520 5245 4144 4d45 292e 0a50 7562 6c69 e README)..Publi │ │ │ -00000c40: 7368 6564 2075 6e64 6572 2074 6865 2047 shed under the G │ │ │ -00000c50: 4e55 2047 656e 6572 616c 2050 7562 6c69 NU General Publi │ │ │ -00000c60: 6320 4c69 6365 6e73 6520 7633 206f 7220 c License v3 or │ │ │ -00000c70: 616e 7920 6c61 7465 7220 7665 7273 696f any later versio │ │ │ -00000c80: 6e0a 0a3d 6375 740a 0a6d 7920 2448 656c n..=cut..my $Hel │ │ │ -00000c90: 7020 3d20 263a 3a67 6574 506f 6432 5465 p = &::getPod2Te │ │ │ -00000ca0: 7874 2824 3029 3b0a 0a26 7072 696e 7456 xt($0);..&printV │ │ │ -00000cb0: 6572 7369 6f6e 285c 4041 5247 562c 2027 ersion(\@ARGV, ' │ │ │ -00000cc0: 2d56 272c 2027 2d2d 7665 7273 696f 6e27 -V', '--version' │ │ │ -00000cd0: 293b 0a0a 6d79 2024 4368 6563 6b50 6172 );..my $CheckPar │ │ │ -00000ce0: 203d 0a20 2020 2043 6865 636b 5061 7261 =. CheckPara │ │ │ -00000cf0: 6d2d 3e6e 6577 2827 2d61 6c6c 6f77 4c69 m->new('-allowLi │ │ │ -00000d00: 7374 7327 203d 3e20 2779 6573 272c 0a09 sts' => 'yes',.. │ │ │ -00000d10: 0920 2020 2027 2d63 6f6e 6669 6746 696c . '-configFil │ │ │ -00000d20: 6527 203d 3e20 272d 6627 2c0a 0909 2020 e' => '-f',... │ │ │ -00000d30: 2020 272d 6c69 7374 2720 3d3e 205b 4f70 '-list' => [Op │ │ │ -00000d40: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00000d50: 2720 3d3e 2027 7665 7262 6f73 6527 2c0a ' => 'verbose',. │ │ │ -00000d60: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00000d70: 7469 6f6e 2720 3d3e 2027 2d76 272c 0a09 tion' => '-v',.. │ │ │ -00000d80: 0909 0909 2020 2020 272d 636c 5f61 6c69 .... '-cl_ali │ │ │ -00000d90: 6173 2720 3d3e 2027 2d2d 7665 7262 6f73 as' => '--verbos │ │ │ -00000da0: 6527 292c 0a20 2020 2020 2020 2020 2020 e'),. │ │ │ -00000db0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000dc0: 2020 2020 204f 7074 696f 6e2d 3e6e 6577 Option->new │ │ │ -00000dd0: 2827 2d6e 616d 6527 203d 3e20 2770 7269 ('-name' => 'pri │ │ │ -00000de0: 6e74 272c 0a09 0909 0909 2020 2020 272d nt',...... '- │ │ │ -00000df0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -00000e00: 2d70 7269 6e74 2729 2c0a 0909 0909 4f70 -print'),.....Op │ │ │ -00000e10: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00000e20: 2720 3d3e 2027 6669 6c65 272c 0a09 0909 ' => 'file',.... │ │ │ -00000e30: 0909 2020 2020 272d 636c 5f6f 7074 696f .. '-cl_optio │ │ │ -00000e40: 6e27 203d 3e20 272d 6627 2c0a 2020 2020 n' => '-f',. │ │ │ -00000e50: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000e60: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000e70: 2020 2020 2020 2020 272d 636c 5f61 6c69 '-cl_ali │ │ │ -00000e80: 6173 2720 3d3e 2027 2d2d 6669 6c65 272c as' => '--file', │ │ │ -00000e90: 0a20 2020 2020 2020 2020 2020 2020 2020 . │ │ │ -00000ea0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00000eb0: 2020 2020 2020 2020 2020 2020 2027 2d70 '-p │ │ │ -00000ec0: 6172 616d 2720 3d3e 2027 7965 7327 292c aram' => 'yes'), │ │ │ -00000ed0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00000ee0: 2827 2d6e 616d 6527 203d 3e20 2762 6163 ('-name' => 'bac │ │ │ -00000ef0: 6b75 7044 6972 272c 0a09 0909 0909 2020 kupDir',...... │ │ │ -00000f00: 2020 272d 6366 5f6b 6579 2720 3d3e 2027 '-cf_key' => ' │ │ │ -00000f10: 6261 636b 7570 4469 7227 2c0a 0909 0909 backupDir',..... │ │ │ -00000f20: 0920 2020 2027 2d70 6172 616d 2720 3d3e . '-param' => │ │ │ -00000f30: 2027 7965 7327 292c 0a09 0909 094f 7074 'yes'),.....Opt │ │ │ -00000f40: 696f 6e2d 3e6e 6577 2827 2d6e 616d 6527 ion->new('-name' │ │ │ -00000f50: 203d 3e20 2773 6572 6965 7327 2c0a 0909 => 'series',... │ │ │ -00000f60: 0909 0920 2020 2027 2d63 665f 6b65 7927 ... '-cf_key' │ │ │ -00000f70: 203d 3e20 2773 6572 6965 7327 2c0a 0909 => 'series',... │ │ │ -00000f80: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -00000f90: 2720 3d3e 2027 6465 6661 756c 7427 292c ' => 'default'), │ │ │ -00000fa0: 0a09 0909 094f 7074 696f 6e2d 3e6e 6577 .....Option->new │ │ │ -00000fb0: 2827 2d6e 616d 6527 203d 3e20 276b 6565 ('-name' => 'kee │ │ │ -00000fc0: 7041 6c6c 272c 0a09 0909 0909 2020 2020 pAll',...... │ │ │ -00000fd0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00000fe0: 272d 2d6b 6565 7041 6c6c 272c 0a09 0909 '--keepAll',.... │ │ │ -00000ff0: 0909 2020 2020 272d 6366 5f6b 6579 2720 .. '-cf_key' │ │ │ -00001000: 3d3e 2027 6b65 6570 416c 6c27 2c0a 0909 => 'keepAll',... │ │ │ -00001010: 0909 0920 2020 2027 2d64 6566 6175 6c74 ... '-default │ │ │ -00001020: 2720 3d3e 2024 6b65 6570 416c 6c29 2c0a ' => $keepAll),. │ │ │ -00001030: 0909 0909 4f70 7469 6f6e 2d3e 6e65 7728 ....Option->new( │ │ │ -00001040: 272d 6e61 6d65 2720 3d3e 2027 6b65 6570 '-name' => 'keep │ │ │ -00001050: 5765 656b 6461 7927 2c0a 0909 0909 0920 Weekday',...... │ │ │ -00001060: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -00001070: 3d3e 2027 2d2d 6b65 6570 5765 656b 6461 => '--keepWeekda │ │ │ -00001080: 7927 2c0a 0909 0909 0920 2020 2027 2d63 y',...... '-c │ │ │ -00001090: 665f 6b65 7927 203d 3e20 276b 6565 7057 f_key' => 'keepW │ │ │ -000010a0: 6565 6b64 6179 272c 0a09 0909 0909 2020 eekday',...... │ │ │ -000010b0: 2020 272d 7061 7261 6d27 203d 3e20 2779 '-param' => 'y │ │ │ -000010c0: 6573 2729 2c0a 0909 0909 4f70 7469 6f6e es'),.....Option │ │ │ -000010d0: 2d3e 6e65 7728 272d 6e61 6d65 2720 3d3e ->new('-name' => │ │ │ -000010e0: 2027 6b65 6570 4669 7273 744f 6659 6561 'keepFirstOfYea │ │ │ -000010f0: 7227 2c0a 0909 0909 0920 2020 2027 2d63 r',...... '-c │ │ │ -00001100: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -00001110: 6b65 6570 4669 7273 744f 6659 6561 7227 keepFirstOfYear' │ │ │ -00001120: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00001130: 6b65 7927 203d 3e20 276b 6565 7046 6972 key' => 'keepFir │ │ │ -00001140: 7374 4f66 5965 6172 272c 0a09 0909 0909 stOfYear',...... │ │ │ -00001150: 2020 2020 272d 7061 7261 6d27 203d 3e20 '-param' => │ │ │ -00001160: 2779 6573 2729 2c0a 0909 0909 4f70 7469 'yes'),.....Opti │ │ │ -00001170: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001180: 3d3e 2027 6b65 6570 4c61 7374 4f66 5965 => 'keepLastOfYe │ │ │ -00001190: 6172 272c 0a09 0909 0909 2020 2020 272d ar',...... '- │ │ │ -000011a0: 636c 5f6f 7074 696f 6e27 203d 3e20 272d cl_option' => '- │ │ │ -000011b0: 2d6b 6565 704c 6173 744f 6659 6561 7227 -keepLastOfYear' │ │ │ -000011c0: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -000011d0: 6b65 7927 203d 3e20 276b 6565 704c 6173 key' => 'keepLas │ │ │ -000011e0: 744f 6659 6561 7227 2c0a 0909 0909 0920 tOfYear',...... │ │ │ -000011f0: 2020 2027 2d70 6172 616d 2720 3d3e 2027 '-param' => ' │ │ │ -00001200: 7965 7327 292c 0a09 0909 094f 7074 696f yes'),.....Optio │ │ │ -00001210: 6e2d 3e6e 6577 2827 2d6e 616d 6527 203d n->new('-name' = │ │ │ -00001220: 3e20 276b 6565 7046 6972 7374 4f66 4d6f > 'keepFirstOfMo │ │ │ -00001230: 6e74 6827 2c0a 0909 0909 0920 2020 2027 nth',...... ' │ │ │ -00001240: 2d63 6c5f 6f70 7469 6f6e 2720 3d3e 2027 -cl_option' => ' │ │ │ -00001250: 2d2d 6b65 6570 4669 7273 744f 664d 6f6e --keepFirstOfMon │ │ │ -00001260: 7468 272c 0a09 0909 0909 2020 2020 272d th',...... '- │ │ │ -00001270: 6366 5f6b 6579 2720 3d3e 2027 6b65 6570 cf_key' => 'keep │ │ │ -00001280: 4669 7273 744f 664d 6f6e 7468 272c 0a09 FirstOfMonth',.. │ │ │ -00001290: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -000012a0: 203d 3e20 2779 6573 2729 2c0a 0909 0909 => 'yes'),..... │ │ │ -000012b0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000012c0: 6d65 2720 3d3e 2027 6b65 6570 4c61 7374 me' => 'keepLast │ │ │ -000012d0: 4f66 4d6f 6e74 6827 2c0a 0909 0909 0920 OfMonth',...... │ │ │ -000012e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000012f0: 3d3e 2027 2d2d 6b65 6570 4c61 7374 4f66 => '--keepLastOf │ │ │ -00001300: 4d6f 6e74 6827 2c0a 0909 0909 0920 2020 Month',...... │ │ │ -00001310: 2027 2d63 665f 6b65 7927 203d 3e20 276b '-cf_key' => 'k │ │ │ -00001320: 6565 704c 6173 744f 664d 6f6e 7468 272c eepLastOfMonth', │ │ │ -00001330: 0a09 0909 0909 2020 2020 272d 7061 7261 ...... '-para │ │ │ -00001340: 6d27 203d 3e20 2779 6573 2729 2c0a 2020 m' => 'yes'),. │ │ │ -00001350: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001360: 2020 2020 2020 2020 2020 2020 2020 4f70 Op │ │ │ -00001370: 7469 6f6e 2d3e 6e65 7728 272d 6e61 6d65 tion->new('-name │ │ │ -00001380: 2720 3d3e 2027 6669 7273 7444 6179 4f66 ' => 'firstDayOf │ │ │ -00001390: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... │ │ │ -000013a0: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -000013b0: 272d 2d66 6972 7374 4461 794f 6657 6565 '--firstDayOfWee │ │ │ -000013c0: 6b27 2c0a 0909 0909 0920 2020 2027 2d63 k',...... '-c │ │ │ -000013d0: 665f 6b65 7927 203d 3e20 2766 6972 7374 f_key' => 'first │ │ │ -000013e0: 4461 794f 6657 6565 6b27 2c0a 0909 0909 DayOfWeek',..... │ │ │ -000013f0: 0920 2020 2027 2d64 6566 6175 6c74 2720 . '-default' │ │ │ -00001400: 3d3e 2027 5375 6e27 292c 0a09 0909 094f => 'Sun'),.....O │ │ │ -00001410: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001420: 6527 203d 3e20 276b 6565 7046 6972 7374 e' => 'keepFirst │ │ │ -00001430: 4f66 5765 656b 272c 0a09 0909 0909 2020 OfWeek',...... │ │ │ -00001440: 2020 272d 636c 5f6f 7074 696f 6e27 203d '-cl_option' = │ │ │ -00001450: 3e20 272d 2d6b 6565 7046 6972 7374 4f66 > '--keepFirstOf │ │ │ -00001460: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... │ │ │ -00001470: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke │ │ │ -00001480: 6570 4669 7273 744f 6657 6565 6b27 2c0a epFirstOfWeek',. │ │ │ -00001490: 0909 0909 0920 2020 2027 2d70 6172 616d ..... '-param │ │ │ -000014a0: 2720 3d3e 2027 7965 7327 292c 0a09 0909 ' => 'yes'),.... │ │ │ -000014b0: 094f 7074 696f 6e2d 3e6e 6577 2827 2d6e .Option->new('-n │ │ │ -000014c0: 616d 6527 203d 3e20 276b 6565 704c 6173 ame' => 'keepLas │ │ │ -000014d0: 744f 6657 6565 6b27 2c0a 0909 0909 0920 tOfWeek',...... │ │ │ -000014e0: 2020 2027 2d63 6c5f 6f70 7469 6f6e 2720 '-cl_option' │ │ │ -000014f0: 3d3e 2027 2d2d 6b65 6570 4c61 7374 4f66 => '--keepLastOf │ │ │ -00001500: 5765 656b 272c 0a09 0909 0909 2020 2020 Week',...... │ │ │ -00001510: 272d 6366 5f6b 6579 2720 3d3e 2027 6b65 '-cf_key' => 'ke │ │ │ -00001520: 6570 4c61 7374 4f66 5765 656b 272c 0a09 epLastOfWeek',.. │ │ │ -00001530: 0909 0909 2020 2020 272d 7061 7261 6d27 .... '-param' │ │ │ -00001540: 203d 3e20 2779 6573 2729 2c0a 2020 2020 => 'yes'),. │ │ │ -00001550: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001560: 2020 2020 2020 2020 2020 2020 4f70 7469 Opti │ │ │ -00001570: 6f6e 2d3e 6e65 7728 272d 6e61 6d65 2720 on->new('-name' │ │ │ -00001580: 3d3e 2027 6b65 6570 4475 706c 6963 6174 => 'keepDuplicat │ │ │ -00001590: 6527 2c0a 0909 0909 0920 2020 2027 2d63 e',...... '-c │ │ │ -000015a0: 6c5f 6f70 7469 6f6e 2720 3d3e 2027 2d2d l_option' => '-- │ │ │ -000015b0: 6b65 6570 4475 706c 6963 6174 6527 2c0a keepDuplicate',. │ │ │ -000015c0: 0909 0909 0920 2020 2027 2d63 665f 6b65 ..... '-cf_ke │ │ │ -000015d0: 7927 203d 3e20 276b 6565 7044 7570 6c69 y' => 'keepDupli │ │ │ -000015e0: 6361 7465 272c 0a09 0909 0909 2020 2020 cate',...... │ │ │ -000015f0: 272d 6465 6661 756c 7427 203d 3e20 246b '-default' => $k │ │ │ -00001600: 6565 7044 7570 6c69 6361 7465 292c 0a20 eepDuplicate),. │ │ │ -00001610: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001620: 2020 2020 2020 2020 2020 2020 2020 204f O │ │ │ -00001630: 7074 696f 6e2d 3e6e 6577 2827 2d6e 616d ption->new('-nam │ │ │ -00001640: 6527 203d 3e20 276b 6565 704d 696e 4e75 e' => 'keepMinNu │ │ │ -00001650: 6d62 6572 272c 0a09 0909 0909 2020 2020 mber',...... │ │ │ -00001660: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001670: 272d 2d6b 6565 704d 696e 4e75 6d62 6572 '--keepMinNumber │ │ │ -00001680: 272c 0a09 0909 0909 2020 2020 272d 6366 ',...... '-cf │ │ │ -00001690: 5f6b 6579 2720 3d3e 2027 6b65 6570 4d69 _key' => 'keepMi │ │ │ -000016a0: 6e4e 756d 6265 7227 2c0a 0909 0909 0920 nNumber',...... │ │ │ -000016b0: 2020 2027 2d64 6566 6175 6c74 2720 3d3e '-default' => │ │ │ -000016c0: 2031 302c 0a09 0909 0909 2020 2020 272d 10,...... '- │ │ │ -000016d0: 7061 7474 6572 6e27 203d 3e20 275c 415c pattern' => '\A\ │ │ │ -000016e0: 642b 5c5a 2729 2c0a 2020 2020 2020 2020 d+\Z'),. │ │ │ -000016f0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -00001700: 2020 2020 2020 2020 4f70 7469 6f6e 2d3e Option-> │ │ │ -00001710: 6e65 7728 272d 6e61 6d65 2720 3d3e 2027 new('-name' => ' │ │ │ -00001720: 6b65 6570 4d61 784e 756d 6265 7227 2c0a keepMaxNumber',. │ │ │ -00001730: 0909 0909 0920 2020 2027 2d63 6c5f 6f70 ..... '-cl_op │ │ │ -00001740: 7469 6f6e 2720 3d3e 2027 2d2d 6b65 6570 tion' => '--keep │ │ │ -00001750: 4d61 784e 756d 6265 7227 2c0a 0909 0909 MaxNumber',..... │ │ │ -00001760: 0920 2020 2027 2d63 665f 6b65 7927 203d . '-cf_key' = │ │ │ -00001770: 3e20 276b 6565 704d 6178 4e75 6d62 6572 > 'keepMaxNumber │ │ │ -00001780: 272c 0a09 0909 0909 2020 2020 272d 6465 ',...... '-de │ │ │ -00001790: 6661 756c 7427 203d 3e20 302c 0a09 0909 fault' => 0,.... │ │ │ -000017a0: 0909 2020 2020 272d 7061 7474 6572 6e27 .. '-pattern' │ │ │ -000017b0: 203d 3e20 275c 415c 642b 5c5a 2729 2c0a => '\A\d+\Z'),. │ │ │ -000017c0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000017d0: 2020 2020 2020 2020 2020 2020 2020 2020 │ │ │ -000017e0: 4f70 7469 6f6e 2d3e 6e65 7728 272d 6e61 Option->new('-na │ │ │ -000017f0: 6d65 2720 3d3e 2027 6b65 6570 5265 6c61 me' => 'keepRela │ │ │ -00001800: 7469 7665 272c 0a09 0909 0909 2020 2020 tive',...... │ │ │ -00001810: 272d 636c 5f6f 7074 696f 6e27 203d 3e20 '-cl_option' => │ │ │ -00001820: 272d 2d6b 6565 7052 656c 6174 6976 6527 '--keepRelative' │ │ │ -00001830: 2c0a 0909 0909 0920 2020 2027 2d63 665f ,...... '-cf_ │ │ │ -00001840: 6b65 7927 203d 3e20 276b 6565 7052 656c key' => 'keepRel │ │ │ -00001850: 6174 6976 6527 2c0a 0909 0909 0920 2020 ative',...... │ │ │ -00001860: 2027 2d6d 756c 7469 706c 6527 203d 3e20 '-multiple' => │ │ │ -00001870: 2779 6573 272c 0a09 0909 0909 2020 2020 'yes',...... │ │ │ -00001880: 272d 7061 7261 6d27 203d 3e20 2779 6573 '-param' => 'yes │ │ │ -00001890: 2729 2c0a 0909 2020 2020 5d29 3b0a 0a24 '),... ]);..$ │ │ │ -000018a0: 4368 6563 6b50 6172 2d3e 6368 6563 6b28 CheckPar->check( │ │ │ -000018b0: 272d 6172 6776 2720 3d3e 205c 4041 5247 '-argv' => \@ARG │ │ │ -000018c0: 562c 0a20 2020 2020 2020 2020 2020 2020 V,. │ │ │ -000018d0: 2020 2020 272d 6865 6c70 2720 3d3e 2024 '-help' => $ │ │ │ -000018e0: 4865 6c70 2c0a 0909 2027 2d69 676e 6f72 Help,... '-ignor │ │ │ -000018f0: 6541 6464 6974 696f 6e61 6c4b 6579 7327 eAdditionalKeys' │ │ │ -00001900: 203d 3e20 310a 2020 2020 2020 2020 2020 => 1. │ │ │ -00001910: 2020 2020 2020 2029 3b0a 0a6d 7920 2476 );..my $v │ │ │ -00001920: 6572 626f 7365 203d 2024 4368 6563 6b50 erbose = $CheckP │ │ │ -00001930: 6172 2d3e 6765 744f 7074 5769 7468 6f75 ar->getOptWithou │ │ │ -00001940: 7450 6172 2827 7665 7262 6f73 6527 293b tPar('verbose'); │ │ │ -00001950: 0a6d 7920 2470 7269 6e74 203d 2024 4368 .my $print = $Ch │ │ │ -00001960: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00001970: 7468 6f75 7450 6172 2827 7072 696e 7427 thoutPar('print' │ │ │ -00001980: 293b 0a6d 7920 2463 6f6e 6669 6746 696c );.my $configFil │ │ │ -00001990: 6520 3d20 2443 6865 636b 5061 722d 3e67 e = $CheckPar->g │ │ │ -000019a0: 6574 4f70 7457 6974 6850 6172 2827 6669 etOptWithPar('fi │ │ │ -000019b0: 6c65 2729 3b0a 0a6d 7920 2462 6163 6b75 le');..my $backu │ │ │ -000019c0: 7044 6972 203d 2024 4368 6563 6b50 6172 pDir = $CheckPar │ │ │ -000019d0: 2d3e 6765 744f 7074 5769 7468 5061 7228 ->getOptWithPar( │ │ │ -000019e0: 2762 6163 6b75 7044 6972 2729 3b0a 6d79 'backupDir');.my │ │ │ -000019f0: 2024 7365 7269 6573 203d 2024 4368 6563 $series = $Chec │ │ │ -00001a00: 6b50 6172 2d3e 6765 744f 7074 5769 7468 kPar->getOptWith │ │ │ -00001a10: 5061 7228 2773 6572 6965 7327 293b 0a6d Par('series');.m │ │ │ -00001a20: 7920 246b 6565 7041 6c6c 203d 2024 4368 y $keepAll = $Ch │ │ │ -00001a30: 6563 6b50 6172 2d3e 6765 744f 7074 5769 eckPar->getOptWi │ │ │ -00001a40: 7468 5061 7228 276b 6565 7041 6c6c 2729 thPar('keepAll') │ │ │ -00001a50: 3b0a 6d79 2024 6b65 6570 5765 656b 6461 ;.my $keepWeekda │ │ │ -00001a60: 7920 3d20 2443 6865 636b 5061 722d 3e67 y = $CheckPar->g │ │ │ -00001a70: 6574 4f70 7457 6974 6850 6172 2827 6b65 etOptWithPar('ke │ │ │ -00001a80: 6570 5765 656b 6461 7927 293b 0a6d 7920 epWeekday');.my │ │ │ -00001a90: 246b 6565 7046 6972 7374 4f66 5965 6172 $keepFirstOfYear │ │ │ -00001aa0: 203d 2024 4368 6563 6b50 6172 2d3e 6765 = $CheckPar->ge │ │ │ -00001ab0: 744f 7074 5769 7468 5061 7228 276b 6565 tOptWithPar('kee │ │ │ -00001ac0: 7046 6972 7374 4f66 5965 6172 2729 3b0a pFirstOfYear');. │ │ │ -00001ad0: 6d79 2024 6b65 6570 4c61 7374 4f66 5965 my $keepLastOfYe │ │ │ -00001ae0: 6172 203d 2024 4368 6563 6b50 6172 2d3e ar = $CheckPar-> │ │ │ -00001af0: 6765 744f 7074 5769 7468 5061 7228 276b getOptWithPar('k │ │ │ -00001b00: 6565 704c 6173 744f 6659 6561 7227 293b eepLastOfYear'); │ │ │ -00001b10: 0a6d 7920 246b 6565 7046 6972 7374 4f66 .my $keepFirstOf │ │ │ -00001b20: 4d6f 6e74 6820 3d20 2443 6865 636b 5061 Month = $CheckPa │ │ │ -00001b30: 722d 3e67 6574 4f70 7457 6974 6850 6172 r->getOptWithPar │ │ │ -00001b40: 2827 6b65 6570 4669 7273 744f 664d 6f6e ('keepFirstOfMon │ │ │ -00001b50: 7468 2729 3b0a 6d79 2024 6b65 6570 4c61 th');.my $keepLa │ │ │ -00001b60: 7374 4f66 4d6f 6e74 6820 3d20 2443 6865 stOfMonth = $Che │ │ │ -00001b70: 636b 5061 722d 3e67 6574 4f70 7457 6974 ckPar->getOptWit │ │ │ -00001b80: 6850 6172 2827 6b65 6570 4c61 7374 4f66 hPar('keepLastOf │ │ │ -00001b90: 4d6f 6e74 6827 293b 0a6d 7920 2466 6972 Month');.my $fir │ │ │ -00001ba0: 7374 4461 794f 6657 6565 6b20 3d20 2443 stDayOfWeek = $C │ │ │ -00001bb0: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00001bc0: 6974 6850 6172 2827 6669 7273 7444 6179 ithPar('firstDay │ │ │ -00001bd0: 4f66 5765 656b 2729 3b0a 6d79 2024 6b65 OfWeek');.my $ke │ │ │ -00001be0: 6570 4669 7273 744f 6657 6565 6b20 3d20 epFirstOfWeek = │ │ │ -00001bf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001c00: 7457 6974 6850 6172 2827 6b65 6570 4669 tWithPar('keepFi │ │ │ -00001c10: 7273 744f 6657 6565 6b27 293b 0a6d 7920 rstOfWeek');.my │ │ │ -00001c20: 246b 6565 704c 6173 744f 6657 6565 6b20 $keepLastOfWeek │ │ │ -00001c30: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001c40: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ -00001c50: 4c61 7374 4f66 5765 656b 2729 3b0a 6d79 LastOfWeek');.my │ │ │ -00001c60: 2024 6b65 6570 4475 706c 6963 6174 6520 $keepDuplicate │ │ │ -00001c70: 3d20 2443 6865 636b 5061 722d 3e67 6574 = $CheckPar->get │ │ │ -00001c80: 4f70 7457 6974 6850 6172 2827 6b65 6570 OptWithPar('keep │ │ │ -00001c90: 4475 706c 6963 6174 6527 293b 0a6d 7920 Duplicate');.my │ │ │ -00001ca0: 246b 6565 704d 696e 4e75 6d62 6572 203d $keepMinNumber = │ │ │ -00001cb0: 2024 4368 6563 6b50 6172 2d3e 6765 744f $CheckPar->getO │ │ │ -00001cc0: 7074 5769 7468 5061 7228 276b 6565 704d ptWithPar('keepM │ │ │ -00001cd0: 696e 4e75 6d62 6572 2729 3b0a 6d79 2024 inNumber');.my $ │ │ │ -00001ce0: 6b65 6570 4d61 784e 756d 6265 7220 3d20 keepMaxNumber = │ │ │ -00001cf0: 2443 6865 636b 5061 722d 3e67 6574 4f70 $CheckPar->getOp │ │ │ -00001d00: 7457 6974 6850 6172 2827 6b65 6570 4d61 tWithPar('keepMa │ │ │ -00001d10: 784e 756d 6265 7227 293b 0a6d 7920 246b xNumber');.my $k │ │ │ -00001d20: 6565 7052 656c 6174 6976 6520 3d20 2443 eepRelative = $C │ │ │ -00001d30: 6865 636b 5061 722d 3e67 6574 4f70 7457 heckPar->getOptW │ │ │ -00001d40: 6974 6850 6172 2827 6b65 6570 5265 6c61 ithPar('keepRela │ │ │ -00001d50: 7469 7665 2729 3b0a 0a69 6620 2824 7072 tive');..if ($pr │ │ │ -00001d60: 696e 7429 0a7b 0a20 2020 2024 4368 6563 int).{. $Chec │ │ │ -00001d70: 6b50 6172 2d3e 7072 696e 7428 293b 0a20 kPar->print();. │ │ │ -00001d80: 2020 2065 7869 7420 303b 0a7d 0a0a 6d79 exit 0;.}..my │ │ │ -00001d90: 2024 6469 723b 0a69 6620 2824 6261 636b $dir;.if ($back │ │ │ -00001da0: 7570 4469 7229 0a7b 0a20 2020 2024 6469 upDir).{. $di │ │ │ -00001db0: 7220 3d20 2462 6163 6b75 7044 6972 202e r = $backupDir . │ │ │ -00001dc0: 2027 2f27 202e 2473 6572 6965 7320 2e20 '/' .$series . │ │ │ -00001dd0: 272f 273b 0a7d 0a0a 6966 2028 2443 6865 '/';.}..if ($Che │ │ │ -00001de0: 636b 5061 722d 3e67 6574 4c69 7374 5061 ckPar->getListPa │ │ │ -00001df0: 7228 2929 0a7b 0a20 2020 2028 2464 6972 r()).{. ($dir │ │ │ -00001e00: 2920 3d20 2443 6865 636b 5061 722d 3e67 ) = $CheckPar->g │ │ │ -00001e10: 6574 4c69 7374 5061 7228 293b 0a7d 0a64 etListPar();.}.d │ │ │ -00001e20: 6965 2022 2448 656c 7022 2075 6e6c 6573 ie "$Help" unles │ │ │ -00001e30: 7320 2464 6972 206f 7220 2463 6f6e 6669 s $dir or $confi │ │ │ -00001e40: 6746 696c 653b 0a0a 6d79 2024 746f 6461 gFile;..my $toda │ │ │ -00001e50: 7920 3d20 6461 7465 546f 6f6c 732d 3e6e y = dateTools->n │ │ │ -00001e60: 6577 2829 3b0a 0a69 6620 2824 636f 6e66 ew();..if ($conf │ │ │ -00001e70: 6967 4669 6c65 290a 7b0a 2020 2020 2661 igFile).{. &a │ │ │ -00001e80: 6e61 6c79 7365 4f6c 6442 6163 6b75 7073 nalyseOldBackups │ │ │ -00001e90: 2824 6469 722c 2024 636f 6e66 6967 4669 ($dir, $configFi │ │ │ -00001ea0: 6c65 2c20 2474 6f64 6179 2c20 2476 6572 le, $today, $ver │ │ │ -00001eb0: 626f 7365 2c20 246b 6565 7041 6c6c 2c0a bose, $keepAll,. │ │ │ -00001ec0: 0909 2020 2020 2020 2024 6b65 6570 5765 .. $keepWe │ │ │ -00001ed0: 656b 6461 792c 2024 6b65 6570 4669 7273 ekday, $keepFirs │ │ │ -00001ee0: 744f 6659 6561 722c 2024 6b65 6570 4c61 tOfYear, $keepLa │ │ │ -00001ef0: 7374 4f66 5965 6172 2c0a 0909 2020 2020 stOfYear,... │ │ │ -00001f00: 2020 2024 6b65 6570 4669 7273 744f 664d $keepFirstOfM │ │ │ -00001f10: 6f6e 7468 2c20 246b 6565 704c 6173 744f onth, $keepLastO │ │ │ -00001f20: 664d 6f6e 7468 2c20 2466 6972 7374 4461 fMonth, $firstDa │ │ │ -00001f30: 794f 6657 6565 6b2c 0a09 0920 2020 2020 yOfWeek,... │ │ │ -00001f40: 2020 246b 6565 7046 6972 7374 4f66 5765 $keepFirstOfWe │ │ │ -00001f50: 656b 2c20 246b 6565 704c 6173 744f 6657 ek, $keepLastOfW │ │ │ -00001f60: 6565 6b2c 2024 6b65 6570 4475 706c 6963 eek, $keepDuplic │ │ │ -00001f70: 6174 652c 0a09 0920 2020 2020 2020 246b ate,... $k │ │ │ -00001f80: 6565 704d 696e 4e75 6d62 6572 2c20 246b eepMinNumber, $k │ │ │ -00001f90: 6565 704d 6178 4e75 6d62 6572 2c20 246b eepMaxNumber, $k │ │ │ -00001fa0: 6565 7052 656c 6174 6976 6529 3b0a 2020 eepRelative);. │ │ │ -00001fb0: 2020 6578 6974 2030 3b0a 7d0a 0a6f 7065 exit 0;.}..ope │ │ │ -00001fc0: 6e64 6972 2844 4952 2c20 2464 6972 2920 ndir(DIR, $dir) │ │ │ -00001fd0: 6f72 0a20 2020 2064 6965 2022 6361 6e6e or. die "cann │ │ │ -00001fe0: 6f74 206f 7065 6e20 3c24 6469 723e 223b ot open <$dir>"; │ │ │ -00001ff0: 0a6d 7920 2824 656e 7472 792c 2040 656e .my ($entry, @en │ │ │ -00002000: 7472 6965 7329 3b0a 7768 696c 6520 2824 tries);.while ($ │ │ │ -00002010: 656e 7472 7920 3d20 7265 6164 6469 7220 entry = readdir │ │ │ -00002020: 4449 5229 0a7b 0a20 2020 206d 7920 2465 DIR).{. my $e │ │ │ -00002030: 203d 2022 2464 6972 2f24 656e 7472 7922 = "$dir/$entry" │ │ │ -00002040: 3b0a 2020 2020 6e65 7874 2069 6620 282d ;. next if (- │ │ │ -00002050: 6c20 2465 2061 6e64 206e 6f74 202d 6420 l $e and not -d │ │ │ -00002060: 2465 293b 0a20 2020 2070 7573 6820 4065 $e);. push @e │ │ │ -00002070: 6e74 7269 6573 2c20 2465 6e74 7279 3b0a ntries, $entry;. │ │ │ -00002080: 7d0a 636c 6f73 6564 6972 2844 4952 293b }.closedir(DIR); │ │ │ -00002090: 0a0a 6d79 2024 7072 4c6f 6720 3d20 7072 ..my $prLog = pr │ │ │ -000020a0: 696e 744c 6f67 2d3e 6e65 7728 272d 6b69 intLog->new('-ki │ │ │ -000020b0: 6e64 2720 3d3e 205b 2749 3a49 4e46 4f27 nd' => ['I:INFO' │ │ │ -000020c0: 2c20 2757 3a57 4152 4e49 4e47 272c 2027 , 'W:WARNING', ' │ │ │ -000020d0: 453a 4552 524f 5227 2c0a 0909 0909 2020 E:ERROR',..... │ │ │ -000020e0: 2020 2020 2753 3a53 5441 5449 5354 4943 'S:STATISTIC │ │ │ -000020f0: 272c 2027 443a 4445 4255 4727 2c20 2756 ', 'D:DEBUG', 'V │ │ │ -00002100: 3a56 4552 5349 4f4e 275d 293b 0a0a 2470 :VERSION']);..$p │ │ │ -00002110: 724c 6f67 2d3e 7072 696e 7428 272d 6b69 rLog->print('-ki │ │ │ -00002120: 6e64 2720 3d3e 2027 5627 2c0a 0920 2020 nd' => 'V',.. │ │ │ -00002130: 2020 2027 2d73 7472 2720 3d3e 205b 2273 '-str' => ["s │ │ │ -00002140: 746f 7265 4261 636b 7570 6c73 2e70 6c2c toreBackupls.pl, │ │ │ -00002150: 2024 6d61 696e 3a3a 5354 4f52 4542 4143 $main::STOREBAC │ │ │ -00002160: 4b55 5056 4552 5349 4f4e 225d 290a 2020 KUPVERSION"]). │ │ │ -00002170: 2020 6966 2024 7665 7262 6f73 653b 0a0a if $verbose;.. │ │ │ -00002180: 0a6d 7920 2469 203d 2031 3b0a 666f 7265 .my $i = 1;.fore │ │ │ -00002190: 6163 6820 2465 6e74 7279 2028 736f 7274 ach $entry (sort │ │ │ -000021a0: 2040 656e 7472 6965 7329 0a7b 0a20 2020 @entries).{. │ │ │ -000021b0: 206e 6578 7420 756e 6c65 7373 2024 656e next unless $en │ │ │ -000021c0: 7472 7920 3d7e 0a09 2f5c 4128 5c64 7b34 try =~../\A(\d{4 │ │ │ -000021d0: 7d29 5c2e 285c 647b 327d 295c 2e28 5c64 })\.(\d{2})\.(\d │ │ │ -000021e0: 7b32 7d29 5f28 5c64 7b32 7d29 5c2e 285c {2})_(\d{2})\.(\ │ │ │ -000021f0: 647b 327d 295c 2e28 5c64 7b32 7d29 5c5a d{2})\.(\d{2})\Z │ │ │ -00002200: 2f6f 3b0a 2020 2020 6d79 2024 6420 3d20 /o;. my $d = │ │ │ -00002210: 6461 7465 546f 6f6c 732d 3e6e 6577 2827 dateTools->new(' │ │ │ -00002220: 2d79 6561 7227 203d 3e20 2431 2c0a 0909 -year' => $1,... │ │ │ -00002230: 0920 2020 272d 6d6f 6e74 6827 203d 3e20 . '-month' => │ │ │ -00002240: 2432 2c0a 0909 0920 2020 272d 6461 7927 $2,.... '-day' │ │ │ -00002250: 203d 3e20 2433 293b 0a20 2020 206d 7920 => $3);. my │ │ │ -00002260: 2840 6129 203d 2028 2224 6469 722f 2465 (@a) = ("$dir/$e │ │ │ -00002270: 6e74 7279 2f2e 7374 6f72 6542 6163 6b75 ntry/.storeBacku │ │ │ -00002280: 704c 696e 6b73 2f6c 696e 6b46 726f 6d2a pLinks/linkFrom* │ │ │ -00002290: 2229 3b0a 2020 2020 6d79 2028 4065 2920 ");. my (@e) │ │ │ -000022a0: 3d20 3c40 613e 3b0a 2020 2020 7072 696e = <@a>;. prin │ │ │ -000022b0: 7466 2022 2533 6420 2022 2c20 2469 2b2b tf "%3d ", $i++ │ │ │ -000022c0: 3b0a 2020 2020 7072 696e 7420 2464 2d3e ;. print $d-> │ │ │ -000022d0: 6765 7444 6174 6554 696d 6528 272d 666f getDateTime('-fo │ │ │ -000022e0: 726d 6174 2720 3d3e 2027 2557 2025 5820 rmat' => '%W %X │ │ │ -000022f0: 2544 2025 5927 292c 2022 2020 2024 656e %D %Y'), " $en │ │ │ -00002300: 7472 7920 2020 222c 0a20 2020 2024 746f try ",. $to │ │ │ -00002310: 6461 792d 3e64 656c 7461 496e 4461 7973 day->deltaInDays │ │ │ -00002320: 2827 2d73 6563 6f6e 6444 6174 6527 203d ('-secondDate' = │ │ │ -00002330: 3e20 2464 293b 0a23 2020 2020 7072 696e > $d);.# prin │ │ │ -00002340: 7420 2220 206e 6f74 2066 696e 6973 6865 t " not finishe │ │ │ -00002350: 6420 2220 6966 2028 2d65 2022 2464 6972 d " if (-e "$dir │ │ │ -00002360: 2f24 656e 7472 792f 2463 6865 636b 5375 /$entry/$checkSu │ │ │ -00002370: 6d46 696c 652e 6e6f 7446 696e 6973 6865 mFile.notFinishe │ │ │ -00002380: 6422 293b 0a20 2020 2070 7269 6e74 2022 d");. print " │ │ │ -00002390: 2020 6e6f 7420 6669 6e69 7368 6564 2022 not finished " │ │ │ -000023a0: 0a09 756e 6c65 7373 2026 3a3a 6368 6563 ..unless &::chec │ │ │ -000023b0: 6b49 6642 6163 6b75 7057 6173 4669 6e69 kIfBackupWasFini │ │ │ -000023c0: 7368 6564 2827 2d62 6163 6b75 7044 6972 shed('-backupDir │ │ │ -000023d0: 2720 3d3e 2022 2464 6972 2f24 656e 7472 ' => "$dir/$entr │ │ │ -000023e0: 7922 2c0a 0909 0909 0920 2020 272d 7072 y",...... '-pr │ │ │ -000023f0: 4c6f 6727 203d 3e20 2470 724c 6f67 2c0a Log' => $prLog,. │ │ │ -00002400: 0909 0920 2020 272d 636f 756e 7427 203d ... '-count' = │ │ │ -00002410: 3e20 3330 293b 0a20 2020 2070 7269 6e74 > 30);. print │ │ │ -00002420: 2022 2061 6666 6563 7465 6420 6279 2075 " affected by u │ │ │ -00002430: 6e72 6573 6f6c 7665 6420 6c69 6e6b 7322 nresolved links" │ │ │ -00002440: 0a09 6966 202d 6520 2224 6469 722f 2465 ..if -e "$dir/$e │ │ │ -00002450: 6e74 7279 2f2e 7374 6f72 6542 6163 6b75 ntry/.storeBacku │ │ │ -00002460: 704c 696e 6b73 2f6c 696e 6b46 696c 652e pLinks/linkFile. │ │ │ -00002470: 627a 3222 206f 7220 4065 3b0a 2020 2020 bz2" or @e;. │ │ │ -00002480: 7072 696e 7420 225c 6e22 3b0a 0a20 2020 print "\n";.. │ │ │ -00002490: 2069 6620 2824 7665 7262 6f73 6529 0a20 if ($verbose). │ │ │ -000024a0: 2020 207b 0a09 6d79 2024 7269 6620 3d20 {..my $rif = │ │ │ -000024b0: 7265 6164 496e 666f 4669 6c65 2d3e 6e65 readInfoFile->ne │ │ │ -000024c0: 7728 272d 6368 6563 6b53 756d 4669 6c65 w('-checkSumFile │ │ │ -000024d0: 2720 3d3e 0a09 0909 0920 2020 2020 2224 ' =>..... "$ │ │ │ -000024e0: 6469 722f 2465 6e74 7279 2f24 6368 6563 dir/$entry/$chec │ │ │ -000024f0: 6b53 756d 4669 6c65 222c 0a09 0909 0920 kSumFile",..... │ │ │ -00002500: 2020 2020 272d 7072 4c6f 6727 203d 3e20 '-prLog' => │ │ │ -00002510: 2470 724c 6f67 293b 0a0a 096d 7920 246f $prLog);...my $o │ │ │ -00002520: 7074 3b0a 0966 6f72 6561 6368 2024 6f70 pt;..foreach $op │ │ │ -00002530: 7420 2824 7269 662d 3e67 6574 416c 6c49 t ($rif->getAllI │ │ │ -00002540: 6e66 6f4f 7074 7328 2929 0a09 7b0a 0920 nfoOpts())..{.. │ │ │ -00002550: 2020 206d 7920 2469 203d 2024 7269 662d my $i = $rif- │ │ │ -00002560: 3e67 6574 496e 666f 5769 7468 5061 7228 >getInfoWithPar( │ │ │ -00002570: 246f 7074 293b 0a09 2020 2020 7072 696e $opt);.. prin │ │ │ -00002580: 7420 225c 7424 6f70 7420 2d3e 2022 2c20 t "\t$opt -> ", │ │ │ -00002590: 7265 6620 2469 2065 7120 2741 5252 4159 ref $i eq 'ARRAY │ │ │ -000025a0: 2720 3f20 2240 2469 2220 3a20 2469 2c20 ' ? "@$i" : $i, │ │ │ -000025b0: 225c 6e22 3b0a 097d 0a20 2020 207d 0a7d "\n";..}. }.} │ │ │ -000025c0: 0a0a 6578 6974 2030 3b0a 0a0a 2323 2323 ..exit 0;...#### │ │ │ -000025d0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000025e0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -000025f0: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00002600: 2323 2323 2323 2323 2323 2323 2323 2323 ################ │ │ │ -00002610: 2323 0a73 7562 2061 6e61 6c79 7365 4f6c ##.sub analyseOl │ │ │ -00002620: 6442 6163 6b75 7073 0a7b 0a20 2020 206d dBackups.{. m │ │ │ -00002630: 7920 2824 6469 722c 2024 636f 6e66 6967 y ($dir, $config │ │ │ -00002640: 4669 6c65 2c20 2474 6f64 6179 2c20 2476 File, $today, $v │ │ │ -00002650: 6572 626f 7365 2c20 246b 6565 7041 6c6c erbose, $keepAll │ │ │ -00002660: 2c20 246b 6565 7057 6565 6b64 6179 2c0a , $keepWeekday,. │ │ │ -00002670: 0924 6b65 6570 4669 7273 744f 6659 6561 .$keepFirstOfYea │ │ │ -00002680: 722c 2024 6b65 6570 4c61 7374 4f66 5965 r, $keepLastOfYe │ │ │ -00002690: 6172 2c20 246b 6565 7046 6972 7374 4f66 ar, $keepFirstOf │ │ │ -000026a0: 4d6f 6e74 682c 0a09 246b 6565 704c 6173 Month,..$keepLas │ │ │ -000026b0: 744f 664d 6f6e 7468 2c20 2466 6972 7374 tOfMonth, $first │ │ │ -000026c0: 4461 794f 6657 6565 6b2c 2024 6b65 6570 DayOfWeek, $keep │ │ │ -000026d0: 4669 7273 744f 6657 6565 6b2c 0a09 246b FirstOfWeek,..$k │ │ │ -000026e0: 6565 704c 6173 744f 6657 6565 6b2c 2024 eepLastOfWeek, $ │ │ │ -000026f0: 6b65 6570 4475 706c 6963 6174 652c 2024 keepDuplicate, $ │ │ │ -00002700: 6b65 6570 4d69 6e4e 756d 6265 722c 0a09 keepMinNumber,.. │ │ │ -00002710: 246b 6565 704d 6178 4e75 6d62 6572 2c20 $keepMaxNumber, │ │ │ -00002720: 246b 6565 7052 656c 6174 6976 6529 203d $keepRelative) = │ │ │ -00002730: 2040 5f3b 0a0a 2020 2020 6d79 2024 7072 @_;.. my $pr │ │ │ -00002740: 4c6f 6720 3d20 7072 696e 744c 6f67 2d3e Log = printLog-> │ │ │ -00002750: 6e65 7728 272d 7769 7468 5469 6d65 2720 new('-withTime' │ │ │ -00002760: 3d3e 2027 6e6f 272c 0a09 0909 2020 2020 => 'no',.... │ │ │ -00002770: 2020 272d 7769 7468 5049 4427 203d 3e20 '-withPID' => │ │ │ -00002780: 276e 6f27 293b 0a0a 0a20 2020 206d 7920 'no');... my │ │ │ -00002790: 2461 6c6c 4c69 6e6b 7320 3d20 6c61 7465 $allLinks = late │ │ │ -000027a0: 4c69 6e6b 732d 3e6e 6577 2827 2d64 6972 Links->new('-dir │ │ │ -000027b0: 7327 203d 3e20 5b24 6469 725d 2c0a 0909 s' => [$dir],... │ │ │ -000027c0: 0909 2020 272d 6b69 6e64 2720 3d3e 2027 .. '-kind' => ' │ │ │ -000027d0: 7265 6375 7273 6976 6553 6561 7263 6827 recursiveSearch' │ │ │ -000027e0: 2c0a 0909 0909 2020 272d 7665 7262 6f73 ,..... '-verbos │ │ │ -000027f0: 6527 203d 3e20 2476 6572 626f 7365 2c0a e' => $verbose,. │ │ │ -00002800: 0909 0909 2020 272d 7072 4c6f 6727 203d .... '-prLog' = │ │ │ -00002810: 3e20 2470 724c 6f67 293b 0a0a 2020 2020 > $prLog);.. │ │ │ -00002820: 6d79 2024 7374 6174 4465 6c4f 6c64 4261 my $statDelOldBa │ │ │ -00002830: 636b 7570 4469 7273 203d 0a09 7374 6174 ckupDirs =..stat │ │ │ -00002840: 6973 7469 6344 656c 6574 654f 6c64 4261 isticDeleteOldBa │ │ │ -00002850: 636b 7570 4469 7273 2d3e 6e65 7728 272d ckupDirs->new('- │ │ │ -00002860: 7072 4c6f 6727 203d 3e20 2470 724c 6f67 prLog' => $prLog │ │ │ -00002870: 293b 0a20 2020 206d 7920 2464 656c 4f6c );. my $delOl │ │ │ -00002880: 6420 3d0a 0964 656c 6574 654f 6c64 4261 d =..deleteOldBa │ │ │ -00002890: 636b 7570 4469 7273 2d3e 6e65 7728 272d ckupDirs->new('- │ │ │ -000028a0: 7461 7267 6574 4469 7227 203d 3e20 2464 targetDir' => $d │ │ │ -000028b0: 6972 2c0a 0909 0909 2027 2d64 6f4e 6f74 ir,..... '-doNot │ │ │ -000028c0: 4465 6c65 7465 2720 3d3e 2075 6e64 6566 Delete' => undef │ │ │ -000028d0: 2c0a 0909 0909 2027 2d63 6865 636b 5375 ,..... '-checkSu │ │ │ -000028e0: 6d46 696c 6527 203d 3e20 246d 6169 6e3a mFile' => $main: │ │ │ -000028f0: 3a63 6865 636b 5375 6d46 696c 652c 0a09 :checkSumFile,.. │ │ │ -00002900: 0909 0920 272d 6163 7442 6163 6b75 7044 ... '-actBackupD │ │ │ -00002910: 6972 2720 3d3e 2075 6e64 6566 2c0a 0909 ir' => undef,... │ │ │ -00002920: 0909 2027 2d70 724c 6f67 2720 3d3e 2024 .. '-prLog' => $ │ │ │ -00002930: 7072 4c6f 672c 0a09 0909 0920 272d 746f prLog,..... '-to │ │ │ -00002940: 6461 7927 203d 3e20 2474 6f64 6179 2c0a day' => $today,. │ │ │ -00002950: 0909 0909 2027 2d6b 6565 7046 6972 7374 .... '-keepFirst │ │ │ -00002960: 4f66 5965 6172 2720 3d3e 2024 6b65 6570 OfYear' => $keep │ │ │ -00002970: 4669 7273 744f 6659 6561 722c 0a09 0909 FirstOfYear,.... │ │ │ -00002980: 0920 272d 6b65 6570 4c61 7374 4f66 5965 . '-keepLastOfYe │ │ │ -00002990: 6172 2720 3d3e 2024 6b65 6570 4c61 7374 ar' => $keepLast │ │ │ -000029a0: 4f66 5965 6172 2c0a 0909 0909 2027 2d6b OfYear,..... '-k │ │ │ -000029b0: 6565 7046 6972 7374 4f66 4d6f 6e74 6827 eepFirstOfMonth' │ │ │ -000029c0: 203d 3e20 246b 6565 7046 6972 7374 4f66 => $keepFirstOf │ │ │ -000029d0: 4d6f 6e74 682c 0a09 0909 0920 272d 6b65 Month,..... '-ke │ │ │ -000029e0: 6570 4c61 7374 4f66 4d6f 6e74 6827 203d epLastOfMonth' = │ │ │ -000029f0: 3e20 246b 6565 704c 6173 744f 664d 6f6e > $keepLastOfMon │ │ │ -00002a00: 7468 2c0a 0909 0909 2027 2d66 6972 7374 th,..... '-first │ │ │ -00002a10: 4461 794f 6657 6565 6b27 203d 3e20 2466 DayOfWeek' => $f │ │ │ -00002a20: 6972 7374 4461 794f 6657 6565 6b2c 0a09 irstDayOfWeek,.. │ │ │ -00002a30: 0909 0920 272d 6b65 6570 4669 7273 744f ... '-keepFirstO │ │ │ -00002a40: 6657 6565 6b27 203d 3e20 246b 6565 7046 fWeek' => $keepF │ │ │ -00002a50: 6972 7374 4f66 5765 656b 2c0a 0909 0909 irstOfWeek,..... │ │ │ -00002a60: 2027 2d6b 6565 704c 6173 744f 6657 6565 '-keepLastOfWee │ │ │ -00002a70: 6b27 203d 3e20 246b 6565 704c 6173 744f k' => $keepLastO │ │ │ -00002a80: 6657 6565 6b2c 0a09 0909 0920 272d 6b65 fWeek,..... '-ke │ │ │ -00002a90: 6570 416c 6c27 203d 3e20 246b 6565 7041 epAll' => $keepA │ │ │ -00002aa0: 6c6c 2c0a 0909 0909 2027 2d6b 6565 7052 ll,..... '-keepR │ │ │ -00002ab0: 656c 6174 6976 6527 203d 3e20 246b 6565 elative' => $kee │ │ │ -00002ac0: 7052 656c 6174 6976 652c 0a09 0909 0920 pRelative,..... │ │ │ -00002ad0: 272d 6b65 6570 5765 656b 6461 7927 203d '-keepWeekday' = │ │ │ -00002ae0: 3e20 246b 6565 7057 6565 6b64 6179 2c0a > $keepWeekday,. │ │ │ -00002af0: 0909 0909 2027 2d6b 6565 7044 7570 6c69 .... '-keepDupli │ │ │ -00002b00: 6361 7465 2720 3d3e 2024 6b65 6570 4475 cate' => $keepDu │ │ │ -00002b10: 706c 6963 6174 652c 0a09 0909 0920 272d plicate,..... '- │ │ │ -00002b20: 6b65 6570 4d69 6e4e 756d 6265 7227 203d keepMinNumber' = │ │ │ -00002b30: 3e20 246b 6565 704d 696e 4e75 6d62 6572 > $keepMinNumber │ │ │ -00002b40: 2c0a 0909 0909 2027 2d6b 6565 704d 6178 ,..... '-keepMax │ │ │ -00002b50: 4e75 6d62 6572 2720 3d3e 2024 6b65 6570 Number' => $keep │ │ │ -00002b60: 4d61 784e 756d 6265 722c 0a09 0909 0920 MaxNumber,..... │ │ │ -00002b70: 272d 6c61 7465 4c69 6e6b 7350 6172 616d '-lateLinksParam │ │ │ -00002b80: 2720 3d3e 2031 2c0a 0909 0909 2027 2d61 ' => 1,..... '-a │ │ │ -00002b90: 6c6c 4c69 6e6b 7327 203d 3e20 2461 6c6c llLinks' => $all │ │ │ -00002ba0: 4c69 6e6b 732c 0a09 0909 0920 272d 7374 Links,..... '-st │ │ │ -00002bb0: 6174 4465 6c4f 6c64 4261 636b 7570 4469 atDelOldBackupDi │ │ │ -00002bc0: 7273 2720 3d3e 0a09 0909 0920 2473 7461 rs' =>..... $sta │ │ │ -00002bd0: 7444 656c 4f6c 6442 6163 6b75 7044 6972 tDelOldBackupDir │ │ │ -00002be0: 732c 0a09 0909 0920 272d 666c 6174 4f75 s,..... '-flatOu │ │ │ -00002bf0: 7470 7574 2720 3d3e 2027 7965 7327 0a09 tput' => 'yes'.. │ │ │ -00002c00: 0909 0920 293b 0a20 2020 2024 6465 6c4f ... );. $delO │ │ │ -00002c10: 6c64 2d3e 6368 6563 6b42 6163 6b75 7073 ld->checkBackups │ │ │ -00002c20: 2829 3b0a 7d0a ();.}. │ │ │ +00000000: 6465 7374 696e 6174 696f 6e3a 202e 2e2f destination: ../ │ │ │ +00000010: 7368 6172 652f 7374 6f72 6562 6163 6b75 share/storebacku │ │ │ +00000020: 702f 6269 6e2f 7374 6f72 6542 6163 6b75 p/bin/storeBacku │ │ │ +00000030: 706c 730a pls.