단일 명령이나 스크립트를 사용하여 Unix에서 여러 파일의 이름을 바꾸는 방법은 무엇입니까? [복사]

단일 명령이나 스크립트를 사용하여 Unix에서 여러 파일의 이름을 바꾸는 방법은 무엇입니까? [복사]

다음 파일 목록이 있습니다

aro_tty-mIF-45875564pmo_opt
aro_tty-mIF-45875664pmo_opt
aro_tty-mIF-45875964pmo_opt
aro_tty-mIF-45875514pmo_opt
aro_tty-mIF-45875524pmo_opt

이름을 다음으로 바꿔야 해요

aro_tty-mImpFRA-45875564pmo_opt
aro_tty-mImpFRA-45875664pmo_opt
aro_tty-mImpFRA-45875964pmo_opt
aro_tty-mImpFRA-45875514pmo_opt
aro_tty-mImpFRA-45875524pmo_opt

답변1

대부분의 표준 쉘은 쉘 변수에서 간단한 텍스트 대체를 수행하는 방법을 제공합니다.http://tldp.org/LDP/abs/html/parameter-substitution.html설명은 다음과 같습니다.

${var/Pattern/Replacement}

First match of Pattern, within var replaced with Replacement.

따라서 이 스크립트를 사용하여 모든 적절한 파일을 반복하고 각 파일의 이름을 바꿉니다.

for file in aro_tty-mIF-*_opt
do
    mv -i "${file}" "${file/-mIF-/-mImpFRA-}"
done

각 이름 바꾸기 작업을 확인할 수 있는 기회를 제공하기 위해 -i 옵션을 추가했습니다. 언제나 그렇듯이 광범위한 이름 변경이나 삭제를 수행하기 전에 모든 파일을 백업해야 합니다.

답변2

Perl이 없는 경우 rename:

perl -e '
FILE:for $file (@ARGV){
        ($new_name = $file) =~ s/-mIF-/-mImpFRA-/
        next FILE if -e $new_name;
        rename $file => $new_name
}' *_opt

만약 너라면하다펄을 사용하면 rename:

rename 's/-mIF-/-mImpFRA-/' *_opt

답변3

다음과 같은 복잡한 명령을 시도하기 전에파일 백업. 당신은 철자 오류(내 것이든 당신의 것이든)로 인해 어떤 결과가 나올지 결코 알 수 없습니다.

mv(댓글에서 요청한 것처럼 - rename다른 답변에서 제안한 대로, 특히 파일 이름에 공백이나 이상한 문자가 있을 수 있는 경우) 어떤 스타일을 사용하는 것이 더 안전할 수 있습니다.

for f in *_opt; do
    a="$(echo $f | sed s/-mIF-/-mImpFRA-/)"
    mv "$f" "$a"
done

관련 정보