‘>’를 사용하여 xargs 인수를 문자열로 다른 명령에 전달 하시겠습니까? > FILES.md5 find 명령으로 찾은

에 많은 파일이 있다고 가정합니다 /tmp/.

나는한다

find . -type f | xargs -iFILES

그리고 md5sum각 파일에서을 수행하고 이름은 같지만 .md5확장자 가있는 파일로 출력 하고 싶습니다 .

find . -type f | xargs -iFILES md5sum FILES > FILES.md5

find 명령으로 찾은 각 파일에 대해 md5 파일을 작성해야합니다. 대신 모든 파일의 체크섬을 사용하여 디스크에 단일 FILES.md5 파일을 만듭니다.

FILES가 FILES 리터럴 문자열이 아닌 현재 파일 이름을 나타내는 md5sum 명령에 대해 어떻게 말합니까?



답변

출력을 md5sum파일 로 보내고 싶다고 말하는 방법이 필요 합니다. 이후 find(또는 xargs)이 기능이 내장되어 있고,하지 않는 md5sum유일한 표준 출력에 인쇄하는 방법을 알고, 쉘 리디렉션은 가장 간단한 방법입니다.

일반적인 이유로는 명령이 다른 이유로 작동하지 않습니다.의 출력 형식은 find의 입력 형식이 아니며 xargs공백 또는 또는 파일 이름이 포함 된 파일 이름과 다릅니다 \"'. find -exec대신 사용하십시오 .

find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;


답변

IO 리디렉션을 처리하려면 서브 쉘을 사용해야합니다.

find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'


답변

GNU Parallel을 사용하면 다음을 수행 할 수 있습니다.

find . -type f | parallel md5sum {} \> {}.md5

md5sum을 병렬로 실행하면 다음과 같은 파일이 추가로 제공됩니다.

My brother's 12" records.txt

명령이 충돌하지 않습니다. 자세한 내용은 소개 동영상을 참조하십시오 . http://www.youtube.com/watch?v=OpaiGYxkSuQ


답변