이름의 공통 부분을 기반으로 파일을 하위 디렉터리로 이동하는 방법은 무엇입니까?
예를 들어 및 라는 파일 comment_LastName.pdf
과 where all 및 변경이라는 하위 디렉터리 의 경우 comment_LastName.md
파일을 하위 디렉터리로 어떻게 이동합니까? (단, 모든 파일/디렉토리에 동시에 적용됨)FirstName_LastName/
FirstName
LastName
comment_X.pdf
Mister_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
명령에서 파일 이름을 디렉터리 배열 구성 요소에 태그합니다. 파일이 아직 존재하지 않으므로 대상 디렉터리의 와일드카드를 구분해야 합니다. 그렇지 않으면 와일드카드가 실패합니다.