PHP调用par2 递归的处理目录并分离文件

#!/usr/bin/php
<?php

function 转义引号($str)
{
    return str_replace("'","\'",$str);
}

function dir_list($dir_path = '') 
{
    if(!is_dir($dir_path)) return false;

    $dirs = opendir($dir_path);
    if($dirs) 
    {    
        while(($file = readdir($dirs)) !== false) 
        {
            if(!in_array($file,['.','..','hash'])) 
            {
                //目录
                if(is_dir($dir_path.'/'.$file)) 
                {
                    //在hash目录下建立对应目录结构,用来存储最终的par2文件
                    $hash目录对应路径 = HASH路径 .mb_substr($dir_path.'/'.$file,preg_match_all('/(.)/',原始路径));
                    @mkdir($hash目录对应路径,0777,true);

                    //进入目录 递归    
                    dir_list($dir_path . '/' .$file);
                }else 
                {
                //文件
                    $file = 转义引号($file);
                    $原始路径 = 转义引号(原始路径);
                    $hash目录对应路径 = HASH路径 .mb_substr($dir_path,preg_match_all('/(.)/',原始路径));
                    $command = "cd $'".转义引号($dir_path). "' && par2 c -r3 -n1 $'{$file}.par2' $'{$file}' ";
                    file_put_contents(HASH路径.'/par2.sh', $command.PHP_EOL,FILE_APPEND);
                    
                }
            }
        }
        //移动par2文件
        file_put_contents(HASH路径.'/par2.sh',"cd $'".转义引号($dir_path)."' && find . -maxdepth 1 -name \"*.par2\" -exec mv {} $'".转义引号(str_replace(原始路径,HASH路径,$dir_path))."' \;".PHP_EOL,FILE_APPEND);
        closedir($dirs);
    }
}

exec('pwd',$当前路径,$re);
if($re == 0)
{
    $当前路径 = $当前路径[0];
    define("原始路径",$当前路径);
    define("HASH路径", $当前路径.'/hash');
    if(!file_exists(HASH路径)){
        @mkdir(HASH路径,0777,true);
    }
    unlink(HASH路径.'/par2.sh');
    //强制使用bash
    file_put_contents(HASH路径.'/par2.sh', '#!/usr/bin/env bash'.PHP_EOL);
    dir_list($当前路径);
    chmod(HASH路径.'/par2.sh',0755);
    exec(HASH路径.'/par2.sh',$r);
    var_dump(implode(PHP_EOL,$r));
}else{
    exit;
}

 

具体情况以后再补

posted @ 2020-01-05 13:08  龙小六  阅读(70)  评论(0编辑  收藏