4

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?

2 Answers 2

5

Probably something like this

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

And

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.

5
  • 1
    What is the necessity for -name '*'?
    – enzotib
    Mar 4, 2012 at 8:38
  • @enzotib Good point, I adjusted the answer.
    – Bernhard
    Mar 4, 2012 at 8:52
  • Would use find ... \; for less platform specific.
    – forcefsck
    Mar 4, 2012 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? Mar 4, 2012 at 18:52
  • @louism The mindepth flag should prevent this.
    – Bernhard
    Mar 4, 2012 at 19:17
1

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.

1
  • Would use -R instead of -a for less platform specific.
    – forcefsck
    Mar 4, 2012 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.