Postmany reads filenames from stdin and transfers file content to/from an HTTP(S) endpoint.
It is designed for event-driven pipelines where a list of files is produced by one tool and streamed to another system.
- Stream filenames from
stdin - Upload with
POSTorPUT - Download with
GET - Multiple worker fibers (
-w) for concurrent transfers - Static request headers (
-H) for APIs like Azure Blob
shards install
shards --production build --release --staticThe compiled binary is written to bin/postmany.
Use compose.yml with crystallang/crystal:1.19.1-alpine:
docker compose run --rm dev shards install
docker compose run --rm dev crystal specURL="https://example.test/webhook"
find files -name '*.json' | postmany "$URL"SAS="?sv=2020-10-02&..."
STORAGE_ACCOUNT="mystorageaccount"
CONTAINER="mycontainer"
find images -name '*.png' | \
postmany -X PUT -H x-ms-blob-type:BlockBlob \
"https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER}${SAS}"printf "docs/a.json\ndocs/b.json\n" | postmany -X GET "https://example.test/files"| Option | Description |
|---|---|
-w, --workers=WORKERS |
Number of workers (default: 1, minimum: 1) |
-s, --silent |
Disable per-file stdout output |
--no-progress |
Disable progress messages |
-X, --request=METHOD |
HTTP method: POST, PUT, GET (default: POST) |
-H, --header=HEADER |
Static HTTP header (key:value) |
-h, --help |
Show help |
--version |
Show version |
Positional argument:
ENDPOINT(required): target URL.
Contributor workflows, architecture, and CI/CD details live in CONTRIBUTING.md.
UNLICENSE.