2017-07-20 1 views
3

J'essaie de créer un script qui me permet de sélectionner des fichiers avec 2 occurrences ou plus d'une chaîne dans leur nom.Occurrence d'une chaîne dans tous les noms de fichier dans un dossier dans Bash

Exemple:

test.txt  // 1 occurrence only, not ok 
test-test.txt // 2 occurrences OK 
test.test.txt // 2 occurrences OK 

Je veux que le script pour me retourner uniquement les fichiers 2 et 3. J'essayées comme ça, mais cela ne fonctionne pas:

rows=$(ls | grep "test") 
for file in $rows 
do 
     if [[ $(wc -w $file) == 2 ]]; then 
       echo "the file $file matches" 
     fi 
done 
+0

l'idée était d'obtenir le nombre d'occurrences en utilisant grep -c puis utiliser wc -w afin de comparer le nombre de mots avec le nombre de voies (les fichiers correspondants devraient avoir wc -l = 2 et grep -c = 1 – Grugnas

Répondre

3

grep et wc sont trop puissantes. Un glob simple, suffit:

*test*test* 

Vous pouvez utiliser cela comme si:

ls *test*test* 

ou

for file in *test*test*; do 
    echo "$file" 
done 
+0

cela fonctionne en effet, je me demandais seulement si je pouvais trouver un moyen plus générique sans avoir pour spécifier le nombre des occurrences. Je voulais dire un moyen de manipuler la sortie grep afin d'obtenir le nombre d'occurrences là-bas – Grugnas

0

Vous pouvez utiliser:

result=$(grep -o "test" yourfile | wc -l)

-wc est un mot compte

En script shell si $result>1 faire des choses ...