zsh/zmv를 사용하여 패턴을 기반으로 파일 이동

zsh/zmv를 사용하여 패턴을 기반으로 파일 이동

이름의 공통 부분을 기반으로 파일을 하위 디렉터리로 이동하는 방법은 무엇입니까?

예를 들어 및 라는 파일 comment_LastName.pdf과 where all 및 변경이라는 하위 디렉터리 의 경우 comment_LastName.md파일을 하위 디렉터리로 어떻게 이동합니까? (단, 모든 파일/디렉토리에 동시에 적용됨)FirstName_LastName/FirstNameLastNamecomment_X.pdfMister_X/

이것은 실패한 시도 zmv였지만 올바른 명령을 알 수 없었습니다...

zmv -n 'comment_(*).(pdf|md)' '*_$1/$f'

답변1

$1역참조(예: 및 )를 도입하면 zmv의 대상 피연산자가 참조되는 것으로 나타나므로 $f이 경우 와일드카드를 추가할 수 없습니다. 이 문제를 해결하기 위해 제가 찾은 가장 좋은 방법은 해당 플래그를 사용 -p하고 zmv사용자 정의 mv기능을 제공하는 것입니다.

이것이 내가 생각해낸 것입니다:

mv2 () {
    local dir
    dir=(*_$3:h) 
    mv $1 $2 $dir[1]/$3:t
}
zmv -p mv2 'comment_(*).(pdf|md)' '$1/$f'

함수 에서 mv2파일을 배치할 디렉터리 배열을 만듭니다. 그런 다음 실제 mv명령에서 파일 이름을 디렉터리 배열 구성 요소에 태그합니다. 파일이 아직 존재하지 않으므로 대상 디렉터리의 와일드카드를 구분해야 합니다. 그렇지 않으면 와일드카드가 실패합니다.

관련 정보