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.