Linux find 명령을 사용하여 파일 이름 대신 내용을 인쇄하는 방법은 무엇입니까?

Linux find 명령을 사용하여 파일 이름 대신 내용을 인쇄하는 방법은 무엇입니까?

나는 이것과 비슷한 이름을 가진 수천 개의 unl 파일을 가지고 있습니다 cbs_cdr_vou_20180624_603_126_239457.unl. 다음 명령을 사용하여 이 파일의 모든 줄을 인쇄하고 싶습니다. 하지만 파일 이름만 알려줍니다. 파일 이름은 필요하지 않으며 이 파일의 내용만 있으면 됩니다.

find -type f -name 'cbs_cdr_vou_20180615*.unl'  > /home/fifa/cbs/test.txt

현재 출력:

./cbs_cdr_vou_20180615_603_129_152023.unl
./cbs_cdr_vou_20180615_603_128_219001.unl
./cbs_cdr_vou_20180615_602_113_215712.unl
./cbs_cdr_vou_20180615_602_120_160466.unl
./cbs_cdr_vou_20180615_603_125_174428.unl
./cbs_cdr_vou_20180615_601_101_152369.unl
./cbs_cdr_vou_20180615_603_133_193306.unl

예상 출력:

8801865252020|200200|20180613100325|;
8801837463298|200200|20180613111209|;
8801845136955|200200|20180613133708|;
8801845205889|200200|20180613141140|;
8801837612072|200200|20180613141525|;
8801877103875|200200|20180613183008|;
8801877167964|200200|20180613191607|;
8801845437651|200200|20180613200415|;
8801845437651|200200|20180613221625|;
8801839460670|200200|20180613235936|;

cat 명령의 경우 오류가 발생하므로 명령 대신 -bash: /bin/logger: Argument list too long사용하고 있습니다 .findcat

답변1

find유틸리티는 경로 이름을 처리합니다. find발견된 경로 이름에 대한 특정 작업이 명령에 언급되지 않은 경우 기본 작업은 해당 경로를 출력하는 것입니다.

cat-exec다음 명령을 추가하여 찾은 경로 이름에 대해 작업을 수행 할 수 있습니다 find.

find . -type f -name 'cbs_cdr_vou_20180615*.unl' -exec cat {} + >/home/fifa/cbs/test.txt

이것은 주어진 패턴과 일치하는 이름을 가진 현재 디렉토리 안이나 아래의 모든 일반 파일을 찾습니다. 가능한 가장 큰 배치의 경우 cat파일 내용을 연결하기 위한 호출이 수행됩니다.

출력은 /home/fifa/cbs/test.txt.

관련된:

답변2

출력에서는 find관련 파일 이름을 생성합니다.
출력을 |각 파일에 대해 실행될 명령으로 파이프( )할 수 있습니다.xargs catcat

예를 들어:

find -type f -name 'cbs_cdr_vou_20180615*.unl' | xargs cat  > /home/fifa/cbs/test.txt

또 다른 옵션은 다음을 사용하는 것입니다.-exec cat

find -type f -name 'cbs_cdr_vou_20180615*.unl'  -exec cat {} \;  > /home/fifa/cbs/test.txt

관련 정보