ファイルを繰り返し、最初の列としてdirを作成し、別の列でwgetを作成します。

ファイルを繰り返し、最初の列としてdirを作成し、別の列でwgetを作成します。

次のような複数行ファイルがあります。

GSE55555 ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE55nnn/GSE55555/suppl/* ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE55nnn/GSE55555/matrix/*
GSE11111 ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE11nnn/GSE11111/suppl/* ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE11nnn/GSE11111/matrix/*

最初の列を使用してディレクトリを作成し、そのディレクトリの2番目と3番目の列からダウンロードしたファイルを保存したいと思います。

Unixではどうしますか?

答え1

複雑bash+wget解決策:

while read -r d f1 f2; do 
    mkdir -p "$d" && cd "$d"
    wget --no-verbose -nd -np -r --level=1 "$f1"
    wget --no-verbose -nd -np -r --level=1 "$f2"
    cd $OLDPWD
done <inputfile

詳細:

  • read -r d f1 f2- 各行の3つのフィールドを対応inputfileする変数d(ディレクトリ名)、f1(ファイルパス1)、およびf2(ファイルパス2)として読み込みます。

  • mkdir -p "$d" && cd "$d- 存在しない場合は、新しいディレクトリを作成し、現在の作業ディレクトリをそのフォルダに変更します。

  • wget --no-verbose -nd -np -r --level=1 "$f1"--level=1- ファイルパスから階層の最初のレベル()にあるすべてのファイルをダウンロードします。$f1

  • cd $OLDPWD- 以前の作業ディレクトリに戻ります。


結果を見る:

$ tree GSE*
GSE11111
├── filelist.txt
├── GSE11111_RAW.tar
└── GSE11111_series_matrix.txt.gz
GSE55555
├── filelist.txt
├── GSE55555_RAW.tar
├── GSE55555_repset.17402833.enrichment.clusters.gff3.gz
└── GSE55555_series_matrix.txt.gz

0 directories, 7 files

関連情報