I want a command (or probably an option to cp) that creates the destination directory if it does not exist.
Example:
cp -? file /path/to/copy/file/to/is/very/deep/there
26 Answers
mkdir -p "$d" && cp file "$d"
(there's no such option for cp).
If both of the following are true:
- You are using the GNU version of
cp(and not, for instance, the Mac version), and - You are copying from some existing directory structure and you just need it recreated
then you can do this with the --parents flag of cp. From the info page (viewable at or with info cp or man cp):
--parents Form the name of each destination file by appending to the target directory a slash and the specified name of the source file. The last argument given to `cp' must be the name of an existing directory. For example, the command: cp --parents a/b/c existing_dir copies the file `a/b/c' to `existing_dir/a/b/c', creating any missing intermediate directories.
Example:
/tmp $ mkdir foo
/tmp $ mkdir foo/foo
/tmp $ touch foo/foo/foo.txt
/tmp $ mkdir bar
/tmp $ cp --parents foo/foo/foo.txt bar
/tmp $ ls bar/foo/foo
foo.txt
Short Answer
To copy myfile.txt to /foo/bar/myfile.txt, use:
mkdir -p /foo/bar && cp myfile.txt $_