اجرای یک فرمان بر روی دسته‌ای از فایل‌ها در لینوکس

خوب. قضیه اینه که می‌خوام یه مقاله که با TeX نوشتم را منتشر کنم. اما تمامی تصاویری که تهیه کرده‌ام به فرمت png هست در صورتیکه ژورنال محترم این تصاویر رو به فرمت eps می‌خواد.
برای تبدیل فرمت تصاویر به فرمت eps برنامه sam2p رو باید نصب کنم:
[bash light=”true”]sudo apt-get install sam2p[/bash]
خوب. بعد نصب sam2p سعی میکنم فایل‌ها رو یکی یکی تبدیل کنم. اما این کار حوصله سر بر و زمانبره. واسه همین هم میرم سراغ سرچ برای اینکه بتونم همه فایل‌ها رو با یه دستور تبدیل کنم. چیزی که گیرم میاد دستور for do done هستش. مثلا
[bash light=”true”]for file in *; do echo $file; done[/bash]
شروع میکنه یکی یکی فایلهای دایرکتوری جاری رو میریزه تو متغیر فایل و بعد هم نمایششون میده. قبل اینکه مرحله بعد رو بگم، یه اشاره بکنم که sam2p دو تا پارامتر می‌گیره: اولی اسم فایلیه که باید تبدیل بشه (مثلا a.png( و دومی اسم فایل بعد تبدیل شدن (مثلا a.eps(.
با این اوصاف باید یه جوری حالی دستور for بکنم که بالام جان پارامتر دوم دستور sam2p باید پسوندش یه چیز دیگه باشه. مجدداگوگل میکنم و میرسم به دستور basename. این دستور اسم یه فایل رو بدون پسوند بر میگردونه. مثلا حاصل
[bash light=”true”]basename salam.txt .txt[/bash]
یه salam خالیه. و مثلا حاصل عبارت
[bash light=”true”]basename salam.txt .txt.jpg[/bash]
salam.jpg خواهد بود.
خوب حالا وقتشه که همه چیز رو با هم ترکیب کنم:
[bash light=”true”]for file in *.png;do sam2p $file basename $file .png.eps; done[/bash]
و با یه دستور کلی فایل به سادگی تغییر فرمت میدن.

جا داره از جادی هم تشکر کنم واسه اینکه با صمیمیت نوشته‌هاش شوق به اشتراک گذاشتن رو تو آدم ایجاد می‌کنه.