Second-half goals from Robert Lewandowski and Lamine Yamal for Barcelona set up an El Clasico against Real Madrid in the Spanish Super Cup final.
The Polish striker netted just before the hour and then Yamal grabbed in time added on to ensure Barca deservedly beat Osasuna 2-0 in the semi-final.
They will now meet their fierce rivals, who beat Atletico Madrid on Wednesday, in Sunday’s final in Riyadh, bidding to win a 15th Super Cup.
Barca were on top from the start and could have had the game in the bag in the first 20 minutes, but they came up against a human wall in the shape of Osasuna goalkeeper Sergio Herrera.
Herrera kept out Andreas Christensen’s volley from a corner, got down well to stop a Lewandowski effort and then tipped over Ilkay Gundogan’s free-kick.
The one time he was beaten, Ferran Torres was just inches off target after Barca had won the ball back in a dangerous position.
The first-half chances kept coming as Sergi Roberto missed his kick from a golden position before Lewandowski put another header over.
Barca goalkeeper Inaki Pena had to make a save of his own to keep out Ante Budimir’s close-range effort and then Raphina limped off injured in the lead up to half-time.
Xavi’s men were back on the front foot in the second half and got their reward in the 59th minute.
Christensen regained possession before Gundogan picked out Lewandowski, who found the bottom corner for his 11th goal of the season.
Joao Felix could have made the game safe soon after but was the latest player to be denied by Herrera, who kept out the Portugal international’s curling effort.
Instead, Barcelona’s lead remained vulnerable and Pena had to pull off another good save to deny Budimir in the 77th minute, while Raul García volleyed over the bar.
They finally killed the game in the third minute of time added on as Yamal struck through Herrera after Felix’s mazy run.