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
.