从信息文件重命名 bash 中的文件

从信息文件重命名 bash 中的文件

我有一个目录,下面有4个文件

ERR315336_1.fastq.gz  ERR315336_2.fastq.gz  ERR315337_1.fastq.gz  ERR315337_2.fastq.gz

我还在名为 info.txt 的 sep 文件中提供了这 4 个文件的信息文件

placenta_6c      placenta_6c_ERR315336_1.fastq.gz    ERR315336_1.fastq.gz
placenta_6c      placenta_6c_ERR315336_2.fastq.gz    ERR315336_2.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_1.fastq.gz     ERR315337_1.fastq.gz
thyroid_5b   thyroid_5b_ERR315337_2.fastq.gz     ERR315337_2.fastq.gz

我想从 info.txt 文件更改目录中文件的名称,因此更改名称后我的目录应如下所示:

 placenta_6c_ERR315336_1.fastq.gz 
 placenta_6c_ERR315336_2.fastq.gz 
 thyroid_5b_ERR315337_1.fastq.gz 
 thyroid_5b_ERR315337_2.fastq.gz

所以基本上改变ERR315336_1.fastq.gz to placenta_6c_ERR315336_1.fastq.gz 等等。我有一个巨大的信息列表文件。我怎样才能做到这一点。

谢谢

答案1

笨拙地:

cd directory-with-files
awk '{system("echo mv " $3 " " $2)}' < /path/to/info.txt

bash-edly:

cd directory-with-files
while read -r junk new old
do
  echo mv "$old" "$new"
done < /path/to/info.txt

当回声看起来不错时将其删除。

这不会对文件名中的空格或文件名中的引号进行任何错误检查。

答案2

$ while read -r c1 c2 c3; do echo mv "$c3" "$c2"; done < info.txt
mv ERR315336_1.fastq.gz placenta_6c_ERR315336_1.fastq.gz
mv ERR315336_2.fastq.gz placenta_6c_ERR315336_2.fastq.gz
mv ERR315337_1.fastq.gz thyroid_5b_ERR315337_1.fastq.gz
mv ERR315337_2.fastq.gz thyroid_5b_ERR315337_2.fastq.gz

相关内容