【问题标题】:Rename files in subfolder using name of parent folder使用父文件夹的名称重命名子文件夹中的文件
【发布时间】:2018-08-21 03:50:40
【问题描述】:
我在主文件夹的多个子文件夹中有数百个同名文件。我想重命名它们。例如文件夹 1135_AS 包含数百个子文件夹(具有唯一名称),其结构如下:
1135_AS/Uod-1_6975/transcriptome/salmon/quant.sf
我想将 quant.sf 重命名为 唯一文件夹的名称
例如:
1135_AS/Uod-1_6975/transcriptome/salmon/quant.sf
应该转换为:
1135_AS/Uod-1_6975/transcriptome/salmon/Uod-1_6975_quant.sf
和
1135_AS/Urd-1_9901/transcriptome/salmon//quant.sf
1135_AS/Urd-1_9901/transcriptome/salmon//Urd-1_9901_quant.sf
【问题讨论】:
标签:
subdirectory
batch-rename
【解决方案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 在 awk 中使用 system(cmd) 到 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