파일 이름을 바꾸면 네 번째와 여섯 번째 문자 뒤에 대시가 추가됩니다.

파일 이름을 바꾸면 네 번째와 여섯 번째 문자 뒤에 대시가 추가됩니다.

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

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명령은 이름 바꾸기를 위해 고정된 문자열 쌍만 허용합니다.

관련 정보