shell scipt تغییر نام فایل‌ها به شماره

فرض کنید تعدادی فایل در یک دایرکتوری با یک پسوند مشخص (مثل .jpg یا .pdf) دارید و می‌خواهید اسامی این فایل‌ها را بر اساس ترتیب (sort) نام آن‌ها به 1.jpg و 2.jpg و 3.jpg و … تغییر دهید طوری که اگر فایلی با یکی از این شماره‌ها موجود بود مثلا 5.jpg موجود بود نام این فایل را تغییر نداده و فایل بعدی را 6.jpg نامگذاری کند. اینکار با چند خط شل‌اسکریپت به سادگی امکان‌پذیر است:

n=1
for file in *.jpg; do
    echo $file
    prefix=1
    file_name=$n.jpg
    echo $file_name
    n=$(( $n+1 ))
    mv $file $file_name
done

کافیست در خط file_name=$n.jpg و for file in *.jpg; do پسوند .jpg را به پسوند مورد نظرتان تغییر دهید. همچنین اگر بخواهید چیزی قبل یا بعد از شماره‌گذاری نام جدید فایل‌هایتان بنویسید می‌توانید در همین خط به قبل یا بعد از $n به صورت Regex اضافه کنید. نکته‌ی بعدی این شل‌اسکریپت این است که نام فایل‌ها قبل و بعد از تغییر را در خروجی زیر هم چاپ می‌کند. از ویژگی‌های دیگر آن مقدار n در ابتدای شل‌اسکریپت است که نشان می‌دهد شماره‌گذاری فایل‌ها از چه عددی قرار است شروع شود.