파일 이름의 특정 부분 이름을 다른 파일 이름으로 바꾸는 스크립트?

파일 이름의 특정 부분 이름을 다른 파일 이름으로 바꾸는 스크립트?

/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자리 값은 밑줄 다음에 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_}.

관련 정보