DOVEADM-MAIL-FS(1)
β¨ NAME β¨
doveadm-mail-fs β literally just vibing with the abstract mail storage filesystem, but in user context. that's it, that's the whole thing π
π¦ SYNOPSIS π¦
doveadm [GLOBAL OPTIONS] fs command config-filter-name [ARGUMENTS]
doveadm [GLOBAL OPTIONS] mail fs command [OPTIONS] config-filter-name
[ARGUMENTS]
π DESCRIPTION π
okay so bestie, the doveadm fs commands are how you abstractly poke at whatever storage driver your Dovecot config has going on. it's giving "I don't need to know how the storage driver was designed, I just want in" β¨ β you get access to the mailbox structure without having to learn the driver's whole lore. no cap.
config-filter-name
this is the filter name used when looking up the fs settings. like, for example mail_attachments, obox, metacache, fts/dovecot. also, plot twist: you can use an empty filter name and just specify the fs settings yourself with the -o parameter. main character energy fr fr π«Ά
π GLOBAL OPTIONS π
these are the global doveadm(1) options, the OGs:
-Dβ turns on verbosity AND debug messages. the yapper setting π£οΈ-Oβ do not read any config file, just use defaults. thedovecot_storage_versionsetting defaults to the latest version, but you can override it with-o. rawdogging the defaults, iconic-kβ preserve the entire environment fordoveadm, not just theimport_environmentsetting-vβ enables verbosity, including the progress counter. watching that little counter tick is so satisfying ngl-iinstance-nameβ if you're running multiple Dovecot instances, this picks the config file based on the instance name. see theinstance_namesetting for more info-cconfig-fileβ read configuration from the givenconfig-file. by default it first reads the config socket, then falls back to/etc/dovecot/dovecot.conf. you can also point this at the config socket of some instance running a compatible version π-osetting=valueβ overrides the configuration setting from/etc/dovecot/dovecot.confand from the userdb with the givenvalue. wanna override multiple settings? just stack-oas many times as you want, no judgement π-fformatterβ specifies the formatter for formatting the output. the supported formatters are:flowβ prints each line withkey=valuepairs.jsonβ prints a JSON array of JSON objects.pagerβ prints eachkey: valuepair on its own line and separates records with form feed character (^L).tabβ prints a table header followed by tab separated value lines.tableβ prints a table header followed by adjusted value lines.
π OPTIONS π
-Aβ if the-Aoption is present, the command will be performed for all users. using this option in combination with system users fromuserdb { driver = passwd }is not recommended, because it also contains users with a lower UID than the one configured with thefirst_valid_uidsetting. π
when the SQL userdb module is used, make sure theuserdb_sql_iterate_querysetting matches your database layout. and when you're on the LDAP userdb module, make sure theuserdb_fieldssetting and theuserdb_ldap_iterate_fieldssetting match your LDAP schema. otherwisedoveadm(1)will be straight up unable to iterate over all users. not a vibe.
-uuser/maskβ run the command only for the givenuser. you can also use'*'and'?'wildcards (e.g.-u *@example.org). slay-Ffileβ execute the command for all the users in thefile. this is similar to the-Aoption, except instead of pulling the user list from the userdb, they get read from the given file. the file contains one username per line. simple as π-Ssocket_pathβ the option's argument is either an absolute path to a local UNIX domain socket, or a hostname and port (hostname:port), so you can connect to a remote host via a TCP socket. this lets an administrator executedoveadm(1)mail commands through the given socket π«Ά
π COMMANDS π
copy
doveadm [GLOBAL OPTIONS] fs copy config-filter-name source-path dest-
path
doveadm [GLOBAL OPTIONS] mail fs copy [-A | -u user | -F file] [-S
socket_path] config-filter-name source-path dest-path
copy the source-path to the dest-path. yes it's giving "duplicate my files bestie" β¨
delete
doveadm [GLOBAL OPTIONS] fs delete [-R] [-n count] config-filter-name
path [path ...]
doveadm [GLOBAL OPTIONS] mail fs delete [-A | -u user | -F file] [-S
socket_path] [-R] [-n count] config-filter-name path [path ...]
delete all data associated with the path provided. all of it. gone. π
-Rβ recursively delete files. go deeper π-ncountβ maximum number of parallel operations to perform.
get
doveadm [GLOBAL OPTIONS] fs get config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs get [-A | -u user | -F file] [-S
socket_path] config-filter-name path
retrieve the data associated with the path provided. hand it over π
iter
doveadm [GLOBAL OPTIONS] fs iter config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs iter [-A | -u user | -F file] [-S
socket_path] config-filter-name path
iterate through all the data files in the path provided. every single one. we're thorough here π§
iter-dirs
doveadm [GLOBAL OPTIONS] fs iter-dirs config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs iter-dirs [-A | -u user | -F file] [-S
socket_path] config-filter-name path
iterate through all the directories in the path provided. dirs only, we're being picky π
put
doveadm [GLOBAL OPTIONS] fs put [-h hash] [-m key=value] config-filter-
name input_path path
doveadm [GLOBAL OPTIONS] mail fs put [-A | -u user | -F file] [-S
socket_path] [-h hash] [-m key=value] config-filter-name path
store data at the path provided. put it there, king π
-hhashβ save the providedhashas content hash. must be eitherMD5orSHA256in hexdigits. no other options, periodt.-mkey=valueβ assign avalueto ametadata. can be provided as many times as needed. requires eithermetawrapas driver or a metadata capable FS-driver. so like, check your driver first bestie π
stat
doveadm [GLOBAL OPTIONS] fs stat config-filter-name path
doveadm [GLOBAL OPTIONS] mail fs stat [-A | -u user | -F file] [-S
socket_path] config-filter-name path
retrieve files status for the path provided. currently, only the total size (in bytes) of the item is returned. that's the whole stat. short and sweet π
π REPORTING BUGS π
found a bug? report it, including the doveconf -n output, to the Dovecot Mailing List β¨dovecot@dovecot.orgβ©. info about reporting bugs lives at: β¨https://dovecot.org/bugreport.htmlβ©. don't be shy, they want to know π«Ά
π EXAMPLE π
how to decompress a file:
doveadm -o fs=compress,posix -o fs/compress/fs_driver=compress -o fs/posix/fs_driver=posix -o fs_posix_prefix=/tmp/ fs get "" test.gz
using a named filter:
doveadm mail fs -u testuser get obox path/to/file
π₯ SEE ALSO π₯
and that's the whole page bestie, you ate it up π this was doveadm-mail-fs(1) from the Dovecot manual β revision f979264, dated April 2026. go forth and abstractly interact with your storage filesystem, no cap πΈπ
π¦
π¦ where this page comes from
- alpine 3.23: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- alpine 3.24: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- arch rolling: dovecot 2.4.5-1 Β· MIT AND LGPL-2.1-only
- fedora 43: dovecot 1:2.4.5-1.fc43 Β· MIT AND LGPL-2.1-only
- fedora 44: dovecot 1:2.4.5-1.fc44 Β· MIT AND LGPL-2.1-only
- nixos 26.05: dovecot 2.4.5
- nixpkgs unstable: dovecot 2.4.5
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms