桌面文件越来越多,越看越乱,搜索一番之后 发现了 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;
}
食用方法无