شما هنوز به سیستم وارد نشده اید.

#26 2016-04-08 20:21:39

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 811

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

نتیجه من بعد شش دقیقه و البته زدن یه اینتر:

[saeed@saeed Scripts]$ ./saeed.sh 

http://: Invalid host name.

http://: Invalid host name.

آفلاین

#27 2016-04-08 20:24:35

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

دوستان دیگه هم اگه لطف کنن و نتیجه رو اعلام کنن ممنون میشم.
روی سیستم من همه چیز درسته(مانجارو) قاعدتا باید روی سیستم سعید هم کار کنه، ولی نمیدونم کجاش مشکل داره


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#28 2016-04-09 14:20:53

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

واسه منم همین ارور رو میده. فکر کنم باید خروجی

 $ pacman -Sup --color=never | sed -n '2,$ p'

رو توی تابع اول، خط به خط به

 $ wget --spider

بدید.

آفلاین

#29 2016-04-09 14:24:17

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

این چطور؟

#!/usr/bin/bash

pacmanlogs="$(pacman -Sup --color=never | sed -n '2,$ p')"

function getSize(){
	local wgetlogs="$(wget --spider "$1")"
	awk '/^Length/ {print $2}' <<< "$wgetlogs"
}

function totalSize(){
	if [ -n "$1" ];then
		while read -r LINK
		do
			getSize "$LINK"
		done <<< "$1" | paste -sd+ | sed -e 's/^/\(/' -e 's/$/\)\/\(1024*1024\)/' | bc -l
	else
		echo "0"
	fi
}

function getresult(){
	local result=$(totalSize "$pacmanlogs")
	if [ $result -ne 0 ];then
		echo "Next Update Size: $result MiB."
		return 0
	else
		echo "there is nothing to do"
		return 1
	fi
}		
getresult

Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#30 2016-04-09 15:00:24

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 811

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

یه سری خروجی ها رو روی صفحه میاره و بعدش میزنه:(این خطوط آخر خروجی من بود احسان جان)

HTTP request sent, awaiting response... 200 OK
Length: 17216 (17K) [application/x-xz]
Remote file exists.

(standard_in) 1: syntax error
./saeed.sh: line 23: [: -ne: unary operator expected
there is nothing to do

در صورتی که :

Total Download Size:   158.56 MiB
Total Installed Size:  657.64 MiB
Net Upgrade Size:        0.89 MiB

:: Proceed with installation? [Y/n] 

آفلاین

#31 2016-04-09 15:11:35

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

چون من فعلا سیستمم به روزه، اجبارا نمیتونم بررسی کنم ببینم کجای اسکریپت میلنگه، اگه pacmanlogs رو echo کنی تا محتویاتش رو داشته باشم فکر میکنم بتونم درستش کنم.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#32 2016-04-09 20:47:30

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

به نظر من مشکل ازین خطه:

 $ awk '/^Length/ {print $2}' <<< "$wgetlogs" 

ظاهرا awk  توی اون خط اصلا چیزی رو نمیخونه.  اگه بشه خروجی

 $ wget --spider $(pacman -Sup) 

رو توی یه فایل متنی ریخت (مثلا توی دایرکتوری تمپ) به نظرم مساله ما حل میشه. من فقط برای آزمایش کد احسان رو یه کم تغییر دادم:

#!/bin/bash
getsize(){
	wgetlogs=$(wget --spider $(pacman -Sup))
	awk '/^Length/ {print $2}' <<< "$wgetlogs"
}
getsize > /tmp/size
total=$(awk '{sum+=$1} END {print sum}' /tmp/size)
if [ -s /tmp/size ]; then
	echo "$total Kbs new updates."
else 
	echo "No updates."
fi

و به نظرم میرسه که wget --spider رو ظاهرا نمیشه ریخت تو یه فایل متنی! و برای همین یه فایل متنی خالی وجود داره و علیرغم وجود آپدیت میگه No update. big_smile

آخرین ویرایش توسط Arcush (2016-04-09 20:52:08)

آفلاین

#33 2016-04-09 20:58:58

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

پیشنهاد آرکوش خوبه ولی من خودم توی اسکریپتام زیاد با بیرون دادن فایل حال نمیکنم رو همین حساب اینجوری نوشته بودمش.
اما یه راهنمایی برای آرکوش عزیز، دلیل اینکه خروجیه wget رو نمیتونی اینجوری بریزی توی یه فایل اینه که این خروجی ای که میبینی  stdout نیست بلکه stderr هستش پس کافیه استریم 2 رو هم بریزی توی همون فایل.
مورد بعدی اینه که استفاده از پکمن اینجوری اشتباهه، چون پکمن توی خط اولش یه نوشته اضافی هم داره که مطمئنا wget  رو به چالش میندازه، متاسفانه تا زمان آپدیت بعدی ای که مانجارو بده بیرون باید منتظر بمونم تا بتونم مشکل رو حل کنم.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#34 2016-04-09 21:05:55

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

تو فوق العاده ای احسان. دقیقا مشکل باید همین باشه.  منم اسکریپتای استاندارد تو رو ترجیح میدم. big_smile

آفلاین

#35 2016-04-09 21:29:14

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

Arcush نوشته است که:

تو فوق العاده ای احسان. دقیقا مشکل باید همین باشه.  منم اسکریپتای استاندارد تو رو ترجیح میدم. big_smile

انجام وظیفه ست


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#36 2016-04-09 21:42:47

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

لطف سرشارته احسان عزیز. اینم کد کثیف من که کار می کنه:

#!/bin/bash
getsize(){
	wgetlogs=$(wget --spider $(pacman -Sup) 2> /tmp/output_wget_spider 2>&1 )
	awk '/^Length/ {print $2}' <<< "$wgetlogs"
}
getsize  > /tmp/size
total=$(awk '{sum+=$1} END {print sum}' /tmp/size)
if [ -s /tmp/size ]; then
	echo "$total Kbs new updates."
else 
	echo "No updates."
fi

آفلاین

#37 2016-04-09 22:51:23

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 811

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

عیسی جان کارت عالیه..تقریبا تو شش ثانیه حجم سری بعد رو برام در آورد که خوب خیلی ایده آله برام.. smile
فقط یه پیشنهاد..نمیشد به جای اینکه بریزیم تو فایل بریزیم تو آرایه هم چین چیزی..البته من بش اسکریپتینگم در حد راه رفتن نوزاده(D:)ولی اگه بشه با یه ساختمان داده درست درمون پیاده سازی ش کرد هم خوبه.
هر چند همین الان تست گرفتم عیسی جان..وبه I.auc هم اضافه ش کردم.همین طور یکمم تغییرش دادم که اگه حجم سری بعد در حد مگابایت نیست کیلو بایت بزنه و اگه در حد مگابایته بزنه MB.
احسان عزیز و عیسی گل..دست جفتتون درد نکنه..تشکر فراواااااان

آفلاین

#38 2016-04-09 23:36:30

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

دوستانی که سیستمشون نیاز به آپدیت داره لطفا یه خروجی از pacman -Sup بذارن اینجا.
من کنجکاو شدم ببینم مشکل اسکریپت قبلی چی بود.


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#39 2016-04-10 01:06:49

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

سعیدجان بیخیال. big_smile ماشالا احسان فوق العاده هست و انشالا که همچنان ازش یاد بگیریم. من اون فایلای اضافی رو پاک کردم و به این کد  رسیدم که کار هم می کنه:

#!/bin/bash
getsize=$(awk '/^Length/ {print $2}' <<< "$(wget --spider $(pacman -Sup) 2> /tmp/output_wget_spider 2>&1 )")
total=$(awk '{ for(i=1; i<=NF;i++) j+=$i; print j; j=0 }' <<< $getsize)
if [ ! -z "$total" ]; then
	echo "$total Kbs new updates."
else 
	echo "No updates."
fi

احسان جان اینم خروجی ای هست که خواسته بودی:

 $ pacman -Sup
:: Starting full system upgrade...
http://mirror.de.leaseweb.net/archlinux/extra/os/i686/alsa-lib-1.1.1-1-i686.pkg.tar.xz
http://mirror.de.leaseweb.net/archlinux/extra/os/i686/alsa-plugins-1.1.1-1-i686.pkg.tar.xz
http://mirror.de.leaseweb.net/archlinux/extra/os/i686/alsa-utils-1.1.1-1-i686.pkg.tar.xz
http://mirror.de.leaseweb.net/archlinux/extra/os/i686/python-urllib3-1.15-1-any.pkg.tar.xz

آفلاین

#40 2016-04-10 01:27:18

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

بالاخره فهمیدم کجا سوتی داده بودم، خط ۲۳ توی اسکریپت قبلی با این فرض نوشته شده بود که سایز همیشه عدد صحیحه در حالی که ممکنه شاید اعشاری هم باشه.

#!/usr/bin/bash

pacmanlogs="$(pacman -Sup | sed 1d )"

function getSize(){
        local wgetlogs="$(wget --spider "$1" 2>&1)"
        awk '/^Length/ {print $2}' <<< "$wgetlogs"
}

function totalSize(){
        if [ -n "$1" ];then
                while read -r LINK
                do
                        getSize "$LINK"
                done <<< "$1" | paste -sd+ | sed -e 's/^/\(/' -e 's/$/\)\/\(1024*1024\)/' | bc -l
        else
                echo "0"
        fi
}

function getresult(){
        local result=$(totalSize "$pacmanlogs")
        if [ $(echo "$result" | sed -r 's/\..*$//') -ne 0 ];then
                echo "Next Update Size: $result MiB."
                return 0
        else
                echo "there is nothing to do"
                return 1
        fi
}
getresult

Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#41 2016-04-10 01:52:49

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,424

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

عالی. برای من کار کرد.

آفلاین

#42 2016-04-10 17:17:14

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

قابلیتی که سعید بهش اشاره کرد توی این اسکریپت لحاظ شده:

#!/usr/bin/bash

pacmanlogs="$(pacman -Sup | sed 1d )"

function getSize(){
	local wgetlogs="$(wget --spider "$1" 2>&1)"
	awk '/^Length/ {print $2}' <<< "$wgetlogs"
}

function totalSize(){
	if [ -n "$1" ];then                
		while read -r LINK
		do
			getSize "$LINK"
		done <<< "$1" | awk -MO '
		function prettySize(sizeInBytes)
			{
                            sizeInMiBs = sizeInBytes/(1024*1024);                             
                            if (int(sizeInMiBs) >= 1000)
                                return (sizeInMiBs/1024)" GiB"
                            else if (int(sizeInMiBs) == 0)
                                return (sizeInMiBs*1024)" KiB"
                            else
                                return (sizeInMiBs)" MiB"
			}
                {sum+=$1}
                END {
                    printf("%s\n",prettySize(sum))
                    }
		'
	else
		echo ""
	fi
}

function getresult(){
	local result="$(totalSize "$pacmanlogs")"
	if [ -n "$result" ];then
            echo "Next Update Size: $result"
            return 0
        else
            echo "there is nothing to do"
            return 1
        fi
}		
getresult

اگر احیانا مشکلی توی اجرای اسکریپت بود که به awk مربوط میشد توی خط ۱۵ فلگهای مربوط به awk رو حذف کنید.

آخرین ویرایش توسط ehsan_faal (2016-04-10 17:18:43)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#43 2018-01-16 13:24:59

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 811

پاسخ: حجم آپدیت جاری سیستم رو چجوری میشه بدست آورد؟[حل شد]

بالاخره از همون دستور متداول آپدیت سیستم بهره بردم و برای اینکه به طور خودکار به سوال مربوط به آپدیت نه بگم از دستور yes با آپشن n استفاده کردم و مشکل حل شد:

yes n | pkexec pacman -Syu | grep "Total Download" | awk '{ print $4,$5 }'

مرسی از همه دوستانی که ایده دادن و مشارکت کردن تو این تاپیک.

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB