텍스트 파일 이름 바꾸기

텍스트 파일 이름 바꾸기

여러 개의 텍스트 파일이 있고 아래와 같이 일부 파일 이름을 추출합니다.

DFC_2_31A_K14_G008_F2_001D.txt
DFC_2_31A_K66_G005_F1_001D.txt
DFC_2_31A_K66_G005_F2_001D.txt
DFC_2_33_I_K15_G001_F1_001D.txt
DFC_2_33_I_K15_G001_F2_001D.txt
YFC_6_80I_S27_G008_F1_001D.txt
YFC_6_80I_S27_G008_F2_001D.txt
YFC_6_80I_S79_G005_F1_001D.txt
YFC_6_80I_S79_G005_F2_001D.txt
GPC_10_161_A_B_K37_G001_F1_001D.txt
GPC_10_161_A_B_K37_G001_F2_001D.txt
GPC_10_161_A_B_K37_G002_F1_001D.txt
GPC_10_161_A_B_K37_G002_F2_001D.txt
GPC_10_161_A_B_K37_G003_F1_001D.txt

모든 파일 이름을 아래와 같이 동일한 패턴으로 만들려면 어떻게 해야 합니까? (파일 이름에 6포인트를 원합니다 \*\_\*\_\*\_\*\_\*\_\*\_001D.txt)

DFC_2_31A_K14_G008_F2_001D.txt
DFC_2_31A_K66_G005_F1_001D.txt
DFC_2_31A_K66_G005_F2_001D.txt
DFC_2_33I_K15_G001_F1_001D.txt
DFC_2_33I_K15_G001_F2_001D.txt
YFC_6_80I_S27_G008_F1_001D.txt
YFC_6_80I_S27_G008_F2_001D.txt
YFC_6_80I_S79_G005_F1_001D.txt
YFC_6_80I_S79_G005_F2_001D.txt
GPC_10_161AB_K37_G001_F1_001D.txt
GPC_10_161AB_K37_G001_F2_001D.txt
GPC_10_161AB_K37_G002_F1_001D.txt
GPC_10_161AB_K37_G002_F2_001D.txt
GPC_10_161AB_K37_G003_F1_001D.txt

답변1

for file in *_001D.txt; do 
    if [[ "$file" =~ "A_B" ]]; then 
        mv "$file" "${file//_A_B/AB}"
    fi
    if [[ "$file" =~ "_I_K" ]]; then 
        mv "$file" D"${file/_I_/I_}"
    fi
done

간단한 루프로 모든 파일을 반복하면서 for먼저 파일 이름에 수정하려는 패턴이 있는지 확인합니다. 존재하는 경우 mv매개변수 대체를 사용하여 새 파일 이름을 파생시킵니다. 작동 방식은 다음과 같습니다.

변수의 경우 haystack구문은 ${haystack/needle/pin}첫 번째 인스턴스를 찾아 needle교체합니다 pin. 두 개의 /s(예 ${haystack//needle/pin}: ) 를 사용하면모두이 예는 처음이 아닙니다.

관련 정보