Como posso imprimir o conteúdo em vez do nome do arquivo usando o comando linux find?

9

Eu tenho milhares de arquivos unl com nomes como cbs_cdr_vou_20180624_603_126_239457.unl . Eu queria imprimir todas as linhas desses arquivos usando o seguinte comando. mas está me dando apenas nomes de arquivos. Não preciso de nomes de arquivos, só preciso de conteúdo desses arquivos.

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

Saída atual:

./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

Resultado esperado:

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|;

Por favor, note que, para o comando cat, estou recebendo um erro como -bash: /bin/logger: Argument list too long , e é por isso que eu queria usar o comando find em vez de cat .

    
por Rezuan 24.06.2018 / 14:38

2 respostas

28

O utilitário find lida com nomes de caminho. Se nenhuma ação específica for mencionada no comando find para os nomes de caminho encontrados, a ação padrão será gerá-los.

Você pode executar uma ação nos nomes de caminho encontrados, como a execução de cat , adicionando -exec ao comando find :

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

Isto encontraria todos os arquivos regulares dentro ou sob o diretório atual, cujos nomes correspondem ao padrão dado. Para lotes tão grandes quanto possível, cat seria chamado para concatenar o conteúdo dos arquivos.

A saída iria para /home/fifa/cbs/test.txt .

Relacionados:

por 24.06.2018 / 14:44
12

A saída de find resultará nos nomes de arquivos relevantes.
Você pode canalizar ( | ) a saída para xargs cat , que executará o comando cat em cada arquivo.

por exemplo:

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

Outra opção será usar -exec cat

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

Tags