How do I copy folder with files to another folder in Unix/Linux?
Solution 1
The option you're looking for is -R
.
cp -R path_to_source path_to_destination/
- If
destination
doesn't exist, it will be created. -
-R
meanscopy directories recursively
. You can also use-r
since it's case-insensitive. - To copy everything inside the source folder (symlinks, hidden files) without copying the source folder itself use
-a
flag along with trailing/.
in the source (as per@muni764
's /@Anton Krug
's comment):
cp -a path_to_source/. path_to_destination/
Solution 2
You are looking for the cp
command. You need to change directories so that you are outside of the directory you are trying to copy.
If the directory you're copying is called dir1
and you want to copy it to your /home/Pictures
folder:
cp -r dir1/ ~/Pictures/
Linux is case-sensitive and also needs the /
after each directory to know that it isn't a file. ~
is a special character in the terminal that automatically evaluates to the current user's home directory. If you need to know what directory you are in, use the command pwd
.
When you don't know how to use a Linux command, there is a manual page that you can refer to by typing:
man [insert command here]
at a terminal prompt.
Also, to auto complete long file paths when typing in the terminal, you can hit Tab after you've started typing the path and you will either be presented with choices, or it will insert the remaining part of the path.
There is an important distinction between Linux and Unix in the answer because for Linux (GNU and BusyBox) -R
, -r
, and --recursive
are all equivalent, as mentioned in this answer. For portability, i.e. POSIX compliance, you would want to use -R
because of some implementation-dependent differences with -r
. It's important to read the man pages to know any idiosyncrasies that may arise (this is a good use case to show why POSIX standards are useful).
Solution 3
Use:
$ cp -R SRCFOLDER DESTFOLDER/
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on July 08, 2022Comments
-
Admin almost 2 years
I am having some issues to copy a folder with files in that folder into another folder. Command
cp -r
doesn't copy files in the folder. -
HattrickNZ over 8 yearsthis is the way I done it and
demo1_copy
did not exist already$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
-
TVann over 8 yearsTo clarify further, the
-r
option in this will copy directories recursively. -
MD XF over 7 yearsDid the OP not specify that he was using the
cp -r
command, but that it wasn't working properly? -
Alex W over 7 yearsThe reason I included the info about manpages is these flags can be distribution dependent. However, for the most part, it appears
-r
,--recursive
, and-R
are equivalent. It will also give common pitfalls, etc. which is nice. -
holms over 7 yearsi wonder why this exact command in dockerfile copies all source directory files into destination, instead of copying just whole directory.
-
krethika over 6 yearsIf you want to portably copy the DIRECTORY and not just it's contents, leave off the trailing dash in the source folder ie.
cp -r dir1 ~/Pictures/
-
OllieBrown almost 6 yearsI believe the '/' on the end makes a difference and that might account for your experience. If the source includes the trailing slash it will copy what is in the directory only. If it does not include the trailing slash, it will copy the directory as well and then the contents inside of it. My memory is this behavior varies by command and maybe event by OS a bit. Here's a reference with more info.
-
Anton Krug almost 6 yearsI would say if you don't want to include the source and you want to make sure everything is copied (symlinks, hidden files) without copying the source parent folder is to use -ra source/. destination. This will make sure the content of the folder is copied, but not the parent folder itself, which is sometimes handy. And the difference is the /.
-
Gdalya almost 6 yearsThis also seems to work correctly if the directories to be copied are symbolic links, which was my use case.
-
Dragas over 5 yearsLately that does not seem to be the case. Regardless of including the trailing
/
, ARM OS based on Debian still copy the directory, but not its contents. -
bbeecher over 5 yearsNote the importance of "Slash dot" on your source in
cp -r src/. dest
I know it is mentioned but I still seem to miss it every time. -
xpusostomos almost 4 yearsA slash on the end of the src is a BSDism. The GNU Linux equivilent is the -T flag.
-
Chupo_cro almost 3 years@AntonKrug: Why
-ra
when-a
already includes-r
? -
Anton Krug almost 3 years@Chupo_cro you right,
-a
would be completely enough and would do exactly the same. Just sometimes I like to be more explicit. In the comment above the emphasis was on the/.
part.