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