ディレクトリとサブディレクトリに含まれる同じ名前のファイルを、同じサブディレクトリ構造を持つ別のディレクトリに貼り付ける方法を探しています。
たとえば、
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