تغییر نام فایل و ایجاد پوشه در لینوکس

 

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

خب اول از همه، اسم بعضی از فایل‌ها با کاراکتر فاصله space بود، من میخواستم این کاراکتر حذف بشه و با یک نقطه dotجایگزین کنم.

find . -name “* *” -type f | rename ‘s/ /./g’

این دستور اول تمام فایل‌های موجود در مسیر جاری که توی اسم اونها کاراکتر فاصله هست را پیدا میکنه، بعد خروجی را به دستور rename میده. اینجا هم با کاراکتر space را با کاراکتر dot جایگزین میکنه.

دستور rename در واقع یه اسکریپت با زبان پرل هست که میتونه یه جایگزین خوب برای mv باشه.

حالا که تغییر نام فایل‌ها انجام شد باید به اسم تمام فایلها یه فولدر درست کنم و هر فایل را به پوشه هم اسم خودش منتقل کنم.

find . -name “*.mkv” -exec sh -c ‘MYNDIR=`basename “$1” .mkv` ; mkdir “$MYNDIR” ; mv “$1” “$MYNDIR” ‘ _ {} \;

بخش اول هر فایل با پسوند mkv را پیدا میکنه بعد بخش اسم هر فایل رل بپن در نظر گرفتن پسوند جدا میکنه و در یک متغیر می‌ریزه. حالا با مقدار اون متغیر یه فولدر ایجاد میکنه. بعد از این دو تا دستور فقط کافی هست فایل مورد نظر را به پوشه ایجاد شده منتقل کنیم.

خب حالا من تعداد زیادی فولدر دارم که فیلم به اسم خودش داخل اون هست.