-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFlexibleRenamer.php
executable file
·115 lines (102 loc) · 2.79 KB
/
FlexibleRenamer.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/php
<?php
require_once __DIR__ . '/cygwin.inc.php';
require_once __DIR__ . '/vendor/autoload.php';
$color = new \Colors\Color();
$cmd = buildCommand();
$dir = '';
$regexp = '';
$replacement = '';
if($cmd['l']) {
$preset = parse_ini_file(__DIR__ . '/preset.ini', true);
foreach($preset as $presetName=>$preset) {
echo "{$presetName}\n";
}
exit;
}
if(strlen($cmd['preset'])) {
$preset = parse_ini_file(__DIR__ . '/preset.ini', true);
$presetName = $cmd['preset'];
if(empty($preset[$presetName])) {
die($color("Preset <{$presetName}> is not exist.\n")->bg('red')->bold()->white());
}
$preset = $preset[$presetName];
$dir = $preset['dir'];
$regexp = $preset['regexp'];
$replacement = $preset['replacement'];
}
if(strlen($cmd['dir'])) {
$dir = $cmd['dir'];
$dir = _cp($dir);
echo $dir;
}
if(strlen($cmd['regexp'])) {
$regexp = $cmd['regexp'];
}
if(strlen($cmd['replacement'])) {
$replacement = $cmd['replacement'];
}
if(empty($dir)) {
die($color("No dir specified.\n")->bg('red')->bold()->white());
}
if(empty($regexp)) {
die($color("No regexp specified.\n")->bg('red')->bold()->white());
}
if(empty($replacement)) {
die($color("No replacement specified.\n")->bg('red')->bold()->white());
}
if (!($dh = opendir($dir))) {
die("Can not open dir: {$dir}\n");
}
$queue = array();
while (($oldFile = readdir($dh)) !== false) {
$newFile = $oldFile;
if(is_array($regexp)) {
foreach($regexp as $k=>$regexp_item) {
$newFile = preg_replace($regexp_item, $replacement[$k], $newFile);
}
} else {
$newFile = preg_replace($regexp, $replacement, $newFile);
}
if($oldFile != $newFile) {
echo " {$oldFile}\n-> {$newFile}\n\n";
$queue[] = array(
'old' => $oldFile,
'new' => $newFile
);
}
}
closedir($dh);
echo "continue? (y/N)> ";
$prompt = fgets(STDIN, 4096);
if(strtolower(trim($prompt)) !== 'y') {
echo "Aboted.\n";
exit;
}
foreach($queue as $item) {
rename("{$dir}/{$item['old']}", "{$dir}/{$item['new']}");
}
echo "complate.\n";
/**
* コマンドラインからのオプションパーサーを取得します
*
* @return \Commando\Command オプションパーサー
*/
function buildCommand($argv = null) {
$cmd = new Commando\Command($argv);
$cmd->option('p')
->aka("preset")
->describe("プリセット名を指定します");
$cmd->option('l')
->boolean()
->describe('プリセットの一覧を表示します');
$cmd->option('i')
->aka('dir')
->aka('input')
->describe("入力ディレクトリ");
$cmd->option('regexp')
->describe("正規表現");
$cmd->option('replacement')
->describe('置換文字列');
return $cmd;
}