2017-03-25 2 views
0

Je souhaite entrer plusieurs répertoires dans une boucle for. Je n'ai pas le nom complet des répertoires, seulement une partie de celui-ci.Entrée d'un répertoire dont le nom correspond à une sous-chaîne

Je voudrais faire quelque chose comme ce que vous écrivez sur le terminal, quelque chose comme cd *IncompleteDirName*

Ceci est un MVE de la boucle: IncompleteDirName « s sont obtenus à partir du fichier IncompleteDirNames.

cont=1 
sum=1 
while read anotherFILE; do 

     IncompleteDirName=$(sed "${cont}q;d" IncompleteDirNames) 

     cd *"${IncompleteDirName}"* 
     # Do stuff 
     cd .. 
     cont=$((cont + sum)) 
done <anotherFILE 

Cela ne fonctionne pas, je ne sais pas s'il s'agit d'un caractère générique qui ne se développe pas ou d'une variable qui ne fonctionne pas correctement.

Il me lancer ce message d'erreur:

*: Aucun fichier ou répertoire

Je suppose que cela signifie astérisque ne fonctionne pas comme prévu. Il n'entre pas dans les répertoires, et il y a un répertoire qui correspond à chaque modèle. Quoi qu'il en soit, aucun répertoire n'est entré.

Ce fichier est ainsi IncompleteDirNames ressemble à:

Alicante Almeria Andalucia Avila

Il est une colonne de noms. Ce sont les noms de répertoire correspondant aux IncompleteDirName s ci-dessus:

aa4fas_Alicante_com mun_Almeria comunidadde_Andalucia ciuAvila

+2

Que signifie "ne fonctionne pas"? J'ai du mal à comprendre exactement ce qui se passe ici, car c'est un exemple qui ne fonctionne pas vraiment *. Les sous-chaînes sont dans un fichier, ces sous-chaînes font partie des noms de répertoires, et vous voulez "faire des choses" dans chacun des répertoires correspondant partiellement à une sous-chaîne située dans "FICHIER"? Que faire si une sous-chaîne correspond à plusieurs répertoires? Qu'y a-t-il dans les fichiers 'code' et' p-ca'? – ghoti

+0

Je suis sûr que plusieurs répertoires ne correspondent pas. J'ai corrigé le code. – D1X

+0

Vous devez clarifier ce qui ne fonctionne pas. Une chose est sûre: si votre nom incomplet peut correspondre à de nombreux répertoires, et que vous voulez faire quelque chose à l'intérieur de chacun d'entre eux, vous avez besoin d'une boucle pour cela. Vous devez également préparer le cas où aucun répertoire ne correspond, ce qui, dans votre code de test, provoquera l'échec de la commande "cd" mais n'empêchera pas l'exécution de la partie "Do stuff". – Fred

Répondre

0

Essayez ce code -

cont=1 
sum=1 
while read FILE; do 

     IncompleteDirName=$(sed "${cont}q;d" FILE) 

     cd *"${IncompleteDirName}"* 
     # Do stuff 
     cd .. 
     cont=$((cont + sum)) 
done <IncompleteDirNames 
+0

Non, ce n'est pas le problème, le temps boucle un autre fichier, et cela doit rester comme ça. – D1X

+0

Pouvez-vous vérifier si vous avez un fichier comme "FILE" dans le répertoire à partir duquel vous essayez d'exécuter loop/script, car vous avez collé les détails de l'erreur - '*: Aucun fichier ou répertoire' Indique ce fichier n'est pas disponible sur lequel vous tirez pour boucler (Dans votre code ce nom de fichier est "FICHIER") –

+0

Oui, il y a, je viens de le vérifier. – D1X

0

Vous pouvez effectuer les opérations suivantes:

#!/bin/bash 

while read -r line; do 
    cd /absolute/path/to/*$line* 
    # do stuff 
done < filename 

Cela va entrer dans chaque répertoire dont le nom correspond partiellement à une ligne dans filename, et "fait des choses".