ディレクトリとサブディレクトリの同じ名前のファイルを別のディレクトリに貼り付ける

ディレクトリとサブディレクトリの同じ名前のファイルを別のディレクトリに貼り付ける

ディレクトリとサブディレクトリに含まれる同じ名前のファイルを、同じサブディレクトリ構造を持つ別のディレクトリに貼り付ける方法を探しています。

たとえば、

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
}

つまり、連想配列のキーはファイルのデフォルト名Aではなく、最初のレベルのディレクトリコンポーネントを引いたファイルパスです。t

関連情報