nushell / nushell

A new type of shell
https://www.nushell.sh/
MIT License
32.76k stars 1.7k forks source link

Make `du` output more concise by default #14387

Open NotTheDr01ds opened 1 week ago

NotTheDr01ds commented 1 week ago

Related problem

The default output of the du command is usually not easily human-readable:

  1. It's recursive, meaning a nested table is almost guaranteed.
  2. The above means that the result is unlikely to fit on one screen without scrolling
  3. And it means that results may be "separated" from their siblings by multiple lines
  4. The width of the table means that results will almost certainly be truncated by default
Example:

```nushell ╭────┬──────────────────────────────────────────────────┬───────────┬───────────┬────────────────────────────────────────────────────────────────────┬─────╮ │ # │ path │ apparent │ physical │ directories │ ... │ ├────┼──────────────────────────────────────────────────┼───────────┼───────────┼────────────────────────────────────────────────────────────────────┼─────┤ │ 0 │ /home/ntd/src/ntd-forks/reedline/.git │ 2.0 MiB │ 2.4 MiB │ ╭───┬────────────────────────────────────────────────┬─────╮ │ ... │ │ │ │ │ │ │ # │ path │ ... │ │ │ │ │ │ │ │ ├───┼────────────────────────────────────────────────┼─────┤ │ │ │ │ │ │ │ │ 0 │ /home/ntd/src/ntd-forks/reedline/.git/hooks │ ... │ │ │ │ │ │ │ │ │ 1 │ /home/ntd/src/ntd-forks/reedline/.git/branches │ ... │ │ │ │ │ │ │ │ │ 2 │ /home/ntd/src/ntd-forks/reedline/.git/logs │ ... │ │ │ │ │ │ │ │ │ 3 │ /home/ntd/src/ntd-forks/reedline/.git/objects │ ... │ │ │ │ │ │ │ │ │ 4 │ /home/ntd/src/ntd-forks/reedline/.git/info │ ... │ │ │ │ │ │ │ │ │ 5 │ /home/ntd/src/ntd-forks/reedline/.git/refs │ ... │ │ │ │ │ │ │ │ ╰───┴────────────────────────────────────────────────┴─────╯ │ │ │ 1 │ /home/ntd/src/ntd-forks/reedline/.github │ 15.1 KiB │ 32.0 KiB │ ╭───┬──────────────────────────────────────────────────────┬─────╮ │ ... │ │ │ │ │ │ │ # │ path │ ... │ │ │ │ │ │ │ │ ├───┼──────────────────────────────────────────────────────┼─────┤ │ │ │ │ │ │ │ │ 0 │ /home/ntd/src/ntd-forks/reedline/.github/workflows │ ... │ │ │ │ │ │ │ │ │ 1 │ /home/ntd/src/ntd-forks/reedline/.github/ISSUE_TEMPL │ ... │ │ │ │ │ │ │ │ │ │ ATE │ │ │ │ │ │ │ │ │ ╰───┴──────────────────────────────────────────────────────┴─────╯ │ │ │ 2 │ /home/ntd/src/ntd-forks/reedline/.gitignore │ 288 B │ 4.0 KiB │ │ ... │ │ 3 │ /home/ntd/src/ntd-forks/reedline/.typos.toml │ 418 B │ 4.0 KiB │ │ ... │ │ 4 │ /home/ntd/src/ntd-forks/reedline/CONTRIBUTING.md │ 1.8 KiB │ 4.0 KiB │ │ ... │ │ 5 │ /home/ntd/src/ntd-forks/reedline/Cargo.lock │ 36.3 KiB │ 40.0 KiB │ │ ... │ │ 6 │ /home/ntd/src/ntd-forks/reedline/Cargo.toml │ 1.7 KiB │ 4.0 KiB │ │ ... │ │ 7 │ /home/ntd/src/ntd-forks/reedline/LICENSE │ 1.0 KiB │ 4.0 KiB │ │ ... │ │ 8 │ /home/ntd/src/ntd-forks/reedline/README.md │ 8.5 KiB │ 12.0 KiB │ │ ... │ │ 9 │ /home/ntd/src/ntd-forks/reedline/UX_TESTING.md │ 3.2 KiB │ 4.0 KiB │ │ ... │ │ 10 │ /home/ntd/src/ntd-forks/reedline/examples │ 43.7 KiB │ 80.0 KiB │ │ ... │ │ 11 │ /home/ntd/src/ntd-forks/reedline/src │ 669.0 KiB │ 816.0 KiB │ ╭────┬─────────────────────────────────────────────────────┬─────╮ │ ... │ │ │ │ │ │ │ # │ path │ ... │ │ │ │ │ │ │ │ ├────┼─────────────────────────────────────────────────────┼─────┤ │ │ │ │ │ │ │ │ 0 │ /home/ntd/src/ntd-forks/reedline/src/terminal_exten │ ... │ │ │ │ │ │ │ │ │ │ sions │ │ │ │ │ │ │ │ │ │ 1 │ /home/ntd/src/ntd-forks/reedline/src/highlighter │ ... │ │ │ │ │ │ │ │ │ 2 │ /home/ntd/src/ntd-forks/reedline/src/prompt │ ... │ │ │ │ │ │ │ │ │ 3 │ /home/ntd/src/ntd-forks/reedline/src/painting │ ... │ │ │ │ │ │ │ │ │ 4 │ /home/ntd/src/ntd-forks/reedline/src/core_editor │ ... │ │ │ │ │ │ │ │ │ 5 │ /home/ntd/src/ntd-forks/reedline/src/menu │ ... │ │ │ │ │ │ │ │ │ 6 │ /home/ntd/src/ntd-forks/reedline/src/completion │ ... │ │ │ │ │ │ │ │ │ 7 │ /home/ntd/src/ntd-forks/reedline/src/utils │ ... │ │ │ │ │ │ │ │ │ 8 │ /home/ntd/src/ntd-forks/reedline/src/validator │ ... │ │ │ │ │ │ │ │ │ 9 │ /home/ntd/src/ntd-forks/reedline/src/history │ ... │ │ │ │ │ │ │ │ │ 10 │ /home/ntd/src/ntd-forks/reedline/src/hinter │ ... │ │ │ │ │ │ │ │ │ 11 │ /home/ntd/src/ntd-forks/reedline/src/edit_mode │ ... │ │ │ │ │ │ │ │ ╰────┴─────────────────────────────────────────────────────┴─────╯ │ │ ╰────┴──────────────────────────────────────────────────┴───────────┴───────────┴────────────────────────────────────────────────────────────────────┴─────╯ ```

Describe the solution you'd like

By default, I'd like to see du only display the path, apparent, and physical columns:

╭────┬──────────────────────────────────────────────────┬───────────┬───────────╮
│  # │                       path                       │ apparent  │ physical  │
├────┼──────────────────────────────────────────────────┼───────────┼───────────┤
│  0 │ /home/ntd/src/ntd-forks/reedline/.git            │   2.0 MiB │   2.4 MiB │
│  1 │ /home/ntd/src/ntd-forks/reedline/.github         │  15.1 KiB │  32.0 KiB │
│  2 │ /home/ntd/src/ntd-forks/reedline/.gitignore      │     288 B │   4.0 KiB │
│  3 │ /home/ntd/src/ntd-forks/reedline/.typos.toml     │     418 B │   4.0 KiB │
│  4 │ /home/ntd/src/ntd-forks/reedline/CONTRIBUTING.md │   1.8 KiB │   4.0 KiB │
│  5 │ /home/ntd/src/ntd-forks/reedline/Cargo.lock      │  36.3 KiB │  40.0 KiB │
│  6 │ /home/ntd/src/ntd-forks/reedline/Cargo.toml      │   1.7 KiB │   4.0 KiB │
│  7 │ /home/ntd/src/ntd-forks/reedline/LICENSE         │   1.0 KiB │   4.0 KiB │
│  8 │ /home/ntd/src/ntd-forks/reedline/README.md       │   8.5 KiB │  12.0 KiB │
│  9 │ /home/ntd/src/ntd-forks/reedline/UX_TESTING.md   │   3.2 KiB │   4.0 KiB │
│ 10 │ /home/ntd/src/ntd-forks/reedline/examples        │  43.7 KiB │  80.0 KiB │
│ 11 │ /home/ntd/src/ntd-forks/reedline/src             │ 669.0 KiB │ 816.0 KiB │
╰────┴──────────────────────────────────────────────────┴───────────┴───────────╯

Add a du --long/-l flag (as with ls) to display the remaining columns.

Describe alternatives you've considered

No response

Additional context and details

No response

WieeRd commented 1 week ago

I would also prefer to have this concise output by default and make the current output opt-in via flags. I personally think --recursive/-r fits better than --long/-l but either works.