我正在寻找一种方法,将目录和子目录中包含的同名文件粘贴到具有相同子目录结构的另一个目录。
例如 :
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,因为我是通过这段代码发现它的。我怎样才能保持输出目录相同的子目录结构?
感谢您的帮助。问候
答案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
}
也就是说,A
关联数组中的键是文件的路径减去第一级目录组件,而不是t
文件的基本名称 (ail)。