Duplicati restore returns “0 files restored”, find only shows directories, and identical paths exist in multiple locations

I’m trying to restore a Firefox profile directory using Duplicati on Windows (Duplicati 2.2.0.3 stable, SMB backend). The restore fails both via the Web UI and CLI.

What confuses me is the behavior of the find command. When I run find against the Firefox profile path with a wildcard, the output shows the full directory tree with proper structure, but it only lists directories and some files, never any actual file content is restored.

To make matters more complex, the same profile directory exists in multiple places in the backup, including:

  • C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\

  • C:\Users\trick\Downloads\backup_restore\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\

  • C:\Users\trick\Downloads\acronis_restore\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\

So if I use a broad search pattern like:

*Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\*

it matches all of them. But I want to restore only this specific path:

C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\

into a temporary restore path I created, nothing else.


What I tried

  • Web UI restore (fails with 0 files restored)

  • CLI restore with variations:

    • With/without wildcards

    • With/without trailing slashes

    • Forward/backward slashes

    • With --dbpath

    • Specifying full path exactly

All result in:

0 files need to be restored (0 bytes)

Some CLI attempts even download dblock files and recreate the full folder structure, but no actual files appear in the restore path.


Verified: Profile directory exists multiple times

To confirm this, I used PowerShell to filter only the top-level matching directories from the find output:

& "C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" find `
  "smb://192.168.1.3/usbshare1/duplicati?auth-username=***&auth-password=***" `
  --passphrase="***" "*Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\*" |
  ForEach-Object { $_.Trim() } |
  Where-Object { $_ -match "w4msipw1\.default-release\\$" }

This correctly returned:

C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\
C:\Users\trick\Downloads\acronis_restore\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\
C:\Users\trick\Downloads\backup_restore\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\

My questions

  1. How can I instruct Duplicati to restore only one exact path, when the same folder exists in other locations?

  2. Should the CLI find list files as well as directories for that path, or is there something broken in how paths are resolved?

I’ll include full logs below, but any insight into why zero files are restored, or how to explicitly match the correct folder, would help a lot.

C:\Users\trick>"C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" restore "smb://192.168.1.3/usbshare1/duplicati?auth-username=MYUSER&auth-password=MYPASSWORD" --restore-path="C:\ff_restore\duplicati_restore" --passphrase="REDUCTED" --dbpath="C:\Users\trick\AppData\Local\Duplicati\NEMCINMQNQ.sqlite" "C:\Users\trick\AppData\Roaming\Mozilla\Firefox\*"
Restore started at 16/01/2026 14:00:38
Checking remote backup ...
  Listing remote folder ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restore completed without errors but no files were restored
Restored 0 (0 bytes) files to C:\ff_restore\duplicati_restore
Duration of restore: 00:00:06

C:\Users\trick>"C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" restore "smb://192.168.1.3/usbshare1/duplicati?auth-username=MYUSER&auth-password=MYPASSWORD" --restore-path="C:\ff_restore\duplicati_restore" --passphrase="REDUCTED" --dbpath="C:\Users\trick\AppData\Local\Duplicati\NEMCINMQNQ.sqlite" "C:\Users\trick\AppData\Roaming\Mozilla\Firefox\\"
Restore started at 16/01/2026 14:02:48
Checking remote backup ...
  Listing remote folder ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restore completed without errors but no files were restored
Restored 0 (0 bytes) files to C:\ff_restore\duplicati_restore
Duration of restore: 00:00:06

C:\Users\trick>"C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" restore "smb://192.168.1.3/usbshare1/duplicati?auth-username=MYUSER&auth-password=MYPASSWORD" --restore-path="C:\ff_restore\duplicati_restore" --passphrase="REDUCTED" --dbpath="C:\Users\trick\AppData\Local\Duplicati\NEMCINMQNQ.sqlite" "C:\Users\trick\AppData\Roaming\Mozilla\Firefox*"
Restore started at 16/01/2026 14:03:23
Checking remote backup ...
  Listing remote folder ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restore completed without errors but no files were restored
Restored 0 (0 bytes) files to C:\ff_restore\duplicati_restore
Duration of restore: 00:00:06

Find results

C:\Users\trick>"C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" find "smb://192.168.1.3/usbshare1/duplicati?auth-username=MYUSER&auth-password=MYPASSWORD" --passphrase="REDUCTED" "*w4msipw1*" | more
  Listing remote folder ...
  Downloading file duplicati-20260116T010000Z.dlist.zip.aes (24.843 MiB) ...
  Downloading file duplicati-20260115T010000Z.dlist.zip.aes (24.837 MiB) ...
  Downloading file duplicati-20260114T010000Z.dlist.zip.aes (24.832 MiB) ...
  Downloading file duplicati-20260113T010000Z.dlist.zip.aes (24.831 MiB) ...
  Downloading file duplicati-20260112T010000Z.dlist.zip.aes (24.831 MiB) ...
  Downloading file duplicati-20260111T010000Z.dlist.zip.aes (24.829 MiB) ...
  Downloading file duplicati-20260110T010000Z.dlist.zip.aes (24.828 MiB) ...
  Downloading file duplicati-20260105T010000Z.dlist.zip.aes (24.872 MiB) ...
  Downloading file duplicati-20251229T010000Z.dlist.zip.aes (24.813 MiB) ...
  Downloading file duplicati-20251222T010000Z.dlist.zip.aes (24.810 MiB) ...
  Downloading file duplicati-20251130T165736Z.dlist.zip.aes (24.709 MiB) ...
  Downloading file duplicati-20251130T163814Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T155950Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T101318Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T085225Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20260116T010000Z.dlist.zip.aes (24.843 MiB) ...
Listing contents 0 (16/01/2026 3:00:00):
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\bookmarkbackups\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{00e68183-fc7d-4a91-b5cc-f7f8272386db}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{036a55b4-5e72-4d05-a06c-cba2dfcc134a}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{62c1d54c-f371-4d89-8e07-69e67c8ebea8}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{8fbc7259-8015-4172-9af1-20e1edfbbd3a}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{94ed9bbf-a1e2-4e58-81ae-cd16dad818d8}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\{fca67f41-776b-438a-9382-662171858615}\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\3fa0be454be249c5bdbfa2ed16a8b5e3a6118706@temporary-addon\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\7cf5e454d7304ac8aa33890aa08c435528682ef7@temporary-addon\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\9f7c8a017e036fd4f83e310562e70fc3459a5314@temporary-addon\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\activist-bold-colorway@mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\amazondotcom@search.mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\bing@search.mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\data-leak-blocker@mozilla.com\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\ddg@search.mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\google@search.mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\jetpack-extension@dashlane.com\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\jid1-93CWPmRbVPjRQA@jetpack\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\reset-search-defaults@mozilla.com\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\support@lastpass.com\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\vpn@proton.ch\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\browser-extension-data\wikipedia@search.mozilla.org\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\crashes\
C:\Users\trick\AppData\Roaming\Mozilla\Firefox\Profiles\w4msipw1.default-release\crashes\events\
-- More  --

If you use a broad search pattern with * on the left, you get what you asked for.
If you want a specific path, don’t use a * on the left. That should solve that one.

Make sure it’s not the usual confusion of this message. It restores what it must.
If the destination already has the right files, version, etc., no need to do restore.
Whatever first run does, second run might decide it doesn’t need to waste time.

Yes, depending on query. Here, I used * on left, and ended in release\*"

C:\backup source\profileA\w4msipw1.default-release\
C:\backup source\profileA\w4msipw1.default-release\profile_file1.txt (4 bytes)
C:\backup source\profileA\w4msipw1.default-release\profile_file2.txt (4 bytes)
C:\backup source\profileB\w4msipw1.default-release\
C:\backup source\profileB\w4msipw1.default-release\profile_file1.txt (4 bytes)
C:\backup source\profileB\w4msipw1.default-release\profile_file2.txt (4 bytes)

Since you don’t want a specific profile tree, do similarly but with path on left.

So if I say: C:\backup source\profileB\w4msipw1.default-release\*"

C:\backup source\profileB\w4msipw1.default-release\
C:\backup source\profileB\w4msipw1.default-release\profile_file1.txt (4 bytes)
C:\backup source\profileB\w4msipw1.default-release\profile_file2.txt (4 bytes)

and if I restore (instead of find) to an empty restore-path, it looks like

Checking remote backup ...
  Listing remote folder ...
  2 files need to be restored (8 bytes)
  Downloading file duplicati-be9e3c59732274582b565f4c9e28af82f.dblock.zip (2.15 KiB) ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restored 2 (8 bytes) files to C:\backup restore

and I now have two files from the chosen profile, right in the top level folder.

As forecast, if I leave the files there and repeat the command, no file restore:

Checking remote backup ...
  Listing remote folder ...
  2 files need to be restored (8 bytes)
  Downloading file duplicati-be9e3c59732274582b565f4c9e28af82f.dblock.zip (2.15 KiB) ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restore completed without errors but no files were restored
Restored 0 (0 bytes) files to C:\backup restore
Duration of restore: 00:00:00

The default restore handling of folders to left can be changed if you like:

  --dont-compress-restore-paths (Boolean): Disable path compression
    on restore
    When restore a subset of a backup into a new folder, the
    shortest possible path is used to avoid generating deep paths
    with empty folders. Use this option to skip this compression,
    such that the entire original folder structure is preserved,
    including upper level empty folders.
    * default value: false

Have you tried an artifical setup like this to see if it works any better for you?
I’m a bit worried about your results, especially from the GUI which is simpler.

EDIT 1:

If you make a small artificial setup, it’s easier to compare results, debug, etc.
Describing becomes easier, and (if needed) database level work gets easier.
For side note, restore (but not find) got rewritten. Old one is available with:

  --restore-legacy (Boolean): Use legacy restore method
    Use this option to use the legacy restore method. The legacy
    restore method is slower than the new method, but may be more
    reliable in some cases.
    * default value: false

EDIT 2:

My find result with "*w4msipw1*" is

C:\backup source\profileA\w4msipw1.default-release\
C:\backup source\profileA\w4msipw1.default-release\profile_file1.txt (4 bytes)
C:\backup source\profileA\w4msipw1.default-release\profile_file2.txt (4 bytes)
C:\backup source\profileB\w4msipw1.default-release\
C:\backup source\profileB\w4msipw1.default-release\profile_file1.txt (4 bytes)
C:\backup source\profileB\w4msipw1.default-release\profile_file2.txt (4 bytes)

Another thing to check is to expand folders in GUI restore. Are files in view?
You could also try restoring individual files, but AFAIK \* after folder works.
I’m not sure why it needs that (GUI doesn’t), but the CLI was made earlier…

Thank you so much for taking the time to try and help me figuring this out. While I think I understand your reasoning for me to try using an artificial setup, I’ve yet to get to it.

For now, I just wanted to make it very simple and clear, to the best of my ability, the destination restore directory is empty.

C:\empty_dir_for_ts678>dir
 Volume in drive C has no label.
 Volume Serial Number is 188E-97AD

 Directory of C:\empty_dir_for_ts678

19/01/2026  00:50    <DIR>          .
               0 File(s)              0 bytes

And while the restore started like this

C:\empty_dir_for_ts678>"C:\Program Files\Duplicati 2\Duplicati.CommandLine.exe" restore "smb://192.168.1.3/usbshare1/duplicati?auth-username=MYUSER&auth-password=MYPASSWORD" --restore-path="C:/empty_dir_for_ts678" --passphrase="REDUCTED" --dbpath="C:/Users/trick/AppData/Local/Duplicati/NEMCINMQNQ\.sqlite" "C:/Users/trick/AppData/Roaming/Mozilla/Firefox/Profiles/i2vuvq7p\.default-release/*"
Restore started at 19/01/2026 0:53:19
  Listing remote folder ...
  Downloading file duplicati-20251130T085225Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T101318Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T155950Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T163814Z.dlist.zip.aes (743.544 KiB) ...
  Downloading file duplicati-20251130T165736Z.dlist.zip.aes (24.709 MiB) ...
  Downloading file duplicati-20251222T010000Z.dlist.zip.aes (24.810 MiB) ...
  Downloading file duplicati-20251229T010000Z.dlist.zip.aes (24.813 MiB) ...
  Downloading file duplicati-20260105T010000Z.dlist.zip.aes (24.872 MiB) ...
  Downloading file duplicati-20260112T010000Z.dlist.zip.aes (24.831 MiB) ...
  Downloading file duplicati-20260113T010000Z.dlist.zip.aes (24.831 MiB) ...
  Downloading file duplicati-20260114T010000Z.dlist.zip.aes (24.832 MiB) ...
  Downloading file duplicati-20260115T010000Z.dlist.zip.aes (24.837 MiB) ...
  Downloading file duplicati-20260116T010000Z.dlist.zip.aes (24.843 MiB) ...
  Downloading file duplicati-20260117T010000Z.dlist.zip.aes (33.817 MiB) ...
  Downloading file duplicati-20260118T010000Z.dlist.zip.aes (45.744 MiB) ...
  Downloading file duplicati-i8af1559e3eeb48eeb96535aeaf34e309.dindex.zip.aes (2.622 KiB) ...
  Downloading file duplicati-icc7e63b06b3148cc95804cf5e9832d33.dindex.zip.aes (5.356 KiB) ...
  Downloading file duplicati-ia2b835980bbd43da9236aab9fe01c283.dindex.zip.aes (2.560 KiB) ...
  Downloading file duplicati-i7d37750a40624288b98b969f33b2ffbf.dindex.zip.aes (2.622 KiB) ...
  Downloading file duplicati-i6ba38f8ef0a245c4821c87968b13d8a2.dindex.zip.aes (3.685 KiB) ...
  Downloading file duplicati-i7ecccf0f71f24dcb9ae8d41931bb46d2.dindex.zip.aes (2.700 KiB) ...
  Downloading file duplicati-if37c5e5787934546a41ec424837c0777.dindex.zip.aes (3.466 KiB) ...
  Downloading file duplicati-i44f75a63346c4ca68aee6aef5a304999.dindex.zip.aes (4.435 KiB) ...
  Downloading file duplicati-ia2f2f52dcab948e3aa57579b517538f9.dindex.zip.aes (2.700 KiB) ...
  Downloading file duplicati-iba37729ba4c24e2b928614619d9f8138.dindex.zip.aes (4.403 KiB) ...
  Downloading file duplicati-iebb1d288c3ce46f3b49b3eca0f08451c.dindex.zip.aes (2.700 KiB) ...
  Downloading file duplicati-if0422e39ca3e41988e9bf9fdd5c798c8.dindex.zip.aes (6.325 KiB) ...
  Downloading file duplicati-i37a0a0f40a4042499c747c6dfb826a1a.dindex.zip.aes (2.653 KiB) ...
  Downloading file duplicati-i435f5aea7159454d9d451055c4f8a685.dindex.zip.aes (13.747 KiB) ...

after a while, it ran and ended like this

  Downloading file duplicati-i56800fc3a2c3422493519cfb49cf2094.dindex.zip.aes (2.591 KiB) ...
  Downloading file duplicati-i5c596718420145678d8710ad63e0163f.dindex.zip.aes (6.388 KiB) ...
  Downloading file duplicati-i3d80cbc6034c4d068e5e646507ab6e0e.dindex.zip.aes (4.575 KiB) ...
Checking remote backup ...
  Listing remote folder ...
  0 files need to be restored (0 bytes)
Verifying restored files ...
Restore completed without errors but no files were restored
Restored 0 (0 bytes) files to C:/empty_dir_for_ts678
Duration of restore: 00:12:45

So what am I doing wrong? From what I understand from your response, this should have been a clear-cut restore.

"C:/Users/trick/AppData/Roaming/Mozilla/Firefox/Profiles/i2vuvq7p\.default-release/*"

shouldn’t have a backslash in front of the dot. It’s a wildcard, not a regex.

I worried about forward slash usage on Windows, but they seem tolerated
somewhat. dbpath and restore-path do, but the restore path does not.

--dbpath="C:/Users/trick/AppData/Local/Duplicati/NEMCINMQNQ\.sqlite"

also has an extraneous backslash, but the result is different. This appears
to dislike path and won’t use it. It makes a temp one from dlist and dindex.

I’m not sure if you’re thinking of regex or Linux double quoted strings there.
Windows double quoted string don’t use backslash for a character escape.
I’m not sure Duplicati follows Windows interpretation exactly, but examples:

C:\>echo i2vuvq7p^.default-release/*
i2vuvq7p.default-release/*

C:\>echo i2vuvq7p\.default-release/*
i2vuvq7p\.default-release/*

C:\>echo "i2vuvq7p\.default-release/*"
"i2vuvq7p\.default-release/*"

C:\>echo "i2vuvq7p^.default-release/*"
"i2vuvq7p^.default-release/*"

Unlike Linux shell, I “think” Windows interpretation is somewhat up to the app.

Honestly, I can’t reproduce this issue now. As a matter of a fact, I seem to have either not included or never having, a find output result that shows actual files. All my current find results show just directories. No actual files.

I wonder if this directory ever had files in it, and if that was the actual profile of my Firefox instance. Since the post started here, I’ve been able to recover from my other backup using Synology Active Backup for Business (thanks to my 3-2-1 backup strategy) and I figured out the the actual profile is i2vuvq7p.default-release

I suggest we close this issue as irrelevant for now.