O comando Bash acessando todos os subdiretórios falha

0

Eu tenho uma estrutura de diretórios como esta:

example/ace/actives_final.sdf.gz
example/ace/decoys_final.sdf.gz
example/aces/actives_final.sdf.gz
example/aces/decoys_final.sdf.gz

Eu só quero acessar cada subdiretório e descompactar os arquivos ... Eu usei

for D in 'find . -maxdepth 1 -type d'; do gzip actives_final.sdf.gz; gzip -d decoys_final.sdf.gz; done

Além disso, para o for-part, substituí a parte inteira de "for" para a primeira ";" com as linhas dadas:

  • for i in ./*;
  • for i in */;

Todas essas variações parecem funcionar para o primeiro diretório, ace.

Então, recebo os erros

gzip: actives_final.sdf.gz: No such file or directory; 
gzip: decoys_final.sdf.gz: No such file or directory

três vezes, o que corresponde a esse diretório, além de ace , dois diretórios ocultos e aces .

Mas eu verifiquei a ortografia no diretório aces várias vezes e o gzip deve ser capaz de encontrá-las, elas são as mesmas que em ace .

Sou um iniciante e receio ter cometido algum erro óbvio ...

Edit: Eu só usei essa estrutura limitada como teste, depois, haverá mais .gz em cada diretório, mas nem todos eles devem ser descompactados, e é por isso que tenho que procurar pelo nome completo. Além disso, se a descompactação funcionar, preciso executar outro comando nesses subdiretórios, e é por isso que preciso usar um loop for.

    
por LizzAlice 27.04.2017 / 13:12

1 resposta

0

Você não precisa de for -loop aqui. find deve ser suficiente:

find -name "*.gz" -exec gunzip {} \;

Nesse comando, find pesquisa recursivamente os arquivos que terminam com .gz e os extrai usando gunzip em sua localização.

Se você precisar de um loop, você pode fazer o seguinte:

for dir in $(find . -maxdepth 1 -type d)
do
  echo "entering $dir"
  cd "$dir"
  gunzip actives_final.sdf.gz
  gunzip decoys_final.sdf.gz
  cd -
done

Neste loop, você está digitando cada diretório ( cd "$dir" ), executando seus comandos gunzip e voltando ao diretório anterior ( cd - ) para iniciar a próxima iteração.

    
por Wayne_Yux 27.04.2017 / 13:40