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 find
lugar del cat
comando.
cat
.Respuestas:
La
find
utilidad trata con nombres de ruta. Si no se menciona ninguna acción específica en elfind
comando 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-exec
alfind
comando: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,
cat
se llamaría para concatenar el contenido de los archivos.La salida iría a
/home/fifa/cbs/test.txt
.Relacionado:
fuente
La salida de
find
resultará con los nombres de archivo relevantes.Puede canalizar (
|
) la salida a laxargs cat
que realizará elcat
comando en cada archivo.p.ej:
Otra opción será usar
-exec cat
fuente
-exec cat {} \;
y-exec -cat {} +
. Por cierto, muchas gracias Yaron.find -print0 | xargs -0
no 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|xargs
sea 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 laxargs
versión mientras tu caché de disco estaba fría?