منصوبے کے بارے میں

findDupes ایک کمانڈ‑ لائن یوٹیلیٹی ہے جو Go میں لکھی گئی ہے اور فائلوں کو ان کے مواد کے ہیش کی بنیاد پر ڈپلیکٹ تلاش کرتی ہے، نہ کہ فائل نام کے۔ اس طرح مختلف ناموں والی کاپیاں بھی شناخت ہو جاتی ہیں۔ یہ ایک یا زیادہ ڈائریکٹریز کو اسکین کرتا ہے اور ہیشنگ کو بیک وقت انجام دیتا ہے۔ اسکیننگ مرحلہ وار ہوتی ہے تاکہ ہر فائل کو مکمل طور پر پڑھنے سے بچا جا سکے۔ پہلے یہ فراہم کردہ روٹس کو ری کرسیولی چلتا ہے اور ہر باقاعدہ فائل کا راستہ اور سائز جمع کرتا ہے؛ وہ فائلیں جن کا سائز دریافت شدہ فائلوں میں منفرد ہے، انہیں چھوڑ دیا جاتا ہے کیونکہ ان کا کوئی مماثل کاپی نہیں ہو سکتی۔ باقی امیدواروں کو پہلے 4 KiB پر ورکَر پول کے ذریعے ہیش کیا جاتا ہے، اور صرف وہ فائلیں جن کا پری فکس ہیش ایک جیسا ہو، دوبارہ پڑھ کر SHA‑256 کے ساتھ مکمل ہیش کی جاتی ہیں۔ ایک ہی مکمل ہیش والی فائلیں ڈپلیکٹ کے طور پر رپورٹ کی جاتی ہیں۔ سائز اور پری فکس چیک صرف فلٹر کے طور پر کام کرتے ہیں، اس لیے مختلف سائز یا پری فکس ہیش والی فائلیں کبھی بھی ایک دوسرے کے خلاف مکمل ہیش نہیں کی جاتیں۔ روٹ ہینڈلنگ جان بوجھ کر محتاط ہے۔ روٹس کو اسکیننگ سے پہلے مطلق، سمبلنک‑لنک‑ریزیولوڈ راستوں میں تبدیل کیا جاتا ہے؛ دہرائے گئے یا اوورلیپنگ روٹس (مثلاً ایک ہی ڈائریکٹری دو بار دی گئی ہو، یا ایک ڈائریکٹری اور اس کا سب ڈائریکٹری) کو ڈپلیکٹ ہٹا دیا جاتا ہے، بشمول مختلف ہجے یا وہ راستے جو ایک ہی سمبلنک‑لنک کے ذریعے حل ہوتے ہیں۔ اسکین شدہ ڈائریکٹری کے اندر ملنے والے سمبلنک لنکس کو فالو نہیں کیا جاتا، صرف باقاعدہ فائلیں جمع کی جاتی ہیں، اور ایک ہی ہارڈ‑لنک والی فائل کے متعدد راستے صرف ایک بار جمع ہوتے ہیں۔ ہیشنگ کے دوران کسی فائل کو پڑھنے میں ناکامی ہو تو اسے لاگ کیا جاتا ہے اور چھوڑ دیا جاتا ہے؛ اگر کوئی روٹ حل یا واک نہیں ہو سکا تو دیگر روٹس کی فائلیں پھر بھی پروسیس کی جاتی ہیں، لیکن کمانڈ نتائج پرنٹ کرنے کے بعد ایک ایرر ریٹرن کرتی ہے۔ Ctrl‑C اور SIGTERM ایک فعال اسکین کو منسوخ کرتے ہیں، اور کام فائل سسٹم ریڈز کے درمیان روک دیا جاتا ہے۔ ڈپلیکٹ گروپس SHA‑256 ہیش، فائل سائز اور راستوں کے ساتھ پرنٹ کیے جاتے ہیں؛ ہر گروپ کے اندر اور گروپس خود ترتیب شدہ ہوتے ہیں تاکہ آؤٹ پٹ قابلِ تکرار ہو۔ فلیگز میں -v/--verbose اسکین کے دوران پیشرفت دکھانے کے لیے، -w/--workers ہیشنگ ورکروں کی تعداد (ڈیفالٹ: CPUs کی تعداد)، --json نئی لائن سے الگ JSON آبجیکٹس کے ساتھ ہیش، سائز اور راستے کے فیلڈز کے لیے، --stats stderr پر اسکین کے اعداد و شمار کے لیے، اور --version شامل ہیں۔ اعداد و شمار میں دریافت شدہ فائلیں، سائز‑فلٹر شدہ فائلیں، مواد‑ہیش امیدوار، ڈپلیکٹ گروپس اور ڈپلیکٹ فائلیں شامل ہیں؛ انہیں stderr پر لکھنے سے JSON آؤٹ پٹ کو jq جیسے ٹولز میں پائپ کرنے کے لیے محفوظ رکھا جاتا ہے۔ انسٹالیشن کے لیے Go 1.25 یا اس کے بعد کا ورژن درکار ہے اور اسے `go install github.com/mojotx/findDupes@latest` کے ذریعے یا ریپوزٹری کلون کر کے `go install -v ./...` چلانے سے کیا جا سکتا ہے۔ ریپوزٹری میں CI اور CodeQL ورک فلو شامل ہیں، اور اس کا ٹیسٹ میٹرکس لینکس، macOS اور ونڈوز پر Go کے اس ورژن کے ساتھ ریس‑این ایبل سوٹ چلاتا ہے جو go.mod میں بیان ہے۔