منبع اصلی نوشتار زیر در این لینک قرار دارد

تغییر نام چند هزار فایل

سلام
خیلی وقت بود که مطلبی ننوشتم… مشغله زیاد نمیذاره…
و حالا!
چندین هزار سند داریم که اسکن شده و با نام صاحب سند ذخیره شده‌اند!
حالا جریان از چه قراره؟ می خوایم تمامی اسناد رو به شماره پرونده شخص تغییر نام بدیم!!
راه حل اول، تغییر نام عکس ها بصورت دستی: اگر فرض کنیم ۱۰٫۰۰۰ سند داریم و پیدا کردن تصویر هر سند و تغییر نام اون بصورت دستی بیست ثانیه زمان ببره، چیزی بیش از ۵۰ ساعت کار مفید لازمه تا همه اسناد تغییر نام داده بشن…!!
حالا میریم سروقت راه حل دوم: اسکریپتی می نویسیم که این کار رو انجام بده!
اول میریم سراغ فایلی که مشخصات همه توش موجوده! دوتا ستون مربوط به نام و شماره پرونده رو انتخاب کرده و یه خروجی csv ازش میگیریم که میشه چیزی شبیه این:


۱۳ هادی
۱۴ مسعود
۱۵ امیر
۱۶ ساسان
۱۷ علیرضا

خب حالا برنامه!
دلم میخواست که با پایتون بنویسمش ولی نشد! پس بش!
تو خط ۶ بعد از متغیر name و num عبارت jpg. رو قرار دادم چون لیست تنها شامل نام میشه ولی فایل ها با فرمت jpg ذخیره شدن و بعد از تغییر نام هم باید مجددا پسوند رو داشته باشه تا عکس ها قابلیت نمایش داشته باشه…


#!/bin/bash
while read line
do
name=$(echo $line | awk \'{print $1}\')
num=$(echo $line | awk \'{print $2}\')
mv -v \"$name\".jpg \"$num\".jpg
done < namedb.csv

حالا کافیه که این کد رو توی یه فایل ذخیره کرده و بهش مجوز اجرا بدیم... و بعد هم اجرا...
حتی میشه اندازه گرفت که طی چه زمانی کار تغییر نام انجام میشه...!


chmod +x rename-script
time ./rename-script
`هادی.jpg\' -> `13.jpg\'
`مسعود.jpg\' -> `14.jpg\'
`امیر.jpg\' -> `15.jpg\'
`ساسان.jpg\' -> `16.jpg\'
`علیرضا.jpg\' -> `17.jpg\'
.
.
.
.
real 1m14.505s
user 0m13.294s
sys 0m25.628s

حیرت آوره! کمتر از دو دقیقه...! البته برنامه اصلی کمی با برنامه ای که نوشتم فرق داره! چون ساختار اسامی این شکلی نیست! اکثر از اسامی دو بخشی هستن و برخی ۳ بخشی...! حتی ممکنه که ۴ یا بیشتر هم بشه... فرق زیادی نداره و فقط خط ۴ کمی تغییر میکنه...
در پایان از جادی که با توجه مشغله زیادش برام وقت گذاشت و مهدی شیخ حسینی، که کمک کرد تا کارم رو انجام بدم سپاسگذارم...
موفق و لینوکسی باشید \':)\'



برچسب ها : , , , , , , ,