Katakanlah saya menyalin dan menempel file dari folder A, yang meliputi:
Map A:
file1.cfg
file2.txt
file3.esp
file4.bsa
ke dalam folder B, yang setelah diperbarui, memiliki:
Map B:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
Apakah ada cara untuk menghapus semua file dari folder A yang ada di folder B (ditandai dengan *)? Selain secara manual memilih masing-masing dan menghapusnya, atau ctrl-Z'ing tepat setelah salin-tempel
Saya lebih suka metode windows atau beberapa perangkat lunak yang bisa melakukan ini
Terima kasih!
windows
windows-explorer
DarkFire13
sumber
sumber
Jawaban:
Ada perangkat lunak gratis di luar sana yang disebut WinMerge . Anda dapat menggunakan perangkat lunak ini untuk mencocokkan duplikat. Pertama, gunakan
File
→Open
, dan pilih kedua direktori, dengan folder dengan file yang ingin Anda simpan di sebelah kiri, dan yang Anda tidak di sebelah kanan. Lalu, keView
, dan membatalkan pilihanShow Different Items
,Show Left Unique Items
, danShow Right Unique Items
. Ini akan meninggalkan hanya file identik yang tersisa dalam daftar. Setelah itu, pilihEdit
→Select All
, klik kanan pada file apa pun, dan klik padaDelete
→Right
. Ini akan menghapus duplikat dari folder sebelah kanan.sumber
Ini dapat dilakukan melalui commandline dengan menggunakan perintah
forfiles
Mari kita asumsikan Anda memiliki Folder A terletak di
c:\temp\Folder A
, dan Folder B terletak dic:\temp\Folder B
Perintahnya adalah:
Setelah ini selesai, Folder B akan menghapus semua file yang ada di Folder A. Perlu diingat, bahwa jika folder B memiliki file dengan nama yang sama, tetapi bukan konten yang sama, mereka masih akan dihapus.
Dimungkinkan untuk memperluas ini agar berfungsi dengan folder di dalam subfolder juga, tetapi karena khawatir hal ini menjadi tidak perlu rumit, saya telah memutuskan untuk tidak mempostingnya. Ini akan membutuhkan opsi / s dan @relpath (dan pengujian lebih lanjut xD)
sumber
Anda dapat menggunakan skrip PowerShell ini:
Semoga ini cukup jelas. Itu terlihat pada setiap item di Folder B, memeriksa apakah ada item dengan nama yang sama di Folder A, dan jika demikian, ia menghapus item Folder A. Perhatikan bahwa final
\
di jalur folder penting.Versi satu baris:
Jika Anda tidak peduli apakah Anda mendapatkan kesalahan merah di konsol, Anda dapat menghapus
-EA 'SilentlyContinue'
.Simpan sebagai
.ps1
file, misdedupe.ps1
. Sebelum Anda dapat menjalankan skrip PowerShell, Anda harus mengaktifkan eksekusinya:Maka Anda akan dapat memintanya dengan
.\dedupe.ps1
ketika Anda berada di folder yang berisi itu.sumber
rsync
rsync
adalah program yang digunakan untuk menyinkronkan direktori. Dari banyak (sangat banyak) pilihan yang Anda miliki, ada penjelasan sendiri--ignore-non-existing
,--remove-source-files
dan--recursive
.Anda dapat melakukan
jika kami mengira Anda memiliki file di direktori A (4) dan B (4 + 2).
sumber
Jawaban LPChip adalah yang lebih baik.
Tetapi karena saya sudah mulai belajar Python, saya berpikir, "Heck, mengapa tidak menulis skrip Python sebagai jawaban untuk pertanyaan ini?"
Instal Python dan Send2Trash
Anda harus menginstal Python sebelum Anda dapat menjalankan skrip dari baris perintah.
Kemudian instal Send2Trash sehingga file yang dihapus tidak hilang tetapi berakhir di tempat sampah OS:
Buat skrip
Buat file baru dengan misalnya nama
DeleteDuplicateInFolderA.py
Salin skrip berikut ke dalam file.
Pemakaian
Mode dry run, yang menunjukkan kepada Anda file mana yang akan dihapus tanpa benar-benar menghapus file apa pun:
Mode penghapusan file, yang memang menghapus file, jadi berhati-hatilah:
Output mode lari kering
Output dari mode penghapusan file
Tes unit
Jika Anda ingin menguji aplikasi di atas, buat file dengan nama
DeleteDuplicateInFolderATest.py
dan rekatkan unittests ini ke dalamnya:sumber
Menggunakan bash
Tentu Anda bisa lebih aman dengan memeriksa apakah file itu ada, atau memeriksa apakah nama file aman. Tetapi dengan asumsi Anda hanya ingin menyelesaikan ini, dan tidak memiliki file dengan nama konyol
folderB
- ini adalah cara cepat dan kotor untuk menyelesaikannya. (dan Anda dapat menggunakan emulator bash yang datang dengan git , jika Anda tidak menjalankan Win10 + bash)sumber
Setiap program NC-style, seperti Total Commander, memiliki perintah perbedaan direktori yang memilih file di kedua tab yang berbeda dari tab lainnya. Panggil perintah ini,
tab
ke direktori yang lebih besar (B), membalikkan pemilihan menggunakan*
dan menghapus. Ini memiliki keuntungan karena tidak menghapus file yang mungkin telah berubah (entah bagaimana) dan tidak sama meskipun mereka sepakat namanya. Anda dapat menggunakan perintah diff direktori yang sama untuk menemukan ini setelah penghapusan.Saya kira saya terjebak di tahun sembilan puluhan ... tapi saya belum benar-benar melihat sesuatu yang lebih elegan sejak :-) Sejauh ini adalah satu-satunya jawaban yang hanya membutuhkan sekitar 5 penekanan tombol dan tidak ada scripting / command line sama sekali.
sumber
Metode Windows
Jika Anda selalu perlu menyalin file dari satu lokasi ke lokasi lain dan kemudian memastikan file yang berhasil disalin juga dihapus dari lokasi sumber asli, maka di bawah ini adalah solusi skrip batch yang dapat Anda gunakan untuk mengotomatiskan seluruh tugas itu hanya dengan klik sederhana setiap proses.
Pastikan untuk mengatur
SourceDir
danDestDir
variabel sesuai dengan kebutuhan Anda.Selain itu, di bagian skrip di bawah ini
("%SourceDir%\*.*") DO
Anda hanya dapat mengubah*.*
nilai menjadi lebih eksplisit untuk nama file (File A.txt
) atau ekstensi file (*.wav
) sesuai kebutuhan.Sumber Daya Lebih Lanjut
sumber