![고양이와 파이프가 작동하지 않고 위치를 찾을 수 없는 이유는 무엇입니까?](https://linux55.com/image/29518/%EA%B3%A0%EC%96%91%EC%9D%B4%EC%99%80%20%ED%8C%8C%EC%9D%B4%ED%94%84%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EC%9C%84%EC%B9%98%EB%A5%BC%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 이것을하려고 노력하고 있습니다 :
locate pg_type.h | cat
하지만 이 명령은 pg_type.h를 찾는 것과 다르지 않습니다.
무엇을 바꿔야 하나요? cat pg_type.h
어디서든 공연을 하고 싶어요 pg_type.h
.
답변1
locate -e0 '*/pg_type.h' | xargs -r0 cat
locate pg_type.h
경로에 있는 모든 파일이 검색됩니다 pg_type.h
. 예를 들어 디렉터리가 있으면 rpg_type.horn
그 안에 있는 모든 파일이 표시됩니다.
-0
출력이 없으면 locate
파일이 파일 이름에서 완벽하게 유효한 문자인 줄 바꿈으로 구분되므로 후처리가 불가능합니다.
cat
인수가 없으면 stdin에서 읽은 내용이 stdout에 기록되므로 down의 출력 locate | cat
만 전달됩니다 . 필요한 것은 파일 목록을 다음과 같이 전달하는 것입니다.locate
cat
locate
논쟁도착하다 cat
.
xargs
일반적으로 데이터 스트림을 매개변수 목록으로 변환하는 데 사용됩니다 . 입력이 없으면 호출되지 않습니다 -r
. cat
그렇지 않은 경우 -0
( -r
표준은 아니지만 많은 구현에서 찾을 수 있습니다. 적어도 xargs가 유용한 경우) xargs
다음을 찾습니다 .성격입력에서 매개변수로 변환됩니다.성격백슬래시, 작은따옴표 및 큰따옴표를 사용하여 이러한 구분 기호를 이스케이프할 수 있는 공백으로 구분된 locate
이 형식은 일반적으로 파일 이름을 표시하는 데 사용되지 않습니다.
이것이 바로 우리가 NUL 문자(파일 경로에 허용되지 않는 유일한 문자)를 사용하여 파일 이름을 구분하는 and 옵션을 -0
두 가지 모두에 사용하는 이유입니다.locate
xargs
또한 이는 locate
표준 명령이 아니며 버전, 옵션 및 동작이 다른 수많은 구현이 있다는 점에 유의하세요. 위의 코드는 적어도 상대적으로 최신 버전의 GNU locate
와 mlocate
Linux 기반 운영 체제의 가장 일반적인 구현에서 작동합니다.
답변2
locate
명령은 to의 출력을 cat
표준 입력으로 파이프합니다. 그것은 당신이 원하는 것이 아닙니다. 무엇너locate
원하는 것은 다음 cat
과 같은 출력을 갖는 것입니다.토론.
나는 이것을 수행하는 방법이 다음과 같다고 믿습니다 xargs
:
locate pg_type.h | xargs cat