디렉터리와 하위 디렉터리에 있는 동일한 이름의 파일을 다른 디렉터리에 붙여넣기

디렉터리와 하위 디렉터리에 있는 동일한 이름의 파일을 다른 디렉터리에 붙여넣기

디렉터리와 하위 디렉터리에 포함된 동일한 이름의 파일을 동일한 하위 디렉터리 구조를 가진 다른 디렉터리에 붙여넣는 방법을 찾고 있습니다.

예를 들어:

Dir1/a/a/file1
Dir2/a/a/file1

다음 디렉터리에 붙여넣어집니다.

Dir3/a/a/file1

이제 stackexchange에서 zsh 코드 조각을 발견하고 다음을 얻도록 수정했습니다.

#!/bin/zsh

typeset -A files
for file (dir*/*/*/*(nN)) files[$file:t]+=$file$'\0'
for file (${(k)files}) paste -d "\0" ${(0)files[$file]} > outputDir/*/*/$file

코드가 outputDir 뒤의 "*"를 이해하지 못하기 때문에 작동하지 않습니다. ouputDir/a/a/$file과 같은 정확한 하위 디렉터리 세트를 설정하면 매력적으로 작동합니다. 저는 이 코드를 통해 zsh를 발견한 이후로 zsh에 대해 잘 모릅니다. 출력 디렉터리와 동일한 하위 디렉터리 구조를 유지하려면 어떻게 해야 합니까?

당신의 도움을 주셔서 감사합니다. 인사

답변1

다음과 같은 경우를 선호하는 것 같습니다.

#! /bin/zsh -

typeset -A files
for file (dir*/*/*/*(nN)) files[${file#*/}]+=$file$'\0'
for file (${(k)files}) {
  mkdir -p outputDir/$file:h &&
    paste -d '\0' ${(0)files[$file]} > outputDir/$file
}

즉, 연관 배열의 키는 파일의 기본 이름(ail) A이 아니라 첫 번째 수준 디렉터리 구성 요소를 뺀 파일 경로입니다 .t

관련 정보