نیاز به حل تمامی سوالات مسابقه نیست و از هر قسمت هر مقدار که می‌توانید حل کنید. توجه داشته باشید که سوالات الگوریتمی و پیاده‌سازی به صورت صفر و یکی تصحیح می‌شوند و دیگر سوالات نمره خواهند گرفت. لطفا فرم زیر را پر کنید. https://quera.ir/general_form/QU9jHL/

لینوکس، Directory Checksum


همانطور که می‌دانید در لینوکس با استفاده از دستور md5sum، می‌توان هش MD5 محتوای یک فایل را به دست آورد. می‌توان از این مقدار برای بررسی مساوی بودن محتوای دو فایل استفاده کرد، به این صورت که اگر مقدار هش دو فایل برابر باشد به احتمال بسیار زیاد محتوای آن فایل‌ها با هم کاملاً یکسان است.

اکنون ما می‌خواهیم دو پوشه را با هم مقایسه کنیم و ببینیم که آیا محتوای این دو پوشه کاملاً یکسان است یا خیر. از نظر ما دو پوشه یکسان هستند اگر اولاً ساختار داخلی دو پوشه (پوشه‌بندی‌ها و مسیر فایل‌ها) دقیقاً یکسان باشد و محتوای فایل‌های متناظر کاملاً یکسان باشد. یعنی هر دو فایل متناظر، آدرس نسبی یکسانی داشته باشند (نسبت به پوشه خود، در مسیر یکسانی قرار گرفته باشند) و محتوای یکسانی نیز داشته باشند. (اطلاعاتی مانند owner, permission, time فایل‌ها را در نظر نمی‌گیریم).

بنابراین در مثال زیر، با فرض یکسان بودن محتوای فایل‌های با نام یکسان، دو پوشه dir1 و dir2 یکسان نیستند چون ساختار داخلی متفاوتی دارند. اما dir1 و dir3 با این که نام‌های متفاوتی دارند، یکسان هستند (زیرا محتوای یکسانی دارند).

dir1
├── file1
└── file2

dir2
├── file1
└── file2
    └── file2

dir3
├── file1
└── file2
Plain text

برای این مقایسه می‌خواهیم با استفاده از md5sum یک هش برای هر پوشه به دست بیاوریم و برای مقایسه پوشه‌ها، هش پوشه‌ها را با هم مقایسه کنیم.

یک اسکریپت Bash با نام md5sum4dir.sh بنویسید که آدرس یک پوشه را بگیرد و در خروجی، هش آن پوشه را بنویسد. هش تولیدشده باید مانند خروجی md5sum یک رشته hex به طول ۳۲ باشد.

$ bash md5sum4dir.sh path/to/some/dir
b459813010c9760d7ba32bed678c3752
Bash

اسکریپت md5sum4dir.sh را Zip کنید و به عنوان پاسخ ارسال کنید. دقت کنید که اسکریپت باید مستقیماً در ریشه فایل Zip باشد (در هیچ پوشه‌ای نباشد).

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.