Tengo miles de archivos UNL llamados algo así cbs_cdr_vou_20180624_603_126_239457.unl. Quería imprimir todas las líneas de esos archivos usando el siguiente comando. pero me da solo nombres de archivo. No necesito nombres de archivo, solo necesito contenido de esos archivos.
find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt
Salida de corriente:
./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
Rendimiento 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|;
Tenga en cuenta que, para el comando cat, recibo un error -bash: /bin/logger: Argument list too long, por eso quería usarlo en findlugar del catcomando.

cat.Respuestas:
La
findutilidad trata con nombres de ruta. Si no se menciona ninguna acción específica en elfindcomando para los nombres de ruta encontrados, la acción predeterminada es generarlos.Puede realizar una acción en los nombres de ruta encontrados, como ejecutar
cat, agregando-execalfindcomando:Esto encontraría todos los archivos regulares en o debajo del directorio actual, cuyos nombres coinciden con el patrón dado. Para lotes tan grandes de estos como sea posible,
catse llamaría para concatenar el contenido de los archivos.La salida iría a
/home/fifa/cbs/test.txt.Relacionado:
fuente
La salida de
findresultará con los nombres de archivo relevantes.Puede canalizar (
|) la salida a laxargs catque realizará elcatcomando en cada archivo.p.ej:
Otra opción será usar
-exec catfuente
-exec cat {} \;y-exec -cat {} +. Por cierto, muchas gracias Yaron.find -print0 | xargs -0no es vulnerable a espacios / comillas / etc.-exec cat {} \;ejecuta cat por separado para cada archivo en lugar de agruparlos como xargs. No lo use a menos que lo desee explícitamente (por ejemplo, un comando que solo funcione para un archivo a la vez), o si necesita portabilidad a un sistema sin-exec ... +y sin-print0/xargs -0. Sin embargo, estoy un poco sorprendido de quefind|xargssea mucho más lento que eso-exec cat {} +. ¿Tiene muy pocos archivos en total, por lo que la sobrecarga de inicio es una gran parte del costo? ¿O solo cronometraste laxargsversión mientras tu caché de disco estaba fría?