如何通过替换文件名中的字符串来重命名多个文件?

如何通过替换文件名中的字符串来重命名多个文件?

我基本上把一个文件分成了8个文件。

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat  #Original File

我得到了 8 个新文件,文件名如下。

DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.aa
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ab
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ac
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ad
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ae
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.af
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ag
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_2_20170502094536.dat.ah

我想将这些文件重命名为以下名称:

DA_TRP_TOTAL-SHIPPED_v1_DNH_1_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_2_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_3_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_4_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_5_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_6_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_7_8_20170502094536.dat
DA_TRP_TOTAL-SHIPPED_v1_DNH_8_8_20170502094536.dat

我怎样才能在unix shell脚本中做到这一点?

答案1

推荐的重命名大量文件的工具是rename,这可以完成您的工作。

rename -n 'our $i++; s/_DNH_\K\d+_\d+(.*)\..*/${i}_8$1/' DA*.dat.*

答案2

您可以首先选择正确的工具进行吐痰。

split -a 1 --numeric-suffixes=1 -n 8 myfile myFile_from_8_

这将分为myFile8 个部分,名称开头为myFile_from_8_NN从 1-8)

或者甚至可以使用命令模拟拆分,awk如下所示,每个拆分文件中有 X 条记录(在示例中X=100,意味着每个文件有 100 条记录):

awk 'NR%100==1{ file=sprintf("myFile_from_8_%d",((++c)) )} {print >file}' myFile

相关内容