Reproduce Linux move command in C
This is a small program, so some of the problems are not likely that big. If this were part of the API, problems may stack up and then make an actual difference. 

There are several points which you should work on:


opendir leak: opendir opens a file descriptor. You open 2 directories, none of which are closed. Make sure to call closedir. If this is part of an API, those memory leaks will stack up. Otherwise, this might not be a problem, since when the process ends, the descriptors should be cleared automatically.
Error checks: If I were to run this code a lot of times, some of which are intended to end in errors, there would be some clatter due to the positioning of your error checks. Checks like does src exist or can dst dir be accessed, should be done first. This will eliminate the need for some operations. Generally, it is always best to perform error checks first. 
Finding the name: A big part of the code is dedicated to finding the name of the src, and copying it to dst. You might improve it by using built-in functions instead. Use strrchr to find the last / and strcpy to copy the name.


Maybe there are other possible changes, but that should be the gist of it. Most of those problems have a small effect. This is a small program, so you won't notice must performance changes (unless this is an API).