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

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

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

예를 들어, find의 출력이 이면 /aFile/readmecat은 로 해석되어야 합니다 cat ./aFile/readme. 이 작업을 즉시 수행하려면 어떻게 해야 합니까?

파이프를 사용해야 하나요?

나는 이 버전을 사용해 보았습니다:

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

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

그럼 어떻게 해야 하나요? 구글에서 검색했는데 해결방법을 못찾았네요. 검색을 제대로 못해서 그런거 같습니다 :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

관련 정보