trouver: les chemins d'accès doivent précéder l'expression
J'utilise CentOS 6.4 final dans les deux machines. Je suis l'exécution d'un script.
Le script contient les find
commande
path=$1
searchstring=$2
echo `find $path -name $searchString`
for filename in `find $path -name $searchString`
do
echo "$filename"
echo
done
./findfiles.sh /var/log/ *.txt
Le script ci-dessus est en cours d'exécution amende et l'impression des fichiers. Mais dans la deuxième machine, je suis usage error: find: paths must precede expression
La raison est derrière *.txt qui s'est développée dans la commande rechercher.Après la modification
pour le nom de fichier dans find $path -name "$searchString"
il est en cours d'exécution fine.
Pourquoi erreur de syntaxe n'est pas le cas dans la première Version de la machine?
Similaire: stackoverflow.com/questions/6495501/...
OriginalL'auteur Shriram | 2014-01-23
Vous devez vous connecter pour publier un commentaire.
Devis de votre shell arguments:
OriginalL'auteur
Vous besoin d'utiliser correctement les citations ou le shell va essayer de développer
*.txt
avantfind
voit.Donc, si le dossier en cours contient
a.txt
etb.txt
, puisfind /var/log -name a.txt b.txt
sera exécuté ->find
seront confus ce que vous voulez faire avecb.txt
C'est pourquoi il est si important d'utiliser le bon de le citer. Votre script doit être:
Notez que j'ai cite des assignations de variables (dans le cas contraire, le glob expansion va se passer lorsque vous définissez
searchstring
. Même lorsque vous utilisez les variables.Pas de guillemets autour de
$()
! Si vous souhaitez ajouter des guillemets là, puis de trouver serait de retour d'un seul "mot" comme résultat.Aussi préfère toujours
$()
sur le vieux inline-eval avec en arrière-tiques. Il est beaucoup plus fiable, moins sujettes à de subtiles erreurs et plus lisible.OriginalL'auteur Aaron Digulla