일부 파일이 들어있는 디렉토리 소스가 있는데, 대상 폴더에 복사하고 싶습니다. 대상이 존재할 수 있으며 이미 파일이있을 수 있습니다. 소스 파일과 이름이 같은 파일은 덮어 써야합니다.
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
- folder_a
c.txt 만 복사됩니다