Como posso colar arquivos com o mesmo nome de diretórios diferentes?

Como posso colar arquivos com o mesmo nome de diretórios diferentes?

Eu tenho outra pergunta.

Tenho três diretórios diferentes, mas tenho os mesmos arquivos, com o mesmo nome. Por exemplo:

Diretório1:

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

Diretório2:

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

Diretório3:

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

Gostaria de colar os arquivos com o mesmo nome. Gosto disso:

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

Como eu posso fazer isso?

Responder1

Se quiser concatenar o conteúdo do arquivo, você pode fazer isso

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

O curinga fará com que o comando cat leia o conteúdo de todos os diretórios/arquivos que correspondam ao padrão, assim você obterá o conteúdo dos arquivos com o mesmo nome em todos os três diretórios gravados no arquivo resultante.

Responder2

Supondo que você conheça apenas os nomes dos diretórios, mas não os nomes dos arquivos, você pode salvar os nomes dos arquivos de um dos diretórios em uma matriz e, em seguida, iterar sobre os elementos, removendo o nome do diretório e colando o nome do arquivo resultante de cada diretório:

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

Observe que ele poderia ser mais curto se um glob fosse usado para que o shell o expandisse (os nomes dos diretórios seriam então usados ​​​​em ordem lexicográfica), por exemplo

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

informação relacionada