"find" 명령의 출력에 "cat" 명령을 사용하는 방법은 무엇입니까?

"find" 명령의 출력에 "cat" 명령을 사용하는 방법은 무엇입니까?

주어진 파일의 데이터를 인쇄할 수 있도록 find명령의 출력을 command로 리디렉션하고 싶습니다 .cat

예를 들어 find의 출력이 이면 /aFile/readmecat은 로 해석되어야 합니다 cat ./aFile/readme. 어떻게 즉시 할 수 있나요?

파이프를 사용해야 합니까?

나는 이것의 버전을 시도했습니다 :

cat | find ./inhere -size 1033c 2> /dev/null

그런데 이게 완전히 잘못된 것 같은데요? 물론 출력은 여러 파일이 아닌 하나의 파일일 뿐이라고 확신합니다.

그러면 어떻게 해야 합니까? Google에서 검색했는데 해결 방법을 찾지 못했습니다. 아마도 검색을 제대로 하지 않았기 때문일 것입니다. :P

답변1

find다음 작업을 사용하여 혼자서 이 작업을 수행할 수 있습니다 -exec.

find /location -size 1033c -exec cat {} +

{}는 에서 찾은 파일로 대체되며 find, 여러 인수를 사용할 수 있으므로 +의 호출마다 가능한 많은 인수를 읽을 수 있게 해줍니다 .catcat

find표준 확장자가 없거나 +파일을 하나씩 읽으려는 경우 :

find /location -size 1033c -exec cat {} \;

의 옵션을 사용하려면 다음을 cat수행하십시오.

find /location -size 1033c -exec cat -n {} +
find /location -size 1033c -exec cat -n {} \;

-n여기서는 줄 번호를 가져오는 옵션을 사용하고 있습니다 .

답변2

명령 대체

또 다른 옵션은 다음을 사용하는 것입니다.명령 대체. 명령을 래핑하면 $()명령이 실행되고 명령이 해당 출력으로 대체됩니다.

cat $(find ./inhere -size 1033c 2> /dev/null)

될 것입니다

cat ./inhere/file1 ./inhere/file2 ./inhere/file3

이는 백틱과 함께 이전 스타일의 래핑 명령을 사용하는 것과 거의 동일합니다.

cat `find ./inhere -size 1033c 2> /dev/null`

위에 링크된 문서의 자세한 내용

Bash는 서브셸 환경에서 명령을 실행하고 명령 대체를 명령의 표준 출력으로 바꾸고 후행 줄 바꿈을 삭제하여 확장을 수행합니다. 포함된 개행 문자는 삭제되지 않지만 단어 분할 중에 제거될 수 있습니다. 명령 대체는 $(cat file)동일하지만 더 빠른 명령으로 대체될 수 있습니다 $(< file).

이전 스타일의 역따옴표 대체 형식을 사용하는 경우 백슬래시는 뒤에 $, `또는 가 오는 경우를 제외하고 문자 그대로의 의미를 유지합니다 \. 백슬래시가 앞에 오지 않는 첫 번째 역따옴표는 명령 대체를 종료합니다. 형식을 사용할 때 $(command)괄호 안의 모든 문자가 명령을 구성합니다. 누구도 특별하게 대우받지 않습니다.

명령 대체가 중첩될 수 있습니다. 역따옴표 형식을 사용할 때 중첩하려면 백슬래시를 사용하여 내부 역따옴표를 이스케이프 처리하세요.

큰따옴표 안에 대체 항목이 나타나면 결과에 대해 단어 분할 및 파일 이름 확장이 수행되지 않습니다.

보다이 다른 답변몇 가지 좋은 사용 예를 들어보세요.

답변3

이렇게 하면 텍스트(ascii) 파일의 이름과 내용만 재귀적으로 인쇄됩니다.

find . -type f -exec grep -Iq . {} \; -print | xargs awk 'FNR==1{print FILENAME ":" $0; }'

한 번 더 시도

find . -type f -exec grep -Iq . {} \; -printf "\n%p:" -exec cat {} \;

답변4

파이프 및 xargs 사용

find /* -name pg_hba.conf | xargs cat

권한 부족으로 인해 실패하는 경우 sudo를 사용하여 검색 중인 디렉터리에서 find 명령을 실행할 수 있는 권한이 있는지 확인할 수 있습니다.

 sudo find /* -name pg_hba.conf | xargs sudo cat

관련 정보