"copy to" could be an option as this functionality could be implemented via Powershell. Please take a reference of below script:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Admin User Principal Name
$username = '[email protected]'
#Get Password as secure String
$password = ConvertTo-SecureString "password" -AsPlainText -Force
#Authenticate
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username , $password)
#Function to Move a File
Function Move-SPOFile([String]$SiteURL, [String]$SourceFileURL, [String]$TargetFileURL)
{
Try{
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $credentials
#sharepoint online powershell to move files
$CopyMigrationOptions = New-Object Microsoft.SharePoint.Client.CopyMigrationOptions -Property @{"IgnoreVersionHistory"=$false;"IsMoveMode"=$false;"AllowSchemaMismatch"=$true}
$result = $Ctx.Site.CreateCopyJobs($SourceFileURL,$TargetFileURL,$CopyMigrationOptions)
$Ctx.ExecuteQuery()
Write-host -f Green "File Moved Successfully!"
}
Catch {
write-host -f Red "Error Moving the File!" $_.Exception.Message
}
}
#Set Config Parameters
$SiteURL="https://xxx.sharepoint.com/sites/s01"
$SourceFileURL=@("https://xxx.sharepoint.com/sites/s01/Mytestlib/folder01/testfile.chm")
$TargetFileURL="https://xxx.sharepoint.com/sites/s02/Shared Documents"
#Call the function to Move the File
Move-SPOFile $SiteURL $SourceFileURL $TargetFileURL
When you click 'copy to' on the UI, the behind request is:
..../_api/site/CreateCopyJobs
By digging above request, we contructe above cmdlets with CSOM. Below is the info about "CopyMigrationOptions":
<ComplexType Name="CopyMigrationOptions">
<Property Name="AllowSchemaMismatch" Type="Edm.Boolean" Nullable="false"/>
<Property Name="AllowSmallerVersionLimitOnDestination" Type="Edm.Boolean" Nullable="false"/>
<Property Name="IgnoreVersionHistory" Type="Edm.Boolean" Nullable="false"/>
<Property Name="IsMoveMode" Type="Edm.Boolean" Nullable="false"/>
<Property Name="NameConflictBehavior" Type="Edm.Int32" Nullable="false"/>
</ComplexType>
As for getting item edit dates, you can achieve it throguh CSOM or PnP powershell:
$item=Get-PnPListItem -List "Documents"
$item["Modified"]