Copia o arquivo para um nome diferente no mesmo diretório em todos os subdiretórios

1

Como aplicativos diferentes exigem nomes de arquivo diferentes, tenho tentado copiar Folder.jpg para cover.jpg em todas as subpastas, mas não consegui fazer com que a minha Shellscript funcionasse.

get-childItem -recurse | Where {$_.extension -eq "jpg"} | copy-item Folder.jpg cover.jpg

Não houve erro, mas nada aconteceu.

Grato por qualquer ajuda dos especialistas aqui.

    
por Jacky 26.04.2017 / 18:03

2 respostas

1

É mais fácil procurar recursivamente Folder.jpg, mudar para essa pasta, copiar e obter a próxima.

# Change to base folder
Push-Location "Q:\Test17"
Get-ChildItem Folder.jpg -Recurse | ForEach-Object {
  Set-Location $_.DirectoryName
  Copy-Item .\Folder.jpg .\Cover.jpg
} 
Pop-Location
gci folder.jpg -r|copy -dest {$_.FullName -replace 'folder','cover'}
    
por 26.04.2017 / 19:53
0

@LotPings mostrou um script PS bem formatado para sua tarefa. Seria ainda melhor se fosse uma função.

function Copy-Covers ($location) {
    # Change to base folder
    Push-Location $location

    # Recursively copy all occurrences of folder.jpg under $location
    Get-ChildItem Folder.jpg -Recurse | ForEach-Object {
      Set-Location $_.DirectoryName
      Copy-Item .\Folder.jpg .\Cover.jpg
    } 
    Pop-Location

}

Para uma tarefa única, muitas vezes você pode usar one-liners. Neste caso, ficaria assim (execute a partir da pasta base onde você quer que a cópia ocorra):

gci -R -filter folder.jpg | % {copy $_ "$($_.DirectoryName)\cover.jpg" }
    
por 28.04.2017 / 23:44