انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: beautilinux در 16 خرداد 1398، 03:53 ب‌ظ

عنوان: کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 16 خرداد 1398، 03:53 ب‌ظ
یه فولدر دارم شامل حدودا 200 تا عکس با فرمت jpg هستش. یه بش اسکریپت میخوام بنویسم که حجم همه شونو کاهش بده و دسته جمعی اینکارو بکنه. بعدش بریزه داخل یه فولدر بنام archived. چطور باید اینکارو کنم؟ میشه لطف کنین بگین؟
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 16 خرداد 1398، 04:05 ب‌ظ
درود خدایان یونان بر تو باد!

اینطوری میشه:


#!/bin/bash
for img in "$@"
do

    convert "$img" -resize "1280x960>" $(basename "$img" .JPG)_new.jpg

done

mkdir archived
mv *_new.jpg archived

عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 16 خرداد 1398، 11:23 ب‌ظ
سلام Nelliel
میشه لطفن کدت رو توضیح بدی؟
نمیخوام صرف کپی پست بکنمش
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 17 خرداد 1398، 10:20 ب‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 17 خرداد 1398، 10:31 ب‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 18 خرداد 1398، 07:09 ب‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: mahdiar در 19 خرداد 1398، 10:05 ق‌ظ
سلام

این برنامه رو از 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)
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 21 خرداد 1398، 06:13 ب‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم

قاعدتا اون wild card  باید کار کنه .... لعنت به بش.
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 21 خرداد 1398، 10:05 ب‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
اسکریپت کار نمیکنه:
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory
اسکریپت رو کنار فایلای عکس گذاشتم

قاعدتا اون wild card  باید کار کنه .... لعنت به بش.
بش ایراد نداره که داداشی اسکریپت شما اشتباهه
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Silvio Dante در 22 خرداد 1398، 05:08 ق‌ظ
سلام،
این اسکریپت مسیر عکس‌ها رو به صورت آرگومان ازتون می‌گیره و کیفیت‌شون رو 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 رو با کاراکتر نقطه "." جایگزین کنین.
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 22 خرداد 1398، 11:12 ق‌ظ
نقل‌قول
بش ایراد نداره که داداشی اسکریپت شما اشتباهه

کار می‌کنه خیلی خوبم کار می‌کنه، تازه اون wild card هم درسته!

دلیل اینکه خطا میده اینه که شما بهش ورودی ندادید، گفته بودم که با Argument vector کار می‌کنه باید بهش Argument بدی.

مثلا اینطوری:


./mybash *

الان اون ستاره‌ی بالا Argument vector هست.
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 22 خرداد 1398، 11:19 ق‌ظ
سلام،
این اسکریپت مسیر عکس‌ها رو به صورت آرگومان ازتون می‌گیره و کیفیت‌شون رو 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
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 22 خرداد 1398، 11:34 ق‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟

می‌تونی کیفیتشون رو بیاری پایین که من خودم تغییر سایز رو ترجیح میدم.

نقل‌قول
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory


نمی‌تونه فایل‌های  new.jpg رو بفرسته چون چیزی ایجاد نشده که بفرسته.


پ.ن: من اون اسکریپت رو دیروز با موبایل نوشتم و تستش نکردم، (هنوزم نکردم) ولی کار می‌کنه. دیگه یه اسکریپت 4 خطی تست نمی‌خواد  ;)
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 22 خرداد 1398، 11:47 ق‌ظ
همه‌ی عکس‌ها رو به صورت  Argument vector ورودی میگیره و بعد با کاهش سایز حجمشون رو میاره پایین.
سایزشون رو نمیشه پایین نیاره؟

می‌تونی کیفیتشون رو بیاری پایین که من خودم تغییر سایز رو ترجیح میدم.

نقل‌قول
beautilinux@linuxer:~/Desktop$ bash a.sh
mv: cannot stat '*_new.jpg': No such file or directory


نمی‌تونه فایل‌های  new.jpg رو بفرسته چون چیزی ایجاد نشده که بفرسته.


پ.ن: من اون اسکریپت رو دیروز با موبایل نوشتم و تستش نکردم، (هنوزم نکردم) ولی کار می‌کنه. دیگه یه اسکریپت 4 خطی تست نمی‌خواد  ;)
دوست عزیز ارور رو ترجمه نکن که. منم میدونم ارور چی میگه :)
تا الانم ممنون زحمت کشیدین.
منتظرم دوستمون به سوال پاسخ بده اسکریپت ایشون کار میکنه
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Nelliel در 22 خرداد 1398، 12:34 ب‌ظ
نقل‌قول
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر.

پس بیا تستش کنیم:

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 چیه معلومه کار نمی‌کنه.


نقل‌قول
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی


فعلا که کار کرد!
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: beautilinux در 22 خرداد 1398، 01:33 ب‌ظ
نقل‌قول
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر.

پس بیا تستش کنیم:

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 چیه معلومه کار نمی‌کنه.


نقل‌قول
راستی هر برنامه ای باید تست بشه. چه ۲ سطر کد داشته باشه چه ۱۰۰۰ سطر. موفق باشی


فعلا که کار کرد!
من قصد بی احترامی نداشتم اگ لحنم تند بود عذرمیخوام.
شما زحمت کشیدین منم متشکرم ک وقت میذارین
عنوان: پاسخ : کاهش حجم عکسها دسته جمعی
ارسال شده توسط: Silvio Dante در 22 خرداد 1398، 11:47 ب‌ظ
سلام اگه بخوایم مسیر عکسها رو بصورت متغیر بهش بدیم چطور باید ویرایشش کرد؟ مثلا از کاربر بخواد مسیر رو وترد کنه و کاربر هم به اینصورت مسیر رو بده
/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