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 compareLocalFilesAndGooglePhotoFiles() { $list = scandir("/Users/shixuesen/Documents/sync/video/扛里个扛"); // $list = []; // $list = array_merge($list, scandir("/Volumes/desktop-81dpan3/pcSync/china_cam/china_cam_001")); $photoList = [ "【扛里个扛】Deep Blue Town 可以带我玩嘛(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄.mp4", "Dumb!同校学姐跳起舞来竟然变这样…….mp4", "Hello!How are you【7周年纪念】 P1 2021年的扛扛.mp4", "Hello!How are you【7周年纪念】 P2 2015年的扛扛.mp4", "Hello!baby!要抱抱!【竖屏】.mp4", "I’m Not Cool【扛里个扛】真·大姐姐 P1 I’M NOT COOL.mp4", "I’m Not Cool【扛里个扛】真·大姐姐 P2 IM NOT COOL竖屏.mp4", "MAMAMOO♥AYA嗷~~ P1 不一样的比例.mp4", "MAMAMOO♥AYA嗷~~ P2 竖屏.mp4", "Twilight♖当代另类个性女团,高矮胖瘦美【起风组】 P1 排练录舞比赛必刮风组合.mp4", "Twilight♖当代另类个性女团,高矮胖瘦美【起风组】 P2 神圣光芒阿卡贝拉.mp4", "hotissue💥穿高跟鞋真的很难扭【竖屏】.mp4", "【原创振付】给十年后的你✿才不是呢~另附现场.avi P1 现场.avi.mp4", "【原创振付】给十年后的你✿才不是呢~另附现场.avi P2 寒冬腊月の你.mp4", "【扛扛Teresa】麻烦鬼♡最讨厌麻烦了....mp4", "【扛扛影纸】『 四月是你的谎言OP 』 ﹏果然选择你真是太好了❀( ▽ )❀.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P1 cosplay舞台剧合集(空降地址在评论).mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P10 【东京泰迪熊】.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P11 【枪娘】五人走位修改团体版.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P12 【罗密欧与辛德瑞拉x only my railgun】宅舞第一.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P13 【 poison kiss】西服三人版.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P14 【bar bar bar】某次年会.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P15 【 12fanclub】15年长春宅舞比赛.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P16 【宵宵古今】单人版 沈阳DA嘉宾表演.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P2 【绯色月下、狂咲ノ绝】原创振付 病娇.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P3 【宵宵古今+神乐】PDM亚洲宅舞大赛场起风组.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P4 【来起舞吧】17年6月东北总决赛第二 大连第一.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P5 【tokio funka】吸血姬COS.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P6 【Girls Lamb 枪娘】沈阳西漫嘉宾表演.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P7 2015年现场即兴舞蹈.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P8 【tanataro】百合 现场版.mp4", "【扛里个扛】818这些年我出过的cos舞台剧和宅舞舞台 P9 【10年後の君へ 】原创编舞 百合.mp4", "【扛里个扛】AOA❤动摇,已经无法再随心所欲.mp4", "【扛里个扛】Abracadabra❤姨母团的傲慢舞.mp4", "【扛里个扛】CLC-LIke it❤双面的快乐 P1 好像是掉帧的双面快乐.mp4", "【扛里个扛】CLC-LIke it❤双面的快乐 P2 好象是不掉帧的双面快乐.mp4", "【扛里个扛】DUDUDU♥不一样的旗袍风.mp4", "【扛里个扛】EXID♥Hot Pink◎.mp4", "【扛里个扛】HELICOPTER♥.mp4", "【扛里个扛】Hip▷MAMAMOO (微笑 P1 各种分镜横屏.mp4", "【扛里个扛】Hip▷MAMAMOO (微笑 P2 固定机位竖屏版.mp4", "【扛里个扛】Hysteric Bullet☠哪种方法,你选一个.mp4", "【扛里个扛】ICE ICE超冰超辣,性感小野马! P1 金泫雅-ICEICE.mp4", "【扛里个扛】ICE ICE超冰超辣,性感小野马! P2 竖屏.mp4", "【扛里个扛】Kill this love 柬埔寨少女在线葬爱.mp4", "【扛里个扛】LATATA❤竖屏❤让这个夜晚燃烧起来吧!.mp4", "【扛里个扛】Love Me If You Can.mp4", "【扛里个扛】POP STARS,新版本御姐风!!.mp4", "【扛里个扛】PRISTIN周洁琼❤«Get itℑ».mp4", "【扛里个扛】Produce48-Rumor✿说爱你 P1 广场舞音源.mp4", "【扛里个扛】Produce48-Rumor✿说爱你 P2 正经音源.mp4", "【扛里个扛】RIVER,鬼节废墟作死系列.mp4", "【扛里个扛】Re:从零开始的异世界生活ED❤STYX HELIX.mp4", "【扛里个扛】So Crazy☆T-ARA,为什么说我是只小狐狸? P1 脚滑的横屏.mp4", "【扛里个扛】So Crazy☆T-ARA,为什么说我是只小狐狸? P2 脚不滑腿也正常了的竖屏.mp4", "【扛里个扛】Sorry not sorry 差点超还原翻跳△ P1 我是挺正经的正片.mp4", "【扛里个扛】Sorry not sorry 差点超还原翻跳△ P2 我是竖屏.mp4", "【扛里个扛】Sorry not sorry 差点超还原翻跳△ P3 我也是挺正经的OS.mp4", "【扛里个扛】T-ARA❤NO.9,超高冷!.mp4", "【扛里个扛】T-ara❤Day by day.mp4", "【扛里个扛】Taki Taki♕.mp4", "【扛里个扛】Twilight👑.mp4", "【扛里个扛】Wiggle Wiggle❤.mp4", "【扛里个扛】something❤Girls Day P1 各种走位版.mp4", "【扛里个扛】something❤Girls Day P2 竖屏版.mp4", "【扛里个扛】“双胞胎”的 I My Me Mine.mp4", "【扛里个扛】“双胞胎老师”的Girls,你更喜欢哪一个❤.mp4", "【扛里个扛】☯马步谣☯楚留香手游同人舞【原创编舞】.mp4", "【扛里个扛】一首红(hei)昭愿,为您网络一线牵.mp4", "【扛里个扛】佛系燃烧卡路里!!.mp4", "【扛里个扛】你真的对我没感觉吗?.mp4", "【扛里个扛】全 程 高 唐 P1 逆水寒-高唐.mp4", "【扛里个扛】全 程 高 唐 P2 有BUG的定机位.mp4", "【扛里个扛】好乐Day.mp4", "【扛里个扛】宣美-Siren.mp4", "【扛里个扛】宣美♡Gashina.mp4", "【扛里个扛】少女时代-Catch me if you can✨.mp4", "【扛里个扛】御姐风的晴天好心情,没错!这才是真正的我!.mp4", "【扛里个扛】无意义文學▷ドクドクドク.mp4", "【扛里个扛】是你没见过的Chica.mp4", "【扛里个扛】来跟老师读不~要~啊❤.mp4", "【扛里个扛】歪头福利❤罗密欧与辛德瑞拉.mp4", "【扛里个扛】每天都要来一遍的Up&Down.mp4", "【扛里个扛】滴!这里有一份组队申请注意查收!.mp4", "【扛里个扛】王蓉-要抱抱.mp4", "【扛里个扛】鬼畜版·学猫叫【全明星阵容喵?】 P1 鬼畜版.mp4", "【更新到Siren】竖屏合集 P1 GASHINA竖屏.mp4", "【更新到Siren】竖屏合集 P2 siren 竖屏.mp4", "【更新到Siren】竖屏合集 P3 girls 竖屏.mp4", "【月亮❄扛扛】一舞晴川雪,一眼惹惊鸿【古风原创编舞】 P1 银临 - 晴川雪.mp4", "【桥肯x扛扛】Love me if you can△确定过眼神,我们是姐妹.mp4", "【横屏全身】你喷的火~是我的造型.mp4", "【竖屏&绝美特写】NICE BODY【4K】 P1 特写.mp4", "【竖屏&绝美特写】NICE BODY【4K】 P2 竖屏.mp4", "【竖屏】JK辣妹♥HOW YOU LIKE THAT!?.mp4", "【竖屏】Nobody能拒绝的快乐.mp4", "【竖屏】SIGN♥褐眼女孩,给大家表演个脖子以下都是腿(误 P1 好像是个4K.mp4", "【竖屏】SIGN♥褐眼女孩,给大家表演个脖子以下都是腿(误 P2 封面风格没有分镜.mp4", "【竖屏】今夜不让你入睡☠twilight♥短发病娇.mp4", "【竖屏】这次不许跟扛老师学Thumbs Up【扛里个扛】.mp4", "三 倍 的 快 乐.mp4", "不给糖?那扛老师就捣乱你的心.mp4", "与你暧昧不清的竖屏,喜欢吗? P1 跟横屏一毛一样的带特写竖屏.mp4", "与你暧昧不清的竖屏,喜欢吗? P2 看舞蹈的竖屏.mp4", "两 个 女 仆 分 别 如 何 使 用 ?❤️Tara-Sexy Love 【礼礼X扛扛】.mp4", "两个女朋友同时哭了,你哄哪个? -- 礼礼x扛扛 -- T-ara♥Cry Cry.mp4", "互动视频是你期待的长腿姐妹的决斗.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P1 官方舞台剧《画江湖之不良人》饰演白无常cut.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P2 翻唱VAVA 4【3.18更新】.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P3 精分表演现场.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P4 年轻时唱的不咋样还假唱的现场.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P5 万神纪后羿(依然是年轻的时候).mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P6 上海美莱女王节宣传片(为什么让我小清新??).mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P7 菜鸡打戏合集【3.26更新】.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P8 暗恋桃花源话剧饰演春花【3.26更新】.mp4", "你们不知道的扛老师【超多分P预警 看到赚到】 P9 干饭人打拳合集【3.26更新】.mp4", "你喷的火 是我的造型.mp4", "别进来,我怕你忍不住……想三连【PRISTIN- GET IT】 P2 横屏.mp4", "加倍傲慢的扭胯舞⚠abracadabra ⚠这 次 气 场 全 开⚠.mp4", "原来所谓爱情,是这模样.mp4", "反正你都不来看的短裙,嘤【背面视角竖屏】 P1 MINISKRIT正面竖屏.mp4", "反正你都不来看的短裙,嘤【背面视角竖屏】 P2 MINISKIRT 背面竖屏.mp4", "变胖扛姑娘的眼泪.mp4", "和妹妹跳兔子舞【扛里个扛】.mp4", "嗯?为什么每夜都不来看我.mp4", "垫底JK辣妹❤HOW YOU LIKE THAT【扛里个扛】.mp4", "复古女王风♡Queen Bee【扛里个扛】.mp4", "女 友 的 撒 娇 邀 请.mp4", "如果用怀旧MTV风跳鬼畜鸽子舞???.mp4", "姨母团经典扇子舞Sign P1 花里胡哨版本A.mp4", "姨母团经典扇子舞Sign P2 纯跳没动版本B.mp4", "完美腰臀比✨扛老师的触电挑战✨ 紧身牛仔裤+高跟鞋,你会被我电到吗?【4K竖屏】.mp4", "客官,您可愿听我说......mp4", "御姐up私下的真实模样【十万粉银牌开箱】.mp4", "御姐的可爱,最为致命【NICE BODY】.mp4", "怨妇风氛围感拉满❤为什么我每夜都在想你.mp4", "您的长腿女仆为您定制了一份爱,请进来三连.mp4", "愚人节没人来找你表白? 那我来【senorita】 P1 徐穗珍版Senorita.mp4", "愚人节没人来找你表白? 那我来【senorita】 P2 现场即兴senorita.mp4", "我 骂 我 自 己.mp4", "我只想你陪伴❤company【扛里个扛】.mp4", "我这样哭.....你是不是就可以早点回家.........mp4", "我这样哭.....你是不是就可以早点回家.......【CRYCRY竖屏】..mp4", "有没有一种可能,我是说可能,在这十字街头......mp4", "来跟扛老师学~UP&DOWN!!.mp4", "来跟扛老师看💗up&down【竖屏】.mp4", "没有你,穿短裙还有什么用 P1 AOA MINISKIRT.mp4", "没有你,穿短裙还有什么用 P2 背面竖屏预告.mp4", "活动作品172长腿高颜值❤少女时代 - Mr.Taxi【夏x竹x须x扛x楷】 P1 Mr.TAXI导出4k.mp4", "活动作品172长腿高颜值❤少女时代 - Mr.Taxi【夏x竹x须x扛x楷】 P2 其实还没练熟的固定机位练习室.mp4", "活动作品Dumb!同校学姐跳起舞来竟然变这样…….mp4", "活动作品I’m Not Cool【扛里个扛】真·大姐姐 P1 I’M NOT COOL.mp4", "活动作品MAMAMOO♥AYA嗷~~ P1 不一样的比例.mp4", "活动作品Twilight♖当代另类个性女团,高矮胖瘦美【起风组】 P1 排练录舞比赛必刮风组合.mp4", "活动作品【扛里个扛】Twilight👑.mp4", "活动作品【扛里个扛】一首红(hei)昭愿,为您网络一线牵.mp4", "活动作品【扛里个扛】全 程 高 唐 P1 逆水寒-高唐.mp4", "活动作品【扛里个扛】是你没见过的Chica.mp4", "活动作品【扛里个扛】滴!这里有一份组队申请注意查收!.mp4", "活动作品【竖屏&绝美特写】NICE BODY【4K】 P1 特写.mp4", "活动作品【竖屏&绝美特写】NICE BODY【4K】 P2 竖屏.mp4", "活动作品【竖屏】这次不许跟扛老师学Thumbs Up【扛里个扛】.mp4", "活动作品三 倍 的 快 乐.mp4", "活动作品你们不知道的扛老师【超多分P预警 看到赚到】 P1 官方舞台剧《画江湖之不良人》饰演白无常cut.mp4", "活动作品变胖扛姑娘的眼泪.mp4", "活动作品复古女王风♡Queen Bee【扛里个扛】.mp4", "活动作品如果用怀旧MTV风跳鬼畜鸽子舞???.mp4", "活动作品姨母团经典扇子舞Sign P1 花里胡哨版本A.mp4", "活动作品对不起,我不是美女.mp4", "活动作品御姐up私下的真实模样【十万粉银牌开箱】.mp4", "活动作品我能如此对你吗?T-ara TIKI TAKA 【佟x跑x沐x扛】.mp4", "活动作品讨厌!!!讨厌!!!!讨厌!!!! 我想要被你爱啊!!!!! P2 纯舞蹈.mp4", "活动作品震惊!不良人的舞台剧演员竟然开演前在后台做这种事!!!【VLOG】 P1 《画江湖之不良人夺梦篇》.mp4", "渣女吊带袜,拽到你趴下 -- HELLO BI+CHES P1 嗨 我是剪辑版.mp4", "特 工 女 友 ,使 命 必 达.mp4", "表 情 管 理 教 科 书.mp4", "讨厌!!!讨厌!!!!讨厌!!!! 我想要被你爱啊!!!!! P1 接受我吧 这才是你.mp4", "讨厌!!!讨厌!!!!讨厌!!!! 我想要被你爱啊!!!!! P3 这次只是个预告.mp4", "赌上舞见名誉的!超耐久60分钟随机舞蹈!!【扛里个扛】 P2 从UP&DOWN开始的音轨不对.mp4", "这么凶的见过没?【MARIA】.mp4", "这次不许跟扛老师学哦~ 【Thumbs Up】.mp4", "酷女孩的皮衣吊带袜,根本没在怕!【chica竖屏】.mp4", "震惊!不良人的舞台剧演员竟然开演前在后台做这种事!!!【VLOG】 P1 《画江湖之不良人夺梦篇》.mp4", "震惊!不良人的舞台剧演员竟然开演前在后台做这种事!!!【VLOG】 P2 不良猫做的版本.mp4", "震惊!不良人的舞台剧演员竟然开演前在后台做这种事!!!【VLOG】 P3 易星秀做的版本.mp4", "风月 ❤客官您可愿听我说这故事……【扛里个扛】.mp4", "骁!气!十!足!.mp4"]; // $this->deleteFileListWithDir($photoList, "/Volumes/desktop-81dpan3/pcSync/china_cam/china_cam_001/"); dump(array_diff($list, $photoList)); } public function deleteFilesForExtensions($dir, array $extensions) { if (!is_dir($dir)) { return; } $files = scandir($dir); foreach ($files as $file) { $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[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) { $currentItem = implode(DIRECTORY_SEPARATOR, [$dir, $file]); if (is_dir($currentItem)) { $this->renameFileExtensionToAnother($currentItem, $fromExtension, $toExtension); } if (is_file($currentItem)) { $pathInfo = pathinfo($currentItem); if ($pathInfo[PATHINFO_EXTENSION] == $fromExtension) { dump("now rename file $currentItem"); rename($currentItem, str_replace($fromExtension, $toExtension, $currentItem)); } } } } public function copySelectedFilesToMappedDirectory(array $sourceToDestMap) { foreach ($sourceToDestMap as $sourceDir => $destDir) { $lastTime = $this->processDirAndFindLastFileMTime($destDir); $this->deleteFilesInDir($destDir); $list = $this->queryNewerFilesInDirectory($sourceDir, strtotime($lastTime)); $this->copyFileToDest($destDir, $list); // dump($list); } } public function queryNewerFilesInDirectory($dir, $lastTime) { $list = []; if (!is_dir($dir)) { return $list; } $files = scandir($dir); 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) { $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) { foreach ($fileList as $file) { // $filePathInfo = pathinfo($file); // dump($filePathInfo); // echo pathinfo($file, PATHINFO_BASENAME); // exit; copy($file, $destDir . DIRECTORY_SEPARATOR . pathinfo($file, PATHINFO_BASENAME)); // exit; // $filePathInfo[PATHINFO_DIRNAME]; } } }