WORKDIR does not support the use of a * as a wildcard RUN cd does support the use of a * as a wildcard, but will not affect subsequent RUN commands RUN mv to move the directory to a constant known directory name could affect other programs (E.G. git init) that expect the directory to exist at the unknown name - Hard links are not supported for directories
- Symbolic links are supported for directories, and support the use of a
* as a wildcard
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!
RUNcommand, spanning dozens of lines, each concatenated with&& \, starting with acd? SinceRUN cdonly affects the same line, not subsequentRUNcommands. Surely there's a better way? The docs say you can use anENVin aWORKDIR, but there is no mention of usingARG. According to this answer you can't set anENVvar to the result of aRUNcommand (to find the dir name).WORKDIRdirective. Issue mooted..wiki- E.G./something.wiki/..... maybe the solution is to justmvit to some constant name using BASH before changing dir withWORKDIR