Ejecute el comando find -exec en Bash
Este artículo explicará cómo usar el parámetro -exec
del comando find
para localizar cualquier texto en un archivo usando el comando find
.
Utilice el comando find
para buscar archivos en Bash
Un comando find
es una herramienta útil para buscar y seleccionar archivos en bash. Usamos el comando find
con algunas expresiones y acciones.
Ejemplo:
find ./folder -name *.txt
Usamos el comando find
con una ubicación de búsqueda, como ./carpeta
para el directorio carpeta
y sus subdirectorios. Y la expresión -name *.txt
es para encontrar todos los archivos .txt
en la ubicación.
Use la opción -exec
con el comando find
para buscar archivos en Bash
Podemos usar la acción -exec
para ejecutar comandos en los archivos encontrados por el comando find
usando el comando find
.
Ejemplo:
find ./folder -name *.txt -exec file {} +
Producción :
./folder/hello.txt: ASCII text, with no line terminators
La acción -exec
ejecuta el comando file
, mostrando el tipo de archivo devuelto por el comando find
.
Utilice el comando find -exec
para buscar un texto específico en Bash
Podemos usar el comando find
con la opción -exec
para encontrar los archivos que contienen el texto que queremos buscar.
El concepto principal es usar el comando find
para obtener cada archivo en el directorio de trabajo y ejecutar el comando grep
para encontrar el texto en cada archivo.
Ejemplo:
# !/bin/bash
find . -exec grep linux {} \;
El siguiente comando devolverá las líneas donde se encuentra el text
especificado.
Producción :
find . -exec grep linux {} \;
find . -exec grep linux {} +
title = "Unzip .gz file in linux"
description = "How to unzip a .gz file in linux"
Para evitar que el shell interprete el ;
delimitador, usamos \
antes de él. Usando esta estrategia, solo obtenemos las líneas donde se detectó texto.
Podemos obtener las líneas y el nombre del archivo donde se encontró reemplazando el delimitador ;
con un +
.
# !/bin/bash
find . -exec grep linux {} +
Producción :
./bash.sh:find . -exec grep linux {} \;
./bash.sh:find . -exec grep linux {} +
./unzip_gz_linux.txt:title = "Unzip .gz file in linux"
./unzip_gz_linux.txt:description = "How to unzip a .gz file in linux"
La forma en que find
maneja los resultados de la expresión está determinada por el delimitador. El comando -exec
se repetirá para cada resultado de forma independiente si usamos el punto y coma ;
.
Si usamos el signo +
, todos los resultados de las expresiones se concatenarán y se proporcionarán al comando -exec
, ejecutándose solo una vez. Preferimos utilizar el delimitador +
por motivos de rendimiento.