Search code examples
linuxmacosunixmkdirmv

Is there a way to make mv create the directory to be moved to if it doesn't exist?


So, if I'm in my home directory and I want to move foo.c to ~/bar/baz/foo.c , but those directories don't exist, is there some way to have those directories automatically created, so that you would only have to type

mv foo.c ~/bar/baz/ 

and everything would work out? It seems like you could alias mv to a simple bash script that would check if those directories existed and if not would call mkdir and then mv, but I thought I'd check to see if anyone had a better idea.


Solution

  • How about this one-liner (in bash):

    mkdir --parents ./some/path/; mv yourfile.txt $_
    

    Breaking that down:

    mkdir --parents ./some/path
    # if it doesn't work; try
    mkdir -p ./some/path
    

    creates the directory (including all intermediate directories), after which:

    mv yourfile.txt $_
    

    moves the file to that directory ($_ expands to the last argument passed to the previous shell command, ie: the newly created directory).

    I am not sure how far this will work in other shells, but it might give you some ideas about what to look for.

    Here is an example using this technique:

    $ > ls
    $ > touch yourfile.txt
    $ > ls
    yourfile.txt
    $ > mkdir --parents ./some/path/; mv yourfile.txt $_
    $ > ls -F
    some/
    $ > ls some/path/
    yourfile.txt