Skip to content

Store outputs renaming files

Problem

You need to save the outputs of a process to a directory, giving each file a name of your choice.

Solution

The publishDir allows you to save the process outputs in a directory of your choice.

Use the saveAs option to give each file a name of your choice, providing a custom rule as a closure.

Code

process foo {
  publishDir 'results', saveAs: { filename -> "foo_$filename" }

  output: 
  path '*.txt'

  '''
  touch this.txt
  touch that.txt
  '''
}

workflow {
  foo()
}

Run it

nextflow run nextflow-io/patterns/publish-rename-outputs.nf

Save outputs in a sub-directory

The same pattern can be used to store specific files in separate directories depending on the actual name.

process foo {
  publishDir 'results', saveAs: { filename -> filename.endsWith(".zip") ? "zips/$filename" : filename }

  output: 
  path '*'

  '''
  touch this.txt
  touch that.zip
  '''
}

workflow {
  foo()
}

Tip

Relative paths are resolved against the publishDir store path. Use an absolute path to store files in a directory outside the publishDir store path.

Run it

nextflow run nextflow-io/patterns/publish-rename-outputs-subdirs.nf