파일 이름 바꾸기 네 번째 및 여섯 번째 문자 뒤에 대시 추가

파일 이름 바꾸기 네 번째 및 여섯 번째 문자 뒤에 대시 추가

다음과 같은 파일이 있습니다.

20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell

다음과 같이 이름을 바꿔야 합니다.

2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell

나는펄 구현~의rename명령(수락된 답변에 대한 내 의견 참조) 성공하지 못했습니다.

답변1

Bash의 내장 하위 문자열 확장 사용:

for f in 2015* ; do
  mv "$f" "${f::4}-${f:4:2}-${f:6}"
done

답변2

와 함께 sed:

LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file

답변3

rename은 매우 강력한 도구이지만 일반적으로 저는 다음의 단순함을 선호합니다 .mmv(다중 이동) 유틸리티:

mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'

검색 패턴에서 는 ?단일 문자를 나타내며, *임의의 긴 문자 시퀀스를 나타냅니다. 대체 패턴에서 각각은 #<number>해당 ?또는 *검색 패턴을 나타냅니다. ?및 외에도 괄호 안의 문자 범위(예: )를 지원 *합니다 .mmv[a-f]

( mmv작업을 시작하기 전에 이름 바꾸기 시 충돌이 있는지 테스트하므로 덮어쓰기로 인해 파일이 손실될 위험이 없습니다.)

답변4

perl-rename내 배포판에는 Perl 스타일 정규식을 사용하여 파일 이름을 대량으로 바꿀 수 있는 명령이 있습니다 . 이 rename명령은 이름 바꾸기에 대해 고정 문자열 쌍만 허용합니다.

관련 정보