There are many Unix commands that will fail unless some subdirectory already exists, even though it would be a trivial matter for such commands to go ahead and create the missing subdirectory before proceeding.
For example, for
% touch /tmp/foo/bar/baz/frobozz touch: cannot touch `/tmp/foo/bar/baz': No such file or directory % mkdir -p /tmp/foo/bar/baz % touch /tmp/foo/bar/baz/frobozz # succeeds
% mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz % mv: failed to access `/tmp/foo/frotz/quux': No such file or directory % mkdir -p /tmp/foo/frotz/quux % mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz # succeeds
One notable exception to this behavior is
mkdir itself, whose
-p flag tells it to "create subdirectories as needed".
I am a bit puzzled by the fact that
mv, et al. won't do the "obvious thing", either by default, or upon request via some flag (such as
I figure there must be a very good reason for this, but it's not obvious to me. Insights welcome.
(The motivation for asking this is that I'd like to implement a utility that is pretty much like the (nonstandard)
mmv utility, except that, contrary to the real
mmv, it would "create subdirectories as needed", and I'm wondering if this new feature would be A Really Bad Idea.
For example, with the utility I'm thinking of—let me call it
mmmv— one would be able to simultaneously move and rename the files
1caf73ee55b4e11d6e3b12ccbf8c477c2839bfae 1f37fd8ce865f98579d10d8045ac1e88c6717215 73f2af84ba8ed27fa332d52745274377aa67cda5 a257a7c7cac26c391e8636193ff47b45c5e587ec
1c/af73ee55b4e11d6e3b12ccbf8c477c2839bfae 1f/37fd8ce865f98579d10d8045ac1e88c6717215 a2/57a7c7cac26c391e8636193ff47b45c5e587ec 73/f2af84ba8ed27fa332d52745274377aa67cda5
with a single command, like this:
% mmmv '??*' '#1#2/#3'
For this to be possible
mmmv needs to be able to create the two-letter-named subdirectories as needed.)