<?php
|
|
|
|
namespace App\Services;
|
|
|
|
class RenameService {
|
|
|
|
private $nameLevel = -1;
|
|
|
|
/**
|
|
* @return int
|
|
*/
|
|
public function getNameLevel(): int {
|
|
return $this->nameLevel;
|
|
}
|
|
|
|
/**
|
|
* @param int $nameLevel
|
|
*/
|
|
public function setNameLevel(int $nameLevel): void {
|
|
$this->nameLevel = $nameLevel;
|
|
}
|
|
|
|
const HYPHEN = "-";
|
|
public function rename($baseDir = "/Volumes/N/v/美腿骇客 Leghacker&Leglegs-TLoB/", $prefix = "") {
|
|
if (!is_dir($baseDir)) {
|
|
return;
|
|
}
|
|
$this->parseDir($baseDir, $prefix);
|
|
|
|
}
|
|
|
|
public function yaRename($baseDir = "/Volumes/intel660p/image/xg/zz/") {
|
|
if (!is_dir($baseDir)) {
|
|
return;
|
|
}
|
|
$this->yaParseDir($baseDir);
|
|
|
|
}
|
|
|
|
private function parseDir($dir, $prefix = "") {
|
|
if (!is_dir($dir)) {
|
|
return;
|
|
}
|
|
$files = scandir($dir);
|
|
foreach ($files as $file) {
|
|
// dump($file);
|
|
if ($file == "." || $file == ".." || $file == ".DS_Store" || $file == ".tmp.drivedownload") {
|
|
continue;
|
|
}
|
|
if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) {
|
|
$this->parseDir($dir . DIRECTORY_SEPARATOR . $file, $prefix);
|
|
}
|
|
if (is_file($dir . DIRECTORY_SEPARATOR . $file) && (pathinfo($file, PATHINFO_EXTENSION) == "JPG" || pathinfo($file, PATHINFO_EXTENSION) == "gif" || pathinfo($file, PATHINFO_EXTENSION) == "jpg" || pathinfo($file, PATHINFO_EXTENSION) == "jpeg" || pathinfo($file, PATHINFO_EXTENSION) == "png" || pathinfo($file, PATHINFO_EXTENSION) == "mp4" || pathinfo($file, PATHINFO_EXTENSION) == "avi")) {
|
|
echo $dir;
|
|
echo "\n";
|
|
echo $file;
|
|
$dirList = explode(DIRECTORY_SEPARATOR, $dir);
|
|
$filePrefix = $prefix . array_slice($dirList, -$this->getNameLevel(), 1)[0];
|
|
// $filePrefix = $prefix . array_pop($dirList);
|
|
if (!str_contains($file, $filePrefix)) {
|
|
$newFile = $dir . DIRECTORY_SEPARATOR . $filePrefix . self::HYPHEN . $file;
|
|
dump("new file :" . $newFile);
|
|
rename($dir . DIRECTORY_SEPARATOR . $file, $dir . DIRECTORY_SEPARATOR . $filePrefix . self::HYPHEN . $file);
|
|
}
|
|
echo "\n";
|
|
// exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
private function yaParseDir($dir, $starter = "zz") {
|
|
if (!is_dir($dir)) {
|
|
return;
|
|
}
|
|
$files = scandir($dir);
|
|
foreach ($files as $file) {
|
|
// dump($file);
|
|
if ($file == "." || $file == ".." || $file == ".DS_Store" || $file == ".tmp.drivedownload") {
|
|
continue;
|
|
}
|
|
if (is_dir($dir . "/" . $file)) {
|
|
$this->yaParseDir($dir . "/" . $file);
|
|
}
|
|
if (is_file($dir . "/" . $file) && (pathinfo($file, PATHINFO_EXTENSION) == "jpg" || pathinfo($file, PATHINFO_EXTENSION) == "jpeg" || pathinfo($file, PATHINFO_EXTENSION) == "mp4")) {
|
|
echo $dir;
|
|
echo "\n";
|
|
echo $file;
|
|
$dirList = explode("/", $dir);
|
|
$filePrefix = array_pop($dirList);
|
|
$filePrefixList = explode("-", $filePrefix);
|
|
if (!str_contains($file, $starter . "-" . $filePrefixList[0])) {
|
|
rename($dir . "/" . $file, $dir . "/" . $starter . "-" . $filePrefixList[0] . "-" . $file);
|
|
}
|
|
echo "\n";
|
|
// exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function mvFiles($dir = "") {
|
|
$dirList = [];
|
|
$fileList = [];
|
|
if (is_dir($dir)) {
|
|
$files = scandir($dir);
|
|
foreach ($files as $file) {
|
|
if ($file == "." || $file == "..") {
|
|
continue;
|
|
}
|
|
if (is_dir($dir . $file)) {
|
|
$dirList[$file] = $dir . $file;
|
|
}
|
|
if (is_file($dir . $file) && pathinfo($file, PATHINFO_EXTENSION) == "mp4") {
|
|
$fileList[$file] = $dir . $file;
|
|
}
|
|
}
|
|
// foreach ($fileList as $key => $value) {
|
|
// $fileKey = explode(" ", $key)[0];
|
|
// if (array_key_exists($fileKey, $dirList)) {
|
|
// echo $fileKey . "\n";
|
|
//// copy($value, $dirList[$fileKey] . "/" . $key);
|
|
// shell_exec("mv " . escapeshellarg($value) . " " . escapeshellarg($dirList[$fileKey] . "/" . $fileKey . ".mp4"));
|
|
//// exit;
|
|
// }
|
|
//// exit;
|
|
// }
|
|
foreach ($fileList as $key => $value) {
|
|
$fileMatches = [];
|
|
preg_match("#VN.\d+#", $key, $fileMatches);
|
|
foreach ($dirList as $dirKey => $dirValue) {
|
|
$dirMatches = [];
|
|
preg_match("#VN.\d+#", $dirKey, $dirMatches);
|
|
if (count($fileMatches) == 1 && count($dirMatches) == 1 && $fileMatches[0] == $dirMatches[0]) {
|
|
|
|
echo "file is " . $key . " dir is " . $dirKey . "\n";
|
|
shell_exec("mv " . escapeshellarg($value) . " " . escapeshellarg($dirList[$dirKey] . "/" . $dirKey . ".mp4"));
|
|
}
|
|
}
|
|
}
|
|
|
|
print_r($dirList);
|
|
print_r($fileList);
|
|
}
|
|
}
|
|
|
|
public function splitCustomSizeOfFolder($dir = "", $prefix = "", $size = 500, $startFolderNo = 0) {
|
|
$files = $this->recordAllFiles($dir, $prefix);
|
|
asort($files, SORT_NUMERIC);
|
|
$files = array_keys($files);
|
|
$allFileNum = count($files);
|
|
$folderNum = ceil(count($files) / $size);
|
|
for ($i = 0; $i < $folderNum; $i++) {
|
|
# code...
|
|
$currentStartNo = $i + $startFolderNo;
|
|
$currentDirName = $dir . DIRECTORY_SEPARATOR . $prefix . "_00" . $currentStartNo;
|
|
if (!is_dir($currentDirName)) {
|
|
mkdir($currentDirName);
|
|
}
|
|
for ($j = 0 + $i * $size; $j < ($i + 1) * $size && $j < $allFileNum; $j++) {
|
|
$fileInfo = pathinfo($files[$j]);
|
|
$newFileName = $currentDirName . DIRECTORY_SEPARATOR . $fileInfo['filename'];
|
|
$t = 0;
|
|
$trueNewFileName = $newFileName . "." . $fileInfo["extension"];
|
|
|
|
while (is_file($trueNewFileName)) {
|
|
echo "file " . $trueNewFileName . " already exists\n";
|
|
$trueNewFileName = $newFileName . "_" . $t++ . "." . $fileInfo["extension"];
|
|
echo "now rename {$files[$j]} to " . $trueNewFileName . "\n";
|
|
}
|
|
rename($files[$j], $trueNewFileName);
|
|
// if (is_file($currentDirName . DIRECTORY_SEPARATOR . $fileInfo['basename'])) {
|
|
// echo "file " . $currentDirName . DIRECTORY_SEPARATOR . $fileInfo['basename'] . " already exists\n";
|
|
// echo "now rename {$files[$j]} to " . $currentDirName . DIRECTORY_SEPARATOR . $fileInfo['filename'] . "_1." . $fileInfo['extension'] . "\n";
|
|
// rename($files[$j], $currentDirName . DIRECTORY_SEPARATOR . $fileInfo['filename'] . "_1." . $fileInfo['extension']);
|
|
// } else{
|
|
// rename($files[$j], $currentDirName . DIRECTORY_SEPARATOR . $fileInfo['basename']);
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
|
|
public function recordAllFiles($dir = "", $prefix) {
|
|
$trueFiles = [];
|
|
if (is_dir($dir)) {
|
|
$files = scandir($dir);
|
|
foreach ($files as $file) {
|
|
if ($file == "." || $file == ".." || $file == ".DS_Store" || $file == ".tmp.drivedownload" || str_contains($file, $prefix . "_00")) {
|
|
continue;
|
|
}
|
|
if (is_dir($dir . DIRECTORY_SEPARATOR . $file)) {
|
|
$trueFiles = array_merge($trueFiles, $this->recordAllFiles($dir . DIRECTORY_SEPARATOR . $file, $prefix));
|
|
}
|
|
if (is_file($dir . DIRECTORY_SEPARATOR . $file) && filesize($dir . DIRECTORY_SEPARATOR . $file) > 1024) {
|
|
$fileTime = filemtime($dir . DIRECTORY_SEPARATOR . $file);
|
|
$trueFiles[$dir . DIRECTORY_SEPARATOR . $file] = $fileTime;
|
|
}
|
|
}
|
|
}
|
|
// dump($files);
|
|
return $trueFiles;
|
|
}
|
|
|
|
}
|