创建位于多个目录中的文件列表

创建位于多个目录中的文件列表

我有一组数据文件(*.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...

现在我需要创建一个“主”数据列表,Documents/rawdata/指出目录中的所有其他数据列表rawdata/

我需要“主”数据列表的结果看起来像这样:

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

知道如何完成这项任务吗?

提前致谢。

答案1

我最终设法使用 Locate 来完成此操作,实际上我不需要完整路径,但使用 awk 足以仅显示“geo”子目录中的路径。

我是这样做的:

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

答案2

一个非常简单的方法是使用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

答案3

未经测试

您可以使用 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 中当然也是可能的(但我不知道如何)。

相关内容