Here's the problem I'm attempting to solve:

  • Let's say I have a directory "A", containing some files as well as some other directories.
  • I want to copy all the files directly under directory A to directory B.
  • I want to recursively copy all the folders inside folder A to folder C.

What is the shortest and less platform-specific way to accomplish this in UNIX/Linux?


Probably something like this

find A -type f -maxdepth 1 -exec cp {} B/ \;


find A -type d -maxdepth 1 -mindepth 1 -exec cp -r {} C/ \;

Where -type is a flag, determining the type you're looking for (file or directory), - maxdepth how deep into directory, and -exec for executing a command on the result.

  • 1
    What is the necessity for -name '*'? – enzotib Mar 4 '12 at 8:38
  • @enzotib Good point, I adjusted the answer. – Bernhard Mar 4 '12 at 8:52
  • Would use find ... \; for less platform specific. – forcefsck Mar 4 '12 at 9:09
  • Nice, but the second part also copies the entire A directory into C (in addition to the subdirectories). How would I remove that? – user2398029 Mar 4 '12 at 18:52
  • @louism The mindepth flag should prevent this. – Bernhard Mar 4 '12 at 19:17

You could use cp to copy the directories, giving a glob pattern ending in /,

cp -a A/*/ C/

and you can copy files without the -a (similar to -r) option

cp A/* B/

though this last command would give harmless errors on directories not been copied.

  • Would use -R instead of -a for less platform specific. – forcefsck Mar 4 '12 at 9:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.