Quiero redirigir la salida del find
comando al cat
comando para poder imprimir los datos del archivo dado.
Entonces, por ejemplo, si la salida de find es, /aFile/readme
entonces 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
cat
la-n
opció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
find
encuentra 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.xargs
casi nunca debe usarse sin,-0
si es que lo hace. Tambiénsudo xargs
sería mejor quexargs sudo
. Y/*
sería mejor como/
.find|xargs
sin-0
realmente debería estar prohibido), de ahí el voto negativo . La salida defind
fuera-print0
no es procesable de manera confiable.-print0
No 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.conf
de é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 /