انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: beautilinux در 16 خرداد 1398، 03:53 بظ
-
یه فولدر دارم شامل حدودا 200 تا عکس با فرمت jpg هستش. یه بش اسکریپت میخوام بنویسم که حجم همه شونو کاهش بده و دسته جمعی اینکارو بکنه. بعدش بریزه داخل یه فولدر بنام archived. چطور باید اینکارو کنم؟ میشه لطف کنین بگین؟
-
درود خدایان یونان بر تو باد!
اینطوری میشه:
#!/bin/bash
for img in "$@"
do
convert "$img" -resize "1280x960>" $(basename "$img" .JPG)_new.jpg
done
mkdir archived
mv *_new.jpg archived
-
سلام Nelliel
میشه لطفن کدت رو توضیح بدی؟
نمیخوام صرف کپی پست بکنمش
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم
-
سلام
این برنامه رو از software center خود اوبونتو نصب کنید خیلی راحت و گرافیکیه
Converseen
اینم امکاناتش
• Carry out a single or a multiple conversion
• Resize one or multiple images
• Compress images for your web pages
• Rotate and flip images
• Rename a bunch of images using a progressive number or a prefix/suffix
• Selecting a resampling filter to resize images
• Convert an entire PDF to a bunch of images
• Extract an image from a Windows icon file (*ico)
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم
قاعدتا اون wild card باید کار کنه .... لعنت به بش.
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم
قاعدتا اون wild card باید کار کنه .... لعنت به بش.
بش ایراد نداره که داداشی اسکریپت شما اشتباهه
-
سلام،
این اسکریپت مسیر عکسها رو به صورت آرگومان ازتون میگیره و کیفیتشون رو 30 درصد کاهش میده و داخل دایرکتوریای به نام archived ذخیره میکنه:
#!/bin/bash
IFS=$'\n'
files=`ls -1 $1`
archivedDir=$1/'archived'
mkdir $archivedDir
for img in $files; do
convert $1/$img -quality 70 $archivedDir/$img
done
فقط اگه میخواین به جای مسیر دادن با آرگومان، اسکریپت رو کنار عکسها بذارین و اجرا کنین کافیه $1 رو با کاراکتر نقطه "." جایگزین کنین.
-
بش ایراد نداره که داداشی اسکریپت شما اشتباهه
کار میکنه خیلی خوبم کار میکنه، تازه اون wild card هم درسته!
دلیل اینکه خطا میده اینه که شما بهش ورودی ندادید، گفته بودم که با Argument vector کار میکنه باید بهش Argument بدی.
مثلا اینطوری:
./mybash *
الان اون ستارهی بالا Argument vector هست.
-
سلام،
این اسکریپت مسیر عکسها رو به صورت آرگومان ازتون میگیره و کیفیتشون رو 30 درصد کاهش میده و داخل دایرکتوریای به نام archived ذخیره میکنه:
#!/bin/bash
IFS=$'\n'
files=`ls -1 $1`
archivedDir=$1/'archived'
mkdir $archivedDir
for img in $files; do
convert $1/$img -quality 70 $archivedDir/$img
done
فقط اگه میخواین به جای مسیر دادن با آرگومان، اسکریپت رو کنار عکسها بذارین و اجرا کنین کافیه $1 رو با کاراکتر نقطه "." جایگزین کنین.
سلام اگه بخوایم مسیر عکسها رو بصورت متغیر بهش بدیم چطور باید ویرایشش کرد؟ مثلا از کاربر بخواد مسیر رو وترد کنه و کاربر هم به اینصورت مسیر رو بده
/Home/xuser/dir
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟
میتونی کیفیتشون رو بیاری پایین که من خودم تغییر سایز رو ترجیح میدم.
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
نمیتونه فایلهای new.jpg رو بفرسته چون چیزی ایجاد نشده که بفرسته.
پ.ن: من اون اسکریپت رو دیروز با موبایل نوشتم و تستش نکردم، (هنوزم نکردم) ولی کار میکنه. دیگه یه اسکریپت 4 خطی تست نمیخواد ;)
-
همهی عکسها رو به صورت Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟
میتونی کیفیتشون رو بیاری پایین که من خودم تغییر سایز رو ترجیح میدم.
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
نمیتونه فایلهای new.jpg رو بفرسته چون چیزی ایجاد نشده که بفرسته.
پ.ن: من اون اسکریپت رو دیروز با موبایل نوشتم و تستش نکردم، (هنوزم نکردم) ولی کار میکنه. دیگه یه اسکریپت 4 خطی تست نمیخواد ;)
دوست عزیز ارور رو ترجمه نکن که. منم میدونم ارور چی میگه :)
تا الانم ممنون زحمت کشیدین.
منتظرم دوستمون به سوال پاسخ بده اسکریپت ایشون کار میکنه
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی
-
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر.
پس بیا تستش کنیم:
12:10:11 hossein@ArchLinux ~ du -sh Images
13M Images
12:10:33 hossein@ArchLinux ~ cd Images
12:10:40 hossein@ArchLinux Images touch mybash
12:10:49 hossein@ArchLinux Images chmod u+x mybash
12:10:56 hossein@ArchLinux Images nano mybash
12:11:02 hossein@ArchLinux Images cat mybash
#!/bin/bash
for img in "$@"
do
convert "$img" -resize "1280x960>" $(basename "$img" .JPG)_new.jpg
done
mkdir archived
mv *_new.jpg archived
12:11:07 hossein@ArchLinux Images ./mybash *.jpg
12:11:26 hossein@ArchLinux Images du -sh archived
1.4M archived
12:11:46 hossein@ArchLinux Images
13 مگ شد 1.4 مگ! یعنی کار کرد، میتونی هم به جای resize سوییچ quality رو استفاده کنی.
سلام اگه بخوایم مسیر عکسها رو بصورت متغیر بهش بدیم چطور باید ویرایشش کرد؟ مثلا از کاربر بخواد مسیر رو وترد کنه و کاربر هم به اینصورت مسیر رو بده
با read از کاربر داده میگیری و var name رو میدی جایی که مورد نیازه.
همون اسکریپتی که مهران نوشته بود رو ویرایش میکنم:
#!/bin/bash
IFS=$'\n'
read -p "Directory path: " response
cd $response
files=`ls -1 $1`
archivedDir=$1/'archived'
mkdir $archivedDir
for img in $files; do
convert $1/$img -quality 70 $archivedDir/$img
done
منتظرم دوستمون به سوال پاسخ بده اسکریپت ایشون کار میکنه
اگه ارزش وقتی که دیگران برات میذارن رو بدونی و پیامهاشون رو با دقت بخونی (اشاره به پست #3) متوجه میشی که اسکریپت من هم کار میکرد ولی وقتی شما حتی به خودت زحمت نمیدی سرچ کنی که argV چیه معلومه کار نمیکنه.
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی
فعلا که کار کرد!
-
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر.
پس بیا تستش کنیم:
12:10:11 hossein@ArchLinux ~ du -sh Images
13M Images
12:10:33 hossein@ArchLinux ~ cd Images
12:10:40 hossein@ArchLinux Images touch mybash
12:10:49 hossein@ArchLinux Images chmod u+x mybash
12:10:56 hossein@ArchLinux Images nano mybash
12:11:02 hossein@ArchLinux Images cat mybash
#!/bin/bash
for img in "$@"
do
convert "$img" -resize "1280x960>" $(basename "$img" .JPG)_new.jpg
done
mkdir archived
mv *_new.jpg archived
12:11:07 hossein@ArchLinux Images ./mybash *.jpg
12:11:26 hossein@ArchLinux Images du -sh archived
1.4M archived
12:11:46 hossein@ArchLinux Images
13 مگ شد 1.4 مگ! یعنی کار کرد، میتونی هم به جای resize سوییچ quality رو استفاده کنی.
سلام اگه بخوایم مسیر عکسها رو بصورت متغیر بهش بدیم چطور باید ویرایشش کرد؟ مثلا از کاربر بخواد مسیر رو وترد کنه و کاربر هم به اینصورت مسیر رو بده
با read از کاربر داده میگیری و var name رو میدی جایی که مورد نیازه.
همون اسکریپتی که مهران نوشته بود رو ویرایش میکنم:
#!/bin/bash
IFS=$'\n'
read -p "Directory path: " response
cd $response
files=`ls -1 $1`
archivedDir=$1/'archived'
mkdir $archivedDir
for img in $files; do
convert $1/$img -quality 70 $archivedDir/$img
done
منتظرم دوستمون به سوال پاسخ بده اسکریپت ایشون کار میکنه
اگه ارزش وقتی که دیگران برات میذارن رو بدونی و پیامهاشون رو با دقت بخونی (اشاره به پست #3) متوجه میشی که اسکریپت من هم کار میکرد ولی وقتی شما حتی به خودت زحمت نمیدی سرچ کنی که argV چیه معلومه کار نمیکنه.
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی
فعلا که کار کرد!
من قصد بی احترامی نداشتم اگ لحنم تند بود عذرمیخوام.
شما زحمت کشیدین منم متشکرم ک وقت میذارین
-
سلام اگه بخوایم مسیر عکسها رو بصورت متغیر بهش بدیم چطور باید ویرایشش کرد؟ مثلا از کاربر بخواد مسیر رو وترد کنه و کاربر هم به اینصورت مسیر رو بده
/Home/xuser/dir
مثل ویرایشی که حسین نوشت میتونید یه input بذارین و مقدارشو داخل یه متغیر ذخیره کنید و در نهایت به جای $1 مقدار اون متغیر رو جایگزین کنین. همچین چیزی:
#!/bin/bash
IFS=$'\n'
read -p 'enter your path: ' path
files=`ls -1 $path`
archivedDir=$path/'archived'
mkdir $archivedDir
for img in $files; do
convert $path/$img -quality 70 $archivedDir/$img
done