2016-10-25 4 views
0

md5deep 유틸리티를 사용하여 파일의 해시를 계산하는 동안 반복적으로 디렉토리 구조를 파헤 치고 있습니다.md5deep의 출력에서 ​​일부 파일 및 디렉토리를 제외하는 방법은 무엇입니까?

그것은이 같은 명령을 실행 할 수 있습니다 -

md5deep -r -l -j0 app 

을하고 (자신의 콘텐츠를 고려하여 모든 기본 파일/디렉토리의 MD5 해시의 재귀 목록)과 같은 출력을 제공합니다 -

d41d8cd98f00b204e9800998ecf8427e app/tests/cases/controllers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/models/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/components/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/helpers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/behaviors/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/groups/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/fixtures/empty 

을 결과에 md5sum을 추가로 수행하여 코드베이스 전체의 해시를 생성합니다. -

md5deep -r -l -j0 app | md5sum 

출력 - 이제

86df91fc29f2891ff0aa7aaa4bd13730 - 

, 나는 마지막 md5sum이 계산하는 동안 고려되는 일부 경로 (파일과 디렉토리를 제외)에 붙어있다. 예 : 이 두 경로 (app/tests/groups/emptyapp/tests/fixtures/empty)를 제외하려면

md5deep documentation은 파일의 파일 이름/디렉토리 목록을 제공하는 옵션 (-f 옵션)을 제공하지만 해당 파일이 포함됩니다. 그러나 필자는 반대쪽을 찾고 있는데, 즉 디렉토리의 동적 집합 (새로운 디렉토리/파일이 미래에 추가 될 수 있음)에서 미리 정의 된 파일/디렉토리 집합을 지정된 디렉토리 내에서 제외하려고합니다.

정규식이나 md5deep 이외의 도구/유틸리티를 사용하는 솔루션도 제 목적을 달성하는 한 환영합니다. lookaheads가 없으면 grep을 사용한 정규식 솔루션이 복잡 할 것이라고 생각합니다. 예 : 다음 정규식은 ABC 제외한 모든 문자열과 일치하는 단지 필요 - md5sum와 함께 왜 find를 사용하지

^([^A]|A([^B]|B([^C]|$)|$)|$).*$ 

https://stackoverflow.com/a/1395247/351903

답변

1

을 : 당신이 어떤 디렉토리를 제외해야하는 경우를 사용

find app -type f -exec md5sum {} \; 
d41d8cd98f00b204e9800998ecf8427e app/tests/groups/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/components/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/behaviors/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/models/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/helpers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/cases/controllers/empty 
d41d8cd98f00b204e9800998ecf8427e app/tests/fixtures/empty 

옵션 -path을 사용하고 파일 이름을 제외해야하는 경우 -name을 사용하십시오. find app -empty

: 당신의 빈 파일을보고있는 경우

find app -type f ! -path "*models*" -exec md5sum {} \; 

BTW, 당신은 -empty 옵션을 사용할 수 있습니다 :

예를 들어

당신이 그들의 경로에 models 포함됩니다 파일을 제외하려면 다음을 사용

+0

좋아요. 나는 한 가지 질문 만 가지고있다. 개별 md5sum이 다른 순서로 반환 될 가능성이 있습니까? 왜냐하면 위의 결과물을 파이프로 출력 할 때 최종 결과물을 얻을 때 다른 결과를 초래할 수 있기 때문입니다 -'find app-type f! -path "* models *"-exec md5sum {} \;'. 참고로,'md5deep -r -l -j0 app | md5sum'은 개별 md5sum이 다른 순서로 반환되기 때문에 비 결정 성을 방지하기 위해 1 스레드를 사용하는 것을 의미합니다. –

+0

'find '가 멀티 스레딩을 사용하면 위와 같은 문제가 발생합니다. –

+0

@SandeepanNath'find'는 전체 디렉토리 트리를 순회하면서 순차적으로'md5sum' 명령을 실행합니다. – oliv

관련 문제