How do I copy folder with files to another folder in Unix/Linux?

2,662,003

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 means copy 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/
Share:
2,662,003
Admin
Author by

Admin

Updated on July 08, 2022

Comments

  • Admin
    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
    HattrickNZ over 8 years
    this is the way I done it and demo1_copy did not exist already $ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
  • TVann
    TVann over 8 years
    To clarify further, the -r option in this will copy directories recursively.
  • MD XF
    MD XF over 7 years
    Did the OP not specify that he was using the cp -r command, but that it wasn't working properly?
  • Alex W
    Alex W over 7 years
    The 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
    holms over 7 years
    i wonder why this exact command in dockerfile copies all source directory files into destination, instead of copying just whole directory.
  • krethika
    krethika over 6 years
    If 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
    OllieBrown almost 6 years
    I 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
    Anton Krug almost 6 years
    I 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
    Gdalya almost 6 years
    This also seems to work correctly if the directories to be copied are symbolic links, which was my use case.
  • Dragas
    Dragas over 5 years
    Lately 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
    bbeecher over 5 years
    Note 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
    xpusostomos almost 4 years
    A slash on the end of the src is a BSDism. The GNU Linux equivilent is the -T flag.
  • Chupo_cro
    Chupo_cro almost 3 years
    @AntonKrug: Why -ra when -a already includes -r?
  • Anton Krug
    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.