Procurando pela maneira mais rápida de filtrar arquivos antigos

2

Temos vários servidores de arquivos nos quais trabalho contendo terabytes e terabytes de arquivos. Atualmente, não temos nenhum sistema para arquivar / excluir dados obsoletos. Minha tarefa é criar um script que mova / apague arquivos com mais de 3 anos. Movendo / excluindo os arquivos de lado, apenas "pegar" os arquivos é um problema. Usando o Powershell até agora.

Eu estou correndo em arquivos onde o nome do arquivo / caminho é maior que ~ 248 caracteres, o que Powershell não parece ser capaz de manipular. Eu também examinei o Robocopy, mas o Robocopy não tem como acessar a propriedade do arquivo LastAccessTime. Além disso, o Powershell parece ser muito lento. Aqui está o código com o qual testei:

Get-ChildItem "\path" -Force -Recurse | 
        where {!($_.PSIsContainer) -and ($_.LastAccessTime -lt (Get-Date).AddYears(-3))} | 
        select Mode,LastAccessTime,Length,Name

Minha pergunta é esta : existe uma maneira mais rápida e eficiente de "obter" terabytes de arquivos recursivamente (incluindo a propriedade LastAccessTime), onde alguns caminhos têm mais de 248 caracteres?

Procurando soluções gratuitas na maioria das vezes, mas se houver algumas boas soluções pagas, eu gostaria de verificá-las.

    
por Benjamin Hubbard 26.11.2013 / 12:58

4 respostas

0

Vou usar o Robocopy e usar LastModifiedDate.

    
por 16.12.2013 / 18:51
1

Se você estiver no Win2k8 ou mais recente, poderá usar o Gerenciador de Recursos de Servidor de Arquivos para criar uma tarefa de Expiração de Arquivo que moverá arquivos mais antigos que x para um diretório diferente.

    
por 26.11.2013 / 15:31
1

O exemplo de código será lento, já que você está enumerando cada arquivo e diretório recursivamente, antes de aplicar o filtro. Isso não é culpa do PowerShell, as classes de sistema de arquivos subjacentes no .Net são realmente muito rápidas.

Você deseja usar os parâmetros internos do filtro em vez de direcionar para o objeto-onde (em geral, filtrar o máximo possível "à esquerda").

    
por 16.12.2013 / 19:19
0

Eu tenho pouco por powershell não muito tempo atrás, enquanto fazendo algo semelhante. Leva idades e idades. Felizmente, eu tinha o Cygwin instalado e poderia testar a manobra correspondente usando comandos nativos * nix. A diferença de tempo foi impressionante.

Portanto, em termos de velocidade, a lentidão tem menos a ver com o Windows ou com o sistema de arquivos em si, mas tem mais a ver com a eficiência de execução da linguagem usada.

Profundidade / comprimento do caminho que ainda não experimentei, mas para essas tarefas de manuseio de arquivo que consomem muito tempo, agora uso o cygwin sobre o powershell em uma máquina com Windows. É uma droga, mas aí está.

Provavelmente, existem outras alternativas mais recomendáveis que também facilitam as operações de arquivos mais rápidas do que os comandos nativos do Windows. Se há um, muitos são meus pensamentos sobre isso.

    
por 26.11.2013 / 14:06