linux - 在 Shell Script Linux 中重命名文件

标签 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 是一个错误的变量名。任何建议将不胜感激。

最佳答案

如果使用 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

确保将文件保存为 UNIX 文件格式,如 script.sh 并运行 bash script.sh

关于linux - 在 Shell Script Linux 中重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18212070/

相关文章:

python - 按时进行沙箱 shell 程序

c - 如何在不考虑空格的情况下运行 bash 命令

regex - 使用 awk 脚本在两种模式之间拉取文本

linux - 用另一个列表中的下一行替换列表中的字符串

linux - 在kgdb中,我无法设置断点

linux - bash 在给定模式之前用逗号查找并替换 "enter"

bash - 在 BASH 中以 N 进程批处理并行运行

bash 脚本,用于帮助识别文件和路径,并按星期递归排序计数

shell - mongodb 删除在 "invalid object id"上失败

c++ - 如何在 Eclipse CDT 中设置相应的 GCcflags和环境变量