모든 마침표를 하이픈으로 재귀적으로 바꿉니다.

모든 마침표를 하이픈으로 재귀적으로 바꿉니다.

모든 하위 디렉터리의 모든 파일/폴더에서 모든 공백을 하이픈으로 바꾸려면 다음 명령을 실행합니다.

find /path/to/folder -depth -name "* *" -execdir rename 's/ /-/g' "{}" \;

효과가있다.

모든 하위 디렉터리의 모든 파일/폴더에서 모든 마침표(확장자 제외)를 하이픈으로 바꾸려면 다음 명령을 실행합니다.

find /path/to/folder -depth -name "*.*" -execdir rename 's/./-/g' "{}" \;

그러나 이것은 작동하지 않습니다. 대신, 파일 이름을 ----------의 긴 목록으로 바꿉니다.

내가 뭘 잘못했나요?

답변1

마침표는 정규 표현식에서 특별하며 모든 문자와 일치합니다. 문자 그대로 마침표를 일치시키려면 백슬래시를 사용하십시오.

rename 's/\./-/g'

GNU를 포함한 -execdir일부 find구현 의 경우 find각 이름은 마침표로 시작됩니다. 마침표를 건너뛰려면 다음을 사용하세요.

's/(?<=.)\./-/g'

(?<=.)과거 지향적 주장기간 이전에 뭔가가 있는지 확인하지만 교체하지는 않습니다.

일부 Perl rename변형은 코드가 파일의 기본 이름에만 작동하도록 하는 옵션도 지원하므로 -d비표준 -execdir1도 필요하지 않습니다.

find /path/to/folder -depth -name '* *' -exec rename -d 's/\./-/g' {} +

마지막 지점을 유지하려면 다음을 사용할 수 있습니다.미리보기 주장어딘가에 점이 뒤따르는 점만 대체합니다.

's/(?<=.)\.(?=.*\.)/-/g'

1 이는 하나만 호출하는 +대신 를 사용하여 여러 파일을 처리 할 수도 있음을 의미합니다 . 일부 구현에서는 이를 지원 하지만 이름에 파일이 포함된 각 디렉터리에 대해 적어도 한 번은 실행 해야 합니다.;renamefind+-execdirrename-

관련 정보