다음과 같은 파일 세트가 있습니다.
Q-30-09-1753.TIF
W-01-04-1753.TIF
W-31-12-1752.TIF
Y-14-12-1752.TIF
사용Windows의 git bash아래와 같이 파일 이름 끝에 문자를 넣어 파일 이름을 바꾸고 싶습니다.
30-09-1753-Q.TIF
01-04-1753-W.TIF
31-12-1752-W.TIF
14-12-1752-Y.TIF
다음 코드를 사용해 보았습니다.
for f in *.TIF ; do
mv "$f" "${f//[A-Z]]\-[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[A-Z]/}";
echo "$f"
done
첫 번째 부분에서는 변경할 파일을 성공적으로 선택하지만 이름을 바꿀 때 와일드카드 선택은 리터럴입니다.
답변1
게을러서 그럴지도 모르지만 나 sed
한테 해줄게
newfilename=$(echo "${f}"|sed 's/\(.\)-\([^\.]*\)\.TIF/\2-\1.TIF/')
mv "${f}" "${newfilename}"
bash의 훌륭하지만 별도의 문자열 교체 방법을 배우는 대신 :)
그런데, 날짜인 경우 날짜 형식이 정렬에 도움이 되지 않습니다. ISO 날짜 형식으로 변경: YYYY-MM-DD를 사용하면 날짜를 기준으로 파일 이름을 올바르게 정렬할 수 있습니다! (그렇지 않으면 날짜를 기준으로 먼저 정렬한 다음 월, 초, 연도를 기준으로 정렬하게 됩니다.)
newfilename=$(echo "${f}"|sed 's/\(.\)-\(..\)-\(..\)-\(....\)\.TIF/\4-\3-\2-\1.TIF/')