bash - 在循环中重命名匹配模式的文件 - Bash

标签 bash rename mv

我一直在尝试根据表格重命名一些特定文件,但没有成功。它要么重命名所有文件,要么给出错误。

该目录包含数百个以长条形码命名的文件,我只想重命名包含模式 _1_ 的文件。

例子

barcode_1_barcode_SL484171.fastq.gz   barcode_2_barcode_SL484171.fastq.gz   barcode_1_barcode_SL484370.fastq.gz   barcode_2_barcode_SL484370.fastq.gz

我的表格.txt

<表类="s-表"> <头> 旧名 新名字 <正文> barcode_1_barcode_SL484171 描述1 barcode_2_barcode_SL484171 描述1 barcode_1_barcode_SL484370 描述2 barcode_2_barcode_SL484370 描述2

期望输出:

描述1.R1.fastq.gz 描述2.R1.fastq.gz

如您在表中所见,每个描述有两个文件,但我只想重命名具有 _1_ 模式的文件。

我试过的代码:

for i in *_1_*.fastq.gz; do read oldname newname; mv "$oldname" "$newname".R1.fastq.gz; done < mytable.txt

for i in $(grep '_1_' mytable.txt); do read -r oldname newname; mv ${oldname} ${newname}.R1.fastq.gz; done < mytable.txt

for i in $(grep '_1_' mytable.txt); do oldname=$(cut -f1 $i);newname=$(cut -f2 $i); ln -s ${oldname} ${newname}.R1.fastq.gz; done

最佳答案

while read -r oldname newname
do 
    if [[ $oldname =~ "_1_" ]]
    then 
        mv $oldname $newname
    fi
done < mytable.txt

关于bash - 在循环中重命名匹配模式的文件 - Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68323157/

相关文章:

linux - Bash根据另一个文件中的行重命名多个文件

linux - 如何将所有隐藏文件夹/文件更改为在多个子目录中可见

Python/Bash - 获取带有转义字符的文件名

bash - 仅当循环的第一步没有错误时,如何使 bash 脚本继续循环的一部分?

linux - 如何在 Bash 中解析 CSV 文件?

linux - 如何根据文本文件将文件移动到子目录

java - CAMEL 正在 "mv"命令完成之前处理文件

linux - mv 包含来自 shell 脚本的空格的文件

bash - BASH_REMATCH 在 Bash 5.1 中不是只读的有什么用?

arrays - 如何使用包含数组名称的第二个变量来引用现有的 bash 数组?