-
Notifications
You must be signed in to change notification settings - Fork 0
/
copyToFolders.php
86 lines (76 loc) · 3.29 KB
/
copyToFolders.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/**
* Μαζική αντιγραφή αρχείων σε φακέλους.
* php version 7.4
*
* @category Application
* @package CopyToFolders
* @author Theofilos Intzoglou <[email protected]>
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3
* @link https://github.com/DSE-West-Thessaloniki/copyToFolders
*/
/**
* Αναζήτηση ΑΦΜ στο όνομα φακέλου που βρίσκεται μέσα στο $path. Αν βρεθεί φάκελος
* τον επιστρέφει μαζί με την διαδρομή αλλιώς επιστρέφει false.
*
* @param $path string
* @param $afm string
*
* @return string | false
*/
function findFolder($path, $afm) : string | false
{
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
$test_folder = $path . '/' . $file;
if (is_dir($test_folder) && strstr($test_folder, $afm)) {
return $test_folder;
}
}
closedir($dh);
}
return false;
}
$rest_index = null;
$options = getopt("i:o:", ["input:", "output:"], $rest_index);
$remaining_args = array_slice($argv, $rest_index);
if (!$options || $remaining_args || count($options) != 2) {
echo "Usage: copyToFolders [Επιλογές]".PHP_EOL;
echo "Επιλογές:".PHP_EOL;
echo " -i,--input 'φάκελος' - Ο φάκελος που περιέχει τα αρχεία για αντιγραφή".PHP_EOL;
echo " -o,--output 'φάκελος' - Ο προορισμός στον οποίο περιέχονται φάκελοι στους οποίους θα αντιγραφούν".PHP_EOL;
echo "Παρατηρήσεις: Για την αντιστοίχιση χρησιμοποιείται το ΑΦΜ που πρέπει να υπάρχει στο όνομα τόσο των αρχείων".PHP_EOL;
echo "όσο και των φακέλων προορισμού.".PHP_EOL.PHP_EOL;
echo "Παράδειγμα: copyToFolders -i Files -o Archive".PHP_EOL;
exit(0);
}
$src = $options['i'] ?? $options['input'];
$dst = $options['o'] ?? $options['output'];
foreach ([$src, $dst] as $dir) {
if (!is_dir($dir)) {
echo "Το {$dir} δεν είναι φάκελος!".PHP_EOL;
exit(1);
}
}
if ($dh = opendir($src)) {
while (($file = readdir($dh)) !== false) {
if (!is_dir($src.'/'.$file)) {
if (preg_match('/\d{9}/', $file, $matches)) {
$target = findFolder($dst, $matches[0]);
if ($target === false) {
echo "Το αρχείο {$file} δεν έχει φάκελο για να διανεμηθεί.".PHP_EOL;
} else {
if (file_exists($target.'/'.$file)) {
echo "Γίνεται αντικατάσταση του '".$target.'/'.$file."'.".PHP_EOL;
}
if (!copy($src.'/'.$file, $target.'/'.$file)) {
echo "Σφάλμα κατά την αντιγραφή του αρχείου {$src}/{$file} στο {$target}/{$file}".PHP_EOL;
}
}
} else {
echo "Το αρχείο {$file} δεν φαίνεται να έχει 9ψήφιο ΑΦΜ!".PHP_EOL;
}
}
}
closedir($dh);
}