ファイル名の特定の部分名を別のファイル名に置き換えるスクリプト?

ファイル名の特定の部分名を別のファイル名に置き換えるスクリプト?

/home/User/Desktop/DR フォルダの内容

dr_subject00001_Z.nii
dr_subject00002_Z.nii
dr_subject00003_Z.nii

...等(数字40まで1を加える)

/home/User/Desktop/rsfMRI フォルダの内容

MCU_0001_01
MCU_0001_03
MCU_0002_03

...等(値はランダムですが範囲があり、4桁の値は最大40まで上がることができますが、値は繰り返すことができます(0001が2つあります)、2桁の値は下線の後に01と03があります。交互に表示されます。

私がしたいのは、一致を使用してrsfMRIフォルダ内の「####_##」(4桁の後にアンダースコアと他の2桁の数字)を見つけ、次に「#####」(DR fileフォルダファイル名の5桁です)数字です。

だからこれ出力〜する

dr_subject0001_01
dr_subject0001_02
dr_subject0002_03

どうすればいいですか?

編集する: 両方のフォルダのファイル数は同じです。 DRフォルダの最初のファイルがrsfMRIフォルダの最初のファイルと一致するように、各フォルダのファイルを順番に繰り返したいと思います。

ベストアンサー1

Bashでは並列配列を使用できます(各フォルダに同じ数のファイルがあると仮定します)。

#!/bin/bash

drfiles=(DR/*)
mrifiles=(rsfMRI/*[0-9][0-9][0-9][0-9]_[0-9][0-9])

for((i=0; i < ${#drfiles[@]}; i++))
do
    echo mv -- "${drfiles[i]}" "DR/dr_subject${mrifiles[i]#*_}"
done

配列drfilesにはDRファイルが含まれ、配列mrifilesには次のパターンに一致するrsfMRIディレクトリのファイルが含まれています。(何か)(4桁)下線(2桁)。

次に、配列(DRフォルダ内のファイル数として入力)を繰り返し、サンプルmv / renameコマンドを印刷します。名前変更ソースは、現在索引付けされているDRファイルのみです。名前変更操作のターゲットは既知のプレフィックスDR / dr_subjectで、その後にそのMRIファイルの先頭のテキストを最初の下線まで切り取った結果が続きます。 MRIファイル名が常に「MCU」の場合は、ターゲット名の変更を次のように単純化できますDR/dr_subject${mrifiles[i]#rsfMRI/MCU_}

おすすめ記事