Coreutils - rejected feature requests

Some of the hardest work on coreutils is knowing what to reject and providing appropriate justification to the contributors.

The contributions below while all good ideas, were not included for various reasons detailed on the linked mailing list discussions.

cat   chmod   cp   cut   date   dd   df   du   join   ls   mv   rm   shred   sort   stat   *sum   touch   uniq   wc   misc   New commands


  • cat --timestamp. awk or perl is good enough for this
  • cat -n alternate formats. Manipulation with existing tools supports this better
  • cat --show-ends to highlight trailing whitespace. grep --color was deemed better/sufficient
  • cat --header to output filenames for each file. tail -n+1 does this already
  • cat -S to squeeze lines just containing blank chars. Existing tools like `sed 's/^ *$//' | cat -s` were thought sufficient
  • cat -d,--direct to use direct I/O. dd has the 'nocache' or 'direct' options and there are general nocache wrappers


  • chmod maintains ctime when permissions unchanged. The proposed patch was deemed inefficient
  • chmod -d to set perms on just directories. The 'X' mode, or `find` with `chmod` was deemed sufficient
  • chmod +S to set setgid on just directories. `find` in combination with `chmod` was deemed sufficient
  • chmod -D to set perms on just directories. The 'X' mode, or `find` with `chmod` was deemed sufficient
  • chmod --parents. Doing this with a simple script or with find was deemed sufficient
  • chmod --umask. The existing chmod options were deemed sufficient
  • chmod b10111. Binary conversion can be done easily in bash or ksh
  • disallow chmod to create world writable files. This couldn't be general, and even so could be easily bypassed




  • date +%f to flush output. `stdbuf -oL date ...` was deemed sufficient
  • date should parse 'DAY MONTH, YEAR' format. The format was deemed erroneous
  • date +%J to support astronomical julian date. This was not thought common enough to support
  • date -v to provide BSD syntax relative date adjustments. The existing GNU relative date syntax was thought sufficient



  • df,du -g. Specifying “Gigabyte” output format is neither standard or required
  • df autoscale. df -h was thought good enough
  • df -g. Separate options for various output units is best avoided
  • df --without-header. --header options are only really useful for data consumers
  • df --dereference to process symlink targets. df was changed to reference symlink targets unconditionally






  • rm --parents. Deleting the opposite way up the tree was deemed too dangerous
  • rm -d. rmdir is equivalent and less confusing
  • rm --no-preserve-root. Adding protective prompts would not significantly improve security
  • rm -rf . to delete current directory. It was thought existing support for rm -rf "$PWD" suffices
  • rm -rf . to delete all files inside current directory. `rm -rf * .[!.] .??*` and `find . -delete` were deemed sufficient
  • rm -s to behave in a “smarter” fashion. `rm -I` or `find | xargs rm` were deemed sufficient
  • rm --exclude to exclude file names. Existing tools like find(1) were thought sufficient
  • rm should use remove(), leaving unlink() to the unlink command. We can't change such standardized functionality


  • shred --recursive. Deemed better to explicitly select (with find for example)
  • shred -r. shred is of limited use with files anyway





  • touch -R. `find . -exec touch -am {} +` is more general
  • touch --mode. Not deemed beneficial enough
  • touch --verbose. This could not be implemented robustly. Also xargs --verbose or (set -x; touch *) are sufficient
  • touch --create to only create files. `test -e file || touch file` was deemed sufficient



  • wc --tab-width. Preprocessing with expand is more functional
  • wc -q to suppress the file name. Redirecting file to stdin is sufficient
  • wc --max-chars=N to filter out long lines. Existing filters like awk 'length($0) <= 3' were deemed more appropriate


New commands

  • a path manipulation command. Existing tools deemed rich enough
  • Add a sparse command. cp already supports creating sparse files
  • Add a getlimits command. This would not be standard enough outside of a particular project
  • quoted-printable. recode or perl can easily decode this format
  • An errno utility. A full C wrapper around strerror() was deemed overkill. Maybe we'll add a script to contrib/
  • where am i. `hostname; pwd` is fine
  • tableize. This new command was tought better done as a --border option to column -t
  • physmem. Programs to print mem info like `hwloc-info` and `free` are already available
  • Provide '0' and '1' utils. These were not seen to benefit shell syntax
  • cksum -a algo1 algo2 (like NetBSD) to do many checksums per read. It was thought more general to use separate processes
  • rename command (from util-linux). There are existing commands to do this, and adjusting for inclusion in coreutils was thought to create too much flux
  • testline command to expose bloom filter functionality. It was thought options to existing tools were more appropriate