rdfind(1) rdfind rdfind(1)

rdfind - پیدا کردن فایل‌های تکراری

rdfind [ options ] directory1 | file1 [ directory2 | file2 ] ...

دستور rdfind فایل‌های تکراری را در چندین دایرکتوری و/یا درون آن‌ها پیدا می‌کند. این برنامه چکسام‌ها را تنها در صورت لزوم محاسبه می‌کند. دایرکتوری‌ها به‌صورت بازگشتی جستجو می‌شوند.

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

به‌طور پیش‌فرض، هیچ اقدامی به جز ایجاد یک فایل شامل فایل‌های شناسایی‌شده و نمایش مقدار فضای قابل صرفه‌جویی انجام نمی‌شود.

اگر نسبت به حالت پیش‌فرض نیاز به کنترل بهتری روی رتبه‌بندی دارید، می‌توانید از یک پیش‌پردازنده استفاده کنید که نام فایل‌ها را به ترتیب دلخواه مرتب کرده و سپس برنامه را با استفاده از xargs اجرا کند. برای چگونگی استفاده از find و xargs در کنار rdfind، به مثال‌های زیر مراجعه نمایید.

برای گنجاندن فایل‌ها یا دایرکتوری‌هایی که نام آن‌ها با - شروع می‌شود، از rdfind ./- استفاده کنید تا با گزینه‌ها اشتباه گرفته نشوند.

در صورت وجود دو یا چند فایل یکسان، فایلی که بالاترین رتبه را داشته باشد به عنوان نسخه اصلی انتخاب شده و باقی فایل‌ها تکراری محسوب می‌شوند. قوانین رتبه‌بندی در زیر آورده شده‌اند؛ این قوانین از ابتدا اجرا می‌شوند تا زمانی که یک نسخه اصلی پیدا شود. با فرض دو فایل A و B که اندازه و محتوای یکسانی دارند، رتبه‌بندی به شرح زیر است:

اگر A در حین پویش یک آرگومان ورودی زودتر از B پیدا شده باشد، A رتبه بالاتری دارد.

اگر A در عمق دایرکتوری کمتری نسبت به B پیدا شده باشد، A دارای رتبه بالاتری است (A به ریشه نزدیک‌تر است).

اگر A و B در حین پویش یک آرگومان ورودی یکسان یافت شوند و عمق دایرکتوری یکسانی داشته باشند، اینکه کدام‌یک بالاترین رتبه را می‌گیرد بستگی به این دارد که عملکرد قطعی (deterministic) فعال باشد یا خیر. این گزینه به‌طور پیش‌فرض فعال است (گزینه -deterministic را ببینید). در صورت فعال بودن، اینکه کدام فایل رتبه بالاتری کسب می‌کند نامشخص اما قطعی است. در صورت غیرفعال بودن، فایلی که ابتدا توسط فایل‌سیستم گزارش شده است بالاترین رتبه را خواهد داشت.

گزینه‌های جستجو و غیره:

نادیده گرفتن فایل‌های خالی. تنظیم این گزینه روی true (پیش‌فرض) معادل -minsize 1 و تنظیم آن روی false معادل -minsize 0 است.
فایل‌های با حجم کمتر از N بایت را نادیده می‌گیرد. مقدار پیش‌فرض 1 است، به این معنی که فایل‌های خالی نادیده گرفته می‌شوند.
فایل‌های با حجم N بایت یا بیشتر را نادیده می‌گیرد. مقدار پیش‌فرض 0 است، به این معنی که این بررسی غیرفعال است.
دنبال کردن پیوندهای نمادین (symlinks). مقدار پیش‌فرض false است.
مواردی را که inode و شناسه دستگاه (device ID) یکسانی دارند حذف می‌کند. مقدار پیش‌فرض true است.
نوع چکسام مورد استفاده: md5، sha1، sha256، sha512 یا xxh128. از نسخه 1.4.0 مقدار پیش‌فرض sha1 است. xxh128 یک چکسام بسیار سریع است، اما کیفیت رمزنگاری ندارد. پشتیبانی از xxh اختیاری است و مستلزم آن است که rdfind با --with-xxhash پیکربندی شده باشد. در صورتی که xxh استفاده شود اما پشتیبانی وجود نداشته باشد، یک خطا برگردانده می‌شود. از چکسام none می‌توان برای صرف‌نظر کردن کامل از محاسبه چکسام استفاده کرد. این کار توصیه نمی‌شود! در صورتی که فایل‌هایی با اندازه یکسان محتوای متفاوتی داشته باشند، این احتمال وجود دارد که به اشتباه تکراری در نظر گرفته شوند و منجر به حذف فایل گردد (بسته به گزینه‌های دیگر).
اندازه قطعات (chunksize) به بایت هنگام محاسبه چکسام فایل‌ها؛ مقادیر کوچک‌تر یا بزرگ‌تر بسته به فایل‌سیستم و الگوریتم چکسام می‌توانند عملکرد را بهبود ببخشند. مقدار پیش‌فرض 1 MiB و حداکثر مجاز 128MiB (شامل خود آن) است.
اندازه به بایت هنگام پویش نخستین بایت‌های هر فایل، پیش از محاسبه چکسام کامل. تنظیم این مقدار روی 0 به معنای صرف‌نظر کردن کامل از این مرحله است.
اندازه به بایت هنگام پویش آخرین بایت‌های هر فایل، پیش از محاسبه چکسام کامل. تنظیم این مقدار روی 0 به معنای صرف‌نظر کردن کامل از این مرحله است.
در صورت تنظیم بودن (پیش‌فرض)، فایل‌های با رتبه برابر را به ترتیبی نامشخص اما قطعی مرتب می‌کند. این امر باعث می‌شود رفتار برنامه از ترتیبی که فایل‌ها هنگام پرس‌وجو از فایل‌سیستم فهرست می‌شوند مستقل گردد.

گزینه‌های عملیات:

جایگزین کردن فایل‌های تکراری با پیوندهای نمادین (symbolic links). پیش‌فرض false است.
جایگزین کردن فایل‌های تکراری با پیوندهای سخت (hard links). پیش‌فرض false است.
ایجاد یک فایل نتایج در دایرکتوری جاری. پیش‌فرض true است. در صورت وجود فایل، رونویسی می‌شود. این گزینه بر حذف شدن یا نشدن موارد تأثیری ندارد. برای چگونگی غیرفعال کردن حذف‌ها، به -dryrun مراجعه کنید.
تنظیم نام فایل نتایج به "name" به جای نام پیش‌فرض results.txt.
حذف (unlink) فایل‌ها. پیش‌فرض false است.

گزینه‌های عمومی:

نمایش پیشرفت در حین حذف موارد تکراری. پیش‌فرض false است.
ایجاد وقفه به میزان X میلی‌ثانیه بین خواندن هر فایل، به منظور کاهش بار کاری. مقدار پیش‌فرض 0 است (بدون وقفه). توجه داشته باشید که در حال حاضر تنها چند مقدار پشتیبانی می‌شوند: 0، 1-5، 10، 25، 50، 100 میلی‌ثانیه.
به‌طور پیش‌فرض، rdfind هیچ کاری جز ایجاد یک فایل نتایج انجام نمی‌دهد. در صورتی که یکی از پرچم‌های عملیات مانند -deleteduplicates تنظیم شده باشد، می‌توان dryrun را فعال کرد تا rdfind به جای انجام واقعی عملیات، کارهایی را که قرار است انجام دهد چاپ کند. مقدار پیش‌فرض false است.
نمایش یک پیام راهنمای مختصر.
نمایش شماره نسخه.

جستجوی فایل‌های تکراری در دایرکتوری خانگی و یک دایرکتوری پشتیبان:
rdfind ~ /mnt/backup
حذف فایل‌های تکراری در یک دایرکتوری پشتیبان:
rdfind -deleteduplicates true /mnt/backup
جستجوی فایل‌های تکراری در دایرکتوری‌هایی با نام foo:
find . -type d -name foo -print0 |xargs -0 rdfind

results.txt (نام پیش‌فرض results.txt است و می‌تواند با گزینه outputname تغییر کند، بالا را ببینید). فایل نتایج results.txt شامل یک سطر به ازای هر فایل تکراری یافت‌شده خواهد بود، به همراه یک سطر سرآیند که ستون‌ها را توضیح می‌دهد. یک متن دلیل این را که چرا فایل تکراری در نظر گرفته شده است شرح می‌دهد:

DUPTYPE_UNKNOWN یک خطای داخلی

DUPTYPE_FIRST_OCCURRENCE فایلی که به عنوان نسخه اصلی در نظر گرفته می‌شود.

DUPTYPE_WITHIN_SAME_TREE فایل‌های موجود در همان درخت (هنگام پردازش دایرکتوری در همان آرگومان ورودیِ فایل اصلی یافت شده است)

DUPTYPE_OUTSIDE_TREE فایل هنگام پردازش یک آرگومان ورودی دیگر به غیر از فایل اصلی یافت شده است.

0 در صورت موفقیت، در غیر این صورت مقداری غیر صفر.

هنگامی که یک دایرکتوری یکسان دو بار مشخص شود، برنامه نخستین دایرکتوریِ دیده‌شده را به عنوان مهم‌ترین (نسخه اصلی) در نظر می‌گیرد و مابقی را تکراری می‌شمارد. این ممکن است چیزی نباشد که شما می‌خواهید.

ایجاد پیوند نمادین پیوندهای مطلق ایجاد می‌کند. این ممکن است مطلوب شما نباشد. برای ایجاد پیوندهای نسبی به جای آن، می‌توانید از دستور symlinks(8) استفاده کنید که قادر به تبدیل پیوندهای مطلق به پیوندهای نسبی است.

متأسفانه نسخه‌های قدیمی‌تر شامل یک غلط املایی در کلمه occurrence بودند. این مورد اکنون تصحیح شده است (از نسخه 1.3)، که ممکن است بر اسکریپت‌های کاربر که خروجی نوشته‌شده توسط rdfind را تجزیه می‌کنند تأثیر بگذارد.

هنگامی که rdfind در حال خواندن است از دستکاری دایرکتوری‌ها خودداری کنید. rdfind در این وضعیت کاملاً آسیب‌پذیر است. به‌ویژه هنگام حذف یا ایجاد پیوندها، rdfind می‌تواند در معرض حمله پیوند نمادین (symlink attack) قرار گیرد. با احتیاط استفاده کنید!

برنامه rdfind با هدف حذف موارد تکراری در دایرکتوری‌های متعلق به یک کاربر نوشته شده است. این ابزار مالکیت و مجوزهای فایل را مدیریت نمی‌کند. اجرای آن در بین دایرکتوری‌هایی با چندین مالک مختلف توصیه نمی‌شود.

Paul Dreik 2006-2026، در دسترس از طریق rdfind@pauldreik.se
دستور rdfind در https://rdfind.pauldreik.se در دسترس است.

آیا rdfind برای شما مفید واقع شده است؟ پیامی برای من بفرستید! همواره شنیدن از افرادی که واقعاً از آن استفاده می‌کنند و اینکه آن را روی چه مجموعه‌های داده‌ای اجرا می‌نمایند، لذت‌بخش است.

چندین نفر با پیشنهادات و بهبودها یاری رسانده‌اند: Niels Möller، Carl Payne و Salvatore Ansani. همچنین تشکر از شما که برنامه را آزمایش کردید و بازخورد خود را فرستادید.

1.8.0 (تاریخ انتشار 2026-02-22)

این برنامه طبق انتخاب شما، تحت مجوز GPLv2 یا بالاتر توزیع می‌شود.

md5sum, sha1sum, find, symlinks

1.8.0 Feb 2026