web-dev-qa-db-fra.com

Comment utiliser "find" dans un script Shell pour effectuer une recherche dans le répertoire actuel?

Je veux que le programme ressemble à ceci:

read a
if[ find . name $a ]; then
  echo "You found the file"
else "You haven t found the file"
fi
1
Ciobanu Rares

Que quelque chose ait été trouvé ou non, find renvoie toujours la valeur true. Vous pouvez utiliser grep pour déterminer si find a trouvé quelque chose:

read -r a
if find . -maxdepth 1 -name "$a" -print -quit | grep -q . 
then
  echo "You found the file"
else 
  echo "You haven't found the file"
fi

Quitter après le premier match (-print -quit) devrait améliorer les performances, comme l'a noté Eliah. Utilisez -maxdepth 1 pour limiter les résultats au répertoire actuel - mais alors find est excessif pour cela.

5
muru

Si vous n'avez pas , vous devez utiliser la commande find à l'aide de la commande test (ou de sa forme abrégée [...]) serait plus facile, à mon humble avis. Avec test, le commutateur e fait ce que vous recherchez.

#!/bin/bash
read -r a
if [[ -e $a ]]; then
    echo "You found the file"
else
    echo "You haven't found the file"
fi

Mais sachez que test ne cherche que le fichier dans le répertoire en cours, pas dans les sous-répertoires (merci à EliahKagan pour le rappel).

Vous pouvez trouver un bon aperçu de test sur le Wiki de Bash Hackers

2