2014-07-08 3 views
0

다음과 같은 경우에 대비해 궁금합니다.디렉토리에서 같은 이름의 파일을 찾으십시오.

목표 : 디렉토리 트리에서 같은 이름의 파일을 식별하십시오. 중복 된 파일이나 그러한 파일의 위치/이름이 있으면 어떤 지식도 없습니다.

예상 출력 : 위치가있는 파일을 나열하십시오.

입력 내용 : 검색을위한 최상위 디렉토리 경로.

내 알고리즘 :

1.list ("."나는 찾기 -name를 사용했다)

2.List1 대상 디렉토리에있는 모든 파일 : 파일 이름을 분류

3.List2 : 2 단계 & 3에서 Uniquify 파일 이름

4.Diff 목록은 반복 파일 위치 5.extract

를 얻을 수 있습니다.

Sample Directory: 
temp/ 
|-- d1 
| |-- d2 
| | `-- f3 
| |-- d3 
| | `-- f3 
| |-- f1 
| `-- f2 
`-- d4 
    |-- d5 
    | |-- f2 
    | `-- f6 
    |-- f4 
    `-- f5 


> find temp/ -type f -follow -print | sed 's;.*/;;' | sort -u > ~/tmp/12 
> find temp/ -type f -follow -print | sed 's;.*/;;' | sort -n > ~/tmp/11 

> diff ~/tmp/11 ~/tmp/12 
3,4d2 
< f2 
< f3 

> find temp/ -name f2 
temp/d1/f2 
temp/d4/d5/f2 

> find temp/ -name f3 
temp/d1/d2/f3 
temp/d1/d3/f3 

이 과정을 단순화하고 싶습니다. 도움이되면 도움이 될 것입니다. 자세한 내용이 필요하면 알려 주시기 바랍니다.

+0

중복 만 일치시키는 데 도움이되는 정렬 뒤에 (또는 대신하여)'uniq -d'를 추가 할 수 있습니다. 또한,'tree' 명령을 사용하여 표시되는 형식화 된 출력을 볼 수도 있습니다. 여기서'dir1''dir2''에'tree'를 실행하여 ** tmp **에 결과를 쓰고 grep을 사용하여 중복 된 것을 찾을 수 있습니다. 다른 접근법에 대한 생각. 당신이 가진 것은 나쁜 시작처럼 보이지 않습니다. –

+0

가능한 경우 대상 디렉토리에 쓰기 권한이 없으므로 tmp 파일을 피할 수있는 방법을 찾고 있습니다. – user1495523

답변

0

사람들이 내 필요에 맞는 것으로 확인 된 솔루션이며 귀하를 도울 수 있습니다. 귀하의 의견을 환영합니다.

set idirectory = `echo $* | awk '{print $1}'` 
if (-d $idirectory) then 
    foreach xxx (`find $idirectory -type f -follow -print | sed 's;.*/;;' | sort -n | uniq -d`) 
     echo "Multiple files found for " $xxx 
     find $idirectory -name $xxx 
    end 
endif 
관련 문제