나는 이것이 효과가 있기를 바랍니다:
$ 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 매뉴얼 페이지의 패턴 일치 섹션에서 찾을 수 있습니다.