لطفا وارد شوید یا ثبت‌نام کنید تا به انجمن‌ها دسترسی کامل داشته باشید.



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
2011-11-29, 03:43 AM,
ارسال : #1
کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
سلام من قصد دارم یه سری عکس رو از دایرکتوری بخونم و به یه انکدر بدم، انکدر (که برنامه شو به شکل دستور دارم) فایل رو تبدیل کرده و (محض سادگی) با نام مناسب در همون پوشه بذاره

شبه کدش اینه میشه:
کد :
List = ls(PicDir)
for List
encode List(i) > some_approperiate_name
end

اینم کدی که دست و پا شکسته نوشتم:

کد :
#!/bin/bash
for file in /PicDic
do
        Encode $file > $file.format # I want to give foo.raw to the encoder and get foo.format
done

الان یه سری مشکل کلی دارم مثلا اینکه چطور میتونم خروجی بگیرم و چطور میتونم اسم فایل خروجی رو با فرمتی که گفتم به تابع بدم تا در خروجی بذاره...
من هنوز مطمئن نیستم ولی تابع ممکنه از اون انواعی باشه که خروجی و ورودی رو تحت آپشن های -i و -o میگیرن...در این صورت چطور میتونم دستور رو در هر حلقه به نحوه درستی به بش بدم؟
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-11-29, 09:50 AM,
ارسال : #2
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
یک اسکریپت ساده مثل این :
کد :
#!/bin/bash

for i in `ls | grep -v script.sh`
do
    rename 'y/a-z/A-Z/' $i
done

فقط حواست باشه که من اسم این برنامه رو گذاشتم script.sh و توی همون پوشه که فایل ها توش هست گذاشتم و اجرا کردم .
در معنا کدی که شما می خواهید چیزی شبیه اینه :
کد :
#!/bin/bash

for i in `ls | grep -v script.sh`
do
Encode $file > $(rename 'y/a-z/A-Z/' $i)
rename .format .newformat *.format
done
اولی Encode میکنه ولی نام فایل رو به حروف کوچک تغییر میده !
دومی هم بعد از تبدیل آنها رو به فرمت اصلی تغییر نام میده .

Debian GNU/Linux System Administrator
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-11-29, 12:00 PM,
ارسال : #3
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
ممنون دوست عزیز

تقریبا دستم اومد که چیکار کنم، بخصوص اون راه حل ls جالب بود.
اینم می‌شه، البته غیر حرفه ای‌ هست:

کد :
i=1
cd ~/Desktop/test/FIL/
for item in *
do
echo "Item $((i++)) : $item"
done
واسه این دایرکتوری اسکریپت فرق می‌کنه
با این حل بازم خطا میگیرم، واسه همین کارو ساده کردم. فرض کردم از ffmpeg استفاده می‌کنم
بنابرین یه چیزی تو این مایه می‌شه

کد :
#!/bin/bash
k=1;
for item in 'ls |grep -v script.sh'

do
    ffmpeg -i $item $((k++)).mp3
done

ولی‌ باز ارور میده، فرض کردم چند تا فایل mp4 دارم و می‌خوام به mp3 تبدیل کنم، انکدری که استفاده می‌کنم احتمالا تا حد زیادی شبیه اینه

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

شاید لازم باشه یه چند ساعت وقت بذارم و مقدمات باش رو از اول یاد بگیرم
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-11-29, 02:28 PM,
ارسال : #4
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
مشکل شما اگه فقط دستور ffmpeg هستش . از این میتونی استفاده کنی :
کد :
#!/bin/bash
files=$(ls | grep -v script.sh)
for i in $files
do
ffmpeg -i $i $i.format
done

به جای format فرمت مورد نظر رو بزار مثلا : avi .
یادم میاد یه چیزی بود به نام basename که باهاش میشد فرمت فایل رو از اسمش جدا کرد ! الان هیچی فکر میکنم چیزی یادم نمیاد !

Debian GNU/Linux System Administrator
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-11-29, 03:25 PM,
ارسال : #5
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
این هم یه نگاه بندازید.
<!-- m --><a class="postlink" href="http://linuxmotto.ir/blog/?p=215">http://linuxmotto.ir/blog/?p=215</a><!-- m -->

Don't bother, we're using GNU/Linux everywhere, even there Big Grin
Linuxmotto
گروه کاربران لینوکس اصفهان
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-11-29, 04:19 PM,
ارسال : #6
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
خیلی ممنون دوستان
مشکلم تقریبا دیگه حل شده این مشکل خروجی ls و متغیر IFS جالب بود...

یه مشکلی هم که توی قبل داشتم این بود که دقیقا نمیدونستم چجوری خروجی ls رو توی متغیر بریزم (از روی مثالها از کوتیشن استفاده میکردم که جواب نمیداد) ولی با توجه به کدی که جناب mah454 گذاشتن مشکلم حل شد

مرسی
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-12-03, 02:56 AM,
ارسال : #7
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
دوست گرامی تا چشمم به ffmpeg خورد یاد یه نوستالوژی افتادم گفتم شاید بد نباشه کد من رو هم ببینی:
البته خیلی وقته از این کد می‌گذره....
کد :
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i  in `ls -A ./x/*.mp3`  ; do
r=`expr substr $i      1      $(($(expr length $i - 4 )))`;
/opt/ffmpeg/bin/ffmpeg -i $i  $r.ogg  ;
done;
IFS=$SAVEIFS

اعتراض به عملکرد دولت در زمینه IT
اینترنت حداقل 5M + یک laptop حق مسلم هر ایرانیست.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-12-03, 08:05 AM,
ارسال : #8
Re: کمک در نوشت یک اسکریپت بش جهت اجرای یک دستور در حلقه
ممنون دوست عزیز
الان واسه یه کار چندین راه حل دارم، هنوز توی بش اسکریپت مبتدی ام و فقط کدها رو ویرایش میکنم ولی کم کم دارم راه میافتم و میخوام واسش وقت بذارم....یکی از قشنگیای لینوکس همینه، بخصوص اینکه یه حالت هماهنگی با کل سیستم عامل و همه ی ابزارها وجود داره، بش اسکریپت فقط چسب قضیه است، کلی ابزار و امکانات از طریق پکیجهای مختلف فراهمه...و این چیزی هست که سیستم عاملهای دیگه توش ضعف دارن

من دو جور انکدر داشتم، یکی که مثل ffmpeg اسم خروجی رو به عنوان ورودی میگرفت و یکی که باید stdout میکردم...
الان واسه هر دو تیپش کدها رو دارم و خیلی تمیز کارمو انجام میده:
به کمک چیزائی که از دوستان یاد گرفتم کارمو گسترش میدم و بعد از انکدکردن، محاسبه ی پارامترها رو هم توی بش انجام میدم و همونجا ازش یه کد TeX تولید میکنم و خروجیشو وسط یه فایل تک میذارم و خروجی PDF مقاله رو حاضر و آماده تولید میکنم... خیلی جالب میشه اینجوری : کمی که ورودی ها رو تغییر بدم یا داده ها رو عوض کنم کل مقاله خودبخود آپدیت میشه (وااااااااااای چه کیفی میده)
فکر کنم به استادم نشون بدم، ذوق مرگ شه، بیچاره همون TeX رو هم بلد نیست :lol:
امیدوارم وقت بذارم و انجامش بدم...
اگر انجام شد حتما کدشو همینجا میذارم که دوستانی اگه نیاز داشتن استفاده کنن (هرچند واسه افراد حرفه ای واقعا کار ساده ای هست) ولی این بهترین شیوه ی یادگیری هست


Linux is awesome
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


رفتن به انجمن :


کاربران در حال مشاهده موضوع : 1 مهمان