Como escrever um script para executar arquivos em vários diretórios

4

Como escrevo um script para executar os arquivos em vários diretórios?

O problema é este: eu tenho muitos diretórios, e cada um tem um arquivo de dados para ser lido e analisado por um script python (digamos, a.py ). Eu não quero "cd" para cada um dos diretórios e digite "a.py". As saídas são salvas em cada diretório.

    
por slnyeo 05.11.2010 / 07:05

2 respostas

8

find funcionará como mágica para você.

find -name datafile.dat -execdir ~/a.py '{}' \;

O find pesquisa recursivamente em todos os subdiretórios os arquivos que correspondem a um conjunto de regras e executa uma ação neles.

A regra -name permite que você encontre arquivos com um nome que corresponda ao que você der. Você pode usar globbing, por exemplo, "* .dat" encontraria todos os arquivos .dat.

Se necessário, você pode usar -regex ao invés de -name para combinar com um padrão regex em vez de um padrão glob, então você pode fazer ". * \. dat $" para combinar com todos os arquivos .dat.

O comando -execdir executará qualquer comando que você der a partir do diretório do arquivo encontrado, substituindo "{}" pelo arquivo encontrado.

    
por 06.11.2010 / 02:19
7

Você provavelmente pode usar um loop for :

for i in first_dir second_dir third_dir; do
    pushd $i
    a.py
    popd
done

Ele executará pushd $i; a.py; popd com $i definido como first_dir , novamente com $i como second_dir e, finalmente, $i como third_dir . pushd muda para o diretório fornecido e popd volta para onde você estava

    
por 05.11.2010 / 07:34