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


9

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

나는한다

find . -type f | xargs -iFILES

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

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

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

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

답변:


4

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

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

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

7

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

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

5

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

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

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

My brother's 12" records.txt

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.