이 파일 묶음의 이름을 다음으로 바꾸고 싶습니다.
TEST_API_CICD_03Sep2019_09:12:19.json
TEST_API_CICD_03Sep2019_09:12:20.json
이와 관련하여
TEST_API_CICD.json
TEST_API_CICD.json
파일 이름 길이가 일정하지 않습니다.
답변1
prename
나는 Perl 5.1과 함께 설치된 강력한 Perl 정규식 프로그램을 사용하여 이 질문에 대답 하겠습니다.
파일이 포함된 디렉터리에서 다음 명령을 실행합니다.
prename -v 's/_\d\d[A-Za-z]+\d\d\d\d_\d\d:\d\d:\d\d((\.[^.]*)?)$/$1/g' *
너는 변할지도 모른다*
명령이 끝나면이름을 바꾸려는 파일 목록으로 이동합니다(일부 이름만 바꾸려는 경우).
번역하다
"를 제거하여 현재 디렉토리의 모든 파일 이름을 바꿉니다.밑줄 - 그 다음 2자리 - 그 다음 하나 이상의 영문자 - 그 다음 4자리 - 그 다음 밑줄 - 그 다음 2자리 - 그 다음 콜론 - 그 다음 2자리 - 그 다음 그 다음 콜론 - 그 다음 2자리 -" 파일 확장자 앞(또는 확장자가 없는 경우 파일 이름 끝)에 옵니다.
노트
- 실제로 이름을 바꾸지 않고 먼저 이름을 바꾸는 방법을 보려면
-v
매개변수를 로 변경할 수 있습니다.-n
- 귀하의 예제가 동일한 디렉토리에 있으면 파일 이름 충돌이 발생합니다.(아래 참조)
- 새로 이름이 바뀐 파일 이름이 다른 기존 파일이나 이전에 이름이 바뀐 파일 이름과 충돌하는 경우
prename
경고가 인쇄되고 해당 파일은 이름이 바뀌지 않은 상태로 유지됩니다. (이 문제의 영향을 받지 않는 다른 파일은 계속해서 이름이 변경됩니다.) - 파일 이름 끝에서 일반 "날짜"를 제거하는 명령은 없습니다. 고려해야 할 날짜 및 구분 기호 형식이 너무 많습니다. 이름을 바꿀 때 잘못된 날짜 형식을 적용하면 혼란이 발생할 수도 있습니다. 내가 제공한 명령은 예제에 표시된 파일 이름 날짜 구분 기호, 날짜 형식 및 날짜 확장 구분 기호에서만 작동합니다. 바라보다번역하다위의 구체적인 내용.
- 나는 이것을 Debian GNU/Linux 7.0 "Wheezy" i386(Perl 5.14.2 사용)에서 테스트했습니다.
PS 필수 만화:“Perl을 구해주세요!”(일명 XKCD #208)일반적인 표현")
1 나와 같은 일부 시스템에서는 호출할 때 실행되는 프로그램이기도 합니다 rename
. 그러나 @Philippos의 의견에 언급된 util-linux와는 다릅니다. 실행 man rename
하고 맨 아래로 스크롤하면 Perl에서 왔는지 util-linux에서 왔는지 알 수 있습니다.
답변2
ls
find
나는 / , sed
및 의 조합을 사용합니다 sh
.
ls |sed -E '/TEST_API_CICD/{s!^(.*TEST_API_CICD)_........._..:..:..(\.json)$!mv -i "&" "\1\2"!;p};d'
s 사이의 첫 번째 부분 /
은 이름을 바꿀 파일을 선택하는 모드입니다. 괄호 안의 부분은 . 패턴을 사용하여 새 파일 이름으로 유지되는 부분입니다 \1\2\3...
.아니요괄호 안은 삭제할 부분입니다. (점)은 전역 표현식에서 .
와 같이 임의의 문자입니다 .?
.
0개 이상의 문자입니다(예:글로벌 표현에서).
^
그리고 $
모든 문자가 일치하도록 시작과 끝 부분에 패턴을 고정합니다.
결과를 확인하고( |more
또는 사용 |less
, 이상 |grep ...
징후 검색) 결과가 좋아 보이면 로 실행합니다 |sh
.