aeroftp-cli
Select a command on the left to see its arguments, options and runnable examples. Press ⌘K to search.
Select a command on the left to see its arguments, options and runnable examples. Press ⌘K to search.
CLI version: 4.0.2 · 77 commands. Machine-readable JSON: https://www.aeroftp.app/assets/cli-explorer/cli-spec.json
Categories: safe
Summary: Show detailed server info, account, and storage quota
Description: Show detailed server info, account, and storage quota
Syntax: aeroftp-cli about [OPTIONS] [URL]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Server and account info
aeroftp-cli about --profile ftps-prodServer: ftps.example.com Protocol: FTPS (explicit, TLS 1.3) Account: aeroftp@aeroftp.app Quota: 1.8 / 5.0 GB Features: RESUME, MLST, UTF-8, EPSV Latency: 42 ms (RTT to server)
Categories: modify
Summary: AeroRsync delta engine: configuration and live diagnostics
Description: AeroRsync delta engine: configuration and live diagnostics
Syntax: aeroftp-cli aerorsync [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Probe the aerorsync delta engine
aeroftp-cli aerorsync probe --profile sftp-prodMode: auto (will pick native if both ends support rsync >=3.2) Probe: SSH endpoint OK, rsync 3.2.7 detected on remote Result: NATIVE rsync available (Z.4.5 R1 transport) Use: aeroftp-cli sync --profile sftp-prod ... will accelerate
Categories: advanced
Summary: AeroAgent - AI-powered interactive agent with tool execution
Description: AeroAgent - AI-powered interactive agent with tool execution
Syntax: aeroftp-cli agent [OPTIONS]
-m, --message : One-shot message (run and exit)-p, --provider : AI provider (anthropic, openai, gemini, ollama, etc.)--model : Model override-c, --connect : Pre-connect to server on startup--auto-approve : Auto-approve tool calls: safe, medium, high, all (default: safe)--max-steps : Max autonomous steps (default: 10) (default: 10)--orchestrate: Orchestration mode (JSON-RPC 2.0 over stdin/stdout)--mcp: MCP server mode (Model Context Protocol)--stdin: Read message from stdin-y, --yes: Auto-approve all tools (equivalent to --auto-approve all)--plan-only: Plan only - show execution plan without running--cost-limit : Cost limit in USD (stop when exceeded)--system : Custom system prompt (or @file.txt to load from file)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start the agent surface (MCP stdio)
aeroftp-cli agent --mcpAeroFTP agent v3.8.5 ready Transport: stdio (JSON-RPC 2.0, MCP) Tools: 39 exposed (read 21, write 14, system 4) Waiting for client...
Categories: advanced
Summary: Show the canonical task-oriented quick-start for AI agents
Description: Show the canonical task-oriented quick-start for AI agents
Syntax: aeroftp-cli agent-bootstrap [OPTIONS]
--task : Optional task focus for tailored commands [possible values: explore, verify-file, transfer, backup, reconcile]--path : Remote path or working path for the task--pattern : Optional filename or glob pattern--source-profile : Source profile for transfer/backup flows--dest-profile : Destination profile for transfer/backup flows--source-path : Source remote path for transfer/backup flows--dest-path : Destination remote path for transfer/backup flows--local-path : Local path for local-vs-remote verification flows--remote-path : Remote path for local-vs-remote verification flows-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Canonical task workflows for AI agents
aeroftp-cli agent-bootstrap --json{
"intent_examples": [
{"goal":"upload site","workflow":["connect","sync-doctor","sync"]},
{"goal":"clone bucket","workflow":["transfer-doctor","transfer"]},
{"goal":"recover space","workflow":["ncdu","cleanup","dedupe"]}
]
}
Categories: advanced
Summary: Single-shot connect surface for agents: returns per-block status (connect/capabilities/quota/path) in one JSON call. Replaces the boilerplate `connect → about → df → ls /` sequence.
Description: Single-shot connect surface for agents: returns per-block status (connect/capabilities/quota/path) in one JSON call. Replaces the boilerplate `connect → about → df → ls /` sequence.
Syntax: aeroftp-cli agent-connect [OPTIONS] <PROFILE>
--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Open an ad-hoc connection for the agent
aeroftp-cli agent-connect sftp://ci@build.example.com:/srv/staging --json{
"session_id": "s_8c1d4e",
"protocol": "sftp",
"host": "build.example.com",
"ttl_s": 900,
"tools": ["ls","get","put","sync","rm"]
}
Categories: advanced
Summary: Show machine-readable CLI capabilities
Description: Show CLI capabilities for AI agent discovery (always JSON)
Syntax: aeroftp-cli agent-info --json
--redact-identifiers: Redact per-profile host and username identifiers (PRIV-01). Use when a large agent context only needs tool discovery, not account metadata; the full identifiers stay available via `profiles --json`-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Machine-readable capability discovery
aeroftp-cli agent-info --json{
"version": "3.8.5",
"capabilities": {
"agent_native_tools": 39,
"main_command_groups": 38
},
"commands": { "safe": [...], "modify": [...], ... }
}
Categories: advanced
Summary: List configured AI providers and models from the encrypted vault
Description: List configured AI providers and models from the encrypted vault
Syntax: aeroftp-cli ai-models [OPTIONS]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List AI models known to the agent layer
aeroftp-cli ai-modelsNAME VENDOR CTX ROLE claude-opus-4-7 anthropic 200K planner claude-sonnet-4-6 anthropic 200K actor claude-haiku-4-5 anthropic 200K fast-paths gpt-5o openai 128K fallback 4 models registered
Categories: modify
Summary: Manage CLI aliases stored in config.toml
Description: Manage CLI aliases stored in config.toml
Syntax: aeroftp-cli alias [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List CLI aliases
aeroftp-cli alias listALIAS EXPANDS TO prod --profile ftps-prod backup --profile hetzner-backup deploy sync --profile ftps-prod ./_site/ /srv/site/ 3 aliases defined
Categories: modify
Summary: Toggle an opt-in shell alias (default: aero) on or off
Description: Toggle an opt-in shell alias (default: aero) on or off
Syntax: aeroftp-cli alias-toggle [OPTIONS] [NAME]
--bin-dir : Override the target directory (default: ~/.local/bin on Unix)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Enable or disable an alias
aeroftp-cli alias-toggle deploy --offAlias 'deploy' is now DISABLED (kept in config) Re-enable with: aeroftp-cli alias-toggle deploy --on
Categories: safe
Summary: Run autonomous server audits across saved profiles (M3)
Description: Run autonomous server audits across saved profiles (M3)
Syntax: aeroftp-cli audit [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Audit recent agent operations
aeroftp-cli audit --since 24hWHEN ACTOR ACTION TARGET 2026-05-27 09:14:02 agent:claude sync /srv/site 2026-05-27 10:02:18 user:alex profile-add staging 2026-05-27 10:44:51 agent:claude transfer /srv -> /backups 3 entries in last 24h
Categories: advanced
Summary: Run batch automation scripts
Description: Execute commands from a batch script (.aeroftp-script file). The `.aeroftp` extension is reserved for profile-export backups and is rejected here with a rename hint (issue #225)
Syntax: aeroftp-cli batch file.aeroftp-script
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Run a batch automation script
aeroftp-cli batch ./deploy.aeroftpLoaded ./deploy.aeroftp (12 steps) [1/12] connect ftps-prod OK [2/12] sync ./_site /srv/site OK (52 added, 14 updated) [3/12] hashsum /srv/site/... OK ... [12/12] notify slack OK Batch finished in 24.1s
Categories: safe
Summary: Run a community-driven benchmark across upload/download/list/stat operations. Output is sanitized: no hostnames, paths, credentials, or bucket names are recorded. Schema v1 contract in `docs/dev/roadm
Description: Run a community-driven benchmark across upload/download/list/stat operations. Output is sanitized: no hostnames, paths, credentials, or bucket names are recorded. Schema v1 contract in `docs/dev/roadmap/APPENDIX-BENCHMARK/01_JSON-Schema-v1.md`
Syntax: aeroftp-cli benchmark [OPTIONS] [LEVEL]
--sizes : Override file sizes (comma-separated, e.g. "1M,100M,1G")--runs : Override timed runs per (operation, size) tuple--operations : Comma-separated operations: upload,download,list,stat,delete--consent-publish: Append anonymized environment metadata and print a paste-ready Issue block--anonymize-extra: Hash provider hint as well (extra anonymization)--report : Write the JSON report to a file--profile-timeout : Total benchmark timeout in seconds (default 3600). Bumps the cap for slow cold storage (idrive S3, InfiniCloud) so 1G transfers can finish without aborting mid-sweep--test-root-prefix : Custom remote prefix for the scratch tree (default: provider initial path joined with `aeroftp-bench`). Use this to redirect the bench payloads under a writable sub-path on providers that refuse operations on `/` (kDrive, SeaFile WebDAV)--pre-delete: Delete the remote payload between successive upload runs of the same size. Workaround for strict providers (4shared and several WebDAV servers) that reject overwrite-on-PUT-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Full benchmark suite
aeroftp-cli benchmark --profile ftps-prod --duration 60sPhase 1/4: tiny files (1 KB x 1000) ... 87 ops/s Phase 2/4: medium (1 MB x 32) ... 9.4 MB/s Phase 3/4: large (64 MB x 2) ... 12.1 MB/s Phase 4/4: list+stat sweep (5000 obj) ... 412 obj/s Score: 6.8 / 10 (FTPS, residential uplink)
Categories: safe
Summary: Print file to stdout
Description: Print remote file to stdout (for piping)
Syntax: aeroftp-cli cat --profile NAME /path/file
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Print a remote text file to stdout
aeroftp-cli cat --profile ftps-prod /srv/site/robots.txtUser-agent: * Allow: / Sitemap: https://example.com/sitemap.xml
Categories: advanced
Summary: Browse the supported provider catalog (companies, protocols, free tier, regions)
Description: Browse the supported provider catalog (companies, protocols, free tier, regions)
Syntax: aeroftp-cli catalog [OPTIONS] [QUERY]
--category : Filter to one category: protocols, object-storage, webdav, cloud-storage, media-services, developer (aliases: s3, object, cloud, media, dev)--free: Show only companies with a free tier (at least one free method)--paid: Show only paid-only companies (no free connection method)--protocols: Expand to one row per connection method instead of per company-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `catalog` (offline help)
aeroftp-cli help catalogBrowse the supported provider catalog (companies, protocols, free tier, regions)
Mirrors the GUI "Add Service" list view, generated from the same `providerCatalog.ts` single source of truth (embedded as `cli_catalog.json`, regenerated by `npm run gen:cli-catalog`). Purely local: no vault, no network. Use `--json` for the full structured data.
Usage: aeroftp-cli catalog [OPTIONS] [QUERY]
Arguments:
[QUERY]
Case-insensitive search over company, country, regions, protocol labels, provider ids and free-tier notes
Options:
--category <CATEGORY>
Filter to one category: protocols, object-storage, webdav, cloud-storage, media-services, developer (aliases: s3, object, cloud, media, dev)
--free
Show only companies with a free tier (at least one free method)
--paid
Show only paid-only companies (no free connection method)
--protocols
Expand to one row per connection method instead of per company
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
Categories: advanced
Summary: Compare local and remote trees
Description: Verify local and remote directories are identical
Syntax: aeroftp-cli check --profile NAME ./local /remote
--checksum: Use checksums instead of size/mtime--one-way: Only check files present locally-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Verify local and remote trees are identical
aeroftp-cli check --profile ftps-prod ./_site /srv/siteScanning local: ./_site (1248 files, 47 MB) Scanning remote: /srv/site (1248 files, 47 MB) Hash mode: size+mtime (use --hash sha256 for cryptographic) OK - trees identical
Categories: destructive
Summary: Remove orphaned .aerotmp files from interrupted downloads
Description: Remove orphaned .aerotmp files from interrupted downloads
Syntax: aeroftp-cli cleanup [OPTIONS] [URL] [PATH]
--force: Actually delete orphaned files (default: dry-run listing)--min-age : Only delete .aerotmp files older than this age (e.g. 30m, 2h, 1d). Recent temp files may belong to an in-progress transfer and are kept. Files without a known modification time are never deleted. Default: 1h (default: 1h)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Reclaim trashed / temp data
aeroftp-cli cleanup --profile filen-personal --older-than 30dScanning trash on filen-personal... 42 items eligible (older than 30d, 312 MB) Purging... OK - 312 MB reclaimed in 1.8s
Categories: modify
Summary: Generate shell completions (bash, zsh, fish, elvish, powershell)
Description: Generate shell completions (bash, zsh, fish, elvish, powershell)
Syntax: aeroftp-cli completions [OPTIONS] <SHELL>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Generate bash completions
aeroftp-cli completions bash > ~/.local/share/bash-completion/completions/aeroftp-cli# Wrote 18 KB to /home/user/.local/share/bash-completion/completions/aeroftp-cli # Reload your shell or run: source ~/.bashrc
Categories: safe
Summary: Test connection
Description: Test connection to a remote server
Syntax: aeroftp-cli connect --profile NAME
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Test connection to a profile
aeroftp-cli connect --profile ftps-prodResolving profile 'ftps-prod'... OK Connecting to ftps.example.com:21 (FTPS, explicit)... TLS handshake: TLS 1.3, AES-256-GCM Auth: aeroftp@aeroftp.app -> OK Connection healthy (RTT 42 ms)
Categories: modify
Summary: Server-side copy when supported
Description: Copy a remote file on the server side when supported
Syntax: aeroftp-cli cp --profile NAME /old /new
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Server-side copy (no local hop)
aeroftp-cli cp --profile ftps-prod /docs/report.pdf /archive/2026/report.pdfServer-side COPY supported by ftps-prod Copying /docs/report.pdf -> /archive/2026/report.pdf (245 KB) OK - 0.18s (no local hop)
Categories: advanced
Summary: Use encrypted overlay storage
Description: Encrypted overlay - zero-knowledge storage on any provider
Syntax: aeroftp-cli crypt <init|ls|put|get> --profile NAME /path
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Initialize an encrypted overlay
aeroftp-cli crypt init --profile filen-personal /vaultGenerating per-vault keys (XChaCha20-Poly1305)... Encrypting metadata blob and uploading to /vault/.aeroftp-crypt OK - overlay ready. Use `aeroftp-cli crypt put/get/ls --profile filen-personal /vault`.
Categories: safe
Summary: Cryptcheck integrity against encrypted rclone remote
Description: Cryptcheck integrity against encrypted rclone remote
Syntax: aeroftp-cli cryptcheck [OPTIONS] [URL] [LOCAL] [REMOTE]
--password : Password for rclone crypt (can also be passed via AEROFTP_RCLONE_CRYPT_PASSWORD)--password2 : Salt for rclone crypt (can also be passed via AEROFTP_RCLONE_CRYPT_PASSWORD2)--filename-encryption : Filename encryption mode (default: standard)--suffix : Suffix on objects when --filename-encryption=off (rclone default ".bin"; use "none" to disable). Stripped before comparing names--one-way: Only check files present locally--checkfile : Optional checkfile mode (not fully implemented)-a, --algorithm : Hash algorithm to use (sha256 or md5) (default: sha256)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Verify rclone-crypt remote integrity
aeroftp-cli cryptcheck --profile rclone-vault ./local /encryptedDecrypting filenames in /encrypted... Comparing 842 objects (4.1 GB) OK - all 842 files match plaintext on local
Categories: advanced
Summary: Manage the background jobs daemon
Description: Background daemon for persistent mounts, jobs, and watch
Syntax: aeroftp-cli daemon <start|stop|status>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start the background jobs daemon
aeroftp-cli daemon startSpawning aeroftp daemon in /run/user/1000/aeroftp/ PID 41827 - state file: /run/user/1000/aeroftp/daemon.state OK - daemon listening on unix:///run/user/1000/aeroftp/sock
Categories: advanced
Summary: Resolve duplicate remote files
Description: Find duplicate files on a remote by content hash and optionally remove them
Syntax: aeroftp-cli dedupe --profile NAME /path [--mode MODE]
--mode : Resolution mode: skip, delete, newest, oldest, largest, smallest, rename, interactive, list (default: skip)--dry-run: Preview only (don't delete)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Resolve duplicate remote files
aeroftp-cli dedupe --profile filen-personal /Photos --mode newestHashing /Photos recursively (sha256)... Found 14 duplicate groups (412 MB redundant) Mode 'newest': keeping the most recently modified copy Removed 23 duplicate files - 412 MB freed
Categories: safe
Summary: Storage quota
Description: Show storage quota/usage
Syntax: aeroftp-cli df --profile NAME [--json]
--scan: Compute "used" by recursively scanning the tree (item 4b). Needed for backends with no quota API (FTP/S3/WebDAV): combined with an API or manual total it yields used/total/%. Never run automatically; this is the explicit opt-in--full: With --scan, scan from the account root instead of the profile's initial path. Slower; may hit the entry cap on large accounts-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Show storage quota
aeroftp-cli df --profile ftps-prodProvider: Aruba Hosting (FTPS) Quota: 5.0 GB Used: 1.8 GB (36%) Free: 3.2 GB Objects: 12 481
Categories: modify
Summary: Replace text in a remote UTF-8 file
Description: Find and replace text in a remote UTF-8 file
Syntax: aeroftp-cli edit --profile NAME /path/file "find" "replace" [--first]
--first: Replace only the first occurrence-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Find & replace inside a remote text file
aeroftp-cli edit --profile ftps-prod /srv/site/version.txt "v3.8.4" "v3.8.5"Fetching /srv/site/version.txt (38 bytes)... Match: 1 occurrence Patched and re-uploaded in 0.22s OK
Categories: modify
Summary: Export saved server profiles to external configuration formats
Description: Export saved server profiles to external configuration formats
Syntax: aeroftp-cli export [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Export the vault as an encrypted bundle
aeroftp-cli export --out ./aeroftp-vault.aeroftp-keystoreSealing 7 profiles + 3 alias entries... Wrote ./aeroftp-vault.aeroftp-keystore (8.4 KB, AES-256-GCM) Restore on another machine: `aeroftp-cli keystore restore ./aeroftp-vault.aeroftp-keystore`
Categories: safe
Summary: Search files
Description: Search for files by pattern
Syntax: aeroftp-cli find --profile NAME /path/ "*.ext" [--json]
--name : Glob pattern alias for the positional argument. When both the positional pattern and `--name` are set, `--name` wins--files-only: Match only files (skip directories)--dirs-only: Match only directories (skip files)--limit : Cap matches returned. JSON output sets `summary.truncated: true` when this trims results-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Find files by pattern
aeroftp-cli find --profile ftps-prod /srv/ --name "*.log"/srv/logs/access.log /srv/logs/error.log /srv/cache/build.log 3 matches in 0.81s
Categories: safe
Summary: Download file
Description: Download file(s) from remote server
Syntax: aeroftp-cli get --profile NAME /remote/file [./local]
-r, --recursive: Recursive download (directories)--segments : Segmented parallel download: split file into N chunks (2-16, default: 1 = off) (default: 1)--delta: Z.4.5 R1: route the download through `AerorsyncDeltaTransport` when the provider exposes one (SFTP today). Auto-falls back to the classic transfer when the transport is not delta-eligible (file too small, missing host-key pin, password auth without dispatch wire-up, etc.). No-op for non-SFTP providers and for recursive / glob downloads-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Download a file
aeroftp-cli get --profile ftps-prod /docs/report.pdf ./Downloading /docs/report.pdf (245 KB) [#####################] 100% 245 KB / 245 KB 412 KB/s OK - saved to ./report.pdf in 0.6s
Categories: advanced
Summary: Compute remote checksum
Description: Compute hash of remote file(s)
Syntax: aeroftp-cli hashsum --algorithm ALGO --profile NAME /path/file
-a, --algorithm : Hash algorithm (md5/sha1/sha256/sha512/blake3). Defaults to sha256. Accepts `-a sha256` or `--algorithm sha256`. Omitting the flag yields a sha256 checksum Possible values: - md5 - sha1 - sha256 - sha512 - blake3 - quickxor: Microsoft OneDrive proprietary QuickXorHash. Server-side only: it cannot be computed locally, so there is no download fallback - dropbox: Dropbox content_hash (SHA-256 of per-4MiB-block SHA-256). Server-side only: not a plain digest, no local fallback (default: sha256)--download: Download and hash locally-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Compute SHA-256 of a remote file
aeroftp-cli hashsum --algorithm sha256 --profile ftps-prod /docs/report.pdfComputing sha256 of /docs/report.pdf... 9f7c8a3b1d5e2f4a6c8b0d2e4f6a8c0b2d4e6f8a0c2b4d6e8f0a2c4b6d8e0f2c /docs/report.pdf
Categories: advanced
Summary: Read first lines of a remote text file
Description: Print first N lines of a remote file
Syntax: aeroftp-cli head --profile NAME /path/file [-n N]
-n, --lines : Number of lines to print (default: 20) (default: 20)-c, --bytes : Print the first N bytes instead of N lines. Mutually exclusive with --lines (--bytes wins when both present). Useful for "first 4KB" previews on binary or huge files-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')First 5 lines of a remote log
aeroftp-cli head -n 5 --profile ftps-prod /srv/logs/access.log203.0.113.10 - GET / 200 1.2ms 203.0.113.10 - GET /assets/app.css 200 0.8ms 198.51.100.4 - GET /cli 200 4.1ms 198.51.100.4 - GET /cli-explorer.php 200 62.3ms 203.0.113.10 - GET /robots.txt 200 0.4ms
Categories: modify
Summary: Import server profiles from external sources
Description: Import server profiles from external sources
Syntax: aeroftp-cli import [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Import an rclone config
aeroftp-cli import rclone ~/.config/rclone/rclone.confParsed 7 remotes from ~/.config/rclone/rclone.conf Imported: gdrive, dropbox, b2-cold, onedrive, mega, s3-archive, sftp-prod Skipped: 0 Run `aeroftp-cli profiles` to verify.
Categories: advanced
Summary: Manage queued background jobs
Description: Manage background transfer jobs (requires daemon running)
Syntax: aeroftp-cli jobs <add|list|status|cancel>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List queued background jobs
aeroftp-cli jobs listID STATE COMMAND j_4af2c1 RUNNING sync --profile ftps-prod ./_site /srv/site j_9b1e08 QUEUED transfer ftps-prod hetzner-backup /srv /backups -r j_2c7d44 DONE hashsum --profile ftps-prod /backups/db.tar.gz 3 jobs
Categories: modify
Summary: Encrypted full-state backup of the AeroFTP installation (vault entries, SQLite databases, plugins, sync snapshots, UI preferences). The on-disk format is the same `.aeroftp-keystore` envelope produced
Description: Encrypted full-state backup of the AeroFTP installation (vault entries, SQLite databases, plugins, sync snapshots, UI preferences). The on-disk format is the same `.aeroftp-keystore` envelope produced by the GUI, so files created via the CLI can be imported through Settings > Backup and vice versa
Syntax: aeroftp-cli keystore [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Encrypted backup of the full installation
aeroftp-cli keystore backup --out ./aeroftp-state.aeroftp-keystorePacking vault (7 profiles), SQLite stores (3.1 MB), sync snapshots, UI prefs... Encrypting with master password (XChaCha20-Poly1305)... OK - 4.8 MB written to ./aeroftp-state.aeroftp-keystore
Categories: modify
Summary: Create share link when supported
Description: Create a share link for a remote file when supported
Syntax: aeroftp-cli link --profile NAME /path/file
--expires : Link expiration (e.g. 1h, 24h, 7d, 30d, or seconds)--password : Password-protect the link (provider support required)--permissions : Permission level: view, edit, comment (provider support required) (default: view)--verify: Probe the generated URL with a follow-redirects HTTP GET and report whether it is reachable. Exit code 4 if the probe fails. Useful in CI smoke tests to catch silent regressions where the URL is built but does not actually resolve-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Create a share link
aeroftp-cli link --profile filen-personal /docs/report.pdf --expires 7dProvider 'filen' supports share links Creating link for /docs/report.pdf (expires in 7d)... https://filen.io/d/r-9XZ4kPq1 (read-only, expires 2026-06-03)
Categories: safe
Summary: List directory
Description: List files on a remote server
Syntax: aeroftp-cli ls --profile NAME /path/ [-l] [--json]
-l, --long: Long listing format (permissions, size, date)-s, --sort : Sort by: name, size, date (default: name)-r, --reverse: Reverse sort order-a, --all: Show all files (including hidden)--limit : Cap the number of entries returned (after sort). When the listing is truncated, JSON output sets `summary.truncated: true` so agents can detect partial results--files-only: List only files (skip directories). Applied after sort--dirs-only: List only directories (skip files). Applied after sort-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List a remote directory
aeroftp-cli ls --profile ftps-prod /srv/site/Connected to ftps-prod (ftps://ftps.example.com) drwxr-xr-x - 2026-05-24 14:02 assets/ drwxr-xr-x - 2026-05-24 14:02 front/ drwxr-xr-x - 2026-05-24 14:02 app/ -rw-r--r-- 4.2K 2026-05-26 09:11 index.php -rw-r--r-- 6.8K 2026-05-26 09:11 .htaccess 5 entries in 0.42s
Categories: safe
Summary: List directories only (rclone-style `lsd`)
Description: List directories only (rclone-style `lsd`)
Syntax: aeroftp-cli lsd [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List directories only
aeroftp-cli lsd --profile ftps-prod /srv/site/assets/ front/ app/ upload/ scripts/ 5 directories
Categories: safe
Summary: Flat machine-parsable listing, one entry per line (rclone-style `lsf`)
Description: Flat machine-parsable listing, one entry per line (rclone-style `lsf`)
Syntax: aeroftp-cli lsf [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Flat file list (no metadata)
aeroftp-cli lsf --profile ftps-prod /srv/logs/access.log error.log build.log deploy.log
Categories: safe
Summary: Machine-readable JSON listing with a stable record schema
Description: Machine-readable JSON listing with a stable record schema
Syntax: aeroftp-cli lsjson [OPTIONS] [URL] [PATH]
-R, --recursive: Recurse into subdirectories--files-only: List files only--dirs-only: List directories only--stat: Emit a single object describing the path itself, not its contents--no-modtime: Omit the ModTime field entirely--no-mimetype: Omit the MimeType field entirely--hash: Include per-file Hashes from server-provided digests only (S3 ETag, B2 contentSha1, pCloud, SFTP sha256sum): never downloads. Omitted for directories and whenever the backend does not expose the requested hash cheaply--hash-type : Hash algorithm used by --hash Possible values: - md5 - sha1 - sha256 - sha512 - blake3 - quickxor: Microsoft OneDrive proprietary QuickXorHash. Server-side only: it cannot be computed locally, so there is no download fallback - dropbox: Dropbox content_hash (SHA-256 of per-4MiB-block SHA-256). Server-side only: not a plain digest, no local fallback (default: sha256)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Machine-readable listing
aeroftp-cli lsjson --profile ftps-prod /srv/site/[
{"name":"index.php","size":4318,"mtime":"2026-05-26T09:11:00Z","is_dir":false},
{"name":"assets","size":0,"mtime":"2026-05-24T14:02:00Z","is_dir":true},
{"name":"front","size":0,"mtime":"2026-05-24T14:02:00Z","is_dir":true}
]
Categories: safe
Summary: Long listing: permissions, size, date, name (rclone-style `lsl`)
Description: Long listing: permissions, size, date, name (rclone-style `lsl`)
Syntax: aeroftp-cli lsl [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Long listing (size, mtime, perms)
aeroftp-cli lsl --profile ftps-prod /srv/site/-rw-r--r-- 4.2K 2026-05-26 09:11 index.php -rw-r--r-- 6.8K 2026-05-26 09:11 .htaccess drwxr-xr-x - 2026-05-24 14:02 assets/ drwxr-xr-x - 2026-05-24 14:02 front/
Categories: advanced
Summary: Start the Model Context Protocol server (JSON-RPC 2.0 over stdio)
Description: Start the Model Context Protocol server (JSON-RPC 2.0 over stdio)
Syntax: aeroftp-cli mcp [OPTIONS]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start MCP server (JSON-RPC over stdio)
aeroftp-cli mcpMCP server ready (protocol_version=2024-11-05) Capabilities: tools(39), resources(profiles), prompts(0) Listening on stdio. Configure your client to invoke `aeroftp-cli mcp`.
Categories: modify
Summary: Create directory (-p: parents, idempotent)
Description: Create a remote directory
Syntax: aeroftp-cli mkdir --profile NAME /remote/dir [-p]
-p, --parents: Create parent directories as needed; no error if existing--access : Issue #252: privacy level for the created folder on providers that model access (OpenDrive). Defaults to `private` when omitted on an OpenDrive target. Cascades to existing children server-side Possible values: - private: Not listed, not shared; reachable only by the owner - public: Anyone with the link can access; searchable - hidden: Accessible by direct link only; not searchable-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Create a remote directory (with parents)
aeroftp-cli mkdir --profile ftps-prod /docs/2026/q2 -pCreating /docs/2026/q2 (parents enabled) OK - /docs/2026/q2 created
Categories: advanced
Summary: Expose a remote as a local filesystem
Description: Mount a remote as a local filesystem (FUSE on Linux/macOS, WebDAV drive on Windows)
Syntax: aeroftp-cli mount --profile NAME /mountpoint
--cache-ttl : Metadata cache TTL in seconds (default: 30) (default: 30)--allow-other: Allow other users to access the mount (Linux/macOS: requires user_allow_other in /etc/fuse.conf)--read-only: Mount as read-only (default: read-write)--cache-poll-interval : KE-C2: How often the mount polls the remote for changes that happened out-of-band. Accepts `30s`, `5m`, `1h`. Reserved for the directory-listing watcher landing with T-DEBT-13; the value is parsed and stored today but the polling task is not yet active. Default: `1m`--attr-timeout : KE-C2: FUSE attribute cache lifetime (`reply.attr` TTL). Accepts `1s`, `500ms`, `5m`. Defaults to the value of `--cache-ttl` for backward compatibility--dir-cache-time : KE-C2: Directory-listing cache lifetime (used when checking whether a cached `readdir` result is fresh enough to serve without a remote round-trip). Accepts `30s`, `5m`. Defaults to the value of `--cache-ttl` for backward compatibility--read-chunk-size : KE-C2: Maximum size of a single `read` call to the remote. Accepts `128k`, `4M`, `1G`. Larger values amortise round-trip latency on high-bandwidth links; smaller values reduce memory pressure and the cost of a cancelled read. Default: `4M`--read-chunk-size-limit : KE-C2: Upper bound for any adaptive ramp of the read chunk size. Reserved for the doubling-strategy code path landing with T-DEBT-13. The value is parsed and stored today but the adaptive ramp is not yet active. Default: unset (no extra cap; the per-call ceiling is `--read-chunk-size`)--write-back-cache: KE-C3: Enable the FUSE kernel write-back cache. When set, the kernel buffers writes in its page cache and flushes them asynchronously to the userspace filesystem. This typically improves throughput on small/random writes at the cost of crash durability: app-visible `mtime` and `size` update on flush, not on every `write`. The capability is negotiated in the FUSE `init` handshake; the kernel may refuse it on older kernels (`FUSE_WRITEBACK_CACHE` requires kernel >= 3.15). Default: off--cache-mode : KE-C1: Caching policy preset. Selects `attr_timeout`, `dir_cache_time`, and the in-memory `cache_ttl` in one switch. `off`: no cache anywhere, TTL=0 on every reply (best-effort: the kernel dentry cache may still serve briefly within an RCU window). `minimal`: 1s attr TTL, no dir listing cache. `writes`: 30s TTL with the existing post-mutation invalidation on `create`/`unlink`/`rename`/ `mkdir`/`rmdir`. `full`: 300s TTL (or whatever `--cache-ttl` dictates), historical AeroFTP default. Granular overrides (`--attr-timeout`, `--dir-cache-time`) win over the mode. Default: `full` Possible values: - off: No in-memory metadata cache, every FUSE callback hits the remote with `TTL=0`. The Linux VFS dentry cache may still serve briefly within an RCU window, so this is best-effort no-cache rather than rigorous bypass - minimal: `attr_timeout=1s`, no directory-listing cache. Tight enough for rapidly-changing remotes while keeping single-stat hammering bounded - writes: `attr_timeout=dir_cache_time=cache_ttl=30s`. Suited to mounts that mutate via this process: the existing post-mutation `invalidate_dir` calls clear stale entries on `create`, `unlink`, `rmdir`, `rename`, `mkdir` - full: `attr_timeout=dir_cache_time=cache_ttl=--cache-ttl`. The historical AeroFTP default; keeps byte-for-byte compatibility with mounts built before KE-C1 landed (default: full)--fuse-threads : T-DEBT-13c: Number of FUSE session event-loop threads. With `N > 1` the kernel can dispatch independent requests (`read`, `readdir`, `getattr`) in parallel and the mount honours the `Send + Sync` invariant of the userspace filesystem. When set the crate also enables `FUSE_DEV_IOC_CLONE`, giving each worker thread its own `/dev/fuse` descriptor for lock-free request processing. Default: unset (single-threaded loop, byte-for-byte compatible with mounts built before the 0.17 bump)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Mount a remote as a local filesystem
aeroftp-cli mount --profile filen-personal /mnt/filenResolving profile 'filen-personal'... OK Mounting at /mnt/filen (FUSE)... OK - mounted in 0.6s Run `fusermount -u /mnt/filen` to unmount.
Categories: modify
Summary: Move/rename
Description: Rename/move a remote file
Syntax: aeroftp-cli mv --profile NAME /old /new
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Rename a remote file
aeroftp-cli mv --profile ftps-prod /docs/draft.pdf /docs/report-final.pdfRenaming /docs/draft.pdf -> /docs/report-final.pdf OK - 245 KB moved in 0.31s
Categories: advanced
Summary: Analyze remote disk usage
Description: Interactive disk usage explorer (ncdu-style TUI)
Syntax: aeroftp-cli ncdu --profile NAME /path [--json|--export FILE]
-d, --depth : Maximum scan depth (default: 50). See `Tree::depth` note: the field name must differ from the global `--max-depth` flag (default: 50)--export : Export scan results to JSON file instead of interactive TUI-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Analyze remote disk usage (interactive-style)
aeroftp-cli ncdu --profile ftps-prod /srv/Scanning /srv/ ...
--- /srv/ -----------------------------
18.4 MB [##########] site/upload/
12.1 MB [###### ] site/assets/
9.8 MB [##### ] logs/
6.9 MB [### ] cache/
Total: 47.2 MB in 1 248 files
Categories: advanced
Summary: Smart preview of a remote file: defaults to first 20 lines, --tail for last, --bytes for binary-safe slice
Description: Quick preview of a remote file (smart default: first 20 lines).
Syntax: aeroftp-cli peek --profile NAME /path/file [-n N] [--bytes B] [--tail]
-n, --lines : Number of lines to print (default: 20) (default: 20)-c, --bytes : Print first N bytes instead of N lines (binary-safe preview)--tail: Show the LAST lines instead of the first. Ignored when --bytes is set-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Smart preview of a remote file
aeroftp-cli peek --profile ftps-prod /srv/data/users.csvDetected: text/csv (UTF-8, LF), 12 481 rows id,email,created_at,status 1,alice@example.com,2026-01-04,active 2,bob@example.com,2026-01-04,active 3,carol@example.com,2026-01-05,pending ... (12 478 more rows)
Categories: safe
Summary: Segmented parallel download (alias for get with --segments preset, default 4)
Description: Segmented parallel download (alias for `get` with --segments preset)
Syntax: aeroftp-cli pget --profile NAME /remote/file [./local] [--segments N]
--segments : Number of parallel segments (range 2-16) (default: 4)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Parallel segmented download
aeroftp-cli pget --profile ftps-prod /backups/db.tar.gz --segments 8File: /backups/db.tar.gz (412 MB) Splitting into 8 segments of 51.5 MB each [seg 1/8] OK 6.1 MB/s [seg 2/8] OK 6.4 MB/s ... Merged 8 segments in 0.4s OK - 412 MB in 13.7s (30.1 MB/s aggregated)
Categories: modify
Summary: Create a new server profile in the vault
Description: Create a new server profile in the vault
Syntax: aeroftp-cli profile-add [OPTIONS] --name <NAME> --protocol <PROTOCOL>
--name : Display name. Required, must be non-empty--protocol : Protocol identifier (lowercase). Matches the GUI registry: ftp, ftps, sftp, webdav, webdavs, s3, mega, dropbox, googledrive, onedrive, box, pcloud, zohoworkdrive, etc--host : Hostname or host:port. Optional for cloud providers that resolve endpoints from the protocol alone--port : TCP port. Optional; the GUI default per protocol applies when omitted (21 for FTP, 22 for SFTP, 443 for WebDAV/S, …)--username : Username for the new profile--initial-path : Initial remote path the GUI uses when connecting--local-initial-path : Initial local path for AeroFile-style local↔remote workflows--color : Optional color tag (matches the GUI swatch). Free text--provider-id : Provider id (matches `getProviderById` in the GUI). Optional; auto-derived from the protocol when possible--manual-total : Manual total-storage cap for backends with no quota API (FTP/S3/WebDAV) or that report only used space (Backblaze B2). Accepts "10 GB", "2TB", "5368709120". The provider's own total always takes precedence; this is the fallback so `df` and `profiles` can show used/total/% (item 4a)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Add a new server profile to the vault
aeroftp-cli profile-add staging sftp://deploy@stage.example.com:/srvResolving sftp://deploy@stage.example.com:22... OK Credentials will be stored encrypted (vault key: $AEROFTP_MASTER_PASSWORD). Profile 'staging' saved (sftp, host=stage.example.com, path=/srv).
Categories: advanced
Summary: Convert a profile to a different mode (replaces the original, issue #215)
Description: Convert a profile to a different mode (replaces the original, issue #215)
Syntax: aeroftp-cli profile-convert-mode [OPTIONS] --mode <MODE> <SELECTOR>
--mode : Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`--name : Optional display name for the converted profile. Defaults to the source's name--username : Override the username for the converted profile--password : Override the stored password / token for the converted profile. When omitted, the source's credential is cloned. Inline values land in argv/shell history; prefer --password-env or --password-stdin--password-env : Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)--password-stdin: Read the password/token from stdin (first line) instead of --password-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-convert-mode` (offline help)
aeroftp-cli help profile-convert-modeConvert a profile to a different mode (replaces the original, issue #215)
Like `profile-duplicate-mode` but DELETES the source profile, keeping the slot index. Equivalent to the GUI's "Convert to ..." orange button. Requires `--yes` to skip confirmation; otherwise prompts on stderr when stdin is a TTY.
Usage: aeroftp-cli profile-convert-mode [OPTIONS] --mode <MODE> <SELECTOR>
Arguments:
<SELECTOR>
Source profile selector (index, name, or id)
Options:
--mode <MODE>
Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`
--name <NAME>
Optional display name for the converted profile. Defaults to the source's name
--username <USERNAME>
Override the username for the converted profile
--password <PASSWORD>
Override the stored password / token for the converted profile. When omitted, the source's credential is cloned. Inline values land in argv/shell history; prefer --password-env or --password-stdin
--password-env <VAR>
Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)
--password-stdin
Read the password/token from stdin (first line) instead of --password
-y, --yes
Skip the interactive confirmation prompt
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
Categories: advanced
Summary: Copy a saved server profile into ANOTHER user account (#270)
Description: Copy a saved server profile into ANOTHER user account (#270)
Syntax: aeroftp-cli profile-copy-user [OPTIONS] --to-user <USER> <SELECTOR>
--to-user : Target user account name (as listed by `users list`)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-copy-user` (offline help)
aeroftp-cli help profile-copy-userCopy a saved server profile into ANOTHER user account (#270)
Reads the profile (config + any `server_<id>` credential) from the active account and inserts an independent copy under a fresh id into the target user's partition, mirroring the GUI's "Copy to user..." context-menu action. The source profile is left untouched. When the target account is passphrase protected its password is read from `--user-passphrase` / `--passphrase-file` / `AEROFTP_USER_PASSPHRASE_<NAME>` / a TTY prompt: a profile is NEVER written into a protected partition without its passphrase. If the target already holds the same server the copy is skipped (reported as `already_present`).
Usage: aeroftp-cli profile-copy-user [OPTIONS] --to-user <USER> <SELECTOR>
Arguments:
<SELECTOR>
Selector: profile index (1-based, as shown in `profiles`) or (case-insensitive) name / id. Substring match falls back to a unique row only
Options:
--to-user <USER>
Target user account name (as listed by `users list`)
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
Categories: destructive
Summary: Delete a saved server profile from the vault
Description: Delete a saved server profile from the vault
Syntax: aeroftp-cli profile-delete [OPTIONS] <SELECTOR>
-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Remove a profile from the vault
aeroftp-cli profile-delete old-serverAbout to delete profile 'old-server' (sftp://legacy.example.com). Confirm with --yes to proceed. Aborted (no --yes).
Categories: modify
Summary: Duplicate a saved server profile inside the vault
Description: Duplicate a saved server profile inside the vault
Syntax: aeroftp-cli profile-duplicate [OPTIONS] <SELECTOR>
--name : Optional display name for the new profile. Defaults to `<original> (copy)`--manual-total : Set (or override) the copy's manual total-storage cap. Accepts "10 GB", "2TB", "5368709120". Useful for sandbox/test profiles that exercise the item 4a quota fallback (the provider's own total still wins when it reports one)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Clone an existing profile
aeroftp-cli profile-duplicate ftps-prod ftps-stagingSource: ftps-prod (ftps://ftps.example.com) New name: ftps-staging Cloned (host, port, user, default path). Update credentials with `profile-set-password`.
Categories: advanced
Summary: Duplicate a profile into a different mode of the same provider group (issue #215)
Description: Duplicate a profile into a different mode of the same provider group (issue #215)
Syntax: aeroftp-cli profile-duplicate-mode [OPTIONS] --mode <MODE> <SELECTOR>
--mode : Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`--name : Optional display name for the new profile--username : Override the username for the new profile (use when modes expect different credential shapes, e.g. FileLu API key vs WebDAV user)--password : Override the stored password / token for the new profile. When omitted, the source's credential is cloned (works only when the two modes share credentials, e.g. Koofr/OpenDrive). Inline values land in argv/shell history; prefer --password-env or --password-stdin--password-env : Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)--password-stdin: Read the password/token from stdin (first line) instead of --password-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-duplicate-mode` (offline help)
aeroftp-cli help profile-duplicate-modeDuplicate a profile into a different mode of the same provider group (issue #215)
For providers that expose multiple transport surfaces against the same account (Koofr API/WebDAV, OpenDrive API/WebDAV, Filen API/Local-WebDAV/Local-S3, FileLu API/WebDAV/S3/FTP), creates a new profile in the target mode and INSERTS IT RIGHT AFTER the source. The source profile is preserved. Mode label values: `api` (native REST), `webdav`, `s3`, `ftp` (FileLu only).
Usage: aeroftp-cli profile-duplicate-mode [OPTIONS] --mode <MODE> <SELECTOR>
Arguments:
<SELECTOR>
Source profile selector (index, name, or id)
Options:
--mode <MODE>
Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`
--name <NAME>
Optional display name for the new profile
--username <USERNAME>
Override the username for the new profile (use when modes expect different credential shapes, e.g. FileLu API key vs WebDAV user)
--password <PASSWORD>
Override the stored password / token for the new profile. When omitted, the source's credential is cloned (works only when the two modes share credentials, e.g. Koofr/OpenDrive). Inline values land in argv/shell history; prefer --password-env or --password-stdin
--password-env <VAR>
Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)
--password-stdin
Read the password/token from stdin (first line) instead of --password
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
Categories: advanced
Summary: Move a saved server profile into ANOTHER user account (#270)
Description: Move a saved server profile into ANOTHER user account (#270)
Syntax: aeroftp-cli profile-move-user [OPTIONS] --to-user <USER> <SELECTOR>
--to-user : Target user account name (as listed by `users list`)-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-move-user` (offline help)
aeroftp-cli help profile-move-userMove a saved server profile into ANOTHER user account (#270)
Like `profile-copy-user` but DELETES the source profile after the copy succeeds (Cut/Move semantics), mirroring the GUI's "Move to user..." action. The `server_<id>` credential and any `config_favorite_servers` membership are cleaned up on the source side. Without `--yes` the command prompts on stderr when stdin is a TTY. Same passphrase rules as `profile-copy-user`.
Usage: aeroftp-cli profile-move-user [OPTIONS] --to-user <USER> <SELECTOR>
Arguments:
<SELECTOR>
Selector: profile index (1-based, as shown in `profiles`) or (case-insensitive) name / id. Substring match falls back to a unique row only
Options:
--to-user <USER>
Target user account name (as listed by `users list`)
-y, --yes
Skip the interactive confirmation prompt
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
Categories: modify
Summary: Set or update the credential blob for a saved server profile
Description: Set or update the credential blob for a saved server profile
Syntax: aeroftp-cli profile-set-password [OPTIONS] <SELECTOR>
--password : Inline password (visible in `ps`; prefer --password-stdin or --password-env). Mutually exclusive with the other --password* and --credential-json* sources--password-env : Read one password line from the named environment variable--password-stdin: Read one password line from stdin--credential-json : JSON credential blob (string). Stored verbatim under `server_<id>`. Mutually exclusive with the --password* flags--credential-json-file : Read JSON credential blob from a file. Mutually exclusive with --credential-json and the --password* flags-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Rotate the password of a saved profile
aeroftp-cli profile-set-password ftps-prodEnter new password: ******** Confirm: ******** Re-encrypting vault entry for 'ftps-prod'... OK Old credential overwritten. No copies linger on disk.
Categories: safe
Summary: List saved servers
Description: List saved server profiles from the encrypted vault
Syntax: aeroftp-cli profiles [--json]
--sort : Override the GUI-persisted sort. Format: `<col>[:asc|desc]`. Sortable columns: name, type, used, total, pct, last, fav. Use `manual` (alias `index`) to restore the saved profile order--hide : Comma-separated columns to hide for this run only (not persisted). Available (case-insensitive): name, type, host, used, total, pct, path, last, fav (also accepts `favorite`/`favourite`). `*` or `all` hides every optional column (`#` and Name always stay pinned)--show : Show only these columns for this run only (not persisted). This is an exclusive allowlist: every other optional column is hidden, like the My Servers Table view in the GUI. `#` and Name always stay pinned. `*` or `all` shows every column. Same names as `--hide`--breakdown: Append a per-protocol-class breakdown after the main listing. In JSON mode, wrap the output in `{ profiles, summary, breakdown }` (the default JSON shape: a flat array: stays back-compatible)-i, --interactive: Drop into an interactive prompt after the table (rclone-config-style). Single-letter actions on a numbered profile: `<n>l` lists, `<n>t` trees, `<n>d` deletes from the vault, `q` quits. Requires a TTY; ignored in JSON / non-interactive mode-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List saved profiles
aeroftp-cli profilesNAME PROTOCOL HOST DEFAULT_PATH ftps-prod ftps ftps.example.com /srv/ filen-personal filen filen.io /docs/ hetzner-backup sftp backup.hetzner.example /home/aero/ 3 profiles in vault
Categories: destructive
Summary: Remove a path and all of its contents (recursive delete)
Description: Remove a path and all of its contents (recursive delete)
Syntax: aeroftp-cli purge [OPTIONS] [URL] [PATH]
-f, --force: Skip the confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Permanently remove trashed items
aeroftp-cli purge --profile filen-personal --allTrash on filen-personal: 87 items (1.2 GB) About to PERMANENTLY delete. Re-run with --yes to confirm. Aborted (no --yes).
Categories: modify
Summary: Upload file (-n: no-clobber, skip if exists)
Description: Upload file(s) to remote server (supports glob patterns like "*.csv")
Syntax: aeroftp-cli put --profile NAME ./local /remote/path [-n]
-r, --recursive: Recursive upload (directories)-n, --no-clobber: Do not overwrite existing remote files--delta: Z.4.5 R1: route the upload through `AerorsyncDeltaTransport` when the provider exposes one (SFTP today). Auto-falls back to the classic transfer when the transport is not delta-eligible (file too small, missing host-key pin, password auth without dispatch wire-up, etc.). No-op for non-SFTP providers and for recursive / glob uploads--access : Issue #252: privacy level to apply to the uploaded file on providers that model access (OpenDrive). Defaults to `private` when omitted on an OpenDrive target. Applies to single-file uploads; for recursive/glob uploads set the destination folder privacy with `mkdir --access` (it cascades to children) Possible values: - private: Not listed, not shared; reachable only by the owner - public: Anyone with the link can access; searchable - hidden: Accessible by direct link only; not searchable-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Upload a single file
aeroftp-cli put --profile ftps-prod ./report.pdf /docs/Connected to ftps-prod (ftps://ftps.example.com) Uploading ./report.pdf -> /docs/report.pdf (245 KB) [#####################] 100% 245 KB / 245 KB 308 KB/s OK - uploaded in 0.79s
Upload many CSV files with a glob
aeroftp-cli put --profile ftps-prod "./exports/*.csv" /data/Expanded glob: 4 files (1.8 MB total) [1/4] sales_q1.csv 412 KB OK [2/4] sales_q2.csv 487 KB OK [3/4] sales_q3.csv 455 KB OK [4/4] sales_q4.csv 503 KB OK Done - 1.8 MB in 6.1s (avg 295 KB/s)
Categories: modify
Summary: Upload stdin directly to a remote file
Description: Upload stdin directly to a remote file
Syntax: aeroftp-cli rcat [OPTIONS] [URL] [REMOTE]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Stream stdin to a remote file
tar czf - ./dist | aeroftp-cli rcat --profile ftps-prod /backups/dist-2026-05-27.tar.gzStreaming stdin -> /backups/dist-2026-05-27.tar.gz [##############] 86 MB written (12.4 MB/s) OK - closed in 6.9s
Categories: modify
Summary: rclone-crypt compatible operations (separate from `crypt` overlay)
Description: rclone-crypt compatible operations (separate from `crypt` overlay)
Syntax: aeroftp-cli rclone-crypt [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Read a rclone-crypt remote
aeroftp-cli rclone-crypt ls --profile filen-personal /encrypted --passwords-from-envResolving rclone-crypt headers in /encrypted... Decrypted 412 filenames report.pdf photos/2025-summer.zip archive/old-site.tar.gz
Categories: advanced
Summary: Return categorized local-vs-remote diff for agents
Description: Reconcile local and remote trees with categorized diff output
Syntax: aeroftp-cli reconcile --profile NAME ./local /remote --json
--checksum: Use checksums instead of size-only comparison where available--one-way: Only consider files present locally-e, --exclude : Exclude patterns (can repeat: -e "*.tmp" -e ".git")--reconcile-format : Output verbosity: detailed (default) or summary [possible values: detailed, summary] (default: detailed)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Categorized diff for agents (JSON)
aeroftp-cli reconcile --profile ftps-prod ./_site /srv/site --json{
"only_local": ["new-page.html", "img/hero-v2.webp"],
"only_remote": ["legacy/old-banner.png"],
"diverged": ["index.php"],
"identical": 1246,
"summary": {"add": 2, "remove": 1, "update": 1}
}
Categories: destructive
Summary: Delete file (-f: force, no error if not found)
Description: Delete a remote file or directory
Syntax: aeroftp-cli rm --profile NAME /path [-f]
-r, --recursive: Recursive delete (directories)-f, --force: Force (no confirmation for recursive)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Delete a single file
aeroftp-cli rm --profile ftps-prod /tmp/old.logDeleting /tmp/old.log... OK - removed (released 12 KB)
Categories: destructive
Summary: Remove a single empty directory (fails if not empty)
Description: Remove a single empty directory (fails if not empty)
Syntax: aeroftp-cli rmdir [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Remove an empty remote directory
aeroftp-cli rmdir --profile ftps-prod /tmp/empty-dirVerifying /tmp/empty-dir is empty... OK (0 entries) Removing /tmp/empty-dir OK
Categories: destructive
Summary: Recursively remove EMPTY directories under a path (files and non-empty directories are left untouched; the path itself is never removed). Dry-run by default; --force to delete
Description: Recursively remove EMPTY directories under a path (files and non-empty directories are left untouched; the path itself is never removed). Dry-run by default; --force to delete
Syntax: aeroftp-cli rmdirs [OPTIONS] [URL] [PATH]
--force: Actually remove the empty directories (default: dry-run)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Recursively remove empty directories
aeroftp-cli rmdirs --profile ftps-prod /tmp/cacheScanning /tmp/cache for empty directories... Pruning 18 empty leaves -> 6 intermediate dirs OK - 24 directories removed in 0.42s
Categories: advanced
Summary: Expose a remote over a local protocol bridge
Description: Serve a remote over a local protocol
Syntax: aeroftp-cli serve <http|webdav|ftp|sftp> --profile NAME /path
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Expose a remote over local WebDAV
aeroftp-cli serve webdav --profile filen-personal --listen 127.0.0.1:8080 /Bridge: filen-personal -> WebDAV Listen: http://127.0.0.1:8080/ Auth: none (loopback only) Mount in Finder/Explorer with the URL above. Ctrl+C to stop.
Categories: safe
Summary: Show total size and object count under a path (recursive scan)
Description: Show total size and object count under a path (recursive scan)
Syntax: aeroftp-cli size [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Total size and object count under a path
aeroftp-cli size --profile ftps-prod /srv/site/Scanning /srv/site/ recursively... Total size: 47.2 MB Objects: 1 248 files in 84 directories Largest: /srv/site/upload/screenshots/screenshot-1.png (1.8 MB)
Categories: safe
Summary: Measure upload/download throughput against a writable remote
Description: Measure upload/download throughput against a writable remote
Syntax: aeroftp-cli speed [OPTIONS] [URL]
-s, --test-size : Test file size (e.g. 1M, 8M, 64M, 1G). Also accepts --size / -s [aliases: --size] (default: 10M)--iterations : Number of upload/download iterations (default: 1)--remote-path : Remote path override for the temporary benchmark file--no-integrity: Skip SHA-256 integrity verification (faster but less rigorous)--json-out : Write a JSON v1 report to this path-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Measure upload + download speed
aeroftp-cli speed --profile ftps-prod /tmp/Uploading 16 MB test payload... Upload: 12.4 MB/s Downloading 16 MB test payload... Download: 28.7 MB/s RTT: 42 ms
Categories: safe
Summary: Benchmark and rank multiple servers side-by-side
Description: Benchmark and rank multiple servers side-by-side
Syntax: aeroftp-cli speed-compare [OPTIONS] <URLS>...
-s, --test-size : Test file size (e.g. 10M, 100M) [aliases: --size] (default: 10M)--parallel : Maximum parallel runs (1-4, default 2) (default: 2)--no-integrity: Skip SHA-256 integrity verification--json-out : Write a JSON v1 compare report to this path--csv-out : Write a CSV report to this path--md-out : Write a Markdown report to this path-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Benchmark several servers side-by-side
aeroftp-cli speed-compare ftps-prod hetzner-backup filen-personalRunning 16 MB up+down on each target (90s budget)... TARGET UP MB/s DOWN MB/s RTT ftps-prod 12.4 28.7 42 ms hetzner-backup 38.2 71.5 8 ms filen-personal 6.1 11.3 120 ms Winner: hetzner-backup
Categories: safe
Summary: File metadata
Description: Show file/directory metadata
Syntax: aeroftp-cli stat --profile NAME /path/ [--json]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')File metadata
aeroftp-cli stat --profile ftps-prod /docs/report.pdf --json{
"path": "/docs/report.pdf",
"size": 251392,
"type": "file",
"modified": "2026-05-24T14:02:11Z",
"perms": "rw-r--r--"
}
Categories: destructive, modify
Summary: Sync with orphan deletion (capped by --max-delete, default 100; non-interactive runs require an explicit --max-delete)
Description: Synchronize local and remote directories
Syntax: aeroftp-cli sync --profile NAME ./local/ /remote/ --delete
--direction : Sync direction: upload, download, both (default: both)--dry-run: Dry run (show what would happen without executing)--delete: Delete orphaned files on destination-e, --exclude : Exclude patterns (can repeat: --exclude "*.tmp" --exclude ".git")--track-renames: Detect renamed files by hash to avoid re-upload--max-delete : Safety limit: abort if more than N files (or N%) would be deleted--backup-dir : Move overwritten/deleted files to backup directory--backup-suffix : Suffix for backup files (e.g., ".bak") (default: "")--suffix-keep-extension: Place suffix before the file extension (file.bak.txt instead of file.txt.bak)--compare-dest : Skip transfer if file exists in this local directory with same size+mtime--copy-dest : Copy from this local directory instead of downloading if file matches size+mtime--from-reconcile : Consume a reconcile JSON file instead of re-scanning local and remote trees--conflict-mode : Conflict resolution for --direction both: newer, older, larger, smaller, rename, skip (default: newer) (default: newer)--skip-matching: Trust size-only matches and skip transfers even when mtimes differ--resync: Discard previous bisync snapshot and rebuild from scratch-P, --profile : Use a saved server profile instead of URL (name or ID)--watch: Watch local directory for changes and re-sync automatically--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--watch-mode : Watcher backend: auto, native, poll (default: auto) (default: auto)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--watch-debounce-ms : Debounce window in milliseconds (default: 1500) (default: 1500)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--watch-cooldown : Minimum seconds between consecutive re-syncs (default: 15) (default: 15)--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--watch-rescan : Full rescan interval in seconds, 0 to disable (default: 300) (default: 300)--watch-no-initial: Skip the initial full sync on startup--local: Force local-to-local sync mode (no remote). Auto-detected when both paths are absolute and no --profile / URL is given--limit-rate : Speed limit (e.g., "1M", "500K")--no-local-delta: Disable LocalDeltaTransport for local-to-local sync; use plain copy instead. No-op for remote sync--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--delta: Route remote SFTP uploads/downloads through the AerorsyncBatch session-reuse path (1 SSH handshake + N channel-execs across the whole batch). Auto-falls back to classic SFTP per-file when the transport reports `TooSmall` or the SFTP provider does not expose a delta transport (e.g. password auth, missing host-key pin). On transient SSH channel drops the batch transparently reconnects once (Z.1.2). No-op for non-SFTP backends and for local-to-local sync (which uses LocalDeltaTransport via --no-local-delta)--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Dry-run sync local -> remote
aeroftp-cli sync --profile ftps-prod ./_site/ /srv/site/ --dry-runScanning local: ./_site/ (1248 files, 47 MB) Scanning remote: /srv/site/ (1201 files, 44 MB) Plan: upload 52 | update 14 | delete 5 (with --delete only) DRY-RUN - nothing was transferred Next: drop --dry-run to apply, or add --delete to mirror
Categories: advanced
Summary: Preflight sync checks, risks, and next command
Description: Preflight checks and risk summary before sync
Syntax: aeroftp-cli sync-doctor --profile NAME ./local /remote --json
--direction : Sync direction: upload, download, both (default: both)--delete: Delete orphaned files on destination-e, --exclude : Exclude patterns--track-renames: Detect renamed files by hash to avoid re-upload--conflict-mode : Conflict resolution for --direction both: newer, older, larger, smaller, rename, skip (default: newer)--resync: Discard previous bisync snapshot and rebuild from scratch--checksum: Use checksums instead of size/mtime-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Used by the `--no-traverse` stat sweep and future parallel-listing paths. Default `8`, range 1-64. Distinct from `--transfers` (which caps the actual data transfer pool): a single sync can run 8 stat probes in parallel while still streaming uploads with 4 workers (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Preflight a sync (risks + plan)
aeroftp-cli sync-doctor --profile ftps-prod ./_site /srv/site --json{
"checks": {"reachable":true,"writable":true,"clock_skew_s":1},
"plan": {"add":52,"update":14,"delete":5,"identical":1177},
"risks": ["5 files would be deleted on --delete"],
"next_cmd": "aeroftp-cli s