dockerdockerfilewildcardcdworkdir

Docker equivalent of cd /some/th*ng using WORKDIR (wildcard change directory)


In BASH we can change directory to an unknown name, using a * as a wildcard - for example:

cd /some/*ing will change directory to cd /some/thing/ (if there is only 1 match for the wildcard)

How can we do the same thing using WORKDIR in a Dockerfile?

If I try to do WORKDIR /some/*ing, then it instead creates a directory named literally /some/*ing/ and it changes directory to that, instead of /some/thing/


Solution

  • The following code can be used to change to a directory where only the last part of the directory's name is known (ending with .wiki).

    For example to change directory to /docs/someunknowndir.wiki/, using a symlink at /docs/wiki/:

    # Starting directory
    WORKDIR /docs
    
    # Create a symlink from the unknown name to a known name
    RUN ln -s *.wiki wiki
    
    # Change to the dir, using the known name
    WORKDIR wiki
    
    # Do stuff with the dir - E.G.
    RUN ls -Rlah .
    
    # When finished doing stuff with the dir...
    
    # Reset to the starting directory
    WORKDIR ..
    
    # Delete the dir at the unknown name + the symlink at the known name
    RUN rm -rf *.wiki wiki
    

    Thanks goes to @CharlesDuffy for the symlink idea!