Bash mkdir and touch
Create a directory tree and an empty marker without overwriting data.
How it works
mkdir creates directories, while touch creates a missing file or updates timestamps on an existing one. touch is not a command for emptying a file. mkdir -p can create missing parents, but a pre-existing directory may contain data that the script does not own. The lab uses a fresh private workspace so its fixtures do not collide with a learner’s files.
Run the code
Reviewed with Git for Windows Bash 5.2.37. Open Git Bash, save the download with LF line endings in a separate learning folder, check it with bash -n lesson-name.sh, then run bash lesson-name.sh using the actual filename. Bash 4 or newer is required for the full course. Linux-only notes identify unavailable tools or POSIX behaviour. There is no Bash browser runner; Apache and MySQL are not required.
This complete example was executed in the stated local review environment.
The complete source creates a fresh private temporary workspace and checks its physical path before cleanup. All file fixtures belong to that workspace; do not remove the guards or point it at existing documents.
Example
#!/usr/bin/env bash
set -u
set -o pipefail
export LC_ALL=C
# Own a new directory; verify physical paths before cleanup.
parent=$(cd -- "${TMPDIR:-/tmp}" && pwd -P) || exit 1
work=$(mktemp -d "$parent/bhylu-bash.XXXXXX") || exit 1
work=$(cd -- "$work" && pwd -P) || exit 1
case "$work" in "$parent"/bhylu-bash.??????) ;; *) exit 1 ;; esac
cleanup() {
cd -- "$parent" || return 1
[[ -d $work && ! -L $work ]] || return 1
[[ $(cd -- "$work" && pwd -P) == "$work" ]] || return 1
case "$work" in "$parent"/bhylu-bash.??????) rm -r -- "$work" ;; *) return 1 ;; esac
}
trap cleanup EXIT
cd -- "$work" || exit 1
mkdir -p -- output/drafts
touch -- output/drafts/ready.txt
[[ -d output/drafts && -f output/drafts/ready.txt && ! -s output/drafts/ready.txt ]] || exit 1
printf "Directory tree and empty marker created\n"
Focus on the lesson commands
This excerpt omits temporary-workspace setup and cleanup. Use the complete source above to run the example.
mkdir -p -- output/drafts
touch -- output/drafts/ready.txt
[[ -d output/drafts && -f output/drafts/ready.txt && ! -s output/drafts/ready.txt ]] || exit 1
printf "Directory tree and empty marker created\n"
Expected result
Directory tree and empty marker created
The tests distinguish a directory, an existing file and a nonempty file. A marker is useful only if its lifecycle is defined; it does not prove that a report is complete or current. If a marker already contains data, touch will preserve those bytes while changing its timestamp.
Primary technical reference: Bash documentation.