폴더 이름을 "dd.mm.yy"에서 "yy.mm.dd"로 바꾸는 정규식?

폴더 이름을 "dd.mm.yy"에서 "yy.mm.dd"로 바꾸는 정규식?

모든 폴더의 이름을 "dd.mm.yy"에서 "yy.mm.dd"로 바꾸고 싶습니다. 쉘에서 이를 수행하는 방법은 무엇입니까?

답변1

bash현재 디렉터리 내의 디렉터리 이름을 바꾸는 솔루션:

for f in [0-3][0-9].[01][0-9].[0-9][0-9]; do
  [ -d "$f" ] && mv -v "$f" "${f:6}.${f:3:2}.${f:0:2}"
done

답변2

귀하의 질문에 더 많은 정보가 필요할 수 있으므로 다음과 같이 가정하겠습니다.

  • 모든 폴더는 현재 디렉터리의 모든 폴더를 나타냅니다.
  • rename정규식을 언급했을 때 운영 체제를 무시했기 때문에 귀하의 버전에서 해당 정규식을 지원한다는 점을 전제로 작업 중입니다.
rename 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2})\//$3.$2.$1/' */

가 없거나 rename정규 표현식을 지원하지 않는 경우, 다음은 보다 이식성이 뛰어난(덜 우아하지만) 접근 방식입니다.

find . -mindepth 1 -maxdepth 1 -type d \
  | sed 's ^./  ' \
  | grep -E "^([0-9]{2}\.){2}[0-9]{2}$" \
  | while IFS=. read dd mm yy ; do mv $dd.$mm.$yy $yy.$mm.$dd ; done

답변3

이는 한 줄보다 길지만 날짜에 대해 어떠한 가정도 하지 않습니다.

$ mkdir 12.12.12 01.02.99

$ perl -MTime::Piece -Mautodie -E '
  opendir my $dh, ".";
  while (my $f = readdir $dh) {
    if (-d $f and $f =~ /^\d\d.\d\d.\d\d$/) {
      my $t = Time::Piece->strptime($f, "%d.%m.%y");
      rename $f, $t->ymd;
    }
  }
'

$ ls
1999-02-01/  2012-12-12/

답변4

폴더가 이미 생성되어 있으므로 매우 간단한 방법입니다.

ls -1d */|cut -f1 -d/ |awk -F"." '{print "mv " $0 " " $3"."$2"."$1"/"}' | bash

관련 정보