{"id":17402745,"url":"https://github.com/gabe565/moreutils-go","last_synced_at":"2026-01-12T06:36:36.630Z","repository":{"id":257546675,"uuid":"858602972","full_name":"gabe565/moreutils-go","owner":"gabe565","description":"Go rewrite of the moreutils command-line tools.","archived":false,"fork":false,"pushed_at":"2024-12-15T16:27:38.000Z","size":316,"stargazers_count":1,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-15T17:28:08.582Z","etag":null,"topics":["command-line","github-actions","moreutils"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gabe565.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-17T07:46:13.000Z","updated_at":"2024-12-11T15:13:00.000Z","dependencies_parsed_at":"2024-09-17T10:22:43.177Z","dependency_job_id":"3c596da9-275a-4786-85e1-618dec5e26ec","html_url":"https://github.com/gabe565/moreutils-go","commit_stats":{"total_commits":128,"total_committers":2,"mean_commits":64.0,"dds":0.0390625,"last_synced_commit":"648e047316423e2c0f4e757131b704a499a86344"},"previous_names":["gabe565/moreutils","gabe565/moreutils-go"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fmoreutils-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fmoreutils-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fmoreutils-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gabe565%2Fmoreutils-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gabe565","download_url":"https://codeload.github.com/gabe565/moreutils-go/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230523779,"owners_count":18239438,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","github-actions","moreutils"],"created_at":"2024-10-16T18:08:26.329Z","updated_at":"2026-01-12T06:36:36.590Z","avatar_url":"https://github.com/gabe565.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# moreutils-go\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/gabe565/moreutils-go)](https://github.com/gabe565/moreutils-go/releases)\n[![Build](https://github.com/gabe565/moreutils-go/actions/workflows/build.yaml/badge.svg)](https://github.com/gabe565/moreutils-go/actions/workflows/build.yaml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gabe565/moreutils-go)](https://goreportcard.com/report/github.com/gabe565/moreutils-go)\n\nA Go rewrite of [moreutils](https://kitenet.net/~joey/code/moreutils/): A collection of the Unix tools that nobody thought to write long ago when Unix was young.\n\nSome of the original moreutils commands require Perl, so I decided to rewrite them in a language which can compile into a single binary with no dependencies.\n\n## Applets\n\n- **[chronic](docs/chronic.md)**: Runs a command quietly unless it fails\n- **[combine](docs/combine.md)**: Combine sets of lines from two files using boolean operations\n- **[errno](docs/errno.md)**: Look up errno names and descriptions\n- **[ifdata](docs/ifdata.md)**: Get network interface info without parsing ifconfig output\n- **[ifne](docs/ifne.md)**: Run a command if the standard input is not empty\n- **[isutf8](docs/isutf8.md)**: Check whether files are valid UTF-8\n- **[mispipe](docs/mispipe.md)**: Pipe two commands, returning the exit status of the first\n- **[parallel](docs/moreutils_parallel.md)**: Run multiple jobs at once\n- **[pee](docs/pee.md)**: Tee standard input to pipes\n- **[sponge](docs/sponge.md)**: Soak up standard input and write to a file\n- **[ts](docs/ts.md)**: Timestamp standard input\n- **[vidir](docs/vidir.md)**: Edit a directory in your text editor\n- **[vipe](docs/vipe.md)**: Insert a text editor into a pipe\n- **[zrun](docs/zrun.md)**: Automatically decompress arguments to command\n\n## Installation\n\n### APT (Ubuntu, Debian)\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n1. If you don't have it already, install the `ca-certificates` package\n   ```shell\n   sudo apt install ca-certificates\n   ```\n\n2. Add gabe565 apt repository\n   ```\n   echo 'deb [trusted=yes] https://apt.gabe565.com /' | sudo tee /etc/apt/sources.list.d/gabe565.list\n   ```\n\n3. Update apt repositories\n   ```shell\n   sudo apt update\n   ```\n\n4. Install moreutils-go\n   ```shell\n   sudo apt install moreutils-go\n   ```\n\u003c/details\u003e\n\n### RPM (CentOS, RHEL)\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n1. If you don't have it already, install the `ca-certificates` package\n   ```shell\n   sudo dnf install ca-certificates\n   ```\n\n2. Add gabe565 rpm repository to `/etc/yum.repos.d/gabe565.repo`\n   ```ini\n   [gabe565]\n   name=gabe565\n   baseurl=https://rpm.gabe565.com\n   enabled=1\n   gpgcheck=0\n   ```\n\n3. Install moreutils-go\n   ```shell\n   sudo dnf install moreutils-go\n   ```\n\u003c/details\u003e\n\n### AUR (Arch Linux)\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\nInstall [moreutils-go-bin](https://aur.archlinux.org/packages/moreutils-go-bin) with your [AUR helper](https://wiki.archlinux.org/index.php/AUR_helpers) of choice.\n\u003c/details\u003e\n\n### Homebrew (macOS, Linux)\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\nInstall moreutils-go from [gabe565/homebrew-tap](https://github.com/gabe565/homebrew-tap):\n```shell\nbrew install gabe565/tap/moreutils-go\n```\n\u003c/details\u003e\n\n### GitHub Actions\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\nThis repository can be added to a GitHub Actions workflow to install the applets.\n\n#### Example\n```yaml\nname: Example\n\non: push\n\njobs:\n  example:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: gabe565/moreutils-go@v0\n      - run: echo hello world | ts\n```\n\n\u003c/details\u003e\n\n### Docker\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\nA Docker image is available at [`ghcr.io/gabe565/moreutils`](https://ghcr.io/gabe565/moreutils)\n\nIn this container, all applets are in the root directory.\n\n#### In a Terminal\nSome commands can be run directly from a terminal:\n```shell\necho hello world | docker run --rm -i ghcr.io/gabe565/moreutils ts\n```\n\n#### While Building a Container\nIf you are building a container and need one of the applets, you can copy them directly to your container during build:\n```dockerfile\nFROM alpine\nCOPY --from=ghcr.io/gabe565/moreutils:0 /usr/bin/ts /usr/bin\nCMD echo hello world | ts\n```\n\n\u003c/details\u003e\n\n### Manual Installation\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n1. Download and run the [latest release binary](https://github.com/gabe565/moreutils-go/releases/latest) for your system and architecture.\n2. Extract the binary and place it in the desired directory.\n3. Run `moreutils install -sr DIRECTORY` to generate symlinks for each command.\n\u003c/details\u003e\n\n## Differences\n\nMy goal is 100% compatibility, but there are currently some differences compared to moreutils:\n\n| Applet       | Differences                                                                                                                                                                                                                                             |\n|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **errno**    | The original implementation prints some errors which are not used by the current OS. For example, code `35` could match `EAGAIN` and `EWOULDBLOCK`. Most operating systems only use one or the other, so this implementation does not print duplicates. |\n| **ifdata**   | The rewrite supports the `-ph` and `-pf` flags on all operating systems, and all statistics flags on Linux and Darwin.                                                                                                                                  |\n| **isutf8**   | Unlike moreutils, which prints the expected value range for non-UTF-8 files, the rewrite only logs the offending line, byte, and char.                                                                                                                  |\n| **lckdo**    | Deprecated in moreutils and intentionally not implemented here. It is recommended to use `flock` as a replacement.                                                                                                                                      |\n| **parallel** | Parallel is not symlinked by default since [GNU Parallel](https://www.gnu.org/software/parallel/) is typically preferred.                                                                                                                               |\n| **ts**       | The `-m` flag does not affect functionality since Go always uses the system's monotonic clock.                                                                                                                                                          |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe565%2Fmoreutils-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgabe565%2Fmoreutils-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgabe565%2Fmoreutils-go/lists"}