**问题陈述:**我试图将100个文件(每个文件的大小都超过了GB)从源目录复制到目标目录,我正在通过power-shell脚本自动执行此操作。执行脚本时,复制操作是按顺序复制文件。是否有任何方法,我们可以复制他们在并行,以减少一些时间,因为它是采取了大量的时间来复制所有的文件和使用任何第三方软件的限制。
$DATAFileDir="D:\TEST_FOLDER\DATAFILESFX\*"
$LOGFileDir="D:\TEST_FOLDER\LOGFILESFX\*"
$DestDataDir="D:\TEST_FOLDER\Data\"
$DestLogDir="D:\TEST_FOLDER\Log\"
#Copying the Primary file
Copy-Item -Path $DATAFileDir -Destination $DestDataDir -Recurse -Force -Verbose
#Copying the Audit File
Copy-Item -Path $LOGFileDir -Destination $DestLogDir -Recurse -Force -Verbose
有什么建议吗?
6条答案
按热度按时间gmxoilav1#
您可以为要复制的每个文件启动作业单独进程。
uz75evzq2#
您应该能够使用powershell workflow轻松实现这一点。throttlelimit将限制并行复制的文件数量。删除它可以并行复制所有文件(对于100个文件,可能不建议使用此选项)。
g2ieeal73#
您可以将
robocopy
与/move
和/mt:n
参数一起使用。最快的语法:要实现最大的并行化,您需要知道卷是SSD还是HDD。HDD的安全值为8,SSD为128。
SSD检测可以通过以下代码段自动进行,但如果您有RAID或某种存储空间,它会给予一些非致命错误。
文件:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
jv2fixgn4#
或者你可以使用start-threadjob。如果你有ps5,你可以从gallery获得threadjob。https://powershellgallery.com/packages/ThreadJob/2.0.0或ps 7 https://devblogs.microsoft.com/powershell/powershell-foreach-object-parallel-feature/中的
foreach-object -parallel
start-bittransfer?https://learn.microsoft.com/en-us/powershell/module/bitstransfer/start-bitstransfer?view=win10-ps
jchrr9hc5#
此powershell脚本直接使用.NET Framework类,即使对于大量文件,也应该执行得更快。使用
throttlelimit
来控制需要多少并行化。只需将此代码保存为
ParallelCopy.ps1
并像这样运行它:2skhul336#
如果所有100个文件都发布到单个redshift表,那么Redshift有能力使用单个复制命令并行加载多个文件。查看红移文档:https://docs.aws.amazon.com/redshift/latest/dg/t_splitting-data-files.html