디렉터리와 하위 디렉터리에 포함된 동일한 이름의 파일을 동일한 하위 디렉터리 구조를 가진 다른 디렉터리에 붙여넣는 방법을 찾고 있습니다.
예를 들어:
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