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