使用父文件夹的名称重命名子文件夹中的文件

时间:2018-03-13 01:22:04

标签: subdirectory batch-rename

我在主文件夹的多个子文件夹中存在数百个同名的文件。我想重命名他们。例如,文件夹1135_AS包含数百个子文件夹(具有唯一名称),其结构如下:

1135_AS / UOD-1_6975 /转录/鲑鱼/ quant.sf

我想将 quant.sf 重命名为唯一文件夹的名称

例如:

  

1135_AS / UOD-1_6975 /转录/鲑鱼/ quant.sf

应转换为:

  
    

1135_AS / UOD-1_6975 /转录/鲑鱼/ UOD-1_6975_quant.sf

  

  

1135_AS / URD-1_9901 /转录/鲑鱼// quant.sf

     
    

1135_AS / URD-1_9901 /转录/鲑鱼// URD-1_9901_quant.sf

  

1 个答案:

答案 0 :(得分:1)

# cd into the parent dir, which is common:
$ cd 1135_AS/  

$ find . -type f -name quant.sf \
  | awk -F/ '{s=substr($0,0,length($0)-length($NF))}{system("mv " $0" "s$2"_"$NF)}'
  • 使用find打印文件的完整路径。
  • s=substr($0,0,length($0)-length($NF))打印除
  • 之外的整个路径
  • quant.sf或最后一个字段$NF使用system(cmd)中的awk来mv
    文件。

通过删除system()可以看到脚本要做什么...它会打印出这样的内容,

$ find . -type f -name quant.sf \
  | awk -F/ '{s=substr($0,0,length($0)-length($NF))}{print "mv " $0" "s$2"_"$NF}'
mv ./Uod-1_6975/transcriptome/salmon/quant.sf ./Uod-1_6975/transcriptome/salmon/Uod-1_6975_quant.sf