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