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