我有以下方法:
def scan_s3dir(dirname):
try:
cmd = "s3cmd ls {s3bucket} --recursive".format(s3bucket=dirname)
output = subprocess.check_output([cmd],
stdin=None,
shell=True)
#s3://dgsecure/test_data/
regex = "dgsecure/test_data/[^/]*/(\S+)*"
installers = re.findall(regex, output)
print installers
except Exception, e:
print e
sys.exit(2)
当我执行s3cmd ls /path/to/bucket --recursive
时,我得到:
2014-02-14 02:21 0 s3://path/to/bucket/
2014-02-14 17:32 236 s3://path/to/bucket/foo.txt
2014-02-26 23:31 6035 s3://path/to/bucket/bar.txt
2014-02-14 22:17 2960 s3://path/to/bucket/baz.txt
从该正则表达式中,我想生成一个列表所有文件,包括subdir
中的//path/to/bucket/
,例如:
s3://path/to/bucket/hello/world.txt
我希望它返回的输出是:
['s3://path/to/bucket/foo.txt', 's3://path/to/bucket/bar.txt', 's3:////path/to/bucket/baz.txt']
我在正则表达式中缺少什么?
答案 0 :(得分:2)
尝试运行此命令:
s3cmd ls {s3bucket} --recursive | tr -s ' ' | cut -d " " -f 4
答案 1 :(得分:0)
这是我在没有正则表达式的情况下会做的事情:
def parse_dir (output):
if output == "":
return []
else:
dir_list = []
line = output.split('\n')
for var in line:
if var != "":
dir_list.append(var.split()[3])
return dir_list[1:]