파일의 md5sum이 주어지면 디렉토리 트리의 다른 곳이 동일한 md5sum을 가진 다른 파일인지 (그러나 다른 이름으로) 알고 싶습니다. bash에서 어떻게 할 수 있습니까?
추신 : 강조하기 위해서는 주어진 디렉토리 아래의 전체 트리에서 작동해야합니다. 즉, 현재 디렉토리에서만 재귀 적으로 작동해야합니다.
파일의 md5sum이 주어지면 디렉토리 트리의 다른 곳이 동일한 md5sum을 가진 다른 파일인지 (그러나 다른 이름으로) 알고 싶습니다. bash에서 어떻게 할 수 있습니까?
추신 : 강조하기 위해서는 주어진 디렉토리 아래의 전체 트리에서 작동해야합니다. 즉, 현재 디렉토리에서만 재귀 적으로 작동해야합니다.
답변:
find
모든 파일을 재귀 적으로 테스트하는 데 사용 :
find . -type f -exec \
bash -c 'md5sum "$0" | grep -q 2690d194b68463c5a6dd53d32ba573c7 && echo $0' {} \;
여기 md5sum
에서 MD5 합계와 파일 이름을 출력합니다. 당신은 필요 grep
합 혼자 그냥 출력을 가지고 어떤 스위치가 없기 때문에 실제 MD5 합계를 위해.
md5
BSD 또는 OS X를 사용하는 경우 MD5 합계를 훨씬 쉽게 확인할 수 있습니다 .
find . -type f -exec \
bash -c '[ "$(md5 -q "$0")" = 2690d194b68463c5a6dd53d32ba573c7 ] && echo $0' {} \;
md5
여기에 잘못된 BSD 도구가 있습니다. 리눅스에서는 당신이 필요합니다 md5sum
. 컴퓨터로 돌아올 때 게시물을 수정하겠습니다. {}는 발견 된 각 파일의 파일 경로입니다. 에 전달됩니다 sh
. \; 단순히 exec
통화 를 종료합니다 .
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
하거나 글 로빙 (예 **
)
-print0
하는 것 입니다. 따라서이 경우find
xargs -0
find . -type f -print0 | xargs -0 md5 | grep (your MD5 code)
for f in …
있습니다. 하나의 파일 이름이 지정 된 경우 foo bar
, 예를 들어,에서의 MD5 합계를 수행하려고 할 것입니다 foo
그리고 bar
모두가 존재하지 않는. 왜 이런 일이 발생하는지 피하는 방법에 대한 자세한 설명은 다음을 참조하십시오. mywiki.wooledge.org/ParsingLs