ฉันเลิกเสียพื้นที่จัดเก็บเมื่อตอนที่ฉันเรียนรู้ทริค PowerShell นี้
ไฟล์ซ้ำเป็นหนึ่งในสิ่งที่ซ่อนเร้นและสร้างปัญหาในการใช้พื้นที่เก็บข้อมูลบนไดรฟ์ พวกมันสะสมได้ง่าย และลบยากหากคุณไม่รู้ว่าไฟล์ต้นฉบับอยู่ที่ไหนหรือคุณอาจมีสำเนากี่ชุด ยิ่งไปกว่านั้น เครื่องมือกู้คืนพื้นที่เก็บข้อมูลที่มีอยู่ใน Windows ก็ไม่ได้ทำงานได้ดีในการค้นหาและลบไฟล์ซ้ำ
แน่นอน คุณอาจสามารถเรียกใช้การล้างข้อมูลดิสก์และกู้คืนพื้นที่บางส่วนได้ แต่สิ่งนั้นไม่ได้หมายความว่าจะกำจัดไฟล์ซ้ำที่ใช้พื้นที่จัดเก็บของคุณบนไดรฟ์ทั้งหมดได้ โชคดีที่มีคำสั่ง PowerShell เพียงคำสั่งเดียวที่ทำงานหนักทั้งหมดและค้นหาไฟล์ซ้ำที่แอบซ่อนอยู่ทั้งหมดบนพีซีของคุณ
ข้อความบรรทัดเดียวนี้จะค้นหาสิ่งที่กำลังกินพื้นที่จัดเก็บของคุณ
ตรวจพบรายการที่ซ้ำกันของคุณทันที
ไม่มีฟังก์ชันในตัวสำหรับค้นหาค่าซ้ำใน PowerShell อย่างไรก็ตาม คุณสามารถต่อคำสั่งหลายคำสั่งเข้าด้วยกันเพื่อสร้าง pipeline ง่าย ๆ ที่ทำงานใน PowerShell ได้ เพียงรันคำสั่งต่อไปนี้:
Get-ChildItem -Path "Directory/Path" -Recurse -File | Get-FileHash | Group-Object Hash | Where-Object Count -gt 1 | ForEach-Object { $_.Group }
ตราบใดที่ PowerShell สามารถเข้าถึงค่าแฮชของไฟล์โดยใช้คำสั่ง Get-FileHash มันสามารถเปรียบเทียบไฟล์ภายในไดเรกทอรีที่ระบุเพื่อหาซ้ำได้ ทุกอย่างอื่นเป็นเพียงการเชื่อมต่อที่เชื่อมการค้นหาไฟล์ไปยังการแฮชไปยังการจัดกลุ่มเพื่อให้เฉพาะไฟล์ที่ซ้ำจริงเท่านั้นที่แสดงเป็นผลลัพธ์
คำสั่งนี้ทำอะไรจริงๆ
คำสั่งไม่กี่คำ, ท่อส่งงานแบบง่าย
คำสั่งเริ่มต้นด้วย Get-ChildItem -Recurse -File ซึ่งจะสแกนต้นไม้ไดเร็กทอรีและส่งคืนไฟล์ทุกไฟล์เป็นวัตถุ รวมถึงไฟล์ที่อยู่ในโฟลเดอร์ย่อยด้วย วัตถุไฟล์เหล่านี้จะถูกส่งต่อไปยัง Get-FileHash ซึ่งคำนวณค่าแฮชของเนื้อหา พิจารณาค่าแฮชของเนื้อหาเป็นลายนิ้วมือเฉพาะตัวของแต่ละไฟล์ ซึ่งจะใช้ในการค้นหาข้อมูลซ้ำโดยอ้างอิงจากเนื้อหาไฟล์ ไม่ใช่ชื่อไฟล์
ต่อมา, Group-Objet Hash บอก PowerShell ให้รวมผลแฮชทั้งหมดเหล่านั้นตามคุณสมบัติ Hash ของพวกมัน โดยมีผลเป็นการจัดกลุ่มไฟล์ที่มีเนื้อหาเหมือนกันเข้าด้วยกัน ในจุดนี้, ไพพ์ไลน์จะมีการจัดกลุ่มที่บางแฮชปรากฏครั้งเดียวและบางแฮชปรากฏหลายครั้ง บ่งชี้ว่าพบไฟล์ซ้ำแล้ว
จากนั้น, Where-Object Count -gt 1 จะกรองกลุ่มที่มีเพียงไฟล์เดียวออกไป สุดท้าย, ForEach-Object {$_.Group} จะคลายกลุ่มออกและแสดงเฉพาะไฟล์เองสำหรับแฮชที่ซ้ำกันแต่ละรายการ ดังนั้นสิ่งที่คุณเห็นบนหน้าจอจึงเป็นรายชื่อวัตถุไฟล์ที่แสดงไฟล์ซ้ำของคุณ คุณสามารถอ่านเส้นทางเต็ม, ส่งต่อไปยัง Select-Object เพื่อพิมพ์เป็นรายการที่จัดรูปแบบแล้ว หรือส่งออกเป็น CSV เพื่อตรวจสอบในภายหลังได้
ทำไมเครื่องมือ GUI จึงไม่เพียงพอ
อินเทอร์เฟซผู้ใช้งานดี แต่การเตือนให้ซื้อไลเซนส์ตลอดเวลาไม่ดี
มีโปรแกรมค้นหาภาพซ้ำมากมายที่สามารถใช้ได้บน Windows บนอินเทอร์เน็ต และบ่อยครั้งที่พวกมันก็เหมาะสำหรับงานทำความสะอาดครั้งเดียว อย่างไรก็ตาม พวกมันมักมาพร้อมกับโฆษณาหรือข้อจำกัดรุนแรงจนกว่าคุณจะจ่ายเงินซื้อใบอนุญาตหรือสมัครสมาชิก
เมื่อนำไปเปรียบเทียบ คำสั่ง PowerShell นี้ใช้เพียงเครื่องมือที่มีอยู่แล้วในตัวเท่านั้น ปลอดภัยในการรัน โปร่งใสอย่างเต็มที่ และสามารถฝังเข้าไปในสคริปต์เพื่อทำงานอัตโนมัติได้ เพราะมันเป็นแค่ท่อของ cmdlets (คำสั่งขนาดเล็กเฉพาะทางสำหรับทำงานผู้ดูแลระบบเพียงอย่างเดียว) ดังนั้นจึงสามารถปรับแต่งเพิ่มเติมได้ ตัวอย่างเช่น คุณสามารถเพิ่ม -Filter *.PDF เพื่อค้นหาไฟล์ PDF เท่านั้น หรือทำให้ผลลัพธ์อ่านง่ายขึ้น
ข้อดีอีกอย่างคือคุณยังคงควบคุมข้อมูลและการลบข้อมูลได้ บรรทัดคำสั่งดิบที่กล่าวถึงข้างต้นจะหาข้อมูลซ้ำเท่านั้น มันไม่ได้ลบข้อมูลนั้น ซึ่งช่วยลดความเสี่ยงที่จะลบสิ่งที่สำคัญโดยไม่ตั้งใจ หากคุณคุ้นเคยกับ PowerShell คุณสามารถขยาย pipeline เพื่อให้ลบไฟล์ซ้ำทั้งหมดโดยอัตโนมัติด้วยการเพิ่ม Select-Object -Skip 1 | Remove-Item.
อย่าทำให้คอมพิวเตอร์ของคุณช้าลง
สแกนอย่างชาญฉลาด อยู่ปลอดภัย
การสแกนไดรฟ์ทั้งหมดพร้อมกับการสร้างแฮชของไฟล์จะเป็นงานที่ใช้ทรัพยากรมาก คำสั่ง Get-FileHash ต้องอ่านแต่ละไฟล์เพื่อคำนวณแฮชของมัน ซึ่งหมายความว่าการรันมันบนไดรฟ์ขนาดใหญ่ที่เต็มไปด้วยเกม เอกสาร และสื่อ รวมถึงข้อมูลอื่น ๆ จะใช้เวลาและสร้างกิจกรรมดิสก์จำนวนมาก หากคุณไม่ระมัดระวัง นี่ก็เป็นวิธีที่รวดเร็วมากในการทำให้เกิดรอบการเขียนมากเกินไปบน SSD ของคุณ ซึ่งสามารถทำให้อายุการใช้งานของมันสั้นลงได้
แทนที่จะชี้คำสั่งไปที่ไดรฟ์ทั้งหมด ผมแนะนำให้คุณสแกนโฟลเดอร์ขนาดเล็กแทน การมุ่งเป้าไปที่ตำแหน่งที่เกิดซ้ำบ่อย เช่น โฟลเดอร์ดาวน์โหลดหรือเอกสารใน Windows หรือคลังภาพของคุณ จะช่วยประหยัดเวลาและความพยายามได้มาก
สำหรับความปลอดภัย ควรหลีกเลี่ยงการรันคำสั่งลบใด ๆ ในคำสั่งเดียวกับที่ใช้หาซ้ำ อย่างน้อยเมื่อคุณยังคงทดลองกับกระบวนการของคุณ จะดีกว่าที่จะจับผลลัพธ์เข้าไปในตัวแปรก่อนและตรวจสอบเพื่อให้แน่ใจว่าคุณได้ผลลัพธ์ตามที่คาดไว้ เมื่อคุณมั่นใจแล้วว่าข้อมูลที่ตรงกันนั้นซ้ำจริง ๆ คุณสามารถตัดสินใจว่าจะลบด้วยตนเองหรือรันสคริปต์ลบ
ควบคุมพื้นที่จัดเก็บของคุณ
หยุดเดา เริ่มจัดการ
เมื่อคุณเริ่มใช้คำสั่งนี้ มันจะกลายเป็นหนึ่งในคำสั่ง PowerShell ที่สามารถแก้ไขปัญหาของ Windows ส่วนใหญ่ของคุณได้อย่างรวดเร็ว ทุกครั้งที่โฟลเดอร์เริ่มรู้สึกเต็ม ให้รันการสแกน และปล่อยพื้นที่ที่คุณต้องตรวจสอบและยืนยันด้วยตนเองเป็นชั่วโมง ๆ เพื่อเรียกร้อง โดยทั้งหมดนี้ไม่ต้องใช้ยูทิลิตี้ทำความสะอาดเพิ่มเติมอีกหนึ่งตัว
จะมีภาระทางความคิดเริ่มต้นเล็กน้อยในการวิเคราะห์กระบวนการ แต่เมื่อคุณเข้าใจแล้ว มันจะกลายเป็นวิธีที่ง่ายและสามารถทำซ้ำได้ในการจัดการปัญหาการจัดเก็บข้อมูลบนเครื่องของคุณ จำไว้ว่า คุณไม่ได้กำลังจดจำมนตราวิเศษเท่าไรนัก แต่คุณกำลังเรียนรู้รูปแบบ: ดึงรายการ แฮชมัน จัดกลุ่ม กรอง และดำเนินการกับผลลัพธ์








