Cross-platform Rust rewrite of the GNU coreutils

Overview

uutils coreutils

Discord License FOSSA Status LOC dependency status

Build Status Build Status (Windows) Build Status (FreeBSD) codecov


uutils is an attempt at writing universal (as in cross-platform) CLI utilities in Rust. This repository is intended to aggregate GNU coreutils rewrites.

Why?

Many GNU, Linux and other utilities are useful, and obviously some effort has been spent in the past to port them to Windows. However, those projects are either old and abandoned, are hosted on CVS (which makes it more difficult for new contributors to contribute to them), are written in platform-specific C, or suffer from other issues.

Rust provides a good, platform-agnostic way of writing systems utilities that are easy to compile anywhere, and this is as good a way as any to try and learn it.

Requirements

  • Rust (cargo, rustc)
  • GNU Make (required to build documentation)
  • Sphinx (for documentation)
  • gzip (for installing documentation)

Rust Version

uutils follows Rust's release channels and is tested against stable, beta and nightly. The current oldest supported version of the Rust compiler is 1.33.0.

On both Windows and Redox, only the nightly version is tested currently.

Build Instructions

There are currently two methods to build uutils: GNU Make and Cargo. However, while there may be two methods, both systems are required to build on Unix (only Cargo is required on Windows).

First, for both methods, we need to fetch the repository:

$ git clone https://github.com/uutils/coreutils
$ cd coreutils

Cargo

Building uutils using Cargo is easy because the process is the same as for every other Rust program:

# to keep debug information, compile without --release
$ cargo build --release

Because the above command attempts to build utilities that only work on Unix-like platforms at the moment, to build on Windows, you must do the following:

# to keep debug information, compile without --release
$ cargo build --release --no-default-features --features windows

If you don't want to build every utility available on your platform into the multicall binary (the Busybox-esque binary), you can also specify which ones you want to build manually. For example:

$ cargo build --features "base32 cat echo rm" --no-default-features

If you don't even want to build the multicall binary and would prefer to just build the utilities as individual binaries, that is possible too. For example:

$ cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm

GNU Make

Building using make is a simple process as well.

To simply build all available utilities:

$ make

To build all but a few of the available utilities:

$ make SKIP_UTILS='UTILITY_1 UTILITY_2'

To build only a few of the available utilities:

$ make UTILS='UTILITY_1 UTILITY_2'

Installation Instructions

Cargo

Likewise, installing can simply be done using:

$ cargo install

This command will install uutils into Cargo's bin folder (e.g. $HOME/.cargo/bin).

GNU Make

To install all available utilities:

$ make install

To install using sudo switch -E must be used:

$ sudo -E make install

To install all but a few of the available utilities:

$ make SKIP_UTILS='UTILITY_1 UTILITY_2' install

To install only a few of the available utilities:

$ make UTILS='UTILITY_1 UTILITY_2' install

To install every program with a prefix (e.g. uu-echo uu-cat):

$ make PROG_PREFIX=PREFIX_GOES_HERE install

To install the multicall binary:

$ make MULTICALL=y install

Set install parent directory (default value is /usr/local):

# DESTDIR is also supported
$ make PREFIX=/my/path install

NixOS

The standard package set of NixOS provides this package out of the box since 18.03:

nix-env -iA nixos.uutils-coreutils

Uninstallation Instructions

Uninstallation differs depending on how you have installed uutils. If you used Cargo to install, use Cargo to uninstall. If you used GNU Make to install, use Make to uninstall.

Cargo

To uninstall uutils:

$ cargo uninstall uutils

GNU Make

To uninstall all utilities:

$ make uninstall

To uninstall every program with a set prefix:

$ make PROG_PREFIX=PREFIX_GOES_HERE uninstall

To uninstall the multicall binary:

$ make MULTICALL=y uninstall

To uninstall from a custom parent directory:

# DESTDIR is also supported
$ make PREFIX=/my/path uninstall

Test Instructions

Testing can be done using either Cargo or make.

Cargo

Just like with building, we follow the standard procedure for testing using Cargo:

$ cargo test

By default, cargo test only runs the common programs. To run also platform specific tests, run:

$ cargo test --features unix

If you would prefer to test a select few utilities:

$ cargo test --features "chmod mv tail" --no-default-features

To debug:

$ gdb --args target/debug/coreutils ls
(gdb) b ls.rs:79
(gdb) run

GNU Make

To simply test all available utilities:

$ make test

To test all but a few of the available utilities:

$ make SKIP_UTILS='UTILITY_1 UTILITY_2' test

To test only a few of the available utilities:

$ make UTILS='UTILITY_1 UTILITY_2' test

To include tests for unimplemented behavior:

$ make UTILS='UTILITY_1 UTILITY_2' SPEC=y test

Run Busybox Tests

This testing functionality is only available on *nix operating systems and requires make.

To run busybox's tests for all utilities for which busybox has tests

$ make busytest

To run busybox's tests for a few of the available utilities

$ make UTILS='UTILITY_1 UTILITY_2' busytest

To pass an argument like "-v" to the busybox test runtime

$ make UTILS='UTILITY_1 UTILITY_2' RUNTEST_ARGS='-v' busytest

Contribute

To contribute to uutils, please see CONTRIBUTING.

Utilities

Done Semi-Done To Do
arch cp chcon
base32 expr dd
base64 install numfmt
basename ls pr
cat more runcon
chgrp od (--strings and 128-bit data types missing) stty
chmod printf
chown sort
chroot split
cksum tail
comm test
csplit date
cut join
dircolors df
dirname
du
echo
env
expand
factor
false
fmt
fold
groups
hashsum
head
hostid
hostname
id
kill
link
ln
logname
md5sum (replaced by hashsum)
sha1sum (replaced by hashsum)
sha224sum (replaced by hashsum)
sha256sum (replaced by hashsum)
sha384sum (replaced by hashsum)
sha512sum (replaced by hashsum)
mkdir
mkfifo
mknod
mktemp
mv
nice
nl
nohup
nproc
paste
pathchk
pinky
printenv
ptx
pwd
readlink
realpath
relpath
rm
rmdir
seq
shred
shuf
sleep
stat
stdbuf
sum
sync
tac
tee
timeout
touch
tr
true
truncate
tsort
tty
uname
unexpand
uniq
unlink
uptime
users
wc
who
whoami
yes

License

uutils is licensed under the MIT License - see the LICENSE file for details

FOSSA Status

Comments
  • expand: improve plus specifier handling

    expand: improve plus specifier handling

    This PR fixes a bug when using the plus specifier in the expand tool.

    In the existing solution, when using the plus specifier, next_tabstop always returns the current step size - 1, which doesn't account for the potentially varying size of columns.

    This implementation will instead calculate the number of steps required find the first tabstop after the current column, which should work for longer column values.

    It also adds a check that disengages the plus specifier if only one tabstop is specified, as the plus specifier requires at least one fixed tabstop to work.

    By fixing these two issues, expand.pl appears to pass without failures on my machine.

    opened by sbentmar 3
  • `tests/util`: Enhance `CmdResult`

    `tests/util`: Enhance `CmdResult`

    I would love to enhance the existing functionality of CmdResult by a few points.

    Use ExitStatus instead of code and success

    We get the ExitStatus from the wait methods in UChild, so no extraction of code and success is required to initialize the CmdResult. On unix platforms we could provide a method in CmdResult to assert signals or whatever is available in std::os::unix::ExitStatusExt.

    Rename stderr_is to stderr_trimmed_is and provide a stderr_is method which asserts the stderr untrimmed

    This method gave a hard time once, until I found out that stderr is trimmed. The trimming should be more obvious.

    Provide stdout_apply, stdout_str_apply, stderr_apply and stderr_str_apply methods which apply a function to the stdout (stderr) and return a CmdResult

    Such method calls could for example look like

    ucommand.run().stdout_str_apply(str::trim).stdout_only("hello world");
    ucommand.run().stdout_apply(|s| &s[0..5]).stdout_only("hello");
    

    This has the advantage, that we can stay in the CmdResult chain, instead of breaking out with let stdout = ucommand.run().stdout_str(), then doing something with stdout and then asserting this stdout manually.

    opened by Joining7943 1
  • `tests/util`: `UCommand`: Use `Stdio::null` as default `stdin` for the spawned child process

    `tests/util`: `UCommand`: Use `Stdio::null` as default `stdin` for the spawned child process

    I stumbled over this during the write of UChild and wondered if it wouldn't be better to use Stdio::null as default for the stdin of the Child instead of Stdio::piped. I left two TODOs in tests/commond/util.rs, although the TODO description isn't appropriate anymore.

    Firstly, I think it's counterintuitive that each spawned Child in a test case has a stdin pipe per default. The default situation in a shell is also to not have a pipe. So, if not explicitly asked to build a pipe to the child process stdin (for example with UCommand::pipe_in or UCommand::set_stdin) Stdio::null should be used. Secondly, there shouldn't be any deadlock situations anymore because of piped input, but it's still safer to not use pipes if not necessary.

    Maybe around 10 tests would be affected by that change and would need an additional set_stdin(Stdio::piped) in the UCommand builder. On the other hand a lot of tests in tests_tail use set_stdin(Stdio::null) which would become redundant.

    opened by Joining7943 2
  • tests/util: Fix path resolution of test executable

    tests/util: Fix path resolution of test executable

    All tests failed when running the tests in a windows virtualbox with the uutils repo located in a shared folder. The AtPath::root_dir_resolved method stripped away the necessary \\?\ prefix and the coreutils test executable couldn't be executed.

    Using env!(CARGO_BIN_EXE_coreutils) is simpler, platform independent and more reliable in my opinion and I was able to run the test suite in a virtualbox shared folder. Note the \\?\ prefix would also be necessary if running the tests on a network drive. See also here for a description of the file naming model on windows: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file

    However, I'm not sure if the change that would be introduced by this pr has other implications I'm not aware of.

    opened by Joining7943 1
  • cut: refactor

    cut: refactor

    This PR refactors cut field logic to reduce code duplication by factoring out the common Searcer, which is templatized on a specific Matcher -- ExactMatcher for an explicit delimiter and WhitespaceMatcher for white-space delimiter.

    before

    • code duplication in Searcher and WhitespaceSearcher
    • code duplication in cut_fields and cut_fields_whitespace

    after

    • two versions of Matchers
    • one Searcher
    • simplify cut_fields by delegating actual work to specific functions
    opened by TechHara 2
Releases(0.0.16)
  • 0.0.16(Oct 12, 2022)

    Highlights

    • The minimum supported Rust version is now 1.59.
    • Many utils now return exit code 1 on usage errors instead of 2 to match GNU.
    • tail has had another significant refactor with slight improvements.
    • chroot returns better exit codes and supports commands with flags.
    • cp supports the -H flag and handles more cases correctly.
    • test supports -N, -ef, -nt & -ot and supports 128 bit integers.
    • dd's argument parsing has been overhauled and is more compatible with GNU.
    • There have been refactors, fixes and performance improvements in many utils, see below for details.

    GNU test suite compatibility

    Many utils have seen minor changes to improve GNU compatibility. Below is a summary of the progress. See https://github.com/uutils/coreutils-tracking/ for more details

    | result | 0.0.15 | 0.0.16 | change | |--------|-------:|-------:|-------:| | pass | 293 | 322 | +29 | | skip | 73 | 49 | -24 | | fail | 222 | 217 | -5 | | error | 5 | 5 | 0 |

    Changes

    The PR's listed below are a selection of all the contributions in this release.

    General

    • Change remaining usage codes of 2 to 1 for GNU compat by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3922
    • Create new adaptive svg logo by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3892

    cat

    • Remove deprecated unix_socket dependency by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3854

    chcon

    • Fix GNU tests/misc/chcon-fail.sh test by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3857

    chroot

    • Improve support of --skip-chdir by @sylvestre in https://github.com/uutils/coreutils/pull/4004
    • Set exit codes to 125, 126 or 127 for errors from chroot itself by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3908
    • Set trailing var arg by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3907
    • Various improvements to chroot by @sylvestre in https://github.com/uutils/coreutils/pull/3960

    cp

    • Fix cp-i GNU test by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3949
    • Add -H option by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3971
    • Assume --reflink=always on no value by @sssemil in https://github.com/uutils/coreutils/pull/3992
    • Correct error message on copying dir to itself by @jfinkels in https://github.com/uutils/coreutils/pull/3981
    • Allow removing symbolic link loop destination by @jfinkels in https://github.com/uutils/coreutils/pull/3972
    • Preserve permissions when copying directory and don't terminate early on inaccessible file by @jfinkels in https://github.com/uutils/coreutils/pull/3973

    dd

    • Handle stdout redirected to seekable file by @jfinkels in https://github.com/uutils/coreutils/pull/3880
    • Parse operands manually via positional args by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3938

    df

    • Remove trailing spaces in rightmost column by @jfinkels in https://github.com/uutils/coreutils/pull/3882

    factor

    • Enable union feature for smallvec by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3928

    ls

    • Exit code 2 when IOError happened for argument by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3921
    • Add support for +FORMAT in timestyle by @dmatos2012 in https://github.com/uutils/coreutils/pull/3988
    • Align --ignore behavior with that of GNU ls by @ackerleytng in https://github.com/uutils/coreutils/pull/3803

    mktemp

    • Respect TMPDIR environment variable by @jfinkels in https://github.com/uutils/coreutils/pull/3552
    • Match GNU error message on too many args by @jfinkels in https://github.com/uutils/coreutils/pull/3951
    • Add message for directory not found by @jfinkels in https://github.com/uutils/coreutils/pull/3940

    pr

    • Migrate from chrono to time by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3918
    • Use clap to handle help & version by @cakebaker in https://github.com/uutils/coreutils/pull/3904

    rm

    • Added write-protected check for files by @stefins in https://github.com/uutils/coreutils/pull/3853
    • Added descend messages for interactive mode Fixes #3817 by @palaster in https://github.com/uutils/coreutils/pull/3931

    split

    • Add support for starting suffix numbers by @andrewbaptist in https://github.com/uutils/coreutils/pull/3976

    sync

    • Various compatibility improvement by @sylvestre in https://github.com/uutils/coreutils/pull/4003

    tail

    • Fix stdin redirect (#3842) by @jhscheer in https://github.com/uutils/coreutils/pull/3845
    • Fix tail panicking when seeking backwards by @kilpkonn in https://github.com/uutils/coreutils/pull/3873
    • Refactor tail by @Joining7943 in https://github.com/uutils/coreutils/pull/3905
    • Fix random errors for piped input on macos by @Joining7943 in https://github.com/uutils/coreutils/pull/3953

    test

    • Add a bunch of operations by @sylvestre in https://github.com/uutils/coreutils/pull/4002

    New Contributors

    @sssemil (https://github.com/uutils/coreutils/pull/3852), @kilpkonn (https://github.com/uutils/coreutils/pull/3873), @stefins (https://github.com/uutils/coreutils/pull/3853), @snapdgn (https://github.com/uutils/coreutils/pull/3923), @sashashura (https://github.com/uutils/coreutils/pull/3980), @dmatos2012 (https://github.com/uutils/coreutils/pull/3988)

    Full Changelog: https://github.com/uutils/coreutils/compare/0.0.15...0.0.16

    Source code(tar.gz)
    Source code(zip)
    coreutils-0.0.16-aarch64-unknown-linux-gnu.tar.gz(3.15 MB)
    coreutils-0.0.16-arm-unknown-linux-gnueabihf.tar.gz(3.24 MB)
    coreutils-0.0.16-i686-pc-windows-msvc.zip(2.52 MB)
    coreutils-0.0.16-i686-unknown-linux-gnu.tar.gz(4.74 MB)
    coreutils-0.0.16-i686-unknown-linux-musl.tar.gz(3.58 MB)
    coreutils-0.0.16-x86_64-apple-darwin.tar.gz(3.32 MB)
    coreutils-0.0.16-x86_64-pc-windows-gnu.zip(3.72 MB)
    coreutils-0.0.16-x86_64-pc-windows-msvc.zip(2.65 MB)
    coreutils-0.0.16-x86_64-unknown-linux-gnu.tar.gz(4.40 MB)
    coreutils-0.0.16-x86_64-unknown-linux-musl.tar.gz(3.37 MB)
    coreutils-musl_0.0.16_amd64.deb(2.23 MB)
    coreutils-musl_0.0.16_i686.deb(2.41 MB)
    coreutils_0.0.16_amd64.deb(2.89 MB)
    coreutils_0.0.16_arm64.deb(1.93 MB)
    coreutils_0.0.16_armhf.deb(1.94 MB)
    coreutils_0.0.16_i686.deb(3.21 MB)
  • 0.0.15(Aug 20, 2022)

    Highlights

    • stty is now partially implemented (https://github.com/uutils/coreutils/pull/3672). We now finally have implementations for all the coreutils!
    • tail now implements --follow and has seen many more improvements thanks to the giant refactor by @jhscheer.
    • wc and sum have gotten performance improvements by @resistor.
    • There have been refactors, fixes and performance improvements in many utils.

    GNU test suite compatibility

    Many utils have seen minor changes to improve GNU compatibility. This marks the first release where we pass more tests than we fail. See https://github.com/uutils/coreutils-tracking/ for more details

    | result | 0.0.14 | 0.0.15 | change | |--------|-------:|------:|-------:| | pass | 242 | 293 | +51 | | skip | 73 | 73 | 0 | | fail | 270 | 222 | -48 | | error | 8 | 5 | -3 |

    Changes

    The PR's listed below are a selection of all the contributions in this release.

    basename

    • Simple format arguments by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3736

    basenc

    • Fix error code on wrong usage by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3743

    comm

    • Use NUL if delimiter is empty by @cakebaker in https://github.com/uutils/coreutils/pull/3701

    cp

    • Correctly copy attributes of a dangling symbolic link by @jfinkels in https://github.com/uutils/coreutils/pull/3692
    • Implement --sparse flag by @pimzero in https://github.com/uutils/coreutils/pull/3766
    • Make --b=simple protective of source by @philgebhardt in https://github.com/uutils/coreutils/pull/3647
    • Truncate destination when --reflink is set by @pimzero in https://github.com/uutils/coreutils/pull/3759
    • Fix test_copy_through_dangling_symlink_no_dereference_permissions by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3789

    cut

    • Fix argument parsing for the delimiter by @jhscheer in https://github.com/uutils/coreutils/pull/3607

    dd

    • Error message of invalid args is matched with GNU by @Fuchczyk in https://github.com/uutils/coreutils/pull/3831
    • Fix output issues by @patricksjackson in https://github.com/uutils/coreutils/pull/3610
    • Only print concise byte counts if count is sufficiently large by @jfinkels in https://github.com/uutils/coreutils/pull/3617
    • Reuse buffer for the most common cases by @patricksjackson in https://github.com/uutils/coreutils/pull/3600
    • Fix broken pipe in test_bytes_oseek_bytes_trunc_oflag by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3797

    df

    • Better error message when executed in a chroot without /proc by @lendandgit in https://github.com/uutils/coreutils/pull/3602
    • Fix output if input path is device name by @cakebaker in https://github.com/uutils/coreutils/pull/3682
    • Fix rounding behavior in humanreadable mode by @cakebaker in https://github.com/uutils/coreutils/pull/3554
    • Read block size from env vars by @cakebaker in https://github.com/uutils/coreutils/pull/3504
    • Show "total" label in correct column by @jfinkels in https://github.com/uutils/coreutils/pull/3579
    • Trim size header in tests by @cakebaker in https://github.com/uutils/coreutils/pull/3582
    • Implement the --sync flag for df by @anastygnome in https://github.com/uutils/coreutils/pull/3592

    dircolors

    • Add support for stdin by @jhscheer in https://github.com/uutils/coreutils/pull/3591
    • Escape ' and : by @cakebaker in https://github.com/uutils/coreutils/pull/3639
    • Implement --print-ls-colors by @cakebaker in https://github.com/uutils/coreutils/pull/3566
    • Make -b & -c args overridable by @cakebaker in https://github.com/uutils/coreutils/pull/3569
    • Update error message by @cakebaker in https://github.com/uutils/coreutils/pull/3596

    dirname

    • Add missing "\n\" to usage message by @cakebaker in https://github.com/uutils/coreutils/pull/3570

    du

    • Remove unnecessary spaces from help by @cakebaker in https://github.com/uutils/coreutils/pull/3622
    • Add parse_glob module and update du to use parse_glob by @ackerleytng in https://github.com/uutils/coreutils/pull/3754

    expand

    • Add support for --tabs shortcuts by @cakebaker in https://github.com/uutils/coreutils/pull/3612
    • Allow multiple tabs args by @cakebaker in https://github.com/uutils/coreutils/pull/3585
    • Show error if --tabs arg has invalid chars by @cakebaker in https://github.com/uutils/coreutils/pull/3583
    • Allow specifier only with last value by @cakebaker in https://github.com/uutils/coreutils/pull/3595
    • Handle too large tab size by @cakebaker in https://github.com/uutils/coreutils/pull/3594
    • Remove empty line from error message by @cakebaker in https://github.com/uutils/coreutils/pull/3577
    • Simplify signature of expand_shortcuts() by @cakebaker in https://github.com/uutils/coreutils/pull/3644

    hashsum

    • Isolate non-"GNU Coreutils" options by @str4d in https://github.com/uutils/coreutils/pull/3593
    • Fix the -c usage by @sylvestre in https://github.com/uutils/coreutils/pull/3816

    install

    • Verbose messages shows ginstall as command by @sylvestre in https://github.com/uutils/coreutils/pull/3651
    • Fix install -C test by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3663
    • Make install -V show the filename by @ElijahSink in https://github.com/uutils/coreutils/pull/3657

    ln

    • Improve error messages compatibility by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3730
    • Implement -L -P to make tests/ln/hard-to-sym.sh work by @sylvestre in https://github.com/uutils/coreutils/pull/3563
    • Symlink --force, src and dst are same file by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3724

    ls, dir & vdir

    • Add already listed message by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3707
    • Fix double quoting when color is enabled by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3590
    • Implement --zero by @pimzero in https://github.com/uutils/coreutils/pull/3746
    • Remove trailing space when using the comma format (-m) by @anastygnome in https://github.com/uutils/coreutils/pull/3615
    • Silently ignore -T option by @Stonks3141 in https://github.com/uutils/coreutils/pull/3718
    • Forbid octal numbers for width parameter by @Ganneff in https://github.com/uutils/coreutils/pull/3613

    mktemp

    • Change directory permission after creation by @353fc443 in https://github.com/uutils/coreutils/pull/3471
    • Combine --tmpdir and subdirectory info by @jfinkels in https://github.com/uutils/coreutils/pull/3568
    • Error on empty --suffix in some situations by @jfinkels in https://github.com/uutils/coreutils/pull/3599
    • Exit with status 1 on usage errors by @jfinkels in https://github.com/uutils/coreutils/pull/3578
    • Include suffix in error message by @jfinkels in https://github.com/uutils/coreutils/pull/3551
    • Only replace last contiguous block of Xs by @jfinkels in https://github.com/uutils/coreutils/pull/3586
    • Respect POSIXLY_CORRECT env var when parsing args by @weijunji in https://github.com/uutils/coreutils/pull/3604
    • Simplify file path parameter logic by @jfinkels in https://github.com/uutils/coreutils/pull/3573

    mv

    • Fix error when moving directory to itself by @Fuchczyk in https://github.com/uutils/coreutils/pull/3809

    numfmt

    • Implement --format by @cakebaker in https://github.com/uutils/coreutils/pull/3751
    • Implement --to-unit & --from-unit by @cakebaker in https://github.com/uutils/coreutils/pull/3705
    • Preserve trailing zeros by @cakebaker in https://github.com/uutils/coreutils/pull/3764
    • Don't round floats if --from is none by @cakebaker in https://github.com/uutils/coreutils/pull/3742
    • Reject suffix if unit is none by @cakebaker in https://github.com/uutils/coreutils/pull/3716
    • Remove duplicate default hints from help by @cakebaker in https://github.com/uutils/coreutils/pull/3696
    • Show invalid suffix error for i suffix by @cakebaker in https://github.com/uutils/coreutils/pull/3732
    • Show error if --padding is zero by @cakebaker in https://github.com/uutils/coreutils/pull/3686
    • Show error if i suffix is missing by @cakebaker in https://github.com/uutils/coreutils/pull/3713

    paste

    • Implement -z flag by @cakebaker in https://github.com/uutils/coreutils/pull/3659

    readlink

    • Improve GNU compatibility by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3826
    • Symlink loop handling by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3717

    realpath

    • Relative options by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3710
    • Improve symlink handling by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3703
    • Add --no-symlinks alias by @cakebaker in https://github.com/uutils/coreutils/pull/3681

    rm

    • Fix help text mistakenly being used as the long option by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3670

    shuf

    • Add missing spaces to about text by @cakebaker in https://github.com/uutils/coreutils/pull/3677
    • Improve performance by @Garfield96 in https://github.com/uutils/coreutils/pull/3642

    sort

    • Wait when SIGINT was raised for the program to finish properly by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3801

    sum

    • Speed up sum by using reasonable read buffer sizes. by @resistor in https://github.com/uutils/coreutils/pull/3741

    split

    • Don't overwrite files by @andrewbaptist in https://github.com/uutils/coreutils/pull/3719
    • Set names for arg values by @cakebaker in https://github.com/uutils/coreutils/pull/3541
    • Don't skip chucking when the chunk size is a divisor of the buffer size by @resistor in https://github.com/uutils/coreutils/pull/3800

    stty

    • Initial implementation by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3672

    tail

    • Implement --follow and much more by @jhscheer in https://github.com/uutils/coreutils/pull/2695
    • Rework platform module by @anastygnome in https://github.com/uutils/coreutils/pull/3706
    • Fix race condition by @jhscheer in https://github.com/uutils/coreutils/pull/3798
    • Reduce CPU load for polling by @jhscheer in https://github.com/uutils/coreutils/pull/3618
    • Reuse opened file --follow=descriptor by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3830

    tee

    • Implement -p by @eds-collabora in https://github.com/uutils/coreutils/pull/3656

    touch

    • Fix trailing slashes handling by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3788

    true & false

    • Use clap::ArgAction for --help and --version by @jarkonik in https://github.com/uutils/coreutils/pull/3784

    tty

    • Move from libc to nix by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3838

    unexpand

    • Handle too large tabs arguments by @cakebaker in https://github.com/uutils/coreutils/pull/3655
    • Implement tabs shortcuts by @cakebaker in https://github.com/uutils/coreutils/pull/3646
    • Set value name of arg by @cakebaker in https://github.com/uutils/coreutils/pull/3605

    uniq

    • Set default missing value for group and all-repeated args by @cakebaker in https://github.com/uutils/coreutils/pull/3667

    wc

    • Specialize scanning loop on settings. by @resistor in https://github.com/uutils/coreutils/pull/3708
    • Implement a fast path for character counting in wc. by @resistor in https://github.com/uutils/coreutils/pull/3735
    • Implement wc fast paths that skip Unicode decoding. by @resistor in https://github.com/uutils/coreutils/pull/3740
    • Fix wc gnu test suite compatibility by @anastygnome in https://github.com/uutils/coreutils/pull/3688

    uucore

    • Create help_section macro by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3180
    • Refactor, document and test ranges module by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3844
    • Remove show_error_custom_description macros show_usage_error by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3837
    • Add backport for Path::is_symlink() by @jfinkels in https://github.com/uutils/coreutils/pull/3697
    • Fix invalid enum variant in docstring by @cakebaker in https://github.com/uutils/coreutils/pull/3643
    • Simplify invalid encoding handling by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3832
    • canonicalize: Loop looking in windows by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3714

    General

    • Netbsd / OpenBSD build fix by @devnexen in https://github.com/uutils/coreutils/pull/3807
    • Add more consistency in the --help output and declarations by @sylvestre in https://github.com/uutils/coreutils/pull/3774
    • dependencies: make winapi dependency only for Windows by @niyaznigmatullin in https://github.com/uutils/coreutils/pull/3846
    • tests: fix Freebsd test failures by @jhscheer in https://github.com/uutils/coreutils/pull/3777
    • tests: ignore failing tests for FreeBSD by @jhscheer in https://github.com/uutils/coreutils/pull/3806
    • Replace lazy_static with once_cell by @Sciencentistguy in https://github.com/uutils/coreutils/pull/3704
    • README: add badge for MSRV by @jhscheer in https://github.com/uutils/coreutils/pull/3799
    • Remove use of mem::uninitialized by @5225225 in https://github.com/uutils/coreutils/pull/3808
    • Remove deprecated clap functions by @cakebaker in https://github.com/uutils/coreutils/pull/3768, https://github.com/uutils/coreutils/pull/3850, https://github.com/uutils/coreutils/pull/3848, https://github.com/uutils/coreutils/pull/3804 & https://github.com/uutils/coreutils/pull/3771

    New Contributors

    @weijunji (https://github.com/uutils/coreutils/pull/3604), @str4d (https://github.com/uutils/coreutils/pull/3593), @patricksjackson (https://github.com/uutils/coreutils/pull/3600), @Ganneff (https://github.com/uutils/coreutils/pull/3613), @Garfield96 (https://github.com/uutils/coreutils/pull/3642), @philgebhardt (https://github.com/uutils/coreutils/pull/3647), @ElijahSink (https://github.com/uutils/coreutils/pull/3657), @niyaznigmatullin (https://github.com/uutils/coreutils/pull/3663), @eds-collabora (https://github.com/uutils/coreutils/pull/3656), @lendandgit (https://github.com/uutils/coreutils/pull/3602), @resistor (https://github.com/uutils/coreutils/pull/3708), @andrewbaptist (https://github.com/uutils/coreutils/pull/3720), @Stonks3141 (https://github.com/uutils/coreutils/pull/3718), @pimzero (https://github.com/uutils/coreutils/pull/3746), @Fuchczyk (https://github.com/uutils/coreutils/pull/3809), @5225225 (https://github.com/uutils/coreutils/pull/3808), @jarkonik (https://github.com/uutils/coreutils/pull/3784)

    Full Changelog: https://github.com/uutils/coreutils/compare/0.0.14...0.0.15

    Source code(tar.gz)
    Source code(zip)
    coreutils-0.0.15-aarch64-unknown-linux-gnu.tar.gz(3.26 MB)
    coreutils-0.0.15-arm-unknown-linux-gnueabihf.tar.gz(3.31 MB)
    coreutils-0.0.15-i686-pc-windows-msvc.zip(2.60 MB)
    coreutils-0.0.15-i686-unknown-linux-gnu.tar.gz(4.92 MB)
    coreutils-0.0.15-i686-unknown-linux-musl.tar.gz(3.73 MB)
    coreutils-0.0.15-x86_64-apple-darwin.tar.gz(3.42 MB)
    coreutils-0.0.15-x86_64-pc-windows-gnu.zip(3.84 MB)
    coreutils-0.0.15-x86_64-pc-windows-msvc.zip(2.75 MB)
    coreutils-0.0.15-x86_64-unknown-linux-gnu.tar.gz(4.54 MB)
    coreutils-0.0.15-x86_64-unknown-linux-musl.tar.gz(3.50 MB)
    coreutils-musl_0.0.15_amd64.deb(2.28 MB)
    coreutils-musl_0.0.15_i686.deb(2.48 MB)
    coreutils_0.0.15_amd64.deb(2.96 MB)
    coreutils_0.0.15_arm64.deb(1.96 MB)
    coreutils_0.0.15_armhf.deb(1.97 MB)
    coreutils_0.0.15_i686.deb(3.29 MB)
  • 0.0.14(May 22, 2022)

    Highlights

    • Minimum supported Rust version is now 1.56 and we use the 2021 edition.
    • Android support has been fixed and is now checked in the CI thanks to @jtracey.
    • df has seen major improvements due to incredible work by @cakebaker.
    • Path completions on modern shells (like zsh and fish) now work properly.
    • The dir and vdir utilities where added as aliases for ls and ls -l, respectively.
    • Many utils have seen minor changes to improve GNU compatibility. See https://github.com/uutils/coreutils-tracking/ for more details

    Changes

    The PR's listed below change the user-facing behaviour of the utils. It is a selection of all the contributions in this release.

    General

    • MSRV 1.56 by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3350
    • Rust Edition 2021 by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3368
    • Fix Android support by @jtracey in https://github.com/uutils/coreutils/pull/3396
    • docs: Show supported platforms for each util by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3374, https://github.com/uutils/coreutils/pull/3385
    • docs: Don't download the tldr archive automatically by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3415
    • docs: Require a feature to build by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3444
    • Clap value hints by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3524

    chown

    • Allow setting arbitrary numeric user ID by @jfinkels in https://github.com/uutils/coreutils/pull/3438

    cp

    • Do not dereference symlink even when dangling - fix issue #3364 by @anastygnome in https://github.com/uutils/coreutils/pull/3459

    date

    • Set names for arg values by @cakebaker in https://github.com/uutils/coreutils/pull/3545

    df

    • Show error if same type is included & excluded by @cakebaker in https://github.com/uutils/coreutils/pull/3369
    • Show error when file argument does not exist by @jfinkels in https://github.com/uutils/coreutils/pull/3376
    • Fix too low values in I* columns by @cakebaker in https://github.com/uutils/coreutils/pull/3365
    • Fix calculation of IUse% by @cakebaker in https://github.com/uutils/coreutils/pull/3387
    • Fix incorrect whitespace between columns by @cakebaker in https://github.com/uutils/coreutils/pull/3386
    • -h -H shouldn't cause an error #3366 by @gmnsii in https://github.com/uutils/coreutils/pull/3414
    • Fix broken "test_df_output_overridden" test by @cakebaker in https://github.com/uutils/coreutils/pull/3428
    • Fix File column width for unicode filenames by @cakebaker in https://github.com/uutils/coreutils/pull/3429
    • Show error if all types are excluded by @cakebaker in https://github.com/uutils/coreutils/pull/3418
    • Respect -t arg when specific file is provided by @cakebaker in https://github.com/uutils/coreutils/pull/3408
    • Allow sizes with a suffix for --block-size by @cakebaker in https://github.com/uutils/coreutils/pull/3441
    • Show "block-size argument too large" error by @cakebaker in https://github.com/uutils/coreutils/pull/3458
    • Fix Size column header by @cakebaker in https://github.com/uutils/coreutils/pull/3456
    • Set min width of Used column to 5 by @cakebaker in https://github.com/uutils/coreutils/pull/3480
    • Set names for arg values & add missing space by @cakebaker in https://github.com/uutils/coreutils/pull/3490
    • Fix Size header for multiples of 1000 & 1024 by @cakebaker in https://github.com/uutils/coreutils/pull/3499
    • Use blocksize of 512 if POSIXLY_CORRECT is set by @cakebaker in https://github.com/uutils/coreutils/pull/3482
    • Show error if provided block size is zero by @cakebaker in https://github.com/uutils/coreutils/pull/3514
    • Test default blocksize in POSIX mode by @cakebaker in https://github.com/uutils/coreutils/pull/3522
    • Round up values if block size is specified by @cakebaker in https://github.com/uutils/coreutils/pull/3526
    • Fix incorrect rounding of size header by @cakebaker in https://github.com/uutils/coreutils/pull/3530

    du

    • Return non zero error code when dealing with permissions errors by @sylvestre in https://github.com/uutils/coreutils/pull/3382
    • Add support for --exclude and --exclude-from by @sylvestre in https://github.com/uutils/coreutils/pull/3381

    env

    • Add program signal messages by @ndd7xv in https://github.com/uutils/coreutils/pull/3290

    hashsum

    • Add --no-names option from official b3sum tool by @pothos in https://github.com/uutils/coreutils/pull/3361

    install

    • Support of -d dir/. to match GNU's by @sylvestre in https://github.com/uutils/coreutils/pull/3353
    • When install --strip-program=foor fails, remove the target file by @sylvestre in https://github.com/uutils/coreutils/pull/3419
    • Verbose - list all created directories by @sylvestre in https://github.com/uutils/coreutils/pull/3420

    kill

    • Accept process group with negative id by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3501

    ls, dir & vdir

    • Implement --group-directories-first by @thomasqueirozb in https://github.com/uutils/coreutils/pull/3550
    • Add dir and vdir utils by @gmnsii in https://github.com/uutils/coreutils/pull/3405

    mkdir

    • Fix a clippy warning on clippy::ptr-arg by @sylvestre in https://github.com/uutils/coreutils/pull/3393
    • Fixed not respecting set umask by @pyoky in https://github.com/uutils/coreutils/pull/3150

    mktemp

    • Respect path given in template argument by @jfinkels in https://github.com/uutils/coreutils/pull/3465
    • Error on path separator in template prefix by @jfinkels in https://github.com/uutils/coreutils/pull/3512
    • Fix error msg when suffix has path sep. by @jfinkels in https://github.com/uutils/coreutils/pull/3543
    • Correct error message on absolute path by @jfinkels in https://github.com/uutils/coreutils/pull/3521

    mv

    • Add OverwriteMode match in specific case by @sudosmile in https://github.com/uutils/coreutils/pull/3383
    • Move the tests in a separate function by @sylvestre in https://github.com/uutils/coreutils/pull/3390
    • Trigger an error when doing mv dir1 dir2 dir2 by @sylvestre in https://github.com/uutils/coreutils/pull/3392
    • Allow a single source with --target-directory by @ilkecan in https://github.com/uutils/coreutils/pull/3529

    printf

    • Default left-justify integer conversion to 1 width by @hbina in https://github.com/uutils/coreutils/pull/3061

    ptx

    • Implement breakfile option by @mike-kfed in https://github.com/uutils/coreutils/pull/3455

    rm

    • Rename none by --interactive=never to fix ../gnu/tests/rm/i-never.sh by @sylvestre in https://github.com/uutils/coreutils/pull/3356

    seq

    • Use usage error where appropriate by @jfinkels in https://github.com/uutils/coreutils/pull/3539

    stat

    • Add support to read a filename redirected to stdin by @crazystylus in https://github.com/uutils/coreutils/pull/3280
    • Improve handling of stdin/fifo (fix #3485) by @jhscheer in https://github.com/uutils/coreutils/pull/3498

    tty

    • Should not return 2 when --help is used by @sylvestre in https://github.com/uutils/coreutils/pull/3367

    uname

    • Hide processor and hwplatform options by @LevitatingBusinessMan in https://github.com/uutils/coreutils/pull/3537

    uniq

    • Fix almost all GNU tests by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3417

    New Contributors

    @pothos (https://github.com/uutils/coreutils/pull/3361), @marv (https://github.com/uutils/coreutils/pull/3384), @sudosmile (https://github.com/uutils/coreutils/pull/3383), @pyoky (https://github.com/uutils/coreutils/pull/3150), @gmnsii (https://github.com/uutils/coreutils/pull/3405), @rtzoeller (https://github.com/uutils/coreutils/pull/3443), @anastygnome (https://github.com/uutils/coreutils/pull/3459), @naveensrinivasan (https://github.com/uutils/coreutils/pull/3453), @ilkecan (https://github.com/uutils/coreutils/pull/3529)

    Full Changelog: https://github.com/uutils/coreutils/compare/0.0.13...0.0.14

    Source code(tar.gz)
    Source code(zip)
    coreutils-0.0.14-aarch64-unknown-linux-gnu.tar.gz(2.96 MB)
    coreutils-0.0.14-arm-unknown-linux-gnueabihf.tar.gz(3.01 MB)
    coreutils-0.0.14-i686-pc-windows-msvc.zip(2.38 MB)
    coreutils-0.0.14-i686-unknown-linux-gnu.tar.gz(4.55 MB)
    coreutils-0.0.14-i686-unknown-linux-musl.tar.gz(3.38 MB)
    coreutils-0.0.14-x86_64-pc-windows-gnu.zip(3.49 MB)
    coreutils-0.0.14-x86_64-pc-windows-msvc.zip(2.51 MB)
    coreutils-0.0.14-x86_64-unknown-linux-gnu.tar.gz(4.21 MB)
    coreutils-0.0.14-x86_64-unknown-linux-musl.tar.gz(3.17 MB)
    coreutils-musl_0.0.14_amd64.deb(2.10 MB)
    coreutils-musl_0.0.14_i686.deb(2.28 MB)
    coreutils_0.0.14_amd64.deb(2.76 MB)
    coreutils_0.0.14_arm64.deb(1.80 MB)
    coreutils_0.0.14_armhf.deb(1.81 MB)
    coreutils_0.0.14_i686.deb(3.08 MB)
  • 0.0.13(Apr 2, 2022)

    This is a big release with 276 new PR's merged!

    The highlights of this release are:

    • Mininum supported Rust version is now 1.54.
    • Many improvements and fixes in many utils. In particular, cp, dd, df, split and tr have gotten very large improvements and are much more compatible with GNU.
    • Online user documentation featuring installation instructions, descriptions, flags, options and examples.
    • We now use clap 3, which gives the --help output a new look and enables abbreviations of long arguments. For example:
    ls --color    # already worked pre 0.0.13
    ls --col      # any unambiguous shorthand now also works
    

    Changes

    The PR's listed below change the user-facing behaviour of the utils. It is just a small selection of all the contributions in this release.

    General

    • Clap 3 by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2863
    • Infer unambiguous long arguments in clap by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2936
    • User documentation by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2897, https://github.com/uutils/coreutils/pull/3152, https://github.com/uutils/coreutils/pull/3134
    • Include license text in all published crates by @davide125 in https://github.com/uutils/coreutils/pull/3131

    uucore

    • Allow backup suffix with hyphen value by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2997
    • Error on negative interval in parse_time::from_str() by @jfinkels in https://github.com/uutils/coreutils/pull/3292
    • No uppercase suffixes in parse_time by @jfinkels in https://github.com/uutils/coreutils/pull/3315
    • Don't panic when canonicalizing a nonexistent path by @water-ghosts in https://github.com/uutils/coreutils/pull/3103
    • Fix parse_size to use u64 rather than usize for better 32-bit support by @omertuc in https://github.com/uutils/coreutils/pull/3084

    cp

    • Override args instead of having them conflict by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2998
    • Avoid following a destination symlink with -P by @refi64 in https://github.com/uutils/coreutils/pull/3101
    • Create backup before hardlink by @water-ghosts in https://github.com/uutils/coreutils/pull/3033
    • Fail when copying a directory to a file by @water-ghosts in https://github.com/uutils/coreutils/pull/3044
    • Only allow directory for -t by @shoriminimoe in https://github.com/uutils/coreutils/pull/3027
    • Support copying FIFOs with -r by @water-ghosts in https://github.com/uutils/coreutils/pull/3032
    • Don't panic when calling cp -a with a nonexistent file by @water-ghosts in https://github.com/uutils/coreutils/pull/2960
    • Avoid infinite recursion when source and destinations are same while using cp -R by @Narasimha1997 in https://github.com/uutils/coreutils/pull/3018

    dd

    • block/unblock on ebcdic/ascii conversions by @jfinkels in https://github.com/uutils/coreutils/pull/2909
    • Correct behavior when status=noxfer by @jfinkels in https://github.com/uutils/coreutils/pull/2915
    • Support seek=N when destination is stdout by @jfinkels in https://github.com/uutils/coreutils/pull/2911
    • Add support for 'b' and 'x' multipliers in numeric arguments by @jfinkels in https://github.com/uutils/coreutils/pull/3028
    • Allow multiple instances of arguments by @iovanom in https://github.com/uutils/coreutils/pull/3021
    • Correct order and phrasing of truncated record by @jfinkels in https://github.com/uutils/coreutils/pull/3154
    • Correctly account for partial record written by @jfinkels in https://github.com/uutils/coreutils/pull/3129
    • Create ConversionMode to simplify conversion, blocking, and unblocking by @jfinkels in https://github.com/uutils/coreutils/pull/3293
    • Don't error when outfile is /dev/null by @jfinkels in https://github.com/uutils/coreutils/pull/3148
    • Implement iseek + oseek flags by @chordtoll in https://github.com/uutils/coreutils/pull/3256
    • Make status=progress rewrite once/sec by @ndd7xv in https://github.com/uutils/coreutils/pull/3078
    • Pad partial record with spaces in some cases by @jfinkels in https://github.com/uutils/coreutils/pull/3156
    • Remove spurious zero multiplier warning by @jfinkels in https://github.com/uutils/coreutils/pull/3128
    • Show warning if skipping past end of input by @jfinkels in https://github.com/uutils/coreutils/pull/3066
    • Show warning when using 0x size multiplier by @jfinkels in https://github.com/uutils/coreutils/pull/3085
    • Truncate to specified seek length by @jfinkels in https://github.com/uutils/coreutils/pull/3076

    df

    • Adds support for mount path prefix matching and input path by @crazystylus in https://github.com/uutils/coreutils/pull/3161
    • --output w/o "=" doesn't expect further args by @cakebaker in https://github.com/uutils/coreutils/pull/3327
    • Add support for --total option by @jfinkels in https://github.com/uutils/coreutils/pull/3197
    • Always produce the same order in output table by @jfinkels in https://github.com/uutils/coreutils/pull/3126
    • Always round up usage percentage (#3208) by @cakebaker in https://github.com/uutils/coreutils/pull/3230
    • Correctly scale bytes by block size by @jfinkels in https://github.com/uutils/coreutils/pull/3182
    • Fix block size header for multiples of 1024 by @jfinkels in https://github.com/uutils/coreutils/pull/3191
    • Fix calculation of Use% column by @cakebaker in https://github.com/uutils/coreutils/pull/3309
    • Fix calculation of Use% in "total" row by @cakebaker in https://github.com/uutils/coreutils/pull/3347
    • Fix panic when using -x argument (#3257) by @cakebaker in https://github.com/uutils/coreutils/pull/3258
    • Implement the --output command-line argument by @jfinkels in https://github.com/uutils/coreutils/pull/3176, https://github.com/uutils/coreutils/pull/3322, https://github.com/uutils/coreutils/pull/3323
    • Implement the File column by @jfinkels in https://github.com/uutils/coreutils/pull/3294
    • Omit reserved filesystem blocks in "Available" by @cakebaker in https://github.com/uutils/coreutils/pull/3270
    • Remove unused "--direct" option by @cakebaker in https://github.com/uutils/coreutils/pull/3263
    • Some option changes by @xxyzz in https://github.com/uutils/coreutils/pull/3127

    echo

    • Allow echo with escapes to work with \0 by @Dr-Emann in https://github.com/uutils/coreutils/pull/2977

    hashsum

    • Added b2sum and b3sum utilities by @palaster in https://github.com/uutils/coreutils/pull/3164
    • Add BLAKE3 to Hashing Algorithms by @DestroyerXyz in https://github.com/uutils/coreutils/pull/3108

    head

    • Add ---presume-input-pipe parameter by @DevSabb in https://github.com/uutils/coreutils/pull/3345
    • Don't add trailing newline to end of file that didn't originally have one by @jfinkels in https://github.com/uutils/coreutils/pull/2957

    install

    • Better error messages when handling invalid arguments by @ndd7xv in https://github.com/uutils/coreutils/pull/3187

    join

    • Print unsorted line in error message by @cohosh in https://github.com/uutils/coreutils/pull/2899
    • Fix default check order behaviour by @cohosh in https://github.com/uutils/coreutils/pull/2908
    • Add support for -t '\0' by @jtracey in https://github.com/uutils/coreutils/pull/2881
    • "Support" field numbers larger than usize::MAX by @jtracey in https://github.com/uutils/coreutils/pull/2882
    • Add support for non-unicode field separators by @jtracey in https://github.com/uutils/coreutils/pull/2902
    • Improve performance by @jtracey in https://github.com/uutils/coreutils/pull/3092

    ln

    • Make the tests/ln/hard-backup.sh test work by @sylvestre in https://github.com/uutils/coreutils/pull/3340
    • Pass tests/ln/backup-1.sh & improvement in the error messages by @sylvestre in https://github.com/uutils/coreutils/pull/3346

    ls

    • Add new optional arguments to --classify flag by @abhishekc-sharma in https://github.com/uutils/coreutils/pull/3041
    • Add proper quotes on symlink with --quoting-style=shell-escape by @sylvestre in https://github.com/uutils/coreutils/pull/3317
    • Fix display of bad file descriptor errors by @kimono-koans in https://github.com/uutils/coreutils/pull/2875
    • Fix display of inodes and add allocation size feature by @kimono-koans in https://github.com/uutils/coreutils/pull/3052
    • When -aA are provided, the order matters by @sylvestre in https://github.com/uutils/coreutils/pull/3285

    mkdir

    • Add support of mkdir -p foo/. by @sylvestre in https://github.com/uutils/coreutils/pull/3311
    • Recursive reporting of created directories in verbose mode by @353fc443 in https://github.com/uutils/coreutils/pull/3217

    nproc

    • Add the full support of OMP_THREAD_LIMIT by @sylvestre in https://github.com/uutils/coreutils/pull/3286
    • Improve the GNU compat by @sylvestre in https://github.com/uutils/coreutils/pull/3248
    • Make tests/misc/nproc-override.sh pass by implementing OMP_NUM_THREADS=X,Y,Z by @sylvestre in https://github.com/uutils/coreutils/pull/3296

    paste

    • Fixes and cleanup by @Dr-Emann in https://github.com/uutils/coreutils/pull/2982

    pinky

    • Fix off-by-one in GECOS parsing by @jtracey in https://github.com/uutils/coreutils/pull/3155

    pr

    • Move from getopts to clap and fix heuristic for -n by @tertsdiepraam in https://github.com/uutils/coreutils/pull/3185

    printf

    • Update %g formatting to match GNU by @water-ghosts in https://github.com/uutils/coreutils/pull/3087
    • Fix printf sci notation round up by @nickd0 in https://github.com/uutils/coreutils/pull/3116
    • Support leading zeroes with %0n formatting by @water-ghosts in https://github.com/uutils/coreutils/pull/3070
    • Use clap default help and version by @ndd7xv in https://github.com/uutils/coreutils/pull/3067

    realpath

    • Error when resolved symlink is absolute and ENOENT by @hbina in https://github.com/uutils/coreutils/pull/3037

    seq

    • Add -f FORMAT option by @jfinkels in https://github.com/uutils/coreutils/pull/2918
    • Correct error message for zero increment by @jfinkels in https://github.com/uutils/coreutils/pull/2923
    • Better argument parsing by @HeroicKatora in https://github.com/uutils/coreutils/pull/3081

    shuf

    • accept multiple occurances of head-count argument by @DevSabb in https://github.com/uutils/coreutils/pull/3329

    sleep

    • Give usage error on invalid time interval by @jfinkels in https://github.com/uutils/coreutils/pull/3284

    sort

    • Add two missing spaces in help texts by @cakebaker in https://github.com/uutils/coreutils/pull/3287

    split

    • Add support for -e argument by @jfinkels in https://github.com/uutils/coreutils/pull/3107
    • Add support for -x option (hex suffixes) by @jfinkels in https://github.com/uutils/coreutils/pull/2981
    • Add support for -n l/NUM option to split by @jfinkels in https://github.com/uutils/coreutils/pull/2980
    • Avoid writing final empty chunk with -C by @jfinkels in https://github.com/uutils/coreutils/pull/3278
    • Catch and handle broken pipe errors by @jfinkels in https://github.com/uutils/coreutils/pull/3275
    • Correct error message on invalid arg. to -a by @jfinkels in https://github.com/uutils/coreutils/pull/3006
    • Elide all chunks when input file is empty by @jfinkels in https://github.com/uutils/coreutils/pull/3274
    • Error when --additional-suffix contains / by @jfinkels in https://github.com/uutils/coreutils/pull/3111
    • Error when num. of chunks is greater than num. of possible filenames by @ndd7xv in https://github.com/uutils/coreutils/pull/3146
    • Handle no final newline with --line-bytes by @jfinkels in https://github.com/uutils/coreutils/pull/3277
    • Add --line-bytes option by @jfinkels in https://github.com/uutils/coreutils/pull/3204
    • Add -n option by @jfinkels in https://github.com/uutils/coreutils/pull/2866
    • Implement outputting kth chunk of file by @jfinkels in https://github.com/uutils/coreutils/pull/3207
    • Add ---io-blksize parameter by @DevSabb in https://github.com/uutils/coreutils/pull/3064

    stat

    • Allow formatting of negative numbers by @snobee in https://github.com/uutils/coreutils/pull/3053

    tail

    • Fix a bug in tail [ -n | -c ] +NUM <file> by @jfinkels in https://github.com/uutils/coreutils/pull/2904
    • Don't error when following non-UTF-8 data by @jfinkels in https://github.com/uutils/coreutils/pull/2916
    • Add ---presume-input-pipe parameter by @DevSabb in https://github.com/uutils/coreutils/pull/3345
    • Support zero-terminated lines in streams by @jfinkels in https://github.com/uutils/coreutils/pull/2898

    test

    • test: fix wsl executable permission by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2965

    timeout

    • Avoid panicking for empty string by @353fc443 in https://github.com/uutils/coreutils/pull/3206
    • Fix bug in --preserve-status mode by @jfinkels in https://github.com/uutils/coreutils/pull/3249
    • Give usage error on invalid time interval by @jfinkels in https://github.com/uutils/coreutils/pull/3283
    • Produce usage error on invalid signal by @jfinkels in https://github.com/uutils/coreutils/pull/3297
    • Return 125 on invalid time interval args by @jfinkels in https://github.com/uutils/coreutils/pull/3314
    • Support long form of --kill-after arg by @jfinkels in https://github.com/uutils/coreutils/pull/3313

    touch

    • Better error messages when no args is provided by @hbina in https://github.com/uutils/coreutils/pull/3047
    • Implement - by @dgunay in https://github.com/uutils/coreutils/pull/3158
    • Show error on -h with nonexistent file by @jfinkels in https://github.com/uutils/coreutils/pull/3117

    tr

    • Expanding expansion module (added support for character classes and many more patterns) by @hbina in https://github.com/uutils/coreutils/pull/2502
    • Fix octal interpretation of repeat count string by @DevSabb in https://github.com/uutils/coreutils/pull/3178

    true

    • Make true return false less frequently by @HeroicKatora in https://github.com/uutils/coreutils/pull/3014

    truncate

    • Create non-existent file by default by @jfinkels in https://github.com/uutils/coreutils/pull/2912
    • Add a division by zero error by @jfinkels in https://github.com/uutils/coreutils/pull/2934
    • Prevent underflow when reducing size by @jfinkels in https://github.com/uutils/coreutils/pull/2945
    • Better error msg when dir does not exist by @jfinkels in https://github.com/uutils/coreutils/pull/2943
    • Change cli error return code by @shoriminimoe in https://github.com/uutils/coreutils/pull/3012
    • Error when trying to truncate a fifo by @jfinkels in https://github.com/uutils/coreutils/pull/2944

    wc

    • Fix counting files from pseudo-filesystem by @tertsdiepraam in https://github.com/uutils/coreutils/pull/2935
    • Compute number widths using total file sizes by @ackerleytng in https://github.com/uutils/coreutils/pull/3304
    • Implement --files0-from option by @allan-silva in https://github.com/uutils/coreutils/pull/2966

    New Contributors

    @cohosh (https://github.com/uutils/coreutils/pull/2899, @g-k (https://github.com/uutils/coreutils/pull/2893), @water-ghosts (https://github.com/uutils/coreutils/pull/2956), @biomunky (https://github.com/uutils/coreutils/pull/2964), @danieleades (https://github.com/uutils/coreutils/pull/2963), @douglaz (https://github.com/uutils/coreutils/pull/2975), @Narasimha1997 (https://github.com/uutils/coreutils/pull/2947), @Toxaris (https://github.com/uutils/coreutils/pull/3020), @rahulkadukar (https://github.com/uutils/coreutils/pull/3030), @DevSabb (https://github.com/uutils/coreutils/pull/3038), @HeroicKatora (https://github.com/uutils/coreutils/pull/3014), @shoriminimoe (https://github.com/uutils/coreutils/pull/3012), @lguist (https://github.com/uutils/coreutils/pull/3011), @ndd7xv (https://github.com/uutils/coreutils/pull/3024), @slycordinator (https://github.com/uutils/coreutils/pull/3013), @RishiKumarRay (https://github.com/uutils/coreutils/pull/3023), @daissi (https://github.com/uutils/coreutils/pull/3100), @snobee (https://github.com/uutils/coreutils/pull/3053), @abhishekc-sharma (https://github.com/uutils/coreutils/pull/3041), @DestroyerXyz (https://github.com/uutils/coreutils/pull/3108), @alextibbles (https://github.com/uutils/coreutils/pull/3110), @serhansekman (https://github.com/uutils/coreutils/pull/3121), @allan-silva (https://github.com/uutils/coreutils/pull/2966), @davide125 (https://github.com/uutils/coreutils/pull/3130), @crazystylus (https://github.com/uutils/coreutils/pull/3074), @miallo (https://github.com/uutils/coreutils/pull/3145), @iovanom (https://github.com/uutils/coreutils/pull/3021), @palaster (https://github.com/uutils/coreutils/pull/3056), @xxyzz (https://github.com/uutils/coreutils/pull/3045), @omertuc (https://github.com/uutils/coreutils/pull/3084), @cakebaker (https://github.com/uutils/coreutils/pull/3202), @dgunay (https://github.com/uutils/coreutils/pull/3158), @nickd0 (https://github.com/uutils/coreutils/pull/3116), @OHNONOTAMOTH (https://github.com/uutils/coreutils/pull/3244), @bnjbvr (https://github.com/uutils/coreutils/pull/3264), @chordtoll (https://github.com/uutils/coreutils/pull/3256), @ackerleytng (https://github.com/uutils/coreutils/pull/3304)

    Full Changelog: https://github.com/uutils/coreutils/compare/0.0.12...0.0.13

    Source code(tar.gz)
    Source code(zip)
    coreutils-0.0.13-aarch64-unknown-linux-gnu.tar.gz(2.93 MB)
    coreutils-0.0.13-arm-unknown-linux-gnueabihf.tar.gz(2.95 MB)
    coreutils-0.0.13-i686-pc-windows-msvc.zip(2.35 MB)
    coreutils-0.0.13-i686-unknown-linux-gnu.tar.gz(4.44 MB)
    coreutils-0.0.13-i686-unknown-linux-musl.tar.gz(3.36 MB)
    coreutils-0.0.13-x86_64-apple-darwin.tar.gz(3.13 MB)
    coreutils-0.0.13-x86_64-pc-windows-gnu.zip(3.46 MB)
    coreutils-0.0.13-x86_64-pc-windows-msvc.zip(2.47 MB)
    coreutils-0.0.13-x86_64-unknown-linux-gnu.tar.gz(4.09 MB)
    coreutils-0.0.13-x86_64-unknown-linux-musl.tar.gz(3.15 MB)
    coreutils-musl_0.0.13_amd64.deb(2.08 MB)
    coreutils-musl_0.0.13_i686.deb(2.27 MB)
    coreutils_0.0.13_amd64.deb(2.68 MB)
    coreutils_0.0.13_arm64.deb(1.78 MB)
    coreutils_0.0.13_armhf.deb(1.79 MB)
    coreutils_0.0.13_i686.deb(3.00 MB)
  • 0.0.12(Jan 19, 2022)

    Due to problems with stdbuf, the previous release (0.0.9) required a patch to work and no binary artifacts were generated. This release fixes that issue.

    Changes

    These are selected user-facing changes since 0.0.8.

    • The minimum supported Rust version is now 1.54.
    • The version numbers of the utils, the coreutils binary, uucore and uucore_procs are now synced. Hence the jump from 0.0.9 to 0.012.
    • All utils now use UResult due to incredible work by @jfinkels, who contributed over 50 PRs for this to happen, with additional contributions by @thomasqueirozb, @Smicry and @E3uka. This change is mostly invisible to users, but does lead to more consistent error messages now and in the future.

    cp

    • Fix pre-write permission change by @kimono-koans in https://github.com/uutils/coreutils/pull/2769
    • Handle edge cases when dest is a symlink by @miDeb in https://github.com/uutils/coreutils/pull/2610

    env

    • Don't panic when name is empty by @thomasqueirozb in https://github.com/uutils/coreutils/pull/2731

    join

    • Add -z option by @jtracey in https://github.com/uutils/coreutils/pull/2880
    • Operate on bytes instead of Strings by @jtracey in https://github.com/uutils/coreutils/pull/2851

    ls

    • Add possible value for --color= by @equal-l2 in https://github.com/uutils/coreutils/pull/2738
    • Reduce binary size by removing regex crate by @kimono-koans in https://github.com/uutils/coreutils/pull/2781
    • Fix newline when only dirs in base directory by @kimono-koans in https://github.com/uutils/coreutils/pull/2853
    • Fix padding for dangling links in non-Long formats by @kimono-koans in https://github.com/uutils/coreutils/pull/2856
    • Fix device display by @kimono-koans in https://github.com/uutils/coreutils/pull/2855

    more

    • Add next-line and prev-line command by @E3uka in https://github.com/uutils/coreutils/pull/2771

    mv

    • Fix bug: Should be able to stat files, but not able to mv if source and target are the same by @kimono-koans in https://github.com/uutils/coreutils/pull/2763

    numfmt

    • Implement --suffix option by @sbentmar in https://github.com/uutils/coreutils/pull/2841

    rm

    • Allow -r flag to be specified multiple times by @kevinburke in https://github.com/uutils/coreutils/pull/2732
    • Silently accepts ---presume-input-tty by @hbina in https://github.com/uutils/coreutils/pull/2532

    seq

    • Use BigDecimal to represent floats by @jfinkels in https://github.com/uutils/coreutils/pull/2698
    • Correct fixed-width spacing for inf sequences by @jfinkels in https://github.com/uutils/coreutils/pull/2740

    split

    • Add --verbose option by @jfinkels in https://github.com/uutils/coreutils/pull/2872
    • Correct filename creation algorithm by @jfinkels in https://github.com/uutils/coreutils/pull/2859

    tail

    • Improve error handling when file not found by @jfinkels in https://github.com/uutils/coreutils/pull/2886
    • Implement -<number> flag by @Smicry in https://github.com/uutils/coreutils/pull/2747

    New Contributors

    • @kevinburke made their first contribution in https://github.com/uutils/coreutils/pull/2732
    • @palfrey made their first contribution in https://github.com/uutils/coreutils/pull/2734
    • @ybc37 made their first contribution in https://github.com/uutils/coreutils/pull/2766
    • @E3uka made their first contribution in https://github.com/uutils/coreutils/pull/2771
    • @refi64 made their first contribution in https://github.com/uutils/coreutils/pull/2778
    • @sbentmar made their first contribution in https://github.com/uutils/coreutils/pull/2841
    • @moko256 made their first contribution in https://github.com/uutils/coreutils/pull/2858

    Full Changelog: https://github.com/uutils/coreutils/compare/0.0.8...0.0.12

    Source code(tar.gz)
    Source code(zip)
    coreutils-0.0.12-aarch64-unknown-linux-gnu.tar.gz(2.77 MB)
    coreutils-0.0.12-arm-unknown-linux-gnueabihf.tar.gz(2.82 MB)
    coreutils-0.0.12-i686-pc-windows-gnu.zip(3.41 MB)
    coreutils-0.0.12-i686-pc-windows-msvc.zip(2.19 MB)
    coreutils-0.0.12-i686-unknown-linux-gnu.tar.gz(4.36 MB)
    coreutils-0.0.12-i686-unknown-linux-musl.tar.gz(3.21 MB)
    coreutils-0.0.12-x86_64-apple-darwin.tar.gz(3.00 MB)
    coreutils-0.0.12-x86_64-pc-windows-gnu.zip(3.30 MB)
    coreutils-0.0.12-x86_64-pc-windows-msvc.zip(2.32 MB)
    coreutils-0.0.12-x86_64-unknown-linux-gnu.tar.gz(4.10 MB)
    coreutils-0.0.12-x86_64-unknown-linux-musl.tar.gz(3.07 MB)
    coreutils-musl_0.0.12_amd64.deb(2.01 MB)
    coreutils-musl_0.0.12_i686.deb(2.15 MB)
    coreutils_0.0.12_amd64.deb(2.67 MB)
    coreutils_0.0.12_arm64.deb(1.70 MB)
    coreutils_0.0.12_armhf.deb(1.70 MB)
    coreutils_0.0.12_i686.deb(2.94 MB)
Owner
null
A crate implementing POSIX/GNU-style --flags.

pflag is a port of the spf13's popular fork of the Go package by the same name.

null 11 Jul 21, 2022
An over-engineered rewrite of pipes.sh in Rust

pipes-rs An over-engineered rewrite of pipes.sh in Rust Installlation macOS Install using Homebrew or download manually from releases. $ brew install

Lucas 301 Dec 30, 2022
Trup-rewrite in rust! Finally!

Trup, but Rust! A Discord bot for the Unixporn community Now written in a good language! Dependencies Rust nightly sqlx-cli (if you need to change the

r/unixporn 106 Dec 22, 2022
This project now lives on in a rewrite at https://gitlab.redox-os.org/redox-os/parallel

MIT/Rust Parallel: A Command-line CPU Load Balancer Written in Rust This is an attempt at recreating the functionality of GNU Parallel, a work-stealer

Michael Murphy 1.2k Nov 20, 2022
subd - a place to reward your subscribers from any platform

subd subd's goal is to create a link between the various ways viewers support you as a live content creator, and the interactions that can be triggere

TJ DeVries 37 Jul 6, 2023
minimalistic command launcher in rust

rrun Note: Apart from the occasional fix, this project is not actively developed anymore. rrun works fine and should run/compile for the time being on

null 105 Nov 18, 2022
Yet another fancy watcher. (Rust)

funzzy Yet another fancy watcher. (Inspired by antr / entr) Configure execution of different commands using semantic yaml. # .watch.yaml # list here a

Cristian Oliveira 188 Dec 12, 2022
A modern replacement for ps written in Rust

procs procs is a replacement for ps written in Rust. Documentation quick links Features Platform Installation Usage Configuration Features Output by t

null 3.6k Jan 5, 2023
A more intuitive version of du in rust

Dust du + rust = dust. Like du but more intuitive. Why Because I want an easy way to see where my disk is being used. Demo Install Cargo cargo install

andy.boot 5.5k Jan 8, 2023
Blazing 💥 fast terminal-ui for git written in rust 🦀

Blazing fast terminal client for git written in Rust Features Fast and intuitive keyboard only control Context based help (no need to memorize tons of

Stephan Dilly 11.8k Jan 5, 2023
A simple and fast download accelerator, written in Rust

zou A simple and fast download accelerator, written in Rust Zou is a Snatch fork by @k0pernicus. Snatch is a fast and interruptable download accelerat

Antonin Carette 173 Dec 4, 2022
Fuzzy Finder in rust!

Life is short, skim! Half of our life is spent on navigation: files, lines, commands… You need skim! It is a general fuzzy finder that saves you time.

Jinzhou Zhang 3.7k Jan 4, 2023
A bash-like Unix shell written in Rust

Cicada Unix Shell Cicada is a simple Unix shell written in Rust. Documents Install cicada Environment Variables Cicada Builtins Completion RC File His

Hugo Wang 921 Dec 28, 2022
Performs distributed command execution, written in Rust w/ Tokio

Concurr: Distributed and Concurrent Command Execution, in Rust This project is dual licensed under MIT and Apache 2.0. Originally inspired by the GNU

Michael Murphy 93 Dec 18, 2022
A library to listen to global hotkeys in Rust

Rust Hotkey A library to listen to global hotkeys in Rust How to use See the examples folder for how to use this library. OS Support This lib aims to

James Birtles 44 Dec 12, 2022
🔮 Futuristic take on hexdump, made in Rust.

hex (hx) Futuristic take on hexdump. hx accepts a file path as input and outputs a hexadecimal colorized view to stdout. $ hx tests/files/alphanumeric

Julian Sitkevich 387 Dec 27, 2022
A TUI system monitor written in Rust

NO LONGER MAINTAINED. For a similar program, check out https://github.com/ClementTsang/bottom. ytop Another TUI based system monitor, this time in Rus

Caleb Bassi 2.1k Jan 3, 2023
A rust layered configuration loader with zero-boilerplate configuration management.

salak A layered configuration loader with zero-boilerplate configuration management. About Features Placeholder Key Convension Cargo Features Default

Daniel YU 28 Sep 20, 2022
Untrusted IPC with maximum performance and minimum latency. On Rust, on Linux.

Untrusted IPC with maximum performance and minimum latency. On Rust, on Linux. When is this Rust crate useful? Performance or latency is crucial, and

null 72 Jan 3, 2023