在Shell Script Linux中重命名文件

时间:2013-08-13 14:38:19

标签: linux bash shell mv

我想重命名我从以下脚本下载的文件:

exec < input_list.txt
while read line
do
get $line
wget ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/$2/$4
# Rename $4
mv $4 $1"_"$3".bam"
done

输入文件(input_list.txt)是制表符分隔的,包含四列。第一个,$ 1 =名称,$ 2 = wget地址,$ 3 =因子,$ 4是文件名。

A549    wgEncodeBroadHistone    H2azDex100nm    wgEncodeBroadHistoneA549H2azDex100nmAlnRep1.bam

我想将$ 4(已下载的文件)重命名为较短的文件名,该名称仅包含相应的$ 1​​和$ 3条款。例如,wgEncodeBroadHistoneA549H2azDex100nmAlnRep1.bam  变为A549_H2azDex100nm.bam

我玩过",但我一直收到mv命令的错误消息,$4是一个错误的变量名。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果使用wget的-O选项,则无需重命名文件:

#!/bin/bash

[ -n "$BASH_VERSION" ] || {
    echo "You need Bash to run this script."
    exit 1
}

while IFS=$'\t' read -a INPUT; do
    wget -O "${INPUT[0]}_${INPUT[2]}.bam" "ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/encodeDCC/${INPUT[1]}/${INPUT[3]}"
done < input_list.txt

确保以script.sh之类的UNIX文件格式保存文件并运行bash script.sh