bhylu.com

Advertisements

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.

Download complete source

Example

mkdir-touch.sh

#!/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.

Command excerpt

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.

Advertisements