• I would never shrink data-files (https://littlekendra.com/2016/11/08/shrinking-sql-server-data-files-best-practices-and-why-it-sucks/ ), log files however a different story.

    I use output of following to shrink the databases
    (Just make sure you have auto growth enabled on log files or you might halt database operation)

    select 'exec ( ''use [' + cast(db_name(database_id) as nvarchar(254)) + ']; dbcc shrinkfile(' + cast(file_id as nvarchar) + ',1)'') -- ' + cast(physical_name as nvarchar(max))
    from sys.master_files
    where database_id > 4
    and type_desc='LOG'
    order by 1

    Native or 3rd party backup tool, it will not work if you do not have space to hold the backup.

    As for restore you can partially restore a database, provided you have taken file-group backups along with transaction log bakup