2017-10-11 37 views
0

J'ai un répertoire contenant plusieurs sous-répertoires, tous contenant un fichier nommé sample.fas. Ici, je veux exécuter un script python (script.py) dans chaque fichier sample.fas des sous-répertoires, un exporter la sortie (s) avec le nom de chacun de leurs sous-répertoires.Exécuter un script python récursivement indiquant les chemins/noms d'entrée/sortie

Cependant, le script a besoin de l'utilisateur pour indiquer le chemin/nom de l'entrée, et ne pas créer automatiquement les sorties (il est nécessaire de spécifier le chemin/nom). Comme ceci:

script.py sample_1.fas output_1a.nex output_1b.fas 

j'essayer d'utiliser ces lignes, sans succès:

while find . -name '*.fas'; # find the *fas files 
do python script.py $*.fas > /path/output_1a output_1b; # run the script and export the two outputs 
done 

Donc, je veux créer un bash qui a lu chaque sample.fas de tous les sous-répertoires (exécuter le script récursive), et exporter les sorties avec les noms de leurs sous-répertoires.

J'apprécierais toute aide.

Répondre

0

Un moyen rapide de faire cela serait quelque chose comme:

for x in $(find . -type f -name *.fas); do 
    /usr/bin/python /my/full/path/to/script.py ${x} > /my/path/$(basename $(dirname ${x})) 
done 

Ce qui exécute le script sur tous .fas fichiers identifiés dans le répertoire courant (sous-répertoires inclus) et réoriente alors quel que soit le script python est délivrer en sortie un fichier nommé comme le répertoire dans lequel se trouvait le fichier .fas actuellement traité. Ce fichier est créé en /my/path/.

Il y a une supposition ici (enfin, quelques-uns), et c'est que tous les répertoires qui contiennent .fas ont des noms uniques. En outre, les chemins sont censés ne pas avoir d'espaces en eux, cela peut être corrigé avec des citations appropriées. Une autre hypothèse est que le script émet toujours des données valides (cela redirige simplement toutes les sorties du script vers ce fichier). Cependant, cela devrait vous aider à aller dans la bonne direction.

Mais j'ai l'impression que je n'ai pas bien compris votre question. Si c'est le cas, pourriez-vous reformuler et peut-être fournir un arbre montrant comment les répertoires et sous-répertoires sont structurés?

Aussi, si ma réponse vous aide, je vous serais reconnaissant de bien vouloir la marquer comme la réponse acceptée en cliquant sur la coche à gauche.

+0

Ok, et quels arguments passez-vous au script? Le fichier d'entrée et le fichier de sortie? Ou la sortie est-elle générée vers stdout et vous devez la rediriger vers un fichier? – rasebo

+0

Salut @rasebo, le répertoire a cette structure: ├── script.py ├── O017_BR_RO │ └── sample.fas ├── O080_BR_SC │ └── sample.fas – Sergio

+0

Oui, il est nécessaire rediriger la sortie vers un fichier (format * nex). En outre, les sous-répertoires ont des noms uniques. – Sergio