![파이프를 통해 값 전달](https://linux55.com/image/19470/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EA%B0%92%20%EC%A0%84%EB%8B%AC.png)
나는 Linux 명령줄의 파이프에 대해 잘 모릅니다.
나는 다음을 발견했다:
ll - R | grep *.pdf
다음으로 끝나는 파일이 나열됩니다. .pdf
하지만
locate *.pdf | du -h
.로 끝나는 파일은 크기에 포함되지 않습니다 .pdf
. 대신 현재 디렉터리의 파일 크기를 나열합니다.
여기서 무슨 문제가 있습니까?
내 생각에는 첫 번째 명령의 출력이 다음 명령의 입력이라는 것입니다.
답변1
파이프는 한 프로그램의 출력을 다른 프로그램의 입력으로 보내는 방식으로 작동합니다. 이는 다른 프로그램의 출력을 수신하는 프로그램이 읽을 수 있어야 함을 의미합니다 STDIN
(표준 스트림).
이 경우 출력은 설계된 방식이므로 grep
읽을 수 있습니다 . 실행되어야 하는 디렉토리를 가리키는 명령줄 인수가 필요합니다(디렉토리가 지정되지 않으면 기본값은 현재 작업 디렉토리가 됩니다 ).ll
du
./
.pdf
파일 크기를 확인하려면 모든 파일이 디렉터리에 있으면 du -h -d1 /path/to/pdf/dir
또는 를 실행할 수 있습니다 locate *.pdf | xargs | du -h
. 서로 다른 디렉토리에 있는 경우 -exec
및 를 함께 사용해야 합니다 find
(다른 사용자가 도움을 줄 수 있지만 어떻게 해야 할지 잘 모르겠습니다).
답변2
내 생각에는 첫 번째 명령의 출력이 다음 명령의 입력이라는 것입니다.
좋아요. 그러나 두 가지 예에서 차이점은 grep
입력이 du
아닌 입력에 따라 작동한다는 것입니다. 첫 번째 명령이 다음으로 가는 경우에만표준 출력에서 두 번째표준 입력, 이 경우 두 스트림은 "파이프"를 통해 연결됩니다. 명령 매뉴얼 페이지에서 "표준 입력" 및 "표준 출력"을 찾아 이것이 가능한지 확인할 수 있습니다.