JDUPES(1) General Commands Manual JDUPES(1)

jdupes - پیدا کردن و انجام عملیات بر روی فایل‌های تکراری

jdupes [ options ] DIRECTORIES ...

مسیر(های) داده‌شده را برای یافتن فایل‌های تکراری جستجو می‌کند. چنین فایل‌هایی با مقایسه اندازه فایل‌ها، سپس مقایسه هش‌های جزئی و کامل فایل، و به دنبال آن مقایسه بایت‌به‌بایت پیدا می‌شوند. رفتار پیش‌فرض بدون تعیین هیچ «گزینه عملیاتی» دیگر (مانند حذف، خلاصه‌سازی، پیونددهی، یکسان‌زدایی و غیره)، چاپ مجموعه‌های فایل‌های منطبق است.

-@ --loud
چاپ اطلاعات آزاردهنده اشکال‌زدایی سطح پایین در حین اجرا
-0 --print-null
هنگام چاپ فایل‌های منطبق، به جای نویسه‌های سطر جدید (CR/LF) از بایت‌های تهی (null) استفاده می‌کند، درست همانند رفتار 'find -print0'. این گزینه در هیچ حالت عملیاتی دیگری به جز حالت پیش‌فرض «چاپ موارد منطبق» اثری ندارد (گزینه‌های حذف، پیونددهی و غیره همچنان پایان خط‌های عادی را در خروجی چاپ می‌کنند).
-1 --one-file-system
فایل‌هایی را که در سیستم‌های فایل یا دستگاه‌های متفاوتی قرار دارند به عنوان تکراری تطبیق نمی‌دهد.
فایل‌های مخفی را از بررسی خارج می‌کند.
فراخوانی ioctl همسان‌دامنه‌ها (same-extents) یا clonefile() برای فعال‌سازی حذف داده‌های تکراری (Deduplication) در سطح سیستم‌فایل بر روی دیسک (معروف به کپی-هنگام-نوشتن، CoW، شبیه‌سازی یا reflink)؛ تنها تعداد کمی از سیستم‌های فایل از این ویژگی پشتیبانی می‌کنند (مانند BTRFS؛ سیستم‌فایل XFS در صورتی که mkfs.xfs با گزینه‌های -m crc=1,reflink=1 اجرا شده باشد؛ و Apple APFS).
اندازه قطعات ورودی/خروجی (I/O chunk size) را لغو و بازنویسی می‌کند؛ jdupes این مقدار را به صورت خودکار تنظیم می‌نماید، اما اگر فایل‌های حجیمی روی دیسک‌های سخت مکانیکی دارید، قطعات بزرگ‌تر ممکن است زمان تأخیر ناشی از جابجایی هد (seek time) را کاهش دهند.

مقادیر معتبر بین ۰ تا ۱۸ هستند و نشان‌دهنده اندازه‌ها بر حسب توان‌های دو می‌باشند: 0=4K, 1=8K, 2=16K, 3=32K, 4=64K, 5=128K 6=256K 7=512K, 8=1M, 9=2M, 10=4M, 11=8M, 12=16M, 13=32M, 14=64M, 15=128M, 16=256M, 17=512M, 18=1G

اگر این ویژگی هنگام کامپایل برنامه فعال شده باشد، آمار و اطلاعات اشکال‌زدایی را در پایان اجرای برنامه نمایش می‌دهد.
از کاربر می‌خواهد مشخص کند چه فایل‌هایی حفظ شوند و تمام فایل‌های دیگر را حذف می‌کند (بخش هشدارها در زیر را ببینید).
در صورت یافتن هرگونه فایل تکراری، با کد وضعیت ۲۵۵ خارج می‌شود.
نخستین فایل را در هر مجموعه از موارد منطبق نادیده می‌گیرد.
در حالت عادی، هنگامی که دو یا چند فایل به یک ناحیه یکسان از دیسک اشاره می‌کنند، به عنوان موارد غیرتکراری تلقی می‌شوند؛ این گزینه این رفتار را تغییر می‌دهد.
نمایش راهنما
ترتیب مرتب‌سازی نتایج منطبق را معکوس می‌کند.
هر پارامتر خط فرمان را از دیگری جدا می‌کند؛ تنها زمانی فایل‌ها را مطابقت می‌دهد که ذیل مشخصات پارامترهای متفاوتی قرار گرفته باشند.
تولید خروجی در قالب JSON (ماشین‌خوان).
تمام فایل‌های تکراری را با پیوندهای سخت (Hardlinks) به نخستین فایل در هر مجموعه تکراری جایگزین می‌کند.
اطلاعات فایل‌های تکراری را خلاصه می‌کند.
موارد منطبق را چاپ کرده و در پایان اطلاعات فایل‌های تکراری را خلاصه می‌کند.
هنگامی که همراه با --delete استفاده شود، نخستین فایل را در هر مجموعه تکراری حفظ کرده و سایر فایل‌ها را بدون درخواست تأیید از کاربر حذف می‌کند.
حفظ ترتیب پارامترها مهم‌تر از مرتب‌سازی انتخابی است؛ این گزینه به‌ویژه با گزینه -N کاربرد دارد تا اطمینان حاصل شود که حذف خودکار به شکلی قابل کنترل رفتار می‌کند.
فایل‌ها را بر اساس WORD مرتب می‌کند: time - مرتب‌سازی بر اساس زمان آخرین تغییرات name - مرتب‌سازی بر اساس نام فایل (پیش‌فرض)
فایل‌هایی را که دارای مالک/گروه یا بیت‌های دسترسی متفاوتی هستند به عنوان تکراری در نظر نمی‌گیرد.
اطلاعات اضافی را در خروجی استاندارد چاپ می‌کند؛ مقادیر مجاز عبارتند از: early - مواردی که بررسی‌های اولیه اندازه/مجوز/پیوند و غیره را گذرانده‌اند partial - فایل‌هایی که هش جزئی آن‌ها مطابقت دارد fullhash - فایل‌هایی که هش کامل آن‌ها مطابقت دارد
[هشدار: خطر از دست رفتن داده‌ها، بخش هشدارها را ببینید] از اعتبارسنجی بایت‌به‌بایت جفت‌های تکراری صرف‌نظر می‌کند (تنها از هش‌ها استفاده می‌کند).
مخفی کردن نشانگر پیشرفت
برای هر دایرکتوری مشخص‌شده پس از این گزینه، زیردایرکتوری‌های درون آن را پیمایش می‌کند (به علامت ':' در انتهای گزینه توجه کنید؛ برای توضیحات بیشتر بخش مثال‌ها در ادامه را ببینید).
برای هر دایرکتوری داده‌شده، زیردایرکتوری‌های درون آن را پیمایش می‌کند.
تمام فایل‌های تکراری را با پیوندهای نمادین (Symlinks) به نخستین فایل در هر مجموعه تکراری جایگزین می‌کند.
نمایش اندازه فایل‌های تکراری
پیمایش دایرکتوری‌های دارای پیوند نمادین
[هشدار: خطر بسیار شدید از دست رفتن داده‌ها، بخش هشدارها را ببینید] فقط بر اساس هش نخستین بلوک از داده‌های فایل تطبیق می‌دهد و بقیه فایل را نادیده می‌گیرد.
بررسی ایمنی پیمایش دوگانه را غیرفعال می‌کند (بسیار محتاط باشید).
تنها فهرستی از فایل‌های یکتا (غیرتکراری و بدون تطابق) را چاپ می‌کند.
نمایش نسخه jdupes و فلگ‌های ویژگی‌های زمان کامپایل
ایجاد یا استفاده از یک فایل متنی پایگاه‌داده هش جهت افزایش سرعت اجراهای بعدی از طریق ذخیره موقت (کش) داده‌های هش فایل.
اسکن فایل‌های تکراری را انجام نمی‌دهد؛ تنها هش‌های جزئی و کامل را برای تمام فایل‌های مشخص‌شده در پایگاه‌داده هش ذخیره کرده و خارج می‌شود (نیازمند گزینه -y است).
فایل‌ها را بر اساس معیارهای مشخص‌شده فیلتر یا خارج می‌کند؛ فرمت کلی:

jdupes -X filter[:value][size_suffix]

برخی فیلترها مقداری دریافت نمی‌کنند یا چندین مقدار می‌پذیرند. فیلترهایی که می‌توانند یک گزینه عددی بپذیرند عموماً از ضریب‌های اندازه K/M/G/T/P/E با یا بدون افزودن iB یا B پشتیبانی می‌کنند. ضریب‌ها از نوع باینری هستند مگر اینکه پسوند -B به کار رود که در این صورت از ضریب‌های ده‌دهی استفاده خواهد شد. برای نمونه، 16k یا 16kib برابر است با 16384؛ و 16kb برابر است با 16000. ضرایب به بزرگی و کوچکی حروف حساس نیستند.

فیلترها اثر تجمعی دارند: دستور jdupes -X size+:99 -X size-:101 باعث می‌شود تنها فایل‌هایی که دقیقاً ۱۰۰ بایت حجم دارند گنجانده شوند.

تطبیق پسوند فایل به بزرگی و کوچکی حروف حساس نیست. تطبیق زیررشته مسیر به بزرگی و کوچکی حروف حساس است.

فیلترهای پشتیبانی‌شده عبارتند از:

`size[+-=]:number[suffix]'
تنها در صورتی مطابقت داده می‌شود که اندازه بزرگ‌تر (+)، کوچک‌تر (-) یا مساوی (=) با عدد مشخص‌شده باشد. مشخص‌کننده‌های -/+ و = را می‌توان ترکیب کرد؛ به عنوان مثال "size+=:4K" تنها فایل‌هایی با اندازه بزرگ‌تر یا مساوی چهار کیلوبایت (۴۰۹۶ بایت) را در نظر می‌گیرد.
`noext:ext1[,ext2,...]'
فایل‌های دارای پسوند(های) مشخص‌شده را که به صورت فهرستی جداشده با کاما تعیین می‌شوند، نادیده می‌گیرد. در ابتدای نام پسوند از نقطه استفاده نکنید.
`onlyext:ext1[,ext2,...]'
تنها فایل‌های دارای پسوند(های) مشخص‌شده را که به صورت فهرستی جداشده با کاما تعیین می‌شوند شامل می‌شود. در ابتدای نام پسوند از نقطه استفاده نکنید.
`nostr:text_string'
تمام مسیرهایی را که شامل زیررشته text_string هستند خارج می‌کند. این گزینه مسیر کامل فایل را بررسی می‌کند، بنابراین می‌تواند برای مطابقت دایرکتوری‌ها نیز به کار رود: -X nostr:dir_name/
`onlystr:text_string'
الزام می‌کند که تمام مسیرها حاوی زیررشته text_string باشند. این گزینه مسیر کامل فایل را بررسی می‌کند، بنابراین می‌تواند برای مطابقت دایرکتوری‌ها نیز به کار رود: -X onlystr:dir_name/
`newer:datetime`
تنها فایل‌های جدیدتر از تاریخ/زمان مشخص‌شده را شامل می‌شود. فرمت تاریخ/زمان: "YYYY-MM-DD HH:MM:SS" (بخش زمان اختیاری است).
`older:datetime`
تنها فایل‌های قدیمی‌تر از تاریخ/زمان مشخص‌شده را شامل می‌شود. فرمت تاریخ/زمان: "YYYY-MM-DD HH:MM:SS" (بخش زمان اختیاری است).
فایل‌های با طول صفر را نیز به عنوان تکراری در نظر می‌گیرد؛ این گزینه جایگزین رفتار پیش‌فرض قدیمی زمانی است که -n مشخص نمی‌شد.
در صورتی که کاربر اجرای برنامه را متوقف کند (مانند فشردن کلیدهای CTRL-C)، عملیات را روی مواردی که پیش از دریافت سیگنال توقف پیدا شده بودند اعمال می‌کند. برای مثال، اگر -L و -Z مشخص شده باشند، تمامی موارد منطبق که پیش از توقف کشف شده‌اند پیوند سخت داده خواهند شد. رفتار پیش‌فرض بدون -Z، خروج بدون انجام هیچ اقدامی است.

مجموعه‌ای از فلش‌ها در پیونددهی سخت برای نشان دادن عملیات انجام‌شده روی هر کاندید پیوند استفاده می‌شوند. این فلش‌ها به شرح زیر هستند:

---->
این فایل با موفقیت به نخستین فایل در زنجیره تکراری پیوند سخت داده شد
-@@->
این فایل با موفقیت به نخستین فایل در زنجیره پیوند نمادین داده شد
-##->
این فایل با موفقیت از نخستین فایل در زنجیره شبیه‌سازی (clone) شد
-==->
این فایل از قبل پیوند سختی به نخستین فایل در زنجیره بود
-//->
پیوند دادن این فایل به دلیل خطایی در فرآیند پیونددهی با شکست مواجه شد

فایل‌های تکراری در گروه‌هایی لیست می‌شوند که هر فایل در یک خط جداگانه نمایش داده می‌شود. سپس این گروه‌ها با خطوط خالی از یکدیگر جدا می‌شوند.

زیردایرکتوری‌های درون b را دنبال می‌کند، اما زیردایرکتوری‌های درون a را نادیده می‌گیرد.
زیردایرکتوری‌های درون هر دو مسیر a و b را دنبال می‌کند.
همیشه نتایج مربوط به 'dir1' را در هر مجموعه تطبیق در جایگاه اول قرار می‌دهد (در صورت مرتبط بودن).

استفاده از -1 یا --one-file-system از تطبیق فایل‌ها بین سیستم‌های فایل مختلف جلوگیری می‌کند، اما ممکن است در آینده فرم منعطف‌تری از این گزینه اضافه شود که تطبیق بین‌سیستمی را برای تمام سیستم‌های فایلی که هر پارامتر در آن‌ها حضور دارد مجاز سازد.

هنگام استفاده از -d یا --delete، باید دقت و احتیاط لازم را به عمل آورد تا از دست رفتن تصادفی داده‌ها جلوگیری شود.

گزینه -Z یا --soft-abort در نسخه‌های پیش از v1.5 در jdupes با نام --hardabort شناخته می‌شد و رفتاری کاملاً معکوس داشت. اعمال پیش‌فرض اقدامات در هنگام لغو، احتمالاً چیزی نیست که اکثر کاربران انتظار دارند. تصمیم به معکوس کردن رفتار به‌جای اختصاص آن به یک گزینه متفاوت به این دلیل گرفته شد که این ویژگی در زمان تغییر هنوز نسبتاً جدید بود.

گزینه -O یا --param-order به کاربر امکان کنترل بیشتری روی فایلی که در جایگاه نخست مجموعه تطبیق قرار می‌گیرد می‌دهد؛ به‌ویژه برای جلوگیری از اینکه گزینه -N تمام فایل‌ها به جز یک فایل را در یک مجموعه به شکلی به ظاهر تصادفی حذف کند. تمام دایرکتوری‌های مشخص‌شده در خط فرمان ابتدا به عنوان اولویت ترتیب مرتب‌سازی مجموعه‌های نتیجه به کار می‌روند و پس از آن الگوریتم مرتب‌سازی تعیین‌شده توسط گزینه -o یا --order اعمال می‌شود. این بدان معناست که ترتیب تمام جفت‌های تطبیق برای یک دایرکتوری منفرد، رفتار مرتب‌سازی قدیمی خود را حتی در صورت تعیین این گزینه حفظ خواهد کرد.

هنگامی که همراه با گزینه‌های -s یا --symlink استفاده شود، ممکن است کاربر به اشتباه پیوند نمادین را نگه دارد و فایلی را که به آن اشاره می‌کند حذف نماید.

گزینه -Q یا --quick تنها هر فایل را یک بار می‌خواند، هش آن را محاسبه می‌کند و مقایسه‌ها را صرفاً بر مبنای هش‌ها انجام می‌دهد. احتمال اندک اما قابل‌توجهی برای تداخل هش (Hash Collision) وجود دارد، که دقیقاً به همین دلیل است مقایسه بایت‌به‌بایت خطاناپذیر تعبیه شده و این گزینه صراحتاً آن را دور می‌زند. از این گزینه روی هیچ مجموعه داده‌ای که حتی اندک مقداری از دست رفتن داده در آن غیرقابل قبول است استفاده نکنید. این گزینه به دلیل ماهیت پرخطرش در متن راهنمای برنامه گنجانده نشده است. به شما هشدار داده شد!

گزینه -T یا --partial-only نتایج را بر اساس هش اولین بلوک داده‌های فایل در هر فایل ارائه می‌دهد و هر چیز دیگری در فایل را نادیده می‌گیرد. بررسی هش جزئی همواره یک مرحله حذف مهم در الگوریتم jdupes بوده است، که معمولاً نخستین ۴۰۹۶ بایت داده را هش می‌کند و باعث می‌شود فایل‌هایی که در ابتدا تفاوت دارند به سرعت رد شوند. در برخی سناریوها ممکن است روشی تجربی و مفید برای کاربر باشد تا ببیند آیا مجموعه‌ای از فایل‌ها اندازه یکسان و داده‌های ابتدایی یکسانی دارند، حتی اگر باقی‌مانده داده‌ها همخوانی نداشته باشد؛ یک نمونه از این حالت مقایسه فایل‌هایی با بلوک‌های آسیب‌دیده یا مفقود است، مانند انتقال ناقص فایل، یا بررسی داده‌های بازیابی‌شده در مقایسه با نسخه‌های سالم مشخص جهت تشخیص اینکه چه داده‌های آسیب‌دیده‌ای را می‌توان به نفع بازگرداندن نسخه سالم حذف کرد. این گزینه برای استفاده با اقدامات صرفاً اطلاعاتی در نظر گرفته شده است و در صورت استفاده همراه با گزینه‌هایی که فایل‌ها را حذف می‌کنند، پیوندهای سخت ایجاد می‌کنند یا سایر اقدامات مخرب را بر اساس نتایج تطبیق انجام می‌دهند، می‌تواند منجر به نابودی شدید و قطعی داده‌ها شود. به دلیل پتانسیل تخریب انبوه داده‌ها، این گزینه باید دو بار مشخص شود تا اعمال گردد و در صورت ذکر تنها یک بار، با خطا متوقف می‌شود.

استفاده از گزینه -C یا --chunk-size برای بازنویسی اندازه قطعه I/O می‌تواند با کاهش «لرزش و پرش هد» (head thrashing) و خواندن مقادیر بیشتری از داده‌ها به صورت متوالی از هر فایل، عملکرد را روی رسانه‌های ذخیره‌سازی چرخشی افزایش دهد. این اندازه قابل تنظیم می‌تواند عوارض جانبی نامطلوبی داشته باشد؛ اندازه پیش‌فرض، عملکرد الگوریتمی را بدون در نظر گرفتن ویژگی‌های I/O هر دستگاه معین به حداکثر می‌رساند و مقدار معقولی از حافظه را مصرف می‌کند، اما مقادیر دیگر ممکن است مصرف حافظه را به شدت افزایش دهند یا بار کاری فراخوانی سیستم بسیار بیشتری ایجاد کنند. چندین مقدار مختلف را آزمایش کنید تا ببینید چگونه بر عملکرد سخت‌افزار و مجموعه داده شما تأثیر می‌گذارند. این گزینه به هیچ وجه بر نتایج تطبیق تأثیر نمی‌گذارد، بنابراین حتی اگر روند تطبیق فایل را کُند کند، به چیزی آسیب نخواهد رساند.

ویژگی -y یا --hash-db یک فایل متنی با فهرستی از مسیرهای فایل، هش‌ها و سایر فراداده‌ها ایجاد و نگهداری می‌کند که به jdupes امکان می‌دهد داده‌های فایل را در بین اجراهای متوالی «به خاطر بسپارد». مشخص کردن نقطه '.' به عنوان نام فایل پایگاه‌داده، نام "jdupes_hashdb.txt" را به جای آن به کار خواهد برد؛ این نام مستعار استفاده از ویژگی پایگاه‌داده هش را بدون نیاز به تایپ نام توصیفی در هر بار آسان می‌سازد. این ویژگی در حال حاضر در دست توسعه است و رفتارهای غیرمنتظره‌ای دارد. با مسئولیت خودتان از آن استفاده کنید. به‌ویژه، یکی از بزرگ‌ترین مشکلات این ویژگی این است که هر مسیر را دقیقاً همان‌طور که در خط فرمان مشخص شده ذخیره می‌کند؛ اگر در اجرای بعدی هر مسیری با پیشوندی متفاوت به jdupes ارسال شود، شناسایی نشده و با آن‌ها به عنوان فایل‌هایی کاملاً متفاوت رفتار خواهد شد. برای مثال، اجرای دستور jdupes -y . foo/ مانند jdupes -y . ./foo نیست و با اجرای آن از یک دایرکتوری همجوار jdupes -y ../foo نیز تفاوت دارد. برای بهره‌مندی از ویژگی پایگاه‌داده هش باید jdupes را از همان دایرکتوری کاری و با همان مشخصات مسیر اجرا کنید. در صورت استفاده صحیح، یک پایگاه‌داده هش کاملاً پرشده می‌تواند اجراهای بعدی با صدها هزار فایل را که معمولاً زمان بسیار زیادی طول می‌کشد، به زمان اسکن دایرکتوری به علاوه چند ثانیه کاهش دهد. اگر داده‌های دایرکتوری از قبل در کش دیسک سیستم‌عامل موجود باشد، این ویژگی می‌تواند اجرای بعدی را با بیش از ۱۰۰ هزار فایل در کمتر از یک ثانیه به پایان برساند.

گزارش‌های باگ و درخواست‌های ویژگی‌های جدید را به jody@jodybruchon.com ارسال کنید، یا برای اطلاعات عمومی و راهنمایی، به http://www.jdupes.com مراجعه کنید.

اگر این نرم‌افزار را مفید می‌دانید، لطفاً حمایت مالی از توسعه آن را از طریق صفحه خانگی نویسنده در نظر بگیرید:

https://www.jodybruchon.com

نرم‌افزار jdupes توسط Jody Bruchon <jody@jodybruchon.com> ساخته شده و نگهداری می‌شود و از fdupes 1.51 نوشته Adrian Lopez <adrian2@caribe.net> منشعب (فورک) شده است.

مجوز MIT (MIT License)

Copyright (c) 2015-2025 Jody Lee Bruchon <jody@jodybruchon.com>

بدین‌وسیله به هر شخصی که نسخه‌ای از این نرم‌افزار و فایل‌های مستندات مربوطه («نرم‌افزار») را دریافت می‌کند، مجوز رایگان و بدون محدودیت اعطا می‌شود تا بدون قید و شرط با نرم‌افزار رفتار کند، از جمله بدون محدودیت حقوق استفاده، کپی، اصلاح، ادغام، انتشار، توزیع، اعطای مجوز فرعی و/یا فروش نسخه‌های نرم‌افزار، و اجازه دادن به اشخاصی که نرم‌افزار در اختیار آن‌ها قرار می‌گیرد تا با رعایت شرایط زیر چنین کنند:

اعلامیه حق نشر فوق و این مجوزنامه باید در تمامی نسخه‌ها یا بخش‌های عمده نرم‌افزار گنجانده شود.

این نرم‌افزار «به همان شکلی که هست» (AS IS) و بدون هرگونه ضمانت صریح یا ضمنی، از جمله ضمانت‌های تجاری بودن، مناسب بودن برای یک هدف خاص و عدم نقض حق ارائه می‌شود. در هیچ حالتی نویسندگان یا دارندگان حق نشر در قبال هیچ ادعا، خسارت یا مسئولیت دیگری، چه در قالب یک عمل قراردادی، شبه‌جرم یا موارد دیگر، ناشی از نرم‌افزار یا در ارتباط با آن یا استفاده یا سایر معاملات در نرم‌افزار مسئولیتی نخواهند داشت.