내가 여러 개의 파일을 가지고 있다고 가정해 봅시다 /tmp/
.
그래요
find . -type f | xargs -iFILES
md5sum
각 파일에서 작업을 수행하고 .md5
이름은 같지만 확장자를 가진 파일 로 출력하고 싶습니다 .
find . -type f | xargs -iFILES md5sum FILES > FILES.md5
find 명령으로 찾은 각 파일에 대해 md5 파일이 생성되어야 합니다. 대신 모든 파일의 체크섬이 포함된 FILES.md5 파일을 디스크에 생성합니다.
FILES가 FILES 리터럴 문자열 대신 현재 파일 이름을 나타낸다는 것을 md5sum 명령에 어떻게 알릴 수 있습니까?
답변1
IO 리디렉션을 처리하려면 서브셸을 사용해야 합니다.
find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'
답변2
GNU Parallel을 사용하면 다음을 수행할 수 있습니다.
find . -type f | parallel md5sum {} \> {}.md5
md5sum을 병렬로 실행하면 추가적인 이점을 얻을 수 있으며 문서는 다음과 같습니다.
My brother's 12" records.txt
명령이 충돌하지 않습니다. 자세히 알아보려면 소개 비디오를 시청하세요.http://www.youtube.com/watch?v=OpaiGYxkSuQ
답변3
md5sum
출력을 파일로 보내려는 것을 표시하는 방법이 필요합니다 . find
(또는 xargs
)에는 이 기능이 내장되어 있지 않고 표준 md5sum
출력으로 인쇄하는 방법만 알고 있으므로 쉘 리디렉션이 가장 간단한 방법입니다.
다른 이유로 인해 일반적인 경우에는 명령이 작동하지 않습니다. 의 출력 형식은 find
의 입력 형식이 아니며 xargs
공백 또는 을 포함하는 파일 이름과 다릅니다 \"'
. 대신 사용하십시오 find -exec
.
find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;