Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Collapse a file path to the shortest representation

Is there a ZSH standard way to collapse a file path to its shortest representation that would be idempotent per Chapter 14.7?

For example, one might

echo "$filepath" | sed -E "s|$HOME/?|~/|"
echo "$filepath" | sed -E "s|$HOME/?|\$HOME/|"

In order to turn

/home/username/bar/baz → ~/bar/baz
/home/username/bar/baz → $HOME/bar/baz

To achieve this effect.  

From the documentation, "14.7 Filename Expansion" has a lot of ways that paths can be expanded, including...

... the path is checked to see if it has a named directory as its prefix. If so, then the prefix portion is replaced with a ‘~’ followed by the name of the directory ....

Is there a standardized way to access this expansion with e.g. /path/to/somedir → ~SOMEDIR/foo?

I expect this can be implemented manually by parsing the output of "hash -d" or similar, but I figured it was worth asking if there's an easy interface to this.

I'm not concerned as much about "14.7.1 Dynamic named directories" but for completeness it would be neat.

Zach Riggle

Messages sorted by: Reverse Date, Date, Thread, Author