项目中有一些模块正在重命名或新创建或直接复制。现在我想删除旧的目录文件。所以我想找到所有带有路径的文件,这些文件具有相同的清理名称。 (计数> 2)。那可以是css,tpl,php或js文件。
即
Main\Games\troy.php
Main\Games\Child Games\troy.php
Main\Games\Sports\troy.php
如果在主目录上进行搜索,则搜索应返回所有3个文件及其路径。如何通过PHP查找重复文件。
这对于在驱动器中查找具有相同名称的重复文件(如mp3,3gp文件)也很有用。
答案 0 :(得分:0)
function find_duplicate_files() {
$names = scandir_recursive( 'D:\Main' );
$files = array();
foreach( $names as $name ) {
if( count( $name ) > 1 ) {
$files[] = $name;
}
}
print_r( $files );
}
函数scandir_recursive()以递归方式解析指定的目录树,并创建一个关联数组,其关键字是在所有子目录中找到的文件名,其值是相应的路径。
function scandir_recursive( $dir, &$result = array() ) {
$dir = rtrim($dir, DIRECTORY_SEPARATOR);
foreach ( scandir($dir) as $node ) {
if ($node !== '.' and $node !== '..') {
if (is_dir($dir . DIRECTORY_SEPARATOR . $node)) {
scandir_recursive($dir . DIRECTORY_SEPARATOR . $node, $result);
} else {
$result[$node][] = $dir . DIRECTORY_SEPARATOR . $node;
}
}
}
return $result;
}
//输出如
Array
(
[0] => Array
(
[0] => D:\Main\Games\troy.php
[1] => D:\Main\Games\Child Games\troy.php
[2] => D:\Main\Games\Sports\troy.php
)
[1] => Array
(
[0] => D:\Main\index.php
[1] => D:\Main\Games\index.php
)
)
我们可以从中识别哪些是重复文件。当您的代码库有大量文件时,它很有用。 (我已经用它来寻找重复的音乐mp3文件:P)