2 Answers
2

You're looking for the QConsolidate plugin, which works very well. It will transfer everything to a single directory and rewrite the .QGS project file (an XML file) to point to the new source locations.

EDIT 2015-02-22

QConsolidate is still listed as experimental - you'll have to enable "Show also experimental plugins" in the settings dialog.

However - it works very well. Notes:

You must have saved the project you're working on before attempting to consolidate it elsewhere;

The output format will be the project (.QGS) file, together with a folder called 'layers' that (surprise!) contains the layers;

QConsolidate will convert database layers into shapefiles and rewrite the project file to refer to the new shapefile;

While often you may want to share the consolidated project on an external / thumb drive, save it on a local hard drive first as the many write operations made will really slow things down if you try to consolidate directly onto slow media.

I don't know about a way in QGIS itself, but the project file (.qgs) is just a text file. Therefore a primitive but effective way would be to copy everything manually into one directory, then alter the <datasource></datasource> tags in the .qgs file either using find and replace or a regular expression to point to the new directory.

If you've got a lot of different files/directories, one option would be to automate it in python by searching for each tag in the .qgs file, copying each related file with that name to a directory, and then replacing the .qgs tag with the new directory.