異なるディレクトリから同じ名前のファイルを貼り付けるにはどうすればいいですか?

異なるディレクトリから同じ名前のファイルを貼り付けるにはどうすればいいですか?

もう一つ質問があります。

3 つの異なるディレクトリがありますが、その中には同じ名前の同じファイルがあります。例:

ディレクトリ1:

dir1/file1.txt
dir1/file2.txt
dir1/file3.txt

ディレクトリ2:

dir2/file1.txt
dir2/file2.txt
dir2/file3.txt

ディレクトリ3:

dir3/file1.txt
dir3/file2.txt
dir3/file3.txt

同じ名前のファイルを貼り付けたいと思います。いいね:

dir1/file1.txt+ dir2/file1.txt+ dir3/file1.txt=file1.txt

dir1/file2.txt+ dir2/file2.txt+ dir3/file2.txt=file2.txt

dir1/file3.txt+ dir2/file3.txt+ dir3/file3.txt=file3.txt

どうすればいいですか?

答え1

ファイルの内容を連結したい場合は、次のようにします。

cat dir*/file1 > file1
cat dir*/file2 > file2
cat dir*/file3 > file3

ワイルドカードを使用すると、cat コマンドはパターンに一致するすべてのディレクトリ/ファイルの内容を読み取るため、結果のファイルに書き込まれる 3 つのディレクトリすべてにある同じ名前のファイルの内容が取得されます。

答え2

ディレクトリ名だけがわかっていてファイル名がわからない場合は、ディレクトリの 1 つからファイル名を配列に保存し、要素を反復処理してディレクトリ名を削除し、各ディレクトリから結果のファイル名を貼り付けることができます。

files=(dir3/*)
for p in "${files[@]}"; do 
f=${p#*/}; paste dir1/"$f" dir2/"$f" dir3/"$f" > "$f"; done

globを使用してシェルに展開させると、より短くなることに注意してください(ディレクトリ名は辞書順で使用されます)。例:

for p in "${files[@]}"; do f=${p#*/}; paste dir*/"$f" > "$f"; done

関連情報