重命名多个子文件夹中的文件

use*_*940 1 bash

我有多个唯一的目录,每个目录都包含一个名为filtered_feature_bc_matrix.h5. 我想将目录名称粘贴到文件名上,以使文件名在每个文件夹中唯一。这可能吗?

./sample_scRNA_unsorted_98433_Primary_bam/outs/filtered_feature_bc_matrix.h5
./sample_scRNA_unsorted_77570_Primary_bam/outs/filtered_feature_bc_matrix.h5
Run Code Online (Sandbox Code Playgroud)

出去:

./sample_scRNA_unsorted_98433_Primary_bam/outs/sample_scRNA_unsorted_98433_Primary_bam_filtered_feature_bc_matrix.h5
./sample_scRNA_unsorted_77570_Primary_bam/outs/sample_scRNA_unsorted_77570_Primary_bam_filtered_feature_bc_matrix.h5
Run Code Online (Sandbox Code Playgroud)

Ren*_*let 5

为了完整起见,这里是一个仅bash内置的解决方案:

shopt -s globstar nullglob
name="filtered_feature_bc_matrix.h5"
for f in */**/"$name"; do mv "$f" "${f%/*}/${f%%/*}_$name"; done
Run Code Online (Sandbox Code Playgroud)