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
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.
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