Вопрос создать список файлов, расположенных в нескольких каталогах


У меня есть набор файлов данных (*.all), расположенных в разных папках

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...

Я создал файл, называемый datalist.mb-1 в каждом каталоге, в котором перечислены все *.all файлы, расположенные в том же каталоге, используя:

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

поэтому я получаю это:

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

Теперь мне нужно создать «master» datalist в Documents/rawdata/ что указывает на всех других каталогов в каталогах rawdata/

Мне нужен результат «мастера» datalist, чтобы выглядеть так:

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

Любая идея о том, как выполнить эту задачу?

Заранее спасибо.


4
2017-08-08 18:11


происхождения


Хорошие навыки. Должно ли это быть в bash, или будет делать python? О, можете ли вы поместить свои пути и код файла в форматирование кодировки (используйте эти ``)? - don.joey
Что это -1 в конце Geob1005/datalist.mb-1 -­1 для или 58? - Symin
@Private 58 - это потому, что мне нужно добавить столбец в файлы datalist.mb-1, который описывает формат данных (который в этом случае равен 58) - napogeof
@Symin -1 в конце 'Geob1005 / datalist.mb-1 -1' также должен описывать формат datalist, расположенный на этом пути. Я пытаюсь следовать руководству HowTo MB_System для обработки данных батиметрии. ldeo.columbia.edu/res/pi/MB-System - napogeof


ответы:


Я, наконец, смог сделать это с помощью Locate, на самом деле мне не нужен полный путь, но использование awk было достаточно, чтобы просто показать только путь из подкаталога «geo».

Вот как я это сделал:

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


2
2017-08-09 19:10





Очень простой способ сделать это - использовать locate команда:

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

То есть, если полные пути в порядке.

Однако, если вам нужен формат, который вы описали выше, только с подкаталогом и файлом geo, вы могли бы использовать простой скрипт python, подобный этому:

#!/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()

Немного усеченная версия ответа napogeof:

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


2
2017-08-09 01:05



Наконец, мне удалось это сделать, используя разместить, на самом деле мне не нужен полный путь, но AWK было достаточно, чтобы просто показать путь из подкаталога «geo». вот как я это сделал: Ребятам, я, наконец, смог выполнить задачу, используя команду Locate locate ~/Documents/rawdata/*/datalist.mb-1 | awk 'BEGIN {FS="/"} {print $4 "/" $5 " -1"}' > master.txt - napogeof
Вы должны опубликовать это как ответ. Я уверен, что многие люди посчитают это полезным. - Bryan


Непроверенные

Вы можете использовать bash, чтобы составить список всех файлов в одном .txt файла (просто используйте find команду найти файлы «datalist», а затем передать этот файл).

В python вы можете использовать этот список файлов (например, datalist_master.txt) следующим образом:

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

Это, безусловно, также возможно в bash (но я не знаю, как).


0
2017-08-08 18:22