How to copy file preserving directory path in Linux?
Solution 1:
The switch you need is --parents
, e.g.:
jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo
Solution 2:
You can also use rsync -R
, which works on OSX where cp --parents
isn't available.
https://stackoverflow.com/a/13855290/598940
Solution 3:
Use tar
with something like:
mkdir b; tar cpf - myProject/ | tar xpf - -C b/
(Not tested. Give it a dry run first or try in a mockup scenario.)
Solution 4:
First use mkdir -p
to create the destination folder with recursive parent path creation. Then copy the contents to the destination folder:
mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project
Solution 5:
I use cpio in combination with find. Explanation here.
Example for your use case:
find /a/myProject/.project/ -type f | cpio -p -dumv /b/.
This command finds all files in /a/myProject/.project/
and copies, while preserving the path, any files contained within.