md5sum으로 파일 찾기


2

파일의 md5sum이 주어지면 디렉토리 트리의 다른 곳이 동일한 md5sum을 가진 다른 파일인지 (그러나 다른 이름으로) 알고 싶습니다. bash에서 어떻게 할 수 있습니까?

추신 : 강조하기 위해서는 주어진 디렉토리 아래의 전체 트리에서 작동해야합니다. 즉, 현재 디렉토리에서만 재귀 적으로 작동해야합니다.

bash  find  md5  md5sum 

답변:


1

find모든 파일을 재귀 적으로 테스트하는 데 사용 :

find . -type f -exec \
bash -c 'md5sum "$0" | grep -q 2690d194b68463c5a6dd53d32ba573c7 && echo $0' {} \;

여기 md5sum에서 MD5 합계와 파일 이름을 출력합니다. 당신은 필요 grep합 혼자 그냥 출력을 가지고 어떤 스위치가 없기 때문에 실제 MD5 합계를 위해.

md5BSD 또는 OS X를 사용하는 경우 MD5 합계를 훨씬 쉽게 확인할 수 있습니다 .

find . -type f -exec \
bash -c '[ "$(md5 -q "$0")" = 2690d194b68463c5a6dd53d32ba573c7 ] && echo $0' {} \;

고마워 slhck은 매우 흥미롭게 보이지만 분명히 내 md5 명령에는 -q 옵션이 없습니다. 내 md5sum 명령도 없습니다. Xubuntu를 사용하고 있습니다. 또한 {} \는 무엇입니까?

죄송합니다, md5여기에 잘못된 BSD 도구가 있습니다. 리눅스에서는 당신이 필요합니다 md5sum. 컴퓨터로 돌아올 때 게시물을 수정하겠습니다. {}는 발견 된 각 파일의 파일 경로입니다. 에 전달됩니다 sh. \; 단순히 exec통화 를 종료합니다 .
slhck

1

다른 솔루션은 좋지만 생성 된 프로세스가 적은 프로세스를 제안하고 싶습니다 .GNU 찾기가있는 경우 많은 작은 파일의 경우 훨씬 빠릅니다.

find /path/to/tree -type f -exec md5sum \{\} + | sed -nre 's/^md5-to-search-for  //p'

또는 GNU 찾기없이 :

find /path/to/tree -type f -print0 | xargs -r -0 -- md5sum | sed -nre 's/^md5-to-search-for  //p'

0

slhck에서 솔루션 중 일부를 빌려서, 나는 생각해 냈습니다.

find . -type f -print0 | while read -r -d '' f;
do
 md5sum "$f" | grep "$1"
done

여기서 $ 1이 첫 번째 인수입니다. 누락 된 인수를 확인하려면 다음을 사용하여 파일을 시작하십시오.

if [ -z "$1" ]
  then
    echo "No argument supplied"
    exit
fi

파일에 경로에 공백이 있으면 중단됩니다. 사용해야하는 파일을 반복 find하여을 exec하거나 글 로빙 (예 **)
slhck

다른 옵션은 명령 에 사용 -print0하는 것 입니다. 따라서이 경우findxargs -0find . -type f -print0 | xargs -0 md5 | grep (your MD5 code)
Kent

나는이 솔루션을 많이 좋아합니다. 그러나 그것은 stderr에 많은 메시지를 제공합니다 : "md5sum : somefilename : No such file or directory". 그것을 억누를 방법이 있는지 궁금합니다.

1
@gojira 파일에 공백이 포함되어 있고 "x"로 인해 brixenDK의 명령이 중단 되었기 때문일 수 for f in …있습니다. 하나의 파일 이름이 지정 된 경우 foo bar, 예를 들어,에서의 MD5 합계를 수행하려고 할 것입니다 foo그리고 bar모두가 존재하지 않는. 왜 이런 일이 발생하는지 피하는 방법에 대한 자세한 설명은 다음을 참조하십시오. mywiki.wooledge.org/ParsingLs
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.