쉘 확장 이름 바꾸기 명령 역참조

쉘 확장 이름 바꾸기 명령 역참조

rename또한 명령에서 명령 대체 확장을 원하고 명령 에서 그룹 일치 패턴을 사용하고 대체 부분에서 역참조를 사용할 때 확장을 위해 큰따옴표를 사용 rename하지만 셸도 역참조를 매개변수로 처리하여 이름 바꾸기 문제를 일으킵니다. 이것을 어떻게 피할 수 있습니까?

rename "s:(.*)$(date +"%Y%m%d"):$1$(date -d "+1day" +"%Y%m%d"):" *

또한 확장 부분을 대체하는 별도의 명령을 시도했지만 운이 없었습니다 $(date -d "+1day" +"%Y%m%d"). .

rename 's:(.*)'"$(date +"%Y%m%d")"':$1'"'"$(date -d "+1day" +"%Y%m%d")"'"':' *

답변1

그냥 $탈출하세요 $1:

rename "s:(.*)$(date +"%Y%m%d"):\$1$(date -d "+1day" +"%Y%m%d"):" *

하지만 다음과 같이 패턴을 단순화할 수 있습니다.

rename "s#$(date +%Y%m%d)#$(date -d +1day +%Y%m%d)#" *

(이것은 #확장에 존재하지 않는다고 가정합니다 date).

답변2

이것이 Perl 버전이라고 가정하면 rename, 한 가지 해결책은 Perl을 사용하여 날짜 계산을 수행하는 것입니다.

rename 'use Time::Piece;use Time::Seconds;$t=localtime;$n=$t+ONE_DAY;$f=q{(.*)}.$t->strftime("%Y%m%d");s:$f:$1.$n->strftime("%Y%m%d"):e' *

perl공급업체가 코어 설치에 이상한 조치를 취하지 않는 한 이러한 모듈은 코어 >= 5.10이어야 합니다 .

관련 정보