파일 이름의 마지막 숫자 부분을 처음 부분에 복사합니다.

파일 이름의 마지막 숫자 부분을 처음 부분에 복사합니다.
ISS45_20200302030042.zip
R0387F200229.zip

이 상황에 적합한 쉘 스크립트를 원합니다. 위에는 두 개의 파일 이름이 있으며 이와 같은 것을 원합니다. 두 파일 이름 앞에 숫자 부분을 추가하고 싶습니다. 내가 원하는 것은 아래 예를 참조하십시오.

20200302030042_ISS45_20200302030042.zip
200229_R0387F200229.zip
for f in *.zip; do
   mv "$f" $(sed -E 's/^(.+)_([^.]+)\./\2_\1./' <<< "$f")
done

나는 이것을 사용하고 있습니다. 파일 에서만 작동 iss45하지만 R파일에서는 작동하지 않습니다.

답변1

sed필요한 명령 은 다음과 같습니다 .

sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
$ echo ISS45_20200302030042.zip |
    sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
20200302030042_ISS45_20200302030042.zip

$ echo R0387F200229.zip |
    sed --posix -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
200229_R0387F200229.zip

답변2

Perl-ish 버전의 이름 바꾸기를 사용할 수 있는 경우(그렇지 않더라도 정규식은 .와 함께 작동해야 합니다 sed -r.)

rename 's/^(.*[^0-9]+)([0-9]+)([.]zip)$/$2_$1$2$3/' *.zip

이름을 오른쪽에서 왼쪽으로 세 부분(확장자 $3, 확장자 앞의 숫자 블록 $2, 그 앞의 모든 부분) 으로 논리적으로 나눕니다 $1.

그런 다음 미리 준비된 조각과 함께 바느질하십시오 $2.

관련 정보