文件自动分类脚本

桌面文件越来越多,越看越乱,搜索一番之后 发现了 Sort My Files – 文件自动分类

原文介绍 Sort My Files是款文件自动分类工具,可以将不同类型的文件分类到不同文件夹

主要用途就是 把指定文件夹内的文件 分类到不同文件

美中不足 官网下载的是分类目录是英文,而且某些文件分类,不符合自己的要求,所以就有了本文的 脚本

脚本如下

<?php
/**
 * 文件分类 脚本
 *
 * 根据后缀名 移动当前目录下的 文件 到指定文件夹
 * 
 * @author 简爱 <sc.419@qq.com>
 * @link https://asilu.com/
 */

// 要分类的 目录
$path = __DIR__;



// 不是命令行运行
if(strpos(php_sapi_name(), 'cli') !== 0){
    die('请在命令行下运行! Please run the current script at the command line !!');
}

// 统计文件数量
$types = [];
$other = 0;

$path = realpath($path) . '/';

if (is_dir($path)){
    $handle = opendir($path);

    while (false !== ($name = readdir($handle))) {
        $path2 = realpath($path . $name);
        if (!is_dir($path2) && $path2 != __FILE__) {
            $dir = getSort($path2);
            if($dir){
                if(!isset($types[$dir])){
                    $types[$dir] = 1;
                }else{
                    $types[$dir]++;
                }
                if(!file_exists($path . $dir)){
                    mkdir($path . $dir, 0777, true);
                }
                rename($path2, $path . $dir .'/'. $name);
            }else{
                $other++;
            }
        }
    }
}

echo '处理分类完毕 分类文件数量: ' . array_sum($types) . PHP_EOL;

print_r($types);

echo PHP_EOL;

echo '未分类文件数量: ' . $other . PHP_EOL;

// 获取文件 后缀名 (剥离 .gz 后缀)
function getExt($file){
    return preg_match('/([\w\d]+)(?:\.gz)?$/', $file, $res) ? strtolower($res[1]) : false;
}

/**
 * 获取文件分类文件夹名称
 * 
 * 具体分类规则见
 * 
 * http://cdn.asilu.com/file-type.json
 * http://cdn.asilu.com/file-type-name.json
 * 
 * 规则放线上 方便一处修改处处使用
 * 
 * 替换成自己的
 */
function getSort($file){
    static $types = false;
    static $names = false;

    if($types === false){
        ini_set('user_agent', 'FilesSort/0.0.1 文件分类程序代码');
        // 类型与后缀 对应数据. 数组 key 为类型, 值为 对应文件后缀的数组. 如: {"photo": ["jpg", "png", "gif"], "doc": ["doc", "docx"]}
        $types = file_get_contents('http://cdn.asilu.com/file-type.json');
        $types = json_decode($types, true);
        if(!$types){
            $types = [];
        }
        // 类型与分类目录名 对应数据. 数组 key 为类型, 值为 目录名. 如: {"photo": "图片", "doc": "文档"}
        $names = file_get_contents('http://cdn.asilu.com/file-type-name.json');
        $names = json_decode($names, true);
        if(!$names){
            $names = [];
        }
    }

    $ext = getExt($file);
    $typeName = false;
    foreach($types as $type => $exts){
        if(in_array($ext, $exts)){
            $typeName = $type;
            break;
        }
    }
    return $typeName && isset($names[$typeName]) ? $names[$typeName] : $typeName;
}

食用方法无

Post Author: admin