linux find 명령을 사용하여 파일 이름 대신 내용을 인쇄하려면 어떻게해야합니까?


10

이 같은 이름의 수천 개의 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하므로 명령 find대신 사용하고 싶었습니다 cat.


여전히을 사용해야 cat합니다.
Ignacio Vazquez-Abrams

예! 내가 어떻게 할 수 있는지 말해 줄래? @ IgnacioVazquez-Abrams
Rezuan

답변:


28

find유틸리티는 경로 이름을 처리합니다. find찾은 경로 이름 의 명령에 특정 조치가 언급되지 않은 경우 기본 조치가 해당 경로 이름을 출력하는 것입니다.

다음 명령 cat을 추가 -exec하여 running과 같은 발견 된 경로 이름에 대한 조치를 수행 할 수 있습니다 find.

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

이것은 현재 디렉토리 내에서 또는 그 아래에서 이름이 주어진 패턴과 일치하는 모든 일반 파일을 찾습니다. 가능한 한 많은 배치가 cat파일의 내용을 연결하도록 호출됩니다.

출력은로 이동합니다 /home/fifa/cbs/test.txt.

관련 :


1
예상대로 작동하고 실행 시간이 매우 빠르며 정말 좋습니다. 많은 감사합니다.
Rezuan

12

의 출력은 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

4
두 명령 모두 제대로 작동합니다. 그러나 Kusalananda의 명령 보다 약간 느립니다 . 나는 실행 시간에 변화되고, 생각 -exec cat {} \;하고 -exec -cat {} +. 그건 그렇고, 야론 감사합니다.
Rezuan

xargs는 발견 된 경로 이름의 공백에 취약합니다. -exec cat {}은 (는)
jez

2
find -print0 | xargs -0공백 / 따옴표 등에는 취약하지 않습니다.
솜털 같은

1
@Rezuan : -exec cat {} \;xargs처럼 같이 배치하지 않고 각 파일에 대해 cat을 개별적으로 실행합니다. 당신이없이 시스템에 이동성을 필요로하는 경우 당신은 명시 적으로 (한 번에 하나 개의 파일에 대해 작동 예를 들어 명령을)하지 않으려면 그것을 사용하지 마십시오 -exec ... +및없이 -print0/ xargs -0. 그래도 실제로 find|xargs보다 느리다는 것에 약간 놀랐습니다 -exec cat {} +. 총 파일 수가 거의 없으므로 시작 오버 헤드가 많은 비용이 듭니까? 아니면 xargs디스크 캐시가 차가 워진 동안에 만 버전을 정했습니까?
Peter Cordes 2016 년

1
@PeterCordes의 설명에 감사드립니다. 나중에 디스크 캐시를위한 것이 었습니다.
Rezuan 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.