Qual é a sintaxe correta para excluir o conteúdo de uma pasta, mas não a própria pasta?

7

Eu tenho um script powershell que copia arquivos de $source para $dest e exclui alguns tipos de arquivos. Ele exclui meus arquivos csv e arquivos web.config, mas não excluirá o conteúdo da pasta Log. Este é o meu script, qual é a sintaxe correta para excluir o conteúdo dos arquivos, mas não a própria pasta Log ?

$exclude = @('Thumbs.db','*-Log.csv','web.config','Logs/*')

Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}
    
por guanome 18.11.2011 / 21:37

2 respostas

4

Você precisará configurar um segundo Array com os caminhos que deseja evitar e, em seguida, adicionar um filtro ao pipe. Veja um exemplo de código:

$exclude = @('Thumbs.db','*-Log.csv','web.config','Logs/*')
$directory = @("C:\logs")
Get-ChildItem $source -Recurse -Exclude $exclude | where {$directory -notcontains $_.DirectoryName}
    
por 18.11.2011 / 22:36
0

Você pode criar sua própria função de cópia recursiva.

function Copy-WithFilter ($sourcePath, $destPath)
{
    $exclude = @('Thumbs.db', '*-Log.csv','web.config', 'Logs')

    # Call this function again, using the child folders of the current source folder.
    Get-ChildItem $sourcePath -Exclude $exclude | Where-Object { $_.Length -eq $null } | % { Copy-WithFilter $_.FullName (Join-Path -Path $destPath -ChildPath $_.Name) } 

    # Create the destination directory, if it does not already exist.
    if (!(Test-Path $destPath)) { New-Item -Path $destPath -ItemType Directory | Out-Null }

    # Copy the child files from source to destination.
    Get-ChildItem $sourcePath -Exclude $exclude | Where-Object { $_.Length -ne $null } | Copy-Item -Destination $destPath

}

# $source and $dest defined elsewhere.
Copy-WithFilter $source $dest
    
por 19.11.2011 / 00:12

Tags