파일 이름을 하위 디렉터리로 바꾸기

파일 이름을 하위 디렉터리로 바꾸기

'rename'을 사용하여 여러 파일의 이름을 바꾸려고 하는데 정규 표현식이 훌륭하게 설정되어 있습니다.

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1).$3|' *

그러나 나는 각 파일을 공통 시작 디렉터리에 넣기를 정말로 원했기 때문에 부끄럽게도 다음과 같이 시도했습니다.

rename --verbose --path 's|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3|' *

그러나 그것은 디렉토리가 존재하지 않는다고 불평합니다. 이름 바꾸기에 유용한 플래그가 누락되었나요? 아니면 더 나은 도구인가요?

답변1

Perl 기반을 사용하는 경우 누락된 디렉토리를 생성하기 위해 rename호출하는 것을 막을 수 있는 것은 없습니다 .mkdir()

rename --verbose '
    s|^\[(....)\](.*)\.(.*)|$2 ($1)/$2 ($1).$3| &&
    mkdir("$2 ($1)")' *

이는 사용하는 것과 동일한 Perl 표현식이며 mkdir()표현식이 일치하는 경우 디렉토리를 생성하기 위해 끝에 호출이 추가됩니다.

원래 대체가 올바른지 아닌지, 또는 그것이 의미가 있는지는 모르겠습니다(어떤 유형의 파일 이름을 가지고 있는지 모르겠습니다). 요점은 표현식이 일반적인 Perl 표현식이기 때문에 $_(기본 변수)가 마지막에 결과 파일 이름으로 설정되어 있는 한 어떤 Perl 코드라도 자유롭게 사용할 수 있다는 것입니다.

관련 정보