">"를 사용하여 xargs 인수를 문자열로 다른 명령에 전달하시겠습니까?

">"를 사용하여 xargs 인수를 문자열로 다른 명령에 전달하시겠습니까?

내가 여러 개의 파일을 가지고 있다고 가정해 봅시다 /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"' {} \;

관련 정보