DOVEADM-DEDUPLICATE(1)

πŸ‘‘ DOVEADM-DEDUPLICATE(1) πŸ‘‘

ok so bestie, we're in the Dovecot manual, section 1, and this is the whole entire glow-up of doveadm-deduplicate. buckle up πŸŽ€


✨ NAME ✨

doveadm-deduplicate β€” expunge duplicate messages πŸ’… that's it. that's the job. and she ate.

πŸ¦‹ SYNOPSIS πŸ¦‹

doveadm [GLOBAL OPTIONS] deduplicate [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] [-m] search_query

πŸ’– DESCRIPTION πŸ’–

So this command exists to expunge duplicated messages in mailboxes. no cap.

doveadm deduplicate is mainly useful for reverting some (more or less) accidental duplication of messages β€” like, say, after a doveadm copy or a doveadm import. we've all been there πŸ™ˆ.

Here's the tea, and it's important: doveadm(1) will delete the newest duplicated messages from the mailbox and keep the oldest. oldest stays, newest gets yeeted. periodt.

⚠️ Deduplication across multiple mailboxes is not supported. not a vibe, but it's the rules.

🌸 GLOBAL OPTIONS 🌸

these are the global doveadm(1) options β€” the universal ones every command shares:

  • -D β€” enables verbosity and debug messages. she's chatty and we love her πŸ’¬
  • -O β€” do not read any config file, just use defaults. The dovecot_storage_version setting defaults to the latest version, but it can be overridden with -o.
  • -k β€” preserve the entire environment for doveadm, not just the import_environment setting.
  • -v β€” enables verbosity, including a progress counter. progress bar moment ✨
  • -i instance-name β€” if you're using multiple Dovecot instances, choose the config file based on this instance name. See the instance_name setting for more information.
  • -c config-file β€” read configuration from the given config-file. By default it first reads the config socket, and then falls back to /etc/dovecot/dovecot.conf. You can also point this at the config socket of some instance running a compatible version.
  • -o setting=value β€” overrides the configuration setting from /etc/dovecot/dovecot.conf and from the userdb with the given value. To override multiple settings, the -o option may be specified multiple times. stack 'em, bestie 🫢

πŸŽ€ OPTIONS πŸŽ€

  • -A β€” if the -A option is present, the command will be performed for all users. Using this option in combination with system users from userdb { driver = passwd } is not recommended, because it contains also users with a lower UID than the one configured with the first_valid_uid setting. πŸ‘€ When the SQL userdb module is used, make sure that the userdb_sql_iterate_query setting matches your database layout. When using the LDAP userdb module, make sure that the userdb_fields setting and the userdb_ldap_iterate_fields setting match your LDAP schema. Otherwise doveadm(1) will be unable to iterate over all users. no pressure tho 😭
  • -F file β€” execute the command for all the users in the file. This is similar to the -A option, but instead of getting the list of users from the userdb, they are read from the given file. The file contains one username per line. one per line, don't get cute.
  • --no-userdb-lookup β€” do not perform userdb lookup. Use the USER environment variable to specify the username.
  • -m β€” if the -m option is given, doveadm(1) will deduplicate by the Message-Id header. By default deduplication will be done by message GUIDs. pick your fighter βš”οΈ
  • -S socket_path β€” the option's argument is either an absolute path to a local UNIX domain socket, or a hostname and port (hostname:port), in order to connect to a remote host via a TCP socket. This allows an administrator to execute doveadm(1) mail commands through the given socket. πŸ”Œ remote slay.
  • -u user/mask β€” run the command only for the given user. It's also possible to use '*' and '?' wildcards (e.g. -u *@example.org). wildcard girlies rise πŸ¦‹

⭐ ARGUMENTS ⭐

  • search_query β€” expunge duplicates found from messages matching the given search query. Typically a search query like 'mailbox mailbox_name OR mailbox other_box' will be sufficient. See doveadm-search-query(7) for the details. iykyk.

πŸ“ EXAMPLE πŸ“

This example shows how to list and expunge duplicate messages from a mailbox. watch the glow-up in real time:

  doveadm -f table fetch -u jane 'guid uid' mailbox a_Box | sort

  guid                             uid
  8aad0f0a30169f4bea620000ca356bad 18751
  8aad0f0a30169f4bea620000ca356bad 18756
  923e301ab9219b4b4f440000ca356bad 18748
  923e301ab9219b4b4f440000ca356bad 18753

  doveadm deduplicate -u jane mailbox a_Box
  doveadm -f table fetch -u jane 'guid uid' mailbox a_Box | sort

  guid                             uid
  8aad0f0a30169f4bea620000ca356bad 18751
  923e301ab9219b4b4f440000ca356bad 18748
  a7999e1530739c4bd26d0000ca356bad 18749

see how the dupes just... left? πŸ’€ the oldest of each pair stayed, the newest got expunged. exactly as described, no notes.


πŸ’€ REPORTING BUGS πŸ’€

Found a bug? Report bugs β€” and please, please include your doveconf -n output πŸ™ β€” to the Dovecot Mailing List ⟨dovecot@dovecot.org⟩. Information about reporting bugs is available at: ⟨https://dovecot.org/bugreport.html⟩

🌈 SEE ALSO 🌈

doveadm(1), doveadm-import(1)


and that's the whole page, bestie πŸ’– This one comes from the Dovecot source, revision f979264, dated April 2026. now go forth and deduplicate responsibly, main character πŸ‘‘βœ¨

πŸ“¦ where this page comes from