次のような複数行ファイルがあります。
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