یک اسکریپت Bash بنویسید که در یک دایرکتوری مشخص تمام فایل‌های بزرگ‌تر از 10 مگابایت را پیدا کرده و لیستی شامل مسیر کامل، اندازهٔ قابل‌خواندن و تاریخ آخرین تغییر هر فایل را در یک فایل خروجی ذخیره کند.

45.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 05:55

1.0

برای حل این مسئله از دستورات استاندارد لینوکس مثل find، du و stat استفاده کنید؛ اسکریپت را با یک shebang آغاز کنید، دایرکتوری هدف را از آرگومان ورودی یا دایرکتوری جاری بگیرید، سپس با find -type f -size +10M مسیرها را استخراج کنید. برای نمایش اندازهٔ قابل‌خواندن از du -h یا numfmt و برای تاریخ آخرین تغییر از stat --format='%y' بهره ببرید؛ برای مدیریت نام فایل‌هایی که فاصله دارند از -print0 و xargs -0 یا حلقهٔ while IFS= read -r -d '' استفاده کنید. اسکریپت را اجراپذیر کنید (chmod +x) و خروجی را در فایل متنی ذخیره یا مرتب کنید (مثلاً با sort -h).

توسط پژوهشگر در 198 روز قبل ساعت 05:55
دسته بندی ها: Bash Scripting Bash Scripting for beginner
arash در 198 روز قبل ساعت 05:56

برای جلوگیری از مشکلات با نام‌‌فایل‌هایی که فاصله یا کاراکترهای جدید خط دارند از find ... -print0 و یک حلقه while IFS= read -r -d '' استفاده کنید، یا xargs -0؛ این روش امن‌تر از تقسیم بر فضا است. توجه داشته باشید که دستور stat در توزیع‌های مختلف سینتکس متفاوت دارد (مثلاً macOS از -f استفاده می‌کند)، پس برای سازگاری یا چک کردن محیط اسکریپت شرط بگذارید یا از GNU coreutils استفاده کنید. هنگام پردازش درخت‌های بزرگ، اجرای du/stat برای هر فایل می‌تواند کند باشد و خطاهای دسترسی ممکن است رخ دهد؛ برای سرعت بهتر یکی از خروجی‌های find (مثلاً -printf '%p\0') را با ابزارهای کم‌هزینه‌تر پردازش کنید یا خطاها را به لاگ بفرستید. در نهایت خروجی را ابتدا در یک فایل موقت بنویسید و بعد با sort -h مرتب و به فایل نهایی منتقل کنید تا از خراب شدن خروجی در صورت قطع ناگهانی جلوگیری کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری