다른 명령으로 파이프될 때 명령의 출력

다른 명령으로 파이프될 때 명령의 출력

아래와 같이 일부 파일의 빠른 체크섬을 수행하는 명령을 실행하고 있습니다.

find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

병렬로 실행하려고 하는데

xargs -P 4

이제 find 명령을 개별적으로 실행하면 각 파일의 출력이 체크섬되는 것을 볼 수 있습니다. 그러나 xargs로 파이프하면 더 이상 find 명령의 출력이 표시되지 않습니다.

다른 명령으로 파이프될 때 find의 출력을 볼 수 있는 방법이 있습니까?

답변1

당신은 이것을 원합니다 :

find / -type f -ctime +30 -mtime +30 -atime +30 -print0 | xargs -0 -P 4 md5sum

md5sum 명령에 파일 목록을 입력하려고 합니다. 이것은 으로 이루어집니다 find / | xargs md5sum. 그러면 파일 이름에 이상한 문자(공백, 줄 바꿈 등)가 들어가는 것에 대해 걱정할 필요가 없으므로 -print0find 및 -0xargs에 사용합니다.

답변2

나는 당신의 주문을 수락했습니다

$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

그리고 stdout으로 에코하면서 리디렉션을 원한다고 생각해보세요. 이를 수행할 수 있는 한 가지 방법은 티셔츠를 사용하는 것입니다.

$ man tee | head
NAME
   tee - read from standard input and write to standard output and files

따라서 tee는 확실히 표준 출력(체인을 계속하는 데 필요한 것)에 쓰고 우리가 선택한 파일에도 씁니다. 엄청난! 그런데 무슨 문서?

이 답변에 대한 아이디어를 주셔서 감사합니다https://stackoverflow.com/a/9405342, 우리는 사용할 수 있습니다

/dev/tty

리디렉션을 위해 콘솔에 인쇄됩니다!

따라서 전체 명령의 경우 다음과 같습니다.

$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | tee /dev/tty | xargs -P 4

이렇게 하면 화면 아래로 스크롤되는 멋진 텍스트가 보이기 시작합니다. :)

관련 정보