82 lines
1.6 KiB
Markdown
82 lines
1.6 KiB
Markdown
# mdlink
|
|
|
|
`mdlink` is a CLI tool to recursively scan Markdown files and validate HTTP/HTTPS links.
|
|
|
|
## Features
|
|
|
|
- Scans `.md` files recursively in a directory (or a single `.md` file).
|
|
- Extracts Markdown links (`[text](url)`) and naked URLs (`https://...`).
|
|
- Ignores image links (``).
|
|
- Checks links with `httpx` and follows redirects automatically.
|
|
- Ignores `200 OK` in the report; shows non-200 and request errors.
|
|
- Shows final resolved URL in output.
|
|
- Asks interactively before rewriting redirected Markdown links.
|
|
- Re-checks target URL before writing (must still return `200`).
|
|
- Rewrites links via Markdown AST editing (`markdown-it-py`), not string replacement.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install .
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
mdlink /path/to/docs
|
|
```
|
|
|
|
Scan current directory recursively:
|
|
|
|
```bash
|
|
mdlink .
|
|
```
|
|
|
|
## Options
|
|
|
|
- `--timeout FLOAT`
|
|
Per-request timeout in seconds (default: `10.0`).
|
|
|
|
## Interactive Redirect Rewrite
|
|
|
|
When a Markdown link redirects, `mdlink` prompts:
|
|
|
|
```text
|
|
Replace old URL with final URL? [y/N]
|
|
```
|
|
|
|
Only confirmed links are updated.
|
|
|
|
## Test File And Script
|
|
|
|
This repository includes:
|
|
|
|
- `test.sh`: Generates a sample Markdown test file.
|
|
- `test.md`: A sample file with mixed link cases (200, redirect, 404/500, naked URLs, ignored image/non-http links).
|
|
|
|
Generate or overwrite `test.md`:
|
|
|
|
```bash
|
|
./test.sh
|
|
```
|
|
|
|
Generate to a custom file path:
|
|
|
|
```bash
|
|
./test.sh /tmp/my-test.md
|
|
```
|
|
|
|
Run the tool against the generated test file:
|
|
|
|
```bash
|
|
mdlink test.md
|
|
```
|
|
|
|
## Help
|
|
|
|
```bash
|
|
mdlink --help
|
|
```
|