Основываясь на ответе Стива К, если в пути есть пробелы, он не будет работать должным образом,
mktouch a/b\ b/c/d.txt
mkdir: created directory 'a'
mkdir: created directory 'a/b'
touch: cannot touch 'a/b b/c/d.txt': No such file or directory
Двойные кавычки предотвратят разбиение слов.
function mktouch {
mkdir -p "$( dirname "$1" )"
touch "$1"
}