我有多個唯一目錄,每個目錄都包含一個名為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
出去:
./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
uj5u.com熱心網友回復:
為了完整起見,這里是一個只有bash內置的解決方案:
shopt -s globstar nullglob
name="filtered_feature_bc_matrix.h5"
for f in */**/"$name"; do mv "$f" "${f%/*}/${f%%/*}_$name"; done
uj5u.com熱心網友回復:
find . -type f -name 'filtered_feature_bc_matrix.h5' \
-exec sh -c \
'fp="$1"; d=$(echo "$fp"|cut -d/ -f2); echo $(dirname "$fp")/${d}_$(basename "$fp")' \
-- '{}' \;
find允許使用相對路徑迭代檔案-exec允許對'{}'檔案路徑執行操作sh用于簡化動作dirname并basename允許提取目錄或檔案名。cut用于僅提取第一個目錄(第二個欄位與第一個相同.)
要重命名:
find . -type f -name 'filtered_feature_bc_matrix.h5' \
-exec sh -c \
'fp="$1"; d=$(echo "$fp"|cut -d/ -f2); mv -v "$fp" "$(dirname "$fp")/${d}_$(basename "$fp")"' \
-- '{}' \;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434596.html
標籤:重击
