Move Files Between Document Libraries with Metadata and Version History
Requirement: Move Files Between Document Libraries with Metadata and Version History
We have a very large document library with more than 100,000 documents which is causing search crawl and latency issues. So, decided to archive old documents into separate document libraries year-wise.
Solution 1 - Using Content and Structure page to move files with versions and Metadata:
All SharePoint versions including MOSS 2007, SharePoint 2010 and SharePoint 2013 supports this functionality.
Solution 2: Move files between document libraries programmatically using PowerShell:
Let's use a PowerShell script to move files between lists: The idea is to create sub-folder for each Month and move documents into sub-folders based on their creation date.
Solution 3: Move files using SharePoint designer
We have a very large document library with more than 100,000 documents which is causing search crawl and latency issues. So, decided to archive old documents into separate document libraries year-wise.
Stop: Before proceeding with any of the below method, Save your source list or library as a template without including content and create new list from the list template, So that your source and destination libraries will look a like!
Solution 1 - Using Content and Structure page to move files with versions and Metadata:
All SharePoint versions including MOSS 2007, SharePoint 2010 and SharePoint 2013 supports this functionality.
- Go to Site settings >> Click on "Content and structure" link under Site Administration section
- Pick the items/files to be moved, Click on Actions >> Move
- Select the target list or library and click "OK" to complete the move operation.
Solution 2: Move files between document libraries programmatically using PowerShell:
Let's use a PowerShell script to move files between lists: The idea is to create sub-folder for each Month and move documents into sub-folders based on their creation date.
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Get the web and List $Web = Get-SPWeb "http://intranet.sharepoint.com/sites/Marketing/" $SourceList = $web.Lists["Proposals"] $TargetList = $Web.Lists["Proposal Archive 2009"] #Get all Files Created in 2009 $Query = '<Where><And><Geq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">2009-01-01T00:00:00Z</Value></Geq><Leq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">2009-12-31T23:59:59Z</Value></Leq></And></Where>' $SPQuery = new-object Microsoft.SharePoint.SPQuery #$SPQuery.ViewAttributes = "Scope='Recursive'" #To include Sub-folders in the library $SPQuery.Query = $Query $SourceFilesCollection =$SourceList.GetItems($SPQuery) Write-host "Total number of files found: "$SourceFilesCollection.count #Move each file to the destination folder foreach($item in $SourceFilesCollection) { #Get the Source File $file = $Web.GetFile($item.File.URL) #Get the Month value from the File crated date $MonthValue = $item.File.TimeCreated.ToString('MMMM') # Try to Get the Sub-Folder in the Library! $TargetFolder = $TargetList.ParentWeb.GetFolder($TargetList.RootFolder.Url + "/" +$MonthValue); #If the folder doesn't exists, Create! if ($TargetFolder.Exists -eq $false) { $TargetFolder = $TargetList.Folders.Add("", [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $MonthValue) $TargetFolder.Update() } #Move the File $file.MoveTo($TargetFolder.Url + "/" + $File.name) }
While the Move operation preserves Metadata and version history, Copy doesn't! Also the Explore View Drag & Drop from Source Library to destination also preserves versions.
Solution 3: Move files using SharePoint designer
- Open your site in SharePoint Designer
- Go to All Files >> Navigate to source library. Select files you want to copy/move, choose cut/copy
- Go to your target library, Right click and choose "Paste"
Tips: SharePoint general rule of thumb for better performance on large list and libraries: Have < 2000 files per container (list/library/folder).
All of the above methods move documents between libraries of the same site collection! To copy files between document libraries using PowerShell, use: Copy Files Between Document Libraries in SharePoint using PowerShell
Thanks a lot, this is really a time saver
ReplyDeleteVery useful article, thanks!
ReplyDeleteHow about moving libraries between site collections?
ReplyDeleteWhat I need to do is move folders and their contents from one library to another within the same site collection, maintaining as much metadata as possible. Will this do that?
ReplyDeleteDo you have a copy of this for SharePoint Online using PNP Powershell?
ReplyDelete