Quiero redirigir la salida del findcomando al catcomando para poder imprimir los datos del archivo dado.
Entonces, por ejemplo, si la salida de find es, /aFile/readmeentonces el gato debe interpretarse como cat ./aFile/readme. ¿Cómo puedo hacer eso al instante?
¿Tengo que usar tuberías?
Probé versiones de esto:
cat | find ./inhere -size 1033c 2> /dev/null
Pero supongo que esto está completamente mal? Por supuesto, estoy seguro de que la salida es solo un archivo y no múltiples archivos.
Entonces, ¿cómo puedo hacer eso? Busqué en Google y no pude encontrar una solución, probablemente porque no busqué bien: P

catla-nopción me sorprende. Me encanta leer preguntas al azar.Sustitución de comando
Otra opción es usar la sustitución de comandos . Al ajustar un comando,
$()se ejecutará el comando y se reemplazará con su salida.se convertirá
Esto es más o menos equivalente a usar el estilo anterior de comandos de ajuste con ticks de retroceso:
Más detalles de los documentos vinculados anteriormente
Bash realiza la expansión ejecutando el comando en un entorno de subshell y reemplazando la sustitución del comando con la salida estándar del comando, con cualquier nueva línea final eliminada. Las líneas nuevas incrustadas no se eliminan, pero pueden eliminarse durante la división de palabras. La sustitución del comando
$(cat file)se puede reemplazar por el equivalente pero más rápido$(< file).Cuando se utiliza la forma backquote viejo estilo de sustitución, la barra invertida conserva su significado literal excepto cuando es seguida por
$,`o\. La primera comilla inversa no precedida por una barra diagonal inversa finaliza la sustitución del comando. Cuando se usa el$(command)formulario, todos los caracteres entre paréntesis forman el comando; ninguno es tratado especialmente.Las sustituciones de comandos pueden estar anidadas. Para anidar al usar el formulario con comillas invertidas, escape de las comillas internas con barras diagonales inversas.
Si la sustitución aparece entre comillas dobles, la división de palabras y la expansión de nombre de archivo no se realizan en los resultados.
Vea esta otra respuesta para algunos buenos ejemplos de uso.
fuente
findencuentra demasiados archivos, esto generaría un error de "lista de argumentos demasiado larga" al intentar invocarcat. También tendría problemas para manejar nombres de archivos que contienen caracteres de espacios en blanco y posiblemente también nombres de archivos que contengan caracteres globales de nombre de archivo.Esto imprimirá el nombre y el contenido de los archivos de texto (ascii) solo de forma recursiva.
Un intento mas
fuente
Usa tubos y xargs
Si falla debido a la falta de permisos, puede usar sudo para asegurarse de que tiene permiso para ejecutar el comando find en el directorio que está buscando.
fuente
/tmp/ /dev/urandom /pg_hba.conf, eso permitirá que root descargue todo el contenido/dev/urandom. Peor probablemente se puede hacer dependiendo del contexto.xargscasi nunca debe usarse sin,-0si es que lo hace. Tambiénsudo xargssería mejor quexargs sudo. Y/*sería mejor como/.find|xargssin-0realmente debería estar prohibido), de ahí el voto negativo . La salida defindfuera-print0no es procesable de manera confiable.-print0No es estándar. Habiendo dicho eso, el estándarsudo find / -name pg_hba.conf -exec cat {} +también podría hacerte volcar el contenido de/dev/urandom(por ejemplo, si alguien creó un enlace simbólico a partir/tmp/pg_hba.confde él y no hay una forma fácil de evitarlo que al menos no tenga una condición de carrera).sudo"por si acaso", ¿de acuerdo?sudo rm -rf /