Powershell을 사용하여 존재하는 경우 디렉토리를 복사하여 해당 내용을 덮어 쓰려면 어떻게해야합니까? 수 있습니다. 소스 파일과

일부 파일이 들어있는 디렉토리 소스가 있는데, 대상 폴더에 복사하고 싶습니다. 대상이 존재할 수 있으며 이미 파일이있을 수 있습니다. 소스 파일과 이름이 같은 파일은 덮어 써야합니다.

Powershell에서 이것을 실행하면 :

Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse
Copy-Item Source Destination -Force -Recurse

그런 다음 첫 번째 줄은 폴더를 만들어 폴더 .\Destination에 복사 .\Source합니다. 다음 번에 반복하고 싶습니다. 그러나 두 번째 줄 .\Source은 대신 새 .\Destination폴더에 복사 하고 (을 생성 .\Destination\Source) 세 번째 줄은 .\Destination\Source다시 덮어 씁니다 .

항상 첫 번째 경우처럼 작동하게하려면 어떻게해야합니까? 즉, .\Destination복사하는 대신 덮어 쓰시겠습니까?



답변

문제는

cp -r -fo foo bar

bar존재하지 않는 경우에만 작동 하고

cp -r -fo foo/* bar

bar존재하는 경우에만 작동 합니다. 따라서 문제를 해결하려면 bar먼저 작업을 수행하기 전에 존재 해야 합니다.

md -f bar
cp -r -fo foo/* bar

답변

“source”폴더의 내용 만 복사하려면

copy-item .\source\* .\destination -force -recurse

답변

Steven Penny의 답변 https://superuser.com/a/742719/126444 는 대상 디렉토리의 원본 내용을 삭제하지 않고 추가합니다. 대상 폴더를 소스의 내용으로 완전히 바꾸고 두 가지 기능을 만들어야했습니다.

function CopyToEmptyFolder($source, $target )
{
    DeleteIfExistsAndCreateEmptyFolder($target )
    Copy-Item $source\* $target -recurse -force
}
function DeleteIfExistsAndCreateEmptyFolder($dir )
{
    if ( Test-Path $dir ) {
    #http://stackoverflow.com/questions/7909167/how-to-quietly-remove-a-directory-with-content-in-powershell/9012108#9012108
           Get-ChildItem -Path  $dir -Force -Recurse | Remove-Item -force -recurse
           Remove-Item $dir -Force

    }
    New-Item -ItemType Directory -Force -Path $dir
}

답변

다음과 같은 디렉토리 구조를 가지고 있다고 가정 해 봅시다.

  • 뿌리

    • folder_a
      • a.txt
      • b.txt
      • c.txt
    • folder_b
      • a.txt
      • b.txt

    루트 폴더에서 다음 순서의 명령으로 원하는 결과를 얻을 수 있습니다.

    $files = gci ./folder_b -name
    cp ./folder_a/*.txt -Exclude $files ./folder_b

c.txt 만 복사됩니다