Tenemos una carpeta en Windows que es ... enorme. Ejecuté "dir> list.txt". El comando perdió la respuesta después de 1,5 horas. El archivo de salida es de aproximadamente 200 MB. Muestra que hay al menos 2,8 millones de archivos. Sé que la situación es estúpida, pero centrémonos en el problema. Si tengo una carpeta así, ¿cómo puedo dividirla en algunas subcarpetas "manejables"? Sorprendentemente, todas las soluciones que he encontrado implican obtener todos los archivos en la carpeta en algún momento, que es un no-no en mi caso. ¿Alguna sugerencia?¿Cómo dividir una gran carpeta?
Gracias Keith Hill and Mehrdad. Acepté la respuesta de Keith porque eso es exactamente lo que quería hacer, pero no pude hacer que PS funcionara rápidamente.
Con la sugerencia de Mehrdad, escribí este pequeño programa. Tomó más de 7 horas mover 2,8 millones de archivos. Entonces el comando dir inicial terminó. Pero de alguna manera no regresó a la consola.
namespace SplitHugeFolder
{
class Program
{
static void Main(string[] args)
{
var destination = args[1];
if (!Directory.Exists(destination))
Directory.CreateDirectory(destination);
var di = new DirectoryInfo(args[0]);
var batchCount = int.Parse(args[2]);
int currentBatch = 0;
string targetFolder = GetNewSubfolder(destination);
foreach (var fileInfo in di.EnumerateFiles())
{
if (currentBatch == batchCount)
{
Console.WriteLine("New Batch...");
currentBatch = 0;
targetFolder = GetNewSubfolder(destination);
}
var source = fileInfo.FullName;
var target = Path.Combine(targetFolder, fileInfo.Name);
File.Move(source, target);
currentBatch++;
}
}
private static string GetNewSubfolder(string parent)
{
string newFolder;
do
{
newFolder = Path.Combine(parent, Path.GetRandomFileName());
} while (Directory.Exists(newFolder));
Directory.CreateDirectory(newFolder);
return newFolder;
}
}
}
Uh ... ¿escribir su propia implementación de NTFS y hacer que se divida el árbol de búsqueda binario '$ INDEX_ALLOCATION'? Diviértete ... – Mehrdad
Por cierto, ¿por qué no puedes obtener una lista de todos los archivos? ¿La función 'FindNextFile' también consume tanto tiempo/recursos, o es solo' dir' que hace eso? – Mehrdad
@Mehrdad, porque es demasiado lento. FindNextFile parece prometedor. Intentaremos eso. –