Я пишу змейку, чтобы выполнить несколько операций. Все правила, кроме последнего (mvQsubLogs
), работают для тестового файла. Это последнее правило должно перемещать файлы .e
и .o
, созданные командой qsub
(я запускаю snakemake в кластере), из каталога, указанного с флагом -e
и -o
, в указанный каталог в выходной директиве моего правила, как только некоторые операции завершены (см. директиву input
в приведенном ниже правиле):
rule mvQsubLogs:
input:
# FastQC
rules.fastQC.output,
# Markduplicates
rules.markDups.output.markDupBam,
rules.markDups.output.markDupMetrics,
# mosdepth
rules.mosdepth.output.DIR,
# editflagStat
rules.edit_flagStat.output,
# edit idxStats
rules.edit_idxStats.output,
# insertSizeMetrics
rules.insertSizeMetrics.output.METRICS,
rules.insertSizeMetrics.output.PDF
output:
directory("{sample}/logs")
shell:
"mkdir -p {wildcards.sample}/logs "
"| mv {LOGDIR}{wildcards.sample}* {output}"
Можно найти группу обеспечения доступности баз данных со всеми заданиями, которые я хочу выполнить ниже:
![enter image description here](https://i.stack.imgur.com/hjdAF.png)
Команда, которую я использую для запуска заданий в кластере:
snakemake -p -s Snakefile_v6_ngs_bngs05b --cluster "qsub -q onlybngs05b -e {LOGD
IR} -o {LOGDIR}" -j 5 --use-conda --jobname "{wildcards.sample}.{rule}.{jobid}"
Принимая во внимание, что это важно отметить, где должны быть созданы файлы .e
и .o
, для этого примера это LOGDIR
. LOGDIR
было фактически извлечено из файла конфигурации (LOGDIR = config['logsOutDir']
- в самом файле snake и logsOutDir: "/home/ngs/jobout/"
- указано в файле конфигурации).
Когда я вызываю полный snakemake, команда, которую я получаю для Правило mvQsubLogs
это:
rule mvQsubLogs:
input: NIPT-PearlPPlasma-03-PPx_S3downSample/fastQC, NIPT-PearlPPlasma-03-PPx_S3downSample/aligned/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.bam, NIPT-PearlPPlasma-03-PPx_S3downSample/dups/NIPT-PearlPPlasma-03-PPx_S3downSample.markDups.metrics.txt, NIPT-PearlPPlasma-03-PPx_S3downSample/depth/, NIPT-PearlPPlasma-03-PPx_S3downSample/dups/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.flagstat.edited.csv, NIPT-PearlPPlasma-03-PPx_S3downSample/readsDist/NIPT-PearlPPlasma-03-PPx_S3downSample.sorted.markDup.idxstats.edited.csv, NIPT-PearlPPlasma-03-PPx_S3downSample/insertSizeDist/NIPT-PearlPPlasma-03-PPx_S3downSample_ISmetrics.txt, NIPT-PearlPPlasma-03-PPx_S3downSample/insertSizeDist/NIPT-PearlPPlasma-03-PPx_S3downSample_ISHist.pdf
output: NIPT-PearlPPlasma-03-PPx_S3downSample/logs
jobid: 7
wildcards: sample=NIPT-PearlPPlasma-03-PPx_S3downSample
mkdir -p NIPT-PearlPPlasma-03-PPx_S3downSample/logs | mv /home/ngs/jobout/NIPT-PearlPPlasma-03-PPx_S3downSample* NIPT-PearlPPlasma-03-PPx_S3downSample/logs
Что мне кажется правильным: (после создания каталога, в который следует переместить файлы, просто чтобы быть в безопасности), я должен переместить все файлы, начиная с NIPT-PearlPPlasma-03-PPx_S3downSample
(т. Е. wildcards.sample
), расположенный от /home/ngs/jobout/
до NIPT-PearlPPlasma-03-PPx_S3downSample/logs
, тогда как этот последний каталог относительно рабочего каталога .
Посмотрите на .e
файл, сгенерированный по правилу mvQsubLogs
, который я получаю:
mkdir -p NIPT-PearlPPlasma-03-PPx_S3downSample/logs | mv /home/ngs/jobout/NIPT-PearlPPlasma-03-PPx_S3downSample* NIPT-PearlPPlasma-03-PPx_S3downSample/logs
mv: target ‘NIPT-PearlPPlasma-03-PPx_S3downSample/logs’ is not a directory
Что не имеет смысла для меня, так как выходной каталог NIPT-PearlPPlasma-03-PPx_S3downSample/logs
должен был быть создан
Я уже пробовал указав полный путь, куда файлы должны быть перемещены, хотя он тоже не работал, я получил ту же ошибку.
Может кто-нибудь определить, где ошибка в моем коде?