提取文件夹里更新过的文件


很多时候,帮别人修改后的项目代码,只想把更新的文件发给别人。如果一个一个的文件去找,很麻烦。这里我写了一个php文件,可以把文件夹里更新过的文件,复制到同级别的另一个文件夹下。

<?php
date_default_timezone_set('Asia/Shanghai');
$src_dir = 'C:/dev/nginx/html/xctj';
echo_msg('源目录:' . $src_dir);
$dist_dir = pathinfo($src_dir, PATHINFO_DIRNAME) . '/' . pathinfo($src_dir, PATHINFO_BASENAME) . '-' . date('YmdHis');
echo_msg('保存目录:' . $dist_dir);

// 开始修改时间
$start_time = strtotime('2024-03-21 15:07:00');

copy_update($src_dir);

function copy_update($dir)
{
    global $start_time, $src_dir, $dist_dir;
    $files = scandir($dir);
    foreach ($files as $file) {
        echo_msg($file);
        if ($file == '.' || $file == '..') {
            continue;
        }
        $f = $dir . '/' . $file;
        if (preg_match('/\.idea/i', $f)) {
            continue;
        }
        if (is_dir($f)) {
            copy_update($f);
        } else {
            $update_time = filemtime($f);
            if ($update_time >= $start_time) {
                $d = $dist_dir . '/' .trim( str_replace($src_dir, '', $f),'/');
                createDirByFile($d);
                if (copy($f, $d)) {
                    echo_msg('复制成功:' . $d);
                } else {
                    echo_msg('复制失败:' . $d);
                }
            }
        }
    }
}


function echo_msg($msg)
{
    echo $msg . PHP_EOL;
}

/**
 * 通过给定的文件创建目录
 * @param string $file 文件路径
 * @return bool
 */
function createDirByFile($file)
{
    if (file_exists($file)) {
        return true;
    }
    $dirname = pathinfo($file, PATHINFO_DIRNAME);
    return createDir($dirname);
}

/**
 * 创建文件夹
 * @param string $dir
 * @return bool
 */
function createDir($dir)
{
    if (!is_dir($dir)) {
        return mkdir($dir, 0777, true);
    }
    return true;
}

使用的时候,需要修改以下几个地方:

需要提取哪个文件夹下修改过后的文件

$src_dir = 'C:/dev/nginx/html/xctj';

从哪个时间开始提取

$start_time = strtotime('2024-03-21 15:07:00');

修改完后,可以在黑窗口cmd下运行php文件即可。