cria uma lista de arquivos localizados em vários diretórios

4

Eu tenho um conjunto de arquivos de dados ( *.all ) localizados em pastas diferentes

Documents/rawdata/Geob1005/1.all, 2.all, 3.all,...,n.all
Documents/rawdata/Geob1006/A.all, B.all, C.all,...,Z.all          and so on...

Eu criei um arquivo chamado datalist.mb-1 em cada diretório que lista todos os arquivos *.all localizados no mesmo diretório usando:

/bin/ls -1 *.all | awk '{print " 58"}' >datalist.mb-1

então eu entendo isso:

Documents/rawdata/Geob1005/datalist.mb-1
Documents/rawdata/Geob1006/datalist.mb-1
and so on...

Agora preciso criar um datalista "mestre" em Documents/rawdata/ que indique todos os outros datalistas nos diretórios de rawdata/

Preciso que o resultado do datalista "mestre" seja assim:

Geob1005/datalist.mb-1  -­1 
Geob1006/datalist.mb-1  -1  

Alguma ideia de como fazer essa tarefa?

Obrigado antecipadamente.

    
por napogeof 08.08.2013 / 20:11

3 respostas

2

Eu finalmente consegui fazer isso usando Locate, na verdade eu não precisei do caminho completo, mas usar o awk foi o suficiente para mostrar apenas o caminho do subdiretório "geo".

Foi assim que eu fiz:

locate ~/Documents/rawdata/*/datalist.mb-1 | awk 'BEGIN {FS="/"} {print "/" " -1"}' > master.txt

    
por napogeof 09.08.2013 / 21:10
2

Uma maneira muito simples de fazer isso seria usar o comando locate da seguinte forma:

locate Documents/rawdata/Geob*/datalist.mb-1 > master.txt

Isto é, se todos os caminhos estiverem corretos.

No entanto, se você precisar do formato que descreveu acima apenas com o subdiretório e arquivo "geo", poderá usar um script Python simples como este:

#!/bin/python
f = open("/path/to/master.txt","r+")
paths = [x.split("/",3)[-1] + " -1" for x in f.readlines()]
f.seek(0)
f.write("".join(paths))
f.truncate()
f.close()

Versão ligeiramente truncada da resposta de napogeof:

locate ~/Documents/rawdata/*/datalist.mb-1 | awk -F/ '{print "/" " -1"}' > master.txt

    
por Bryan 09.08.2013 / 03:05
0

Não testado

Você poderia usar o bash para fazer uma lista de todos os arquivos em um único arquivo .txt (basta usar o comando find para encontrar os arquivos 'datalist' e depois canalizar esse arquivo).

Em python, você pode usar essa lista de arquivos (por exemplo, datalist_master.txt ) da seguinte forma:

fi = file.open('datalist_master.txt', 'r')
li = fi.readlines()
new_li = []    

for element in li:
    # get rid of unnecessary path info
    element = element.lstrip('Documents/rawdata/')

    # add last two digits 
    element = element + ' ' + element[-2:]
    new_li.append(element)

fi.close()
print new_li #or save it somewhere

Isso certamente também é possível no bash (mas eu não sei como).

    
por don.joey 08.08.2013 / 20:22

Tags