파이프를 통해 값 전달

파이프를 통해 값 전달

나는 Linux 명령줄의 파이프에 대해 잘 모릅니다.

나는 다음을 발견했다:

ll - R | grep *.pdf

다음으로 끝나는 파일이 나열됩니다. .pdf

하지만

locate *.pdf | du -h

.로 끝나는 파일은 크기에 포함되지 않습니다 .pdf. 대신 현재 디렉터리의 파일 크기를 나열합니다.

여기서 무슨 문제가 있습니까?

내 생각에는 첫 번째 명령의 출력이 다음 명령의 입력이라는 것입니다.

답변1

파이프는 한 프로그램의 출력을 다른 프로그램의 입력으로 보내는 방식으로 작동합니다. 이는 다른 프로그램의 출력을 수신하는 프로그램이 읽을 수 있어야 함을 의미합니다 STDIN(표준 스트림).

이 경우 출력은 설계된 방식이므로 grep읽을 수 있습니다 . 실행되어야 하는 디렉토리를 가리키는 명령줄 인수가 필요합니다(디렉토리가 지정되지 않으면 기본값은 현재 작업 디렉토리가 됩니다 ).lldu./

.pdf파일 크기를 확인하려면 모든 파일이 디렉터리에 있으면 du -h -d1 /path/to/pdf/dir또는 를 실행할 수 있습니다 locate *.pdf | xargs | du -h. 서로 다른 디렉토리에 있는 경우 -exec및 를 함께 사용해야 합니다 find(다른 사용자가 도움을 줄 수 있지만 어떻게 해야 할지 잘 모르겠습니다).

답변2

내 생각에는 첫 번째 명령의 출력이 다음 명령의 입력이라는 것입니다.

좋아요. 그러나 두 가지 예에서 차이점은 grep입력이 du아닌 입력에 따라 작동한다는 것입니다. 첫 번째 명령이 다음으로 가는 경우에만표준 출력에서 두 번째표준 입력, 이 경우 두 스트림은 "파이프"를 통해 연결됩니다. 명령 매뉴얼 페이지에서 "표준 입력" 및 "표준 출력"을 찾아 이것이 가능한지 확인할 수 있습니다.

관련 정보