【发布时间】:2020-02-10 16:07:25
【问题描述】:
snakemake 删除所有标记为临时的输出文件,但如果输出是如下所示的目录,则不对文件执行任何操作:
rule all:
input:
'final.txt',
checkpoint split_big_file:
input: 'bigfile.txt'
output: temp(directory('split_files'))
shell: 'mkdir -p {output} ; split -l 5000 -d -e bigfile.txt {output}/part_'
rule copy_small_files:
input: 'split_files/part_{num}'
output: temp('copy_files/part_{num}.txt')
shell: 'cp -f {input} {output}'
def aggregate_input(wildcards):
'''
aggregate the file names of the random number of files
generated at the scatter step
'''
checkpoint_output = checkpoints.split_big_file.get(**wildcards).output[0]
print(checkpoint_output)
agg_inp = expand('copy_files/part_{num}.txt', num=glob_wildcards('split_files/part_{num}').num)
print(agg_inp)
return agg_inp
rule merge_small_files:
input: aggregate_input
output: 'final.txt'
shell: 'cat {input} > {output}'
当我使用包含数千行的bigfile.txt 运行上面显示的代码时,一切运行正常,但split_files 目录不为空。
$ wc -l final.txt
61177 final.txt
$ wc -l bigfile.txt
61177 bigfile.txt
$ ls copy_files/
$ ls split_files/
part_00 part_01 part_02 part_03 part_04
part_05 part_06 part_07 part_08 part_09
part_10 part_11 part_12
我想看的:
-
copy_files目录也应该删除(但显然因为snakemake无法确定该目录中是否存在与snakemake无关的其他文件,默认情况下不会删除目录) -
split_files目录的内容(最好是目录本身;参见上面的第 1 点)应该被删除。
【问题讨论】: