Следующий поток: mkdir: невозможно создать каталог «имя файла»: файл существует

Я пытаюсь настроить рабочий процесс с помощью Nextflow на WSL2. После некоторых изменений вот полный обновленный код:

params.output_dir = "./workflow_output"
params.input_dir = null

process fastQC {
    publishDir(
        path: "$params.output_dir/qc_reports",
        mode: "copy"
    )

    input:
    val fqs

    output:
    path "$params.input_dir/*_fastqc.zip", emit: zip
    path "$params.input_dir/*_fastqc.html", emit: html

    """
    fastqc $fqs
    """
}

workflow onlyQC {
    out_dir = file("$params.output_dir")
    fqs = channel.from(file("$params.input_dir/*.fastq"))
    
    fastQC(fqs) 
}

Прежде чем изменить процесс fastqc на использование publishDir, я получал следующее сообщение об ошибке, когда пытался использовать mkdir -p $out_dir перед запуском команды fastqc -o $out_dir $fqs.

mkdir: cannot create directory ‘workflow_output’: File exists

Я перешел на обновленный код, используя директиву publishDir, но теперь получаю ошибку:

Missing output file(s) data/*_fastqc.zip expected by process onlyQC:fastQC (3)

Любые рекомендации/помощь будут оценены по достоинству. Спасибо!

Примечание: смысла в mkdir -p this ; mkdir -p this/that нет. Весь смысл mkdir -p в том, что он создает несуществующих родителей, поэтому для выполнения работы достаточно только второго.

hobbs 24.08.2024 07:39

@hobbs этого не понял, спасибо!

Manan Chopra 24.08.2024 08:57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

mkdir: невозможно создать каталог «workflow_output»: файл существует

Вы получаете эту ошибку, потому что просите Nextflow разместить выходной каталог (т. е. out_dir) в рабочий каталог процесса (под ./work), и по умолчанию входные файлы и каталоги будут связаны символическими ссылками (это можно изменить с помощью директива stageInMode). Обратите внимание, что mkdir не будет следовать по символической ссылке, а интерпретирует ее как файл, отсюда и ошибка.

Лучший способ опубликовать результаты процесса — использовать директиву PublishDir . Например:

params.fastqs = "/path/to/*.fastq"
params.output_dir = "./workflow_output"


process fastQC {

    publishDir(
        path: "${params.output_dir}/fastQC",
        mode: 'copy',
    )

    input:
    path fqs

    output:
    path "*_fastqc.zip", emit: zip
    path "*_fastqc.html", emit: html

    """
    fastqc ${fqs}
    """
}

workflow {

    fastqs = Channel.fromPath("${params.fastqs}")

    fastQC( fastqs )
}

Спасибо за помощь! Когда я пытаюсь следовать предложенным вами решениям, я получаю сообщение об ошибке: Отсутствуют данные выходного файла(ов)/*_fastqc.zip, ожидаемые только процессомQC:fastQC (3). Я вручную проверил, что файлы действительно создаются в папке data/, поэтому не понимаю, почему Nextflow их не находит.

Manan Chopra 24.08.2024 09:18

@MananChopra Как именно вы используете FastQC? Чтобы файлы создавались в подкаталоге с именем data, я ожидаю, что ваш блок сценария будет выглядеть примерно так mkdir data; fastqc -o data ${fqs}.

Steve 24.08.2024 12:25

Входные файлы расположены в каталоге data/, поэтому без указания флага -o FastQC будет выводить данные в тот же каталог по умолчанию. Думаю, мой код действительно должен читаться ${input_dir}/*_fastqc.zip, поскольку он не всегда будет иметь имя data, но это не влияет на этот тестовый пример. Я не уверен, почему nextflow не находит файлы, поскольку я проверил вручную, и они действительно генерируются в каталоге data/.

Manan Chopra 25.08.2024 01:14

@MananChopra Но когда вышеуказанный процесс запускается, input: path fqs гарантирует, что каждый файл fastq локализован в свой собственный рабочий каталог процесса (например, ./work/01/<uuid>) посредством символической ссылки. Затем, когда fastqc выполняется (без -o), выходные данные zip и html также должны быть созданы вместе с локализованным файлом fastq (т. е. символической ссылкой). Это то, что позволяет нам просто использовать output: path "*_fastqc.html", чтобы сообщить Nextflow, какие html-файлы ожидать. Обязательно используйте тип ввода path для подготовки файлов fastq. Использование input: val fqs является ошибкой, если это то, что есть в вашем коде.

Steve 25.08.2024 04:17

Пожалуйста, отредактируйте свой вопрос, чтобы показать обновленный код, который вы используете, если я неправильно понял, в чем проблема, спасибо!

Steve 25.08.2024 04:22

Спасибо за вашу помощь @Steve. Я обновил основной вопрос новым кодом. Я думаю, что мои проблемы возникают из-за некоторых недоразумений с моей стороны относительно того, как работает Nextflow. Я изменил val fqs на path fqs и удалил data из выходных строк, и теперь процесс работает как положено. Есть ли у вас какие-либо рекомендации относительно ресурсов, которые помогут получить более четкое представление о Nextflow? Я только что просмотрел документацию, которой, как мне кажется, иногда не хватает, хотя это определенно может быть только моей проблемой :)

Manan Chopra 25.08.2024 22:31

@MananChopra Вы не одиноки с таким мнением. Хорошее место для начала — Training.nextflow.io . Кроме того, раздел документации о нескольких входных каналах также должен быть обязательно прочитан, но его легко пропустить.

Steve 26.08.2024 02:25

Другие вопросы по теме