L'exemple suivant compare tous les fichiers dans un répertoire à la chaîne d'entrée ($ string) et retourner le nom de fichier correspondant. Ce n'est pas un moyen très élégant et efficace d'accomplir cela. À des fins de rapidité, j'ai modifié la condition for
pour comparer uniquement aux fichiers commençant par le premier mot de $ string.Chaîne priorité de comparaison dans Bash
problème avec ce script suit - j'ai deux fichiers dans le répertoire:
Foo Bar.txt
Foo Bar Foo.txt
et je les compare à chaîne "Foo Bar 09.20.2010"
. Cela renverra les deux fichiers dans ce répertoire, car les deux fichiers correspondent. Mais je dois retourner seulement le fichier qui correspond à la chaîne de la manière la plus exacte - dans notre exemple, il devrait être Foo Bar.txt
.
Aussi si vous avez de meilleures idées comment résoudre ce problème s'il vous plaît poster vos idées comme je ne suis pas encore compétent dans le script et je suis sûr qu'il y a des façons meilleures et peut-être même plus faciles de le faire.
#!/bin/bash
string="Foo Bar 09.20.2010"
for file in /path/to/directory/$(echo "$string" | awk '{print $1}')*; do
filename="${file##*/}"
filename="${filename%.*}"
if [[ $(echo "$string" | grep -i "^$filename") ]]; then
result="$file"
echo $result
fi
done
Voici rupture ce que je veux atteindre. Deux fichiers dans le répertoire pour correspondre à deux chaînes, Correct/Incorrect entre parenthèses signifie si le résultat était comme je l'ai prévu/voulu ou non.
2 fichiers dans le répertoire (enlevèrent extensions pour la correspondance):
Foo Bar.txt
Foo Bar Foo.txt
à comparer à 2 cordes:
Foo Bar Random Additional Text
Foo Bar Foo Random Additional Text
Résultats:
compare "Foo Bar"(.txt) against Foo Bar Random Additional Text -> Match (Correct)
compare "Foo Bar"(.txt) against Foo Bar Foo Random Additional Text -> Match (Incorrect)
compare "Foo Bar Foo"(.txt) against Foo Bar Random Additional Text -> NOT Match (Correct)
compare "Foo Bar Foo"(.txt) against Foo Bar Foo Random Additional Text -> Match (Correct)
Merci à tous pour votre réponses.
@Andrew - donc s'il y a une correspondance exacte, vous voulez juste, mais quand il n'y a pas de correspondance exacte, une correspondance 'partielle' fera l'affaire? –
@martin clayton Oui, une correspondance partielle est préférable, si aucune correspondance exacte n'est trouvée. – Gargauth
D'accord, il semble que l'exaple que j'ai fourni n'était pas le meilleur. Laissez-moi essayer à nouveau - la chaîne 'Foo Bar 09.20.2010' devrait correspondre au fichier' Foo Bar.txt'. Et le fichier 'Foo Bar Foo 09.20.2010' devrait correspondre au fichier' Foo Bar Foo.txt'. J'espère que cela a plus de sens maintenant ... – Gargauth