파일 이름 시작 부분에서 숫자 제거

파일 이름 시작 부분에서 숫자 제거

나는 이것이 효과가 있기를 바랍니다:

$ find . -type f -exec basename {} \; | while EFS= read -r f; do echo "${f##[0-9]}"; done 

그러나 예를 들어 다음과 같은 파일의 경우:

1푸
11바

다음을 반환합니다.

리치
1바

언제

풍부한

기대입니다.

mv "$f"추신: 결국 이름을 변경 하고 싶습니다 (그리고 다른 변경도 하고 싶습니다).

편집하다:

PS2: PS를 고려한다면 중복은 아닙니다. 어쨌든 검토용으로 표시된 답변은 만족스럽습니다.

답변1

if rename(때때로 호출됨 prename)는 옵션입니다.

find . -name '[[:digit:]]*' -type f -exec rename 's:^(.*/)\d+([^/]*)\z:\1\2:s' {} +

설명하다:

  • ( )괄호 안의 패턴은 저장되며 발생 횟수만큼 불러올 수 있습니다.
  • .*/디렉터리 부분은 보존되어야 합니다.
  • ([^/]*)\z: 제목 끝까지 /가 아닌 모든 문자입니다.
  • \1\2캡처된 디렉터리와 출력 이름의 숫자 뒤의 모든 항목을 다시 인쇄합니다.

먼저 결과를 확인하려면 -n의 옵션을 사용하여 테스트 실행을 수행할 수 있습니다 .rename

답변2

find . -type f -exec basename {} \; | while IFS= read -r f; do echo "${f##+([0-9])}"; done필요한 결과를 제공해야 합니다.

+()이는 하나 이상의 일치를 의미하는 확장된 패턴 일치 연산자를 사용합니다 .

추가 정보는 bash 매뉴얼 페이지의 패턴 일치 섹션에서 찾을 수 있습니다.

관련 정보