2012-11-20 6 views
0

프로젝트에 이름이 바뀌거나 새로 생성되거나 직접 복사되는 일부 모듈이 있습니다. 이제 이전 디렉토리 파일을 삭제하고 싶습니다. 그래서 정리를 위해 같은 이름을 가지고있는 그들의 경로를 가진 모든 파일을 찾고 싶습니다. (개수> 2). 그것은 CSS, tpl, PHP 또는 js 파일이 될 수 있습니다.PHP로 이름으로 중복 파일 찾기

Main\Games\troy.php 
Main\Games\Child Games\troy.php 
Main\Games\Sports\troy.php 

검색이 메인 디렉토리에서 수행되고있는 경우, 검색 3 개 파일과 경로를 반환해야합니다. PHP로 중복 파일을 찾는 방법.

mp3, 3gp 파일과 같이 드라이브에 같은 이름의 중복 파일을 찾는 경우에도 유용합니다.

+0

[이 C# 프로젝트] (https://github.com/shiplu/DuplicateFileChecker) 소스가 도움이 될 수있다. –

답변

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 파일을 중복해서 찾는 데 많이 사용했다.)

+0

scandir_recursive 대신에 PHP가 가지고있는 재귀 적 디렉토리 반복자를 살펴 보시기 바랍니다 : http://php.net/class.recursivedirectoryiterator - 그러면 재귀적인 순회에 더 많은 계산 로직에 집중할 수 있습니다. – hakre

+0

@hakre : 예를 들어 주시겠습니까? 나는 너의 요점을 얻지 못한다. inbuilt 함수로 찾을 수있는 방법이 있습니까? –

+0

예제는 PHP 매뉴얼 링크 및 하단의이 답변에서 제공됩니다. http://stackoverflow.com/a/12236744/367456 – hakre