정규식을 사용한 "이름 바꾸기" 관련 문제(Linux)

정규식을 사용한 "이름 바꾸기" 관련 문제(Linux)

두 개의 파일을 생성하는 백업 스크립트가 있습니다.

) db_mywebsite_2018-01-10_00-25.sql.gz(150MB)

두번째) mywebsite1_2018-01-10_00-01.tar.gz(2GB)

파일 이름에서 날짜(XXXX-XX-XX_XX-XX)를 제거하고 싶습니다. 백업은 매일 이루어지기 때문에 파일 이름에 날짜가 다릅니다. 이를 위해 다음 명령을 사용합니다.

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

테스트를 위해 touch두 개의 db_mywebsite_2018-01-10_00-25.sql.gz파일을 편집했습니다.mywebsite1_2018-01-10_00-01.tar.gz

주문하다:

rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz

산출:

db_mywebsite_2018-01-10_00-25.sql.gz renamed as db_mywebsite.sql.gz

1. 문제는 위의 메시지 "db_mywebsite_2018-01-10_00-25.sql.gz가 db_mywebsite.sql.gz로 이름이 바뀌었음에도 불구하고 확인해 보면 ls -l해당 파일 이름이 변경되지 않은 것처럼 보인다는 것입니다.

2. 파일 이름 바꾸기 명령(정규식)은 작동하지 않습니다 mywebsite1_2018-01-10_00-01.tar.gz.

답변1

  1. Perl 버전의 경우 rename이 옵션은 다음 -n을 의미합니다.작업 없음: 이름을 바꿀 파일 이름을 인쇄하지만 이름을 바꾸지는 않습니다. 파일 이름을 바꾸려면 이 -n옵션을 사용하지 마십시오. 그래서 대신:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    사용:

    rename -v 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    
  2. 고려하다:

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.sql.gz
    

    위 명령은 으로만 이름을 바꾸려고 시도합니다 . 파일이 로 시작하므로 .sql.gz이름은 바뀌지 않습니다 . 두 파일의 이름을 바꾸려면 다음을 시도하십시오.mywebsite1_2018-01-10_00-01.tar.gz.tar.gz

    rename -v -n 's/_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}//' *.tar.gz *.sql.gz
    

관련 정보