通过匹配文本文件bash中的键值来重命名文件



我在以下目录中有文件:

./PBMCs/SRR1_1.fastq
./PBMCs/SRR1_2.fastq
./Monos/SRR2.fastq
./Monos/SRR3.fastq

我想根据键值对文件将SRR#更改为一个信息更丰富的名称:

SRR1 pbmc-1
SRR2 mono-1
SRR3 mono-2

并将文件重命名为:

./PBMCs/pbmc-1_1.fastq
./PBMCs/pbmc-1_2.fastq
./Monos/mono-1.fastq
./Monos/mono-2.fastq

我所能想到的就是循环浏览原始文件列表,然后循环浏览name-change.txt文件的行并替换字符串。然而,我不确定如何实现这一点,也不确定这是否是一个好的方法。

假设所有*.fastq都是一个子目录深度,这应该可以正常工作:

while read old new; do
for fastq in ./*/"$old"*.fastq; do
new_name=$new${fastq##*/"$old"}
echo mv "$fastq" "${fastq%/*}/$new_name"
done
done <name-change.txt

如果输出看起来不错,请删除echo

相关内容

  • 没有找到相关文章

最新更新