حتماً توضیحات تکمیلی مسابقه (راجع به نحوه نمره‌دهی، معیارهای نهایی برای ورود به دوره نیمبو، و نحوه ارسال کدها) را در بلاگ Quera بخوانید: blog.quera.ir

سازماندهی رسانه


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

از شما می‌خواهیم یک اسکریپت Bash با نام organize.sh بنویسید که به این وضعیت سر و سامان دهد.

جزئیات🔗

نحوه اجرای اسکریپت به این صورت است:

bash organize.sh path/to/src/dir path/to/dst/dir
Bash

اسکریپت باید تصاویر و فیلم‌ها را طبق قواعد زیر در پوشه مقصد کپی کند.

  1. فایل‌ها باید بر اساس سال میلادی و همچنین بر اساس نوع (فیلم/عکس) دسته‌بندی شوند.
    • در پوشه مقصد به ازای هر سال باید یک پوشه به نام همان سال ایجاد شود.
    • داخل پوشه هر سال، تصاویر آن سال باید در پوشه‌ای به نام photos و فیلم‌های آن سال باید در پوشه‌ای به نام videos قرار بگیرند.
  2. در مورد تصاویری که عرض (width) بزرگ‌تر از ۱۰۲۴ پیکسل دارند، باید به جای نسخه اصلی این تصاویر، نسخه کوچک‌شده آن‌ها در مقصد کپی شود. این تصاویر باید با حفظ نسبت طول به عرض طوری تغییر اندازه دهند که عرض تصویر مقصد ۱۰۲۴ پیکسل باشد.
  3. تنها پوشه‌هایی که لازم است باید ایجاد شوند. بنابراین اگر برای یک سال هیچ تصویر یا فیلمی وجود ندارد، نباید پوشه آن سال ایجاد شود و یا اگر در یک سال هیچ فیلمی نداریم، نباید پوشه videos در پوشه آن سال ایجاد شود.
  4. معیار تشخیص سال برای هر فایل، زمان آخرین تغییر محتوای فایل است. (last data modification time)
  5. تشخیص عکس یا فیلم بودن فایل‌ها باید بر اساس پسوند فایل (به صورت case insensitive) طبق لیست‌های زیر صورت بگیرد.
    • پسوند تصاویر: jpg, jpeg, png
    • پسوند فیلم‌ها: mp4, avi, 3gp, mpeg, mkv, wmv, mov
  6. فایل‌هایی که (طبق قاعده قبلی) تصویر یا فیلم نباشند باید نادیده گرفته شوند و کپی نشوند.

مثال🔗

وضعیت پوشه اول: (در این مثال فرض کنید زمان modification فایل‌ها همان زمانی است که در نام فایل آمده است.)

src
├── IMG_2235.jpg   [modified time: 2018/01/28]
├── travel_photos
│   ├── 2018-11-09_11-27-14.3gp
│   ├── IMG_20171017_052418.jpg
│   ├── 20180311_214539.JPG
│   ├── IMG_2237.jpg   [modified time: 2018/02/21]
│   └── note.txt
└── vid1
    ├── images
    │   └── IMG_2014-01-12.JPG
    └── VID_20170425_184731.mp4
Plain text

وضعیت پوشه مقصد پس از اجرای اسکریپت:

dst
├── 2014
│   └── photos
│       └── IMG_2014-01-12.JPG
├── 2017
│   ├── photos
│   │   └── IMG_20171017_052418.jpg
│   └── videos
│       └── VID_20170425_184731.mp4
└── 2018
    ├── photos
    │   ├── 20180311_214539.JPG
    │   ├── IMG_2235.jpg
    │   └── IMG_2237.jpg 
    └── videos
        └── 2018-11-09_11-27-14.3gp
Plain text

نکات🔗

  • پوشه مقصد ممکن است قبل از اجرای اسکریپت وجود نداشته باشد. در این صورت اسکریپت شما باید پوشه مقصد را بسازد.
  • نام فایل‌هایی که کپی می‌شوند نباید تغییر کند.
  • به جز تصاویری که باید تغییر اندازه بدهند، محتوای سایر فایل‌ها نباید هنگام کپی شدن هیچ تغییری کند.
  • فایل‌های پوشه اول نباید تغییری کند.
  • فرض کنید برنامه ImageMagick بر روی سیستم نصب است.
  • یک فایل Zip شامل اسکریپت organize.sh را آپلود کنید.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.