去了趟敦煌,又拍了些照片,回来整理照片的时候,发现电脑里有原本就有20来个G的照片,而且已经不知道哪些照片都是什么了。。文件夹居多,找起来好麻烦。。所以就写了个脚本来整理这些照片,整理以后感觉好多了。。
此脚本根据照片的exif信息来划定文件夹,整理后如图:
看着清爽多了。。
脚本也不难,如果文件名相同且拍摄时间也相同则跳过,这样也避免了重复文件占用硬盘空间。
<?php /** * 整理照片文件 * 目标目录结构为 path/设备名/年/月/ * * @author 废墟<[email protected]> * @link https://anerg.com */ ini_set("memory_limit", -1); ini_set("display_error", 1); ini_set('exif.encode_unicode', 'UTF-8'); error_reporting(E_ALL); date_default_timezone_set('Asia/Shanghai'); define('BASEPATH', dirname(__FILE__)); define('D_S', DIRECTORY_SEPARATOR); class movePhoto { private $hash_array = array(); private $path_src; private $path_new; public function __construct() { clearstatcache(); $this->path_src = 'D:' . D_S . 'tmp' . D_S . 'p' . D_S;//原照片路径 $this->path_new = 'D:' . D_S . 'newphoto' . D_S;//目标目录路径 } public function run() { $this->moveFile($this->path_src); } public function moveFile($input) { $input = rtrim($input, D_S); if (is_dir($input)) { $input .= D_S; foreach (glob($input . "*") as $path) { if (is_dir($path)) { $this->moveFile($path); } if (is_file($path)) { if (preg_match("~jpg|jpeg$~i", $path)) { $exif = exif_read_data($path, 0, true); if (isset($exif['FILE']['FileName']) && isset($exif['FILE']['FileDateTime']) && isset($exif['IFD0']['Model'])) { $new_path = $this->path_new . trim($exif['IFD0']['Model']) . D_S . date("Y", $exif['FILE']['FileDateTime']) . D_S . date("m", $exif['FILE']['FileDateTime']) . D_S; if (!is_dir($new_path)) { $this->mkpath($new_path); } if (!is_file($new_path . $exif['FILE']['FileName'])) rename($path, $new_path . $exif['FILE']['FileName']); } } } } } } private function mkpath($path) { return is_dir($path) or ($this->mkpath(dirname($path)) and (mkdir($path, 0777) and chmod($path, 0777))); } } $app = new movePhoto; $app->run(); ?>