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;
}
为了快速校验文件用的,但是最后没用上,先做个记录