Bagaimana saya bisa menyalin direktori, menimpa isinya jika ada menggunakan Powershell?


9

Saya memiliki Sumber direktori dengan beberapa file di dalamnya, yang ingin saya salin ke folder Destination. Tujuan mungkin ada, dan mungkin sudah ada file di dalamnya. File apa pun dengan nama yang sama dengan yang ada di Sumber harus ditimpa ulang.

Jika saya menjalankan ini di Powershell:

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

Lalu baris pertama membuat folder .\Destinationdan menyalinnya .\Source, itulah yang ingin saya ulangi untuk kali berikutnya. Namun, baris kedua akan menyalin .\Sourceke .\Destinationfolder baru (membuat .\Destination\Source), kemudian baris ketiga menimpa .\Destination\Sourcelagi.

Bagaimana saya bisa membuatnya bertindak seperti dalam kasus pertama sepanjang waktu? Artinya, menimpa .\Destinationalih-alih menyalin ke dalamnya?


Bisakah Anda mengklarifikasi? Anda ingin menyalin konten "sumber" ke "tujuan"? dan tidak menyalin folder "sumber" ke "tujuan"?
BroScience

Ya itu benar. Folder "tujuan" mungkin tidak ada, jadi saya ingin membuatnya jika tidak keluar.
Douglas

Mungkin patut mempertimbangkan robocopy sebagai alternatif. Anda masih dapat memanggilnya dari PowerShell jika perlu. Ini akan menangani if existsmasalah dengan mudah dan tidak akan mengharuskan Anda untuk secara paksa menghapus tujuan Anda dengan baik, yang datang dengan bahaya sendiri.
Jeremy

Pertanyaan SO yang terkait erat: stackoverflow.com/q/47964451/45375
mklement0

Jawaban:


7

Jadi masalahnya adalah itu

cp -r -fo foo bar

hanya berfungsi jika bartidak ada dan

cp -r -fo foo/* bar

hanya berfungsi jika barada. Jadi untuk mengatasinya, Anda perlu memastikan barada sebelum melakukan sesuatu

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

3

Jika Anda hanya ingin menyalin konten dari folder "sumber" gunakan

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

1
Ini hanya berfungsi jika destinationsudah ada.
Steven Penny

3

Jawaban Steven Penny https://superuser.com/a/742719/126444 tidak menghapus konten asli dari direktori target, hanya menambahkannya. Saya perlu mengganti folder target sepenuhnya dengan konten sumber dan membuat 2 fungsi:

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
}

1

Katakanlah Anda memiliki struktur Direktori berikut

  • akar

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

    Di folder Root Anda dapat mencapai hasil yang Anda inginkan dengan urutan perintah berikut:

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

Hanya c.txt yang akan disalin

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.