문자열에 숫자를 채우고 파일 이름을 바꿉니다.

문자열에 숫자를 채우고 파일 이름을 바꿉니다.

이와 같은 파일 이름이 있습니다.

a2.txt.gz
d12.txt.gz
k5.txt.gz
m4.txt.gz
...

문자 1개, 숫자 1개 또는 2개, 그 뒤에 .txt.gz가 옵니다. 아래와 같이 숫자 앞에 0을 추가하고 싶습니다.

a02.txt.gz
d12.txt.gz
k05.txt.gz
m04.txt.gz
...

비슷한 것을 시도했지만 작동하지 않는 것 같습니다.

find . | grep -E "[a-z][0-9]{1}\.+" | sed -er s/\([a-z]\)\([0-9]{1}\)\(.txt.gz\)/\10\2\3/

내 논리는 먼저 한 자리 파일 이름을 grep한 다음 문자, 숫자 및 .txt.gz의 세 부분으로 나눈 다음 숫자 앞에 0을 추가하는 것입니다. 그러나 나는 그것을 작동시킬 수 없습니다. 이름을 바꾸는 부분은 잘 모르겠습니다.

답변1

나는 이렇게 할 것이다: for f in [a-z][0-9].txt.gz; do mv $f "${f:0:1}0${f:1}" done

나는 이것을 다른 것에서 적용했습니다( awk더 필요해서 사용했지만 의견 덕분에 더 좋게 만들었습니다).

답변2

이렇게 하면 다음과 같이 됩니다:

find . -name '??.txt.gz' | sed -e 's/..\(.\)\(.*\)/mv \1\2 \10\2/' > /tmp/cmds
sh /tmp/cmds

find명령은 이름을 바꿔야 하는 파일 목록을 가져옵니다. 이 명령은 원하는 작업을 수행하는 sed명령 목록을 작성합니다 . mv이러한 내용은 파일에 기록된 다음 쉘 스크립트로 실행됩니다.

이것을 선으로 수행하는 방법이 있다고 확신하지만 게으른 느낌이 듭니다.

관련 정보