queuedFfmpegService = new QueuedFfmpegService(); } public function segmentFiles($baseDir) { if (!is_dir($baseDir)) { return; } // $files = new Finder(); // $files->files()->in($baseDir); $files = $this->scan_dir($baseDir); $firstTime = true; $counter = 0; $dirCounter = 0; $dirName = ""; foreach ($files as $file) { if ($firstTime) { $dirName = $baseDir . "/" . date("Y-m-d", filectime($baseDir . "/" . $file)) . "-$dirCounter"; if (!is_dir($dirName)) { mkdir($dirName); } $dirCounter++; $firstTime = false; } rename($baseDir . "/" . $file, $dirName . "/" . $file); $counter++; if ($counter % 1000 == 0) { $firstTime = true; } // exit; } } private function scan_dir($dir) { $ignored = array(".", "..", ".svn", ".htaccess",".DS_Store"); $files = array(); foreach (scandir($dir) as $file) { if (in_array($file, $ignored)) continue; $files[$file] = filemtime($dir . '/' . $file); } asort($files); $files = array_keys($files); return ($files) ? $files : false; } public function queryFileTime($file) { $mtime = date("Y-m-d H:i:s", filemtime($file)); $atime = date("Y-m-d H:i:s", fileatime($file)); $ctime = date("Y-m-d H:i:s", filectime($file)); echo "file mtime is $mtime, atime is $atime, ctime is $ctime"; } public function compareLocalFilesAndGooglePhotoFiles() { // $dir = "/Users/shixuesen/Downloads/y/910283-小清晨儿_"; // $list = scandir($dir); $baseDir = "/Users/shixuesen/Documents/sync/image"; $dirs = ["腐团儿"]; $files = []; foreach ($dirs as $dir) { $currentFiles = scandir($baseDir . DIRECTORY_SEPARATOR . $dir); foreach ($currentFiles as $file) { if ($file == "." || $file == ".." || $file == ".DS_Store") { continue; } $files[] = $baseDir . DIRECTORY_SEPARATOR . $dir . DIRECTORY_SEPARATOR . $file; } // $files = array_merge($files, $currentFiles); } // $list = array_merge($list, scandir("/Users/shixuesen/Documents/sync/image/weibo04")); // $list = []; // $list = array_merge($list, scandir("/Volumes/desktop-81dpan3/pcSync/china_cam/china_cam_001")); $photoList = []; // $this->deleteFileListWithDir($photoList, "/Volumes/desktop-81dpan3/pcSync/china_cam/china_cam_001/"); $i = 0; // $s1 = "ストッキング脚コンパイル_蓮実クレア-MIAD-711-C.mp4"; // $s2 = "ストッキング脚コンパイル_蓮実クレア-MIAD-711-C.mp4"; // $s3 = "ストッキング脚コンパイル_蓮実クレア-MIAD-711-C.mp4"; // $s4 = "ストッキング脚コンパイル_蓮実クレア-MIAD-711-C.mp4"; // $members = Redis::connection()->smembers("ストッキング脚コンパイル"); // dump($members);exit; // dump($members);exit; foreach ($files as $item) { $basename = pathinfo($item, PATHINFO_BASENAME); // dump($basename);continue; // if (Redis::connection()->sismember("腐团儿", $basename) == 0) { // echo $item . " size is " . filesize($item) / 1024 . "kb\n"; $i++; if (!str_contains($basename, "baiduyun.uploading.cfg")) { dump($item); // rename($item, $baseDir . DIRECTORY_SEPARATOR . "acfun_need" . DIRECTORY_SEPARATOR . $basename); } // } // else { // unlink($item); // } } echo "all file num is " . $i; // dump(array_diff($list, $photoList)); } public function deleteFilesForExtensions($dir, array $extensions) { if (!is_dir($dir)) { return; } $files = scandir($dir); foreach ($files as $file) { if (skipDefaultPathAndFile($file)) { continue; } $currentItem = implode(DIRECTORY_SEPARATOR, [$dir, $file]); if (is_dir($currentItem)) { $this->deleteFilesForExtensions($currentItem, $extensions); } if (is_file($currentItem)) { $pathInfo = pathinfo($currentItem); if (in_array($pathInfo["extension"], $extensions)) { dump("now delete file $currentItem"); unlink($currentItem); } } } } public function renameFileExtensionToAnother($dir, $fromExtension, $toExtension) { if (!is_dir($dir)) { return; } $files = scandir($dir); foreach ($files as $file) { if (skipDefaultPathAndFile($file)) { continue; } $currentItem = implode(DIRECTORY_SEPARATOR, [$dir, $file]); if (is_dir($currentItem)) { $this->renameFileExtensionToAnother($currentItem, $fromExtension, $toExtension); } if (is_file($currentItem)) { $pathInfo = pathinfo($currentItem); if ($pathInfo["extension"] == $fromExtension) { $newFile = str_replace($fromExtension, $toExtension, $currentItem); dump("now rename file $currentItem to $newFile"); rename($currentItem, $newFile); $this->queuedFfmpegService->addToQueue($newFile); } } } } public function renameFileAndAddToQueue($file, $fromExtension, $toExtension) { if (is_file($file)) { $pathInfo = pathinfo($file); if ($pathInfo["extension"] == $fromExtension) { $newFile = str_replace($fromExtension, $toExtension, $file); dump("now rename file $file to $newFile"); rename($file, $newFile); $this->queuedFfmpegService->addToQueue($newFile); } } } public function copySelectedFilesToMappedDirectory(array $sourceToDestMap) { foreach ($sourceToDestMap as $sourceDir => $dest) { // $lastTime = $this->processDirAndFindLastFileMTime($destDir); $destDir = $dest[0]; $lastTime = $dest[1]; echo "sourceDir:{$sourceDir}, destDir: {$destDir}, lastTime: {$lastTime} \n"; $lastTime = strtotime("2022-10-10 23:00:00"); $this->deleteFilesInDir($destDir); $list = $this->queryNewerFilesInDirectory($sourceDir, $lastTime); $this->copyFileToDest($destDir, $list); // dump($list); } } public function mvFile($file, $destDirectory): bool { return rename($file, $destDirectory . DIRECTORY_SEPARATOR . basename($file)); } public function queryNewerFilesInDirectory($dir, $lastTime) { $list = []; if (!is_dir($dir)) { return $list; } echo "start scandir $dir\n"; $files = scandir($dir); // echo "end scandir $dir\n"; foreach ($files as $file) { if ($file == "." || $file == ".." || $file == ".DS_Store") { continue; } $currentItem = implode(DIRECTORY_SEPARATOR, [$dir, $file]); if (is_dir($currentItem)) { $list = array_merge($list, $this->queryNewerFilesInDirectory($currentItem, $lastTime)); } else if (is_file($currentItem)) { if (filemtime($currentItem) > $lastTime) { Log::info("now add file $currentItem"); // exit; $list[] = $currentItem; } } } return $list; } /** * 找出文件夹里的最新的的文件 * @param $destDir * @return false|string */ public function processDirAndFindLastFileMTime($destDir) { $date = new DateTime("last year"); $date = $date->format("Y-m-d H:i:s"); if (!is_dir($destDir)) { return $date; } $files = scandir($destDir); foreach ($files as $file) { if ($file == "." || $file == ".." || $file == ".DS_Store") { continue; } $currentItem = implode(DIRECTORY_SEPARATOR, [$destDir, $file]); if (is_dir($currentItem)) { $currentTime = $this->processDirAndFindLastFileMTime($currentItem); } else { $currentTime = date("Y-m-d H:i:s", filemtime($currentItem)); echo $currentItem . " " . $currentTime . "\n"; } if (strtotime($currentTime) > strtotime($date)) { $date = $currentTime; } } return $date; } public function deleteFilesInDir($dir) { if (!is_dir($dir)) { return; } $files = scandir($dir); foreach ($files as $file) { if ($file == "." || $file == ".." || $file == ".DS_Store") { continue; } $currentItem = implode(DIRECTORY_SEPARATOR, [$dir, $file]); if (is_file($currentItem)) { unlink($currentItem); } } } public function deleteFileListWithDir($list, $prefix) { foreach ($list as $file) { $file = $prefix . $file; if (is_file($file)) { unlink($file); } } } public function copyFileToDest($destDir, $fileList) { $num = count($fileList); foreach ($fileList as $file) { // $filePathInfo = pathinfo($file); // dump($filePathInfo); // echo pathinfo($file, PATHINFO_BASENAME); // exit; $targetFile = $destDir . DIRECTORY_SEPARATOR . pathinfo($file, PATHINFO_BASENAME); $num--; if (is_file($targetFile)) { echo "target file $targetFile exists \n"; continue; } copy($file, $targetFile); echo "{$num} files left\n"; // exit; // $filePathInfo[PATHINFO_DIRNAME]; } } }