2014-10-17 1 views
2

Я пытаюсь написать сценарий, чтобы пройти через большой каталог и рекурсивно скопировать файлы, но получатель может принимать информацию только за 2 гигабайта за раз. Есть ли способ разбить передачу на части размером менее 2 гигабайт? Я могу написать простой скрипт, копирующий главные каталоги, но проблема в том, что Destination не будет принимать эти большие передачи одновременно. Я думал о том, что у меня есть основная функция создания подфункции для передачи данных в меньших сегментах или сеансах, но я не совсем уверен, как это сделать. Что-то вроде этого, но разбито на сегменты.Большая передача данных Directory/Sub-Directory

$SPOnlineDir = "Our sharepoint online library address" 
$MainStore = @("\\server\Dir1", "\\server\Dir2", "\\server\Dir3") 
function Copy-ToSPO() 
{ 
    Foreach($StoreInst in $MainStore) 
    { 
     Copy-Item -LiteralPath $StoreInst -Destination $SPOnlineDir -Force 
    } 
} 
Copy-ToSPO 
+0

Что вы сделали до сих пор? –

+1

Любые особые причины не использовать Robocopy? – mjolinor

+0

@Tim Ferrill Я написал отдельный сценарий, чтобы просмотреть все файлы и убедиться, что их имена приемлемы для адресата. Однако для фактического копирования я просто планирую, как их копировать. Подпапки вниз на базе часто не супер большие, но есть обширная структура каталогов, всего около терабайта. Я искал решение, но пока ничего не нашел. – CalebB

ответ

0

Найдено решение с небольшим количеством C#:

пространства имен ConsoleApplication2 { класс Программа { статической силы Main (string [] арг) { вар Source = GetSourceDirectory(); var Назначение = GetDestinationDirectory();

 CopyDirectory(Source, Destination); 

     Console.WriteLine("\n\nFinished."); 
     Console.ReadKey(true); 
    } 

    static DirectoryInfo GetSourceDirectory() 
    { 
     var verifyPath = false; 
     var pathExists = false; 
     var path = ""; 
     while(!verifyPath) 
     { 
      while(!pathExists) 
      { 
       Console.WriteLine("Please enter the Source Directory path."); 
       path = Console.ReadLine(); 
       Console.WriteLine("Verifying directory exists..."); 

       pathExists = Directory.Exists(path); 

       if (!pathExists) 
        Console.WriteLine("That path does not exist."); 
      } 

      Console.WriteLine("Directory found."); 
      Console.WriteLine("Please verify the source file path (Y or N):"); 
      Console.WriteLine(path); 

      verifyPath = GetVerification(); 
     } 

     return new DirectoryInfo(path); 
    } 

    static DirectoryInfo GetDestinationDirectory() 
    { 
     var verifyPath = false; 
     var path = ""; 

     while (!verifyPath) 
     { 
      var pathExists = false; 
      var createDir = false; 
      while (!pathExists) 
      { 
       Console.WriteLine("Please enter the Destination Directory path."); 
       path = Console.ReadLine(); 
       Console.WriteLine("Verifying directory exists..."); 

       pathExists = Directory.Exists(path); 

       if (!pathExists) 
       { 
        Console.WriteLine("Directory does not exist. Would you like to create it?"); 
        createDir = GetVerification(); 
        pathExists = createDir; 
       } 
       else 
        Console.WriteLine("Directory found."); 

      } 

      Console.WriteLine("Please verify the source file path (Y or N):"); 
      Console.WriteLine(path); 

      verifyPath = GetVerification(); 

      if (verifyPath && createDir) 
       Directory.CreateDirectory(path); 
     } 

     return new DirectoryInfo(path); 
    } 

    static bool GetVerification() 
    { 
     char[] VerificationChoices = { 'y', 'Y', 'n', 'N' }; 

     var VerifiedChar = Console.ReadKey().KeyChar; 

     while (!VerificationChoices.Contains(VerifiedChar)) 
      VerifiedChar = Console.ReadKey().KeyChar; 

     Console.Write("\n\n"); 

     return VerifiedChar == 'Y' || VerifiedChar == 'y'; 
    } 

    static void CopyDirectory(DirectoryInfo DirectoryToCopy, DirectoryInfo Destination) 
    { 
     foreach(var SubFolder in DirectoryToCopy.GetDirectories()) 
     { 
      var SubDestination = Destination.CreateSubdirectory(SubFolder.Name); 
      Console.WriteLine("Creating Directory: " + SubDestination.FullName); 
      CopyDirectory(SubFolder, SubDestination); 
     } 

     foreach(var File in DirectoryToCopy.GetFiles()) 
     { 
      var FullDestinationPath = Destination.FullName + "\\" + File.Name + File.Extension; 
      File.CopyTo(FullDestinationPath); 
      Console.WriteLine("Creating File: " + FullDestinationPath); 
     } 
    } 
} 

}

Спасибо за вход.

+0

Он идет вниз и копирует снизу вверх, что система sharepoint, о которой я узнал, не дает сразу терабайт памяти, но выделяет хранилище, как вы его используете, и, таким образом, это приложение получает от этого, копируя из нижнего файла по файлу и создание структуры каталогов. – CalebB