Is there a command that’s actually just for creating a new file?
most shells will accept outputting from a silent command to a file, e.g.
:> foo.txt
(where:
is the posix synonym to thetrue
command)How often do you actually need a blank file though? Usually you’d be writing something in the file.
I’m betting that’s why none ever materialized. Most tools that can manipulate a file, can also create that file first, so there’s just never been a usecase.
Right-clicking the desktop to create a new txt file in Windows feels so natural, but I can’t really think of any time you’d want to create a new file and do nothing with it in a CLI.
You might if some other program checks whether that file exists and behaves differently depending on that.
But even still, what’s a realistic usecase that would that involve needing a blank, unmodified file in that instance?
One use case is if you’re running a web server that is configured to return a “maintenance” page instead of the live site if a particular file exists. Which is actually pretty cool because then you don’t have to update the config when you need to do something or let your users get a bunch of 502 errors, you just
touch maintenance
and you’re good.
Does anyone actually use
touch
for its intended purpose? Must be up there withcat
.TIL it’s actually for changing timestamps.
The intended use of
touch
is to update the timestamp right?Yeah. It could just as well have issued a file not found error when you try to touch a nonexistent file. And we would be none the wiser about what we’re missing in the world.
“Do one thing and do it very well” is the UNIX philosophy after all; if you’re 99% likely to just create that missing file after you get a file not found error, why should
touch
waste your time?Because now touch does two things.
Without touch, we could “just” use the shell to create files.
: > foo.txt
Touch does one thing from a “contract” perspective:
Ensure the timestamp of <file> is <now>