首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从URL列表创建目录、下载文件和执行命令

从URL列表创建目录、下载文件和执行命令
EN

Stack Overflow用户
提问于 2022-05-30 16:05:23
回答 3查看 114关注 0票数 2

我正在开发一个服务器。我的最终目标是在多个fasta文件上运行CRB-BLAST,并在不同的目录中获得这些文件的结果。

我的方法是使用wget下载fasta文件,然后运行CRB-BLAST。我有多个文件,并希望能够将每个文件下载到自己的目录(名称可能应该来自URL列表文件),然后运行CRB-BLAST。

示例URL:

代码语言:javascript
复制
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_3370_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_CB_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_13_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_37_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_123_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_195_chr.v0.1.liftover.CDS.fasta.gz
http://assemblies/Genomes/final_assemblies/10x_assemblies_v0.1/TC_31_chr.v0.1.liftover.CDS.fasta.gz

理想情况下,文件名决定目录名,例如,TC_3370/

我认为cat URL.txt | mkdir | cd | wget | crb-blast可能会有一个解决方案

目前,我只运行以下命令:

代码语言:javascript
复制
mkdir TC_3370

cd TC_3370/

wget url 
http://assemblies/Genomes/final_assemblies/10x_meta_assemblies_v1.0/TC_3370_chr.v1.0.maker.CDS.fasta.gz

crb-blast -q TC_3370_chr.v1.0.maker.CDS.fasta.gz -t TCV2_annot_cds.fna -e 1e-20 -h 4 -o rbbh_TC
EN

回答 3

Stack Overflow用户

发布于 2022-05-30 16:45:27

试试这个谢尔查克-clean程序:

代码语言:javascript
复制
#! /bin/bash -p

while read -r url; do
    file=${url##*/}
    dir=${file%%_chr.*}
    mkdir -v -- "$dir"
    (
        cd "./$dir" || exit 1
        wget -- "$url"
        crb-blast -q "$file" -t TCV2_annot_cds.fna -e 1e-20 -h 4 -o rbbh_TC
    )
done <URL.txt
  • 有关${url##*/}等的解释,请参见${url##*/}
  • 子subshell (( ... ))用于确保cd不影响主程序。
票数 1
EN

Stack Overflow用户

发布于 2022-05-30 18:12:22

另一个实现

代码语言:javascript
复制
#!/bin/sh

# Read lines as url as long as it can
while read -r url
do
  # Get file name by stripping-out anything up to the last / from the url
  file_name=${url##*/}

  # Get the destination dir name by stripping anything from the first __chr
  dest_dir=${file_name%%_chr*}

  # Compose the wget output path
  fasta_path="$dest_dir/$file_name"

  if
    # Successfully created the destination directory AND
    mkdir -p -- "$dest_dir" &&
    # Successfully downloaded the file
    wget --output-file="$fasta_path" --quiet -- "$url" 
  then
    # Process the fasta file into fna
    fna_path="$dest_dir/TCV2_annot_cds.fna"
    crb-blast -q "$fasta_path" -t "$fna_path" -e 1e-20 -h 4 -o rbbh_TC
  else
    # Cleanup remove destination directory if any of mkdir or wget failed
    rm -fr -- "$dest_dir"
  fi
  # reading from the URL.txt file for the whole while loop
done < URL.txt
票数 0
EN

Stack Overflow用户

发布于 2022-05-31 09:31:20

从列表下载文件是-i file选项的任务,如果您的文件名为如urls.txt,每一行只需一个URL即可

代码语言:javascript
复制
wget -i urls.txt

请注意,这将将所有文件放在当前工作目录中,因此如果希望将它们放在单独的目录中,则需要在wget完成后将它们移动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72437163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档