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

6

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

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
    Commented Mar 4, 2012 at 9:08

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .