2012-07-11 6 views
2

디렉토리에 많은 파일이 있습니다 A.bash에서 다른 디렉토리 트리에 존재하지 않는 플랫 파일의 모든 파일 찾기

이러한 파일 중 일부는 B/B1, B/B2, B/B3, B/B4 ... 일부 파일 이름에 공백이 있음을 참고 하위 디렉토리와 디렉토리 트리에 존재합니다.

예를 들어

는 : 디렉토리 A

는 :

  • 라는 파일이있다 A/red file.png 다른 디렉토리 트리 B에,이 A/blue file.png

    명명하고있어

  • :

  • B/small/red file.png

    이라는 파일이 있습니다.이 예제에서 파일 blue file.png이 디렉토리 B에 존재하지 않는다고 알려주는 스크립트가 필요합니다.

내가 디렉토리 트리 B에서 찾을 수없는 A에있는 모든 파일을 나열하는 스크립트를 작성할 수 있습니까? 당신의 find-printf이 부족하면

답변

5
# A 
# ├── blue file.png 
# └── red file.png 
# B 
# └── small 
#  └── red file.png 

$ comm -23 <(find A -type f -printf '%f\n' | sort | uniq) <(find B -type f -printf '%f\n' | sort | uniq) 
blue file.png 

, 당신은 시도 할 수 있습니다 :

comm -23 <(find A -type f -exec basename {} \; | sort | uniq) <(find B -type f -exec basename {} \; | sort | uniq) 
+0

감사합니다. 내 "찾기"는 -printf가없는 것 같아서 대신 -print를 사용했습니다. 그게 어떤 변화도 가져서는 안된다. 그렇지? –

+0

잠시만 기다려주십시오. 뭔가 작동하지 않습니다. 나는 여전히 A와 B 모두에 존재하는 파일을 얻고 있습니다. –

+0

좋습니다. 아마도 그것은 -printf 일 것입니다. 대신 -print를 사용하면 디렉토리를 포함한 전체 파일 이름을 얻습니다. -printf '% f'가 나에게 파일의 기본 이름을 제공한다면, 나는 대답을 수락 할 것이지만,이 스크립트를 -printf가없는 "find"에 어떻게 적용 할 것인가? –