¿Cómo puedo pegar archivos con el mismo nombre desde diferentes directorios?

¿Cómo puedo pegar archivos con el mismo nombre desde diferentes directorios?

Tengo otra pregunta.

Tengo tres directorios diferentes pero tengo los mismos archivos dentro, con el mismo nombre. Por ejemplo:

Directorio1:

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

Directorio2:

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

Directorio3:

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

Me gustaría pegar los archivos con el mismo nombre. Gusta:

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

¿Cómo puedo hacerlo?

Respuesta1

Si desea concatenar el contenido del archivo, puede hacer esto

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

El comodín hará que el comando cat lea el contenido de todos los directorios/archivos que coincidan con el patrón, por lo que obtendrá el contenido de los archivos con el mismo nombre en los tres directorios escritos en el archivo resultante.

Respuesta2

Suponiendo que solo conoce los nombres de los directorios pero no los nombres de los archivos, puede guardar los nombres de los archivos de uno de los directorios en una matriz y luego iterar sobre los elementos, eliminando el nombre del directorio y pegando el nombre del archivo resultante de cada directorio:

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

Tenga en cuenta que podría acortarse si se usara un globo para que el shell lo expandiera (los nombres de los directorios luego se usarían en orden lexicográfico), por ejemplo

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

información relacionada