Exécutez la commande find -exec dans Bash

Aashish Sunuwar 24 mars 2022
Exécutez la commande find -exec dans Bash

Cet article explique comment utiliser le paramètre -exec de la commande find pour localiser n’importe quel texte dans un fichier à l’aide de la commande find.

Utilisez la commande find pour rechercher des fichiers dans Bash

Une commande find est un outil utile pour rechercher et sélectionner des fichiers dans bash. Nous utilisons la commande find avec quelques expressions et actions.

Exemple:

find ./folder -name *.txt

Nous utilisons la commande find avec un emplacement de recherche, tel que ./folder pour le répertoire folder et ses sous-répertoires. Et l’expression -name *.txt consiste à trouver chaque fichier .txt à l’emplacement.

Utilisez l’option -exec avec la commande find pour rechercher des fichiers dans Bash

Nous pouvons utiliser l’action -exec pour exécuter des commandes sur les fichiers trouvés par la commande find à l’aide de la commande find.

Exemple:

find ./folder -name *.txt -exec file {} +

Production :

./folder/hello.txt: ASCII text, with no line terminators

L’action -exec exécute la commande file, affichant le type de fichier renvoyé par la commande find.

Utilisez la commande find -exec pour rechercher un texte spécifique dans Bash

Nous pouvons utiliser la commande find avec l’option -exec pour trouver les fichiers contenant le texte que nous voulons rechercher.

Le concept principal est d’utiliser la commande find pour obtenir chaque fichier dans le répertoire de travail et d’exécuter la commande grep pour trouver le texte dans chaque fichier.

Exemple:

# !/bin/bash
find . -exec grep linux {} \;

La commande suivante renverra les lignes où se trouve le text spécifié.

Production :

find . -exec grep linux {} \;
find . -exec grep linux {} +
title = "Unzip .gz file in linux"
description = "How to unzip a .gz file in linux"

Pour empêcher le shell d’interpréter le ; délimiteur, nous utilisons \ devant. En utilisant cette stratégie, nous n’obtenons que les lignes où le texte a été détecté.

On peut récupérer les lignes ainsi que le nom du fichier où il a été trouvé en remplaçant le délimiteur ; par un +.

# !/bin/bash
find . -exec grep linux {} +

Production :

./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 façon dont find gère les résultats de l’expression est déterminée par le délimiteur. La commande -exec se répétera pour chaque résultat indépendamment si nous utilisons le point-virgule ;.

Si nous utilisons le signe +, tous les résultats des expressions seront concaténés et fournis à la commande -exec, ne s’exécutant qu’une seule fois. Nous préférons utiliser le délimiteur + pour des raisons de performances.