디렉토리의 모든 파일에 대해 md5 체크섬 목록을 만들고 싶습니다.
하고 싶습니다 cat filename | md5sum > ouptput.txt
. 내 디렉토리의 모든 파일에 대해 1 단계 로이 작업을 수행하고 싶습니다.
도움이 될 것입니다.
디렉토리의 모든 파일에 대해 md5 체크섬 목록을 만들고 싶습니다.
하고 싶습니다 cat filename | md5sum > ouptput.txt
. 내 디렉토리의 모든 파일에 대해 1 단계 로이 작업을 수행하고 싶습니다.
도움이 될 것입니다.
답변:
md5sum
여러 파일 이름 또는 bash 확장을 전달할 수 있습니다 .
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
화려하게 만들고 싶다면 find
파일을 드릴 다운하고 필터링하고 재귀 적으로 작업하는 것과 같은 것을 사용할 수 있습니다 .
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
하위 디렉토리 내부의 파일로, 위에서 md5sum *
... 말하여 하위 레벨로가는 발광 디렉토리입니다
find -type f -exec md5sum '{}' +
`find -type f -exec md5sum '{}' 을 (를) 실행하여 요청하여 죄송합니다 . 감사합니다 :)
openssl md5 * > checklist.txt
**
재귀 적 으로 평가할 수있는 쉘 (예 : zsh)을 사용하는 경우 훨씬 간단합니다.md5sum **/* 2>/dev/null
훌륭한 체크섬 생성 / 검증 프로그램은 Rash입니다. SFV 호환 파일도 생성하고 확인합니다.
md4, md5, sha1, sha512, crc32 및 기타 여러 가지를 지원합니다.
또한 md5deep 또는 sha1deep과 같은 재귀 생성 (-r 옵션)을 수행 할 수 있습니다.
마지막으로 체크섬 파일의 출력 형식을 지정할 수 있습니다. 예를 들면 다음과 같습니다.
rhash --md5 -p '%h,%p\n' -r /home/
/home
디렉토리 부터 재귀 적으로 전체 파일 경로를 포함한 CSV 파일을 출력합니다 .
crc32 sum을 이름에 삽입하여 -e 옵션으로 파일 이름을 바꾸는 것도 매우 유용합니다.
PhoenixNL72 예제에서 "rhash"를 사용하여 "md5sum"을 변경할 수 있습니다.
다음은보다 광범위한 두 가지 예입니다.
절대 경로를 사용하여 아직없는 md5 파일을 각 디렉토리에 작성하십시오.
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
경로가없고 파일 이름 만있는 md5 파일을 각 폴더에 만듭니다.
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
1과 2의 차이점은 결과 md5 파일에 파일이 표시되는 방식입니다.
명령은 다음을 수행합니다.
이 전체 스크립트의 출력을 파일 (.....; done> test.log)로 리디렉션하거나 다른 프로그램 (예 : grep)으로 파이프 할 수 있습니다. 출력은 건너 뛴 디렉토리와 처리 된 디렉토리 만 알려줍니다.
성공적으로 실행되면 현재 디렉토리의 각 하위 디렉토리에 @ md5Sum.md5 파일이 생깁니다.
파일 이름을 @ md5Sum.md5로 지정하여 samba 공유의 디렉토리 맨 위에 나열됩니다.
다음 명령으로 모든 @ md5Sum.md5 파일을 확인할 수 있습니다.
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
나중에 grep -v OK를 사용하여 checklog.txt를 grep하여 다른 모든 파일 목록을 얻을 수 있습니다.
특정 디렉토리에서 @ md5Sum.md5를 재생성하려면 예를 들어 파일을 변경하거나 추가 한 경우 @ md5Sum.md5 파일을 삭제하거나 파일 이름을 바꾸고 generate 명령을 다시 실행하십시오.
나는이 문제에 부딪 쳤고 위의 솔루션은 우아하지만이 상황에 대한 빠르고 더러운 해킹을 원했습니다. 하위 디렉토리가 한 수준 깊은 하위 디렉토리가있는 1 개의 디렉토리
따라서 쉘에 디렉토리를 입력하고 다음을 실행하십시오.
md5sum * */* 2>/dev/null > md5sum.md5
그러면 최상위 디렉토리의 모든 파일을 가져 와서 디렉토리 인 하위 디렉토리에 대한 오류 경고를 제거한 다음 서브 디렉토리 컨텐츠에서 md5sums를 실행합니다. 장점 : 기억하기 쉽고 정확히해야 할 일을합니다. 나는 항상 구문 찾기로 혼란스러워 머리 꼭대기에서 그것을 기억할 수 없으므로 디렉토리 이름의 공백을 처리하는 등을 반복 할 필요가 없습니다.이 라이너는 정상적으로 작동했습니다. 강력하고 강력한 솔루션은 아니지만 1 수준 이상의 하위 디렉토리에는 적합하지 않지만 문제를 빠르고 쉽게 해결할 수 있습니다.