如何避免在输入或中间输出文件更新后运行 Snakemake 规则

Vin*_*bot 13 workflow caching file build snakemake

即使 Snakemake 构建的输出文件已经存在,Snakemake 也希望重新运行我的整个管道,因为我修改了第一个输入或中间输出文件之一。

我通过做一个 Snakemake 空运行来解决-n这个问题,它为更新的输入文件提供了以下报告:

Reason: Updated input files: input-data.csv
Run Code Online (Sandbox Code Playgroud)

以及此消息用于更新中间文件

reason: Input files updated by another job: intermediary-output.csv
Run Code Online (Sandbox Code Playgroud)

如何强制 Snakemake 忽略文件更新?

Eri*_* C. 10

您可以使用该选项--touch将它们标记为最新:

--touch, -t
触摸输出文件(将它们标记为最新而不真正更改它们),而不是运行它们的命令。这用于假装规则已执行,以欺骗未来对蛇形的调用。如果文件尚不存在,则失败。

请注意,这会影响您的所有文件,从而修改时间戳以将它们放回原处。


dar*_*ber 8

除了 Eric 的回答,另请参阅古代标志以忽略输入文件上的时间戳。

另请注意,Unix 命令touch可用于修改现有文件的时间戳并使其看起来比实际更旧:

touch --date='2004-12-31 12:00:00' foo.txt 
ls -l foo.txt 
-rw-rw-r-- 1 db291g db291g 0 Dec 31  2004 foo.txt 
Run Code Online (Sandbox Code Playgroud)

  • 是的,事实上,如果 OP 只有一个文件导致问题,我建议使用 @dariober 的 unix touch 解决方案,指定一个早于工作流程的下一个输出的日期。 (2认同)