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

#1 2016-03-19 15:43:26

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

اسکریپتهای خودتون رو اینجا پست کنید

سلام دوستان.
این تاپیک با این هدف ایجاد شده که همه ی اعضای انجمن اسکریپتهای خودشون رو همراه با یه توضیح کوچولو توی هر پست قرار بدن، اینجوری با خوندن هر پست کلی نکته میتونیم یاد بگیریم.
مهم نیست اسکریپتتون ۱ خط باشه یا ۳۰۰ خط، مهم اینه که کار راه انداز باشه.
(راستی این تاپیک با هماهنگی و البته پیشنهاد دوست بسیار عزیزم Arcush و البته الهام گرفتن از این تاپیک ایجاد شده)
به امید افزایش آگاهیمون در اسکریپت نویسی.

نمایش فایل fstab به صورت جدول بندی شده:

#!/usr/bin/env python3.5

import prettytable
import re
import argparse

#const:
PATH = '/etc/fstab'

def getTitles(path):
    with open(path) as file:
        for line in (l.splitlines()[0] for l in file if l.startswith('# <')):
            out = [ word.title() for word in (re.split('>\s*<', (line + '<').replace('#', '>'))) if word != '' ]
            return out
    return ['File System', 'Mount Point', 'Type', 'Options', 'Dump', 'Pass']

def main():
    with open(PATH) as file:
        T = prettytable.PrettyTable(getTitles(PATH))
        for line in (l for l in file if not l.startswith('#')):
            T.add_row(line.split())
        print(T)

if __name__ == "__main__" :
    description = 'Print /etc/fstab content in a nice table.(python3-prettytable)'
    Author = 'Author: Ehsan Faalpoor <ehsan_faal@yahoo.com>'
    parser = argparse.ArgumentParser(description = description, epilog = Author)
    parser.parse_args()
    main()

برای استفاده از این اسکریپت بایستی ماژول python3-prettytable  رو نصب داشته باشید.

نکات ریزی که در نوشتن این اسکریپت یاد گرفتم استفاده از بلوک with برای کار با فایلها بود که میتونه هر گونه خطایی رو در هنگام کار با فایل رفع و رجوع کنه و در صورت بروز اشکال فایل رو ببنده.
و همچنین استفاده از generator  ها در حلقه for بود که این قابلیت رو داره که اگه قراره روی یه دیتای حجیم for بزنیم کل داده رو مثله حالت عادی for لیست نکنه و باعث صرفه جویی در مصرف مموری میشه.

خب دوستان این اولین پست این تاپیک بود.
مهم نیست با چه زبانی اسکریپت مینویسید، فقط با بقیه تسهمیش کنید.


یا علی


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

آفلاین

#2 2016-03-19 16:16:05

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

اطلاعات مختصری از هیستوریتون:

#!/usr/bin/env python3.5

import os
import prettytable
import argparse
import sys
from collections import Counter

# Global Variables:
localCommands = Counter()
sudoCommands = Counter()
ordinaryCommands = Counter()

def prepareCommandList():
    path = os.path.expanduser('~') + '/.bash_history'
    if os.path.exists(path):
        with open(path) as file:
            for command in (line.splitlines()[0] for line in file):
                if (command.startswith('.')):
                    localCommands[' '.join(command.replace('./', '', 1).split(' ', maxsplit=2)[0:2])] += 1
                elif (command.startswith('sudo')):
                    sudoCommands[' '.join(command.split(' ', maxsplit=2)[0:2])] += 1
                else:
                    ordinaryCommands[' '.join(command.split(' ', maxsplit=2)[0:2])] += 1
    else:
        print("There is something wrong while opening you'r ~/.bash_history file.")
        sys.exit(1)


def createSudoTable(mostTop):
    totalSudoCommand = sum(sudoCommands.values())
    sudoTable = prettytable.PrettyTable(['Sudo Command', 'Repetition', 'Percentage %'])
    for item in (sudoCommands.most_common(mostTop)):
        sudoTable.add_row(item + ('{:05.2f} %'.format(item[1]*100/totalSudoCommand), ))

    print(sudoTable)
    print('Total Sudo Command Number : {}\n'.format(totalSudoCommand))
    sudoCommands.clear()


def createLocalTable(mostTop):
    totalLocalCommand = sum(localCommands.values())
    localTable = prettytable.PrettyTable(['Local Command', 'Repetition', 'Percentage %'])
    for item in (localCommands.most_common(mostTop)):
        localTable.add_row(item + ('{:05.2f} %'.format(item[1]*100/totalLocalCommand), ))

    print(localTable)
    print('Total Local Command Number : {}\n'.format(totalLocalCommand))
    localCommands.clear()


def createNormalTable(mostTop):
    totalOrdinaryCommand = sum(ordinaryCommands.values())
    ordinaryTable = prettytable.PrettyTable(['Normal Command', 'Repetition', 'Percentage %'])
    for item in (ordinaryCommands.most_common(mostTop)):
        ordinaryTable.add_row(item + ('{:05.2f} %'.format(item[1]*100/totalOrdinaryCommand), ))

    print(ordinaryTable)
    print('Total Normal Command Number : {}\n'.format(totalOrdinaryCommand))
    ordinaryCommands.clear()


if __name__ == '__main__':
    Description = 'Print nice table of commands in your history based on python3-prettytable module.'
    Author = 'Author: Ehsan Faalpoor <ehsan_faal@yahoo.com>'
    parser = argparse.ArgumentParser(description = Description, epilog = Author, argument_default = argparse.SUPPRESS)
    parser.add_argument('-s','--sudo', metavar = '<number>', nargs='?', dest = 'sudoNumber', default = None, const = 10,
    	help = 'Display table of sudo commands only with top <number> rows. [Default: 10 rows]', type = int)
    parser.add_argument('-n','--normal', metavar = '<number>', nargs='?', dest = 'normalNumber', default = None, const = 10,
    	help = 'Display table of normal commands only with top <number> rows. [Default: 10 rows]', type = int)
    parser.add_argument('-l','--local', metavar = '<number>', nargs='?', dest = 'localNumber', default = None, const = 10,
    	help = 'Display table of local commands only with top <number> rows. [Default: 10 rows]', type = int)
    # agar nargs ra ? qarar dahim dar optional ha agar switch ra bedune hich value farakhani konim meqdare const bardashte mishavad, amma agar switch
    # ra farakhani nakonim meqdare default dar dest qarar khahad gereft.
    # amma dar morede positiona ha agar nargs ? bashad che switch ra bedune value bedahim che aslan switch ra nadahim meqdare default bardashte khahad
    # shod.
    args = parser.parse_args()
    prepareCommandList()
    if args.sudoNumber is not None:
        createSudoTable(args.sudoNumber)
    if args.normalNumber is not None:
        createNormalTable(args.normalNumber)
    if args.localNumber is not None:
        createLocalTable(args.localNumber)

    del sudoCommands, ordinaryCommands, localCommands

باز هم به python3-prettytable نیاز دارید. این اسکریپت کلی نکته آموزشی برای من داشت، پارس کردن آرگومانها جالبترین بخش این اسکریپت واسه من بود.
امیدوارم جالب باشه.


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

آفلاین

#3 2016-03-19 16:20:08

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

تغییر نام دسته جمعی فایلها:

#!/bin/bash
fileName="${1:-FILE}"
topLimit=$(expr length $(ls -1 | wc -l))
find . -maxdepth 1 -type f -name "* *" | xargs -I ITEM bash -c 'mv "$0" $(echo "$0" | tr -d '[:blank:]')' ITEM
exts=($(for i in *;do echo ${i##*\.};done | sort | uniq))
rs=""
for i in ${exts[@]};do
		rs=${rs}"("${i}")"
done
rs=$(echo ${rs//)(/)|(})
counter=0
find . -maxdepth 1 -type f -regextype posix-awk -regex ".*[$rs]$" | while read -r FILE; do
	printf -v NUM "%0*d"  $topLimit $((++counter))
	mv "$FILE" "${fileName}${NUM}.${FILE##*\.}" 2>/dev/null
done

علاوه بر کار کردن با دستور فوق العاده find و ارائه راه حلی برای حذف فاصله ها در نام فایلها(خط ۴) یکم هم راجع به اپراتور های استرینگ ها یاد گرفتم در ضمن این اسگریپت.

امیدوارم جالب باشه.


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

آفلاین

#4 2016-04-09 00:51:34

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

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

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-
"""
Created on Fri Apr  8 19:02:25 2016

@author: ehsan
"""
import sys
import argparse
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.error import URLError, HTTPError
from threading import Thread

BASE_URL = 'http://www.maktabkhooneh.org/{}'

def firstStepCrawling(lesson_url):
    try:
        req = urlopen(lesson_url)

    except HTTPError as e:
        print('Error (HTTPError) while retriving "{}" Error Code: {}'.format(lesson_url, e.code), file=sys.stderr)
        sys.exit(1)
        
    except URLError as e:
        print('Error (URLError) while retriving "{}" Error reason: {}'.format(lesson_url, e.reason), file=sys.stderr)
        sys.exit(1)

    else:    
        soup = BeautifulSoup(req.read(), "html.parser")
        for pagelink in (soup.findAll('a', {'class':'lesson-links'})):
            yield BASE_URL.format(pagelink['href'])

def getDownloadLink(url,video_format):
    try:
        req = urlopen(url)

    except HTTPError as e:
        print('Error (HTTPError) while retriving "{}" Error Code: {}'.format(url, e.code), file=sys.stderr)
        sys.exit(1)
        
    except URLError as e:
        print('Error (URLError) while retriving "{}" Error reason: {}'.format(url, e.reason), file=sys.stderr)
        sys.exit(1)

    else:        
        soup = BeautifulSoup(req.read(), "html.parser")
        if video_format:
            Quality = 'hq-video-dl'
        else:
            Quality = 'video-dl'
        for pagelink in soup.findAll('a', {'class':Quality}):
            print(pagelink['href'])

def doItInParallel(link, quality):
    threads = []
    for pagelink in firstStepCrawling(link):
        thread = Thread(target=getDownloadLink, args=(pagelink, quality))
        threads.append(thread)
        thread.start()
    
    for thr in threads:
        thr.join()
    
def main():
    parser = argparse.ArgumentParser(description='Extract all download links from maktabkhooneh.org',
                                     epilog='Author: Ehsan Faalpoor <ehsan_faal@yahoo.com>')
    subparser = parser.add_subparsers(dest = 'whichMood')
    singleMood = subparser.add_parser('oneLesson')
    singleMood.add_argument('-H', '--highQuality', help = 'If this flag is set, then ALL links will be HIGH-QUALITY format. Default: False (Low Quality Format)',
                        action='store_true',
                        default=False
                        )
    singleMood.add_argument('link',
                        metavar = 'OneEpisodeLink',
                        help = 'Link to the interested lesson page (Episode).')
    allLesson = subparser.add_parser('allLesson')
    allLesson.add_argument('-H', '--highQuality', help = 'If this flag is set, then ALL links will be HIGH-QUALITY format. Default: False (Low Quality Format)',
                        action='store_true',
                        default=False
                        )
    allLesson.add_argument('-p', '--parallel', help = 'If this flag is set, then program use multi-thread for getting final result. Default: False (Single Thread Mode)',
                        action='store_true',
                        default=False
                        )
    allLesson.add_argument('link',
                        metavar = 'CourseLink',
                        help = 'Link to the interested lesson page.')

    args = parser.parse_args()
    if args.whichMood and args.link in ['oneLesson', 'allLesson']:
        parser.error("You can't use both \"oneLesson\" and \"allLesson\" switches at the same time")
        sys.exit(1)
        
    if args.whichMood == 'oneLesson':
        getDownloadLink(args.link, args.highQuality)
    elif args.whichMood == 'allLesson':           
        if args.parallel:
            doItInParallel(args.link, args.highQuality)
        else:
            for pagelink in firstStepCrawling(args.link):
                getDownloadLink(pagelink,args.highQuality)

if __name__ == '__main__':
    main()

نتیجه اجرا با لینکی که توی خود اسکریپت هست شد این، ازاینجا به بعدش دیگه دست به دامن aria2c میشیم.

http://cdnmaktab.takhtesefid.org/videos/hq745803239569.mp4?name=hq-lotfi-learnenglish-1.mp4
http://cdnmaktab.takhtesefid.org/videos/hq422568846295.mp4?name=hq-lotfi-learnenglish-2.mp4
http://cdnmaktab.takhtesefid.org/videos/hq339319106848.mp4?name=hq-lotfi-learnenglish-3.mp4
http://cdnmaktab.takhtesefid.org/videos/hq666654810009.mp4?name=hq-lotfi-learnenglish-4.mp4
http://cdnmaktab.takhtesefid.org/videos/hq819433045868.mp4?name=hq-lotfi-learnenglish-5.mp4
http://cdnmaktab.takhtesefid.org/videos/hq036784994501.mp4?name=hq-lotfi-learnenglish-6.mp4
http://cdnmaktab.takhtesefid.org/videos/hq156643708288.mp4?name=hq-lotfi-learnenglish-7.mp4
http://cdnmaktab.takhtesefid.org/videos/hq891516598446.mp4?name=hq-lotfi-learnenglish-8.mp4
http://cdnmaktab.takhtesefid.org/videos/hq00284951901469.mp4?name=hq-lotfi-learnenglish-9.mp4
http://cdnmaktab.takhtesefid.org/videos/hq662151266027.mp4?name=hq-lotfi-learnenglish-10.mp4
http://cdnmaktab.takhtesefid.org/videos/hq0989057509596.mp4?name=hq-lotfi-learnenglish-11.mp4
http://cdnmaktab.takhtesefid.org/videos/hq938814003514.mp4?name=hq-lotfi-learnenglish-12.mp4
http://cdnmaktab.takhtesefid.org/videos/hq841225963829.mp4?name=hq-lotfi-learnenglish-13.mp4
http://cdnmaktab.takhtesefid.org/videos/hq797460124508.mp4?name=hq-lotfi-learnenglish-14.mp4
http://cdnmaktab.takhtesefid.org/videos/hq567763456619.mp4?name=hq-lotfi-learnenglish-15.mp4
http://cdnmaktab.takhtesefid.org/videos/hq184632607781.mp4?name=hq-lotfi-learnenglish-16.mp4
http://cdnmaktab.takhtesefid.org/videos/hq0432657984955.mp4?name=hq-lotfi-learnenglish-17.mp4
http://cdnmaktab.takhtesefid.org/videos/hq657276842918.mp4?name=hq-lotfi-learnenglish-18.mp4
http://cdnmaktab.takhtesefid.org/videos/hq844844583607.mp4?name=hq-lotfi-learnenglish-19.mp4
http://cdnmaktab.takhtesefid.org/videos/hq0715843628249.mp4?name=hq-lotfi-learnenglish-20.mp4
http://cdnmaktab.takhtesefid.org/videos/hq363927147552.mp4?name=hq-lotfi-learnenglish-21.mp4
http://cdnmaktab.takhtesefid.org/videos/hq201582385444.mp4?name=hq-lotfi-learnenglish-22.mp4
http://cdnmaktab.takhtesefid.org/videos/hq157845052564.mp4?name=hq-lotfi-learnenglish-23.mp4
http://cdnmaktab.takhtesefid.org/videos/hq632215201769.mp4?name=hq-lotfi-learnenglish-24.mp4
http://cdnmaktab.takhtesefid.org/videos/hq584804648376.mp4?name=hq-lotfi-learnenglish-25.mp4
http://cdnmaktab.takhtesefid.org/videos/hq830087029541.mp4?name=hq-lotfi-learnenglish-26.mp4
http://cdnmaktab.takhtesefid.org/videos/hq374325629911.mp4?name=hq-lotfi-learnenglish-27.mp4
http://cdnmaktab.takhtesefid.org/videos/hq800687163716.mp4?name=hq-lotfi-learnenglish-28.mp4
http://cdnmaktab.takhtesefid.org/videos/hq849359858437.mp4?name=hq-lotfi-learnenglish-29.mp4
http://cdnmaktab.takhtesefid.org/videos/hq0523685548616.mp4?name=hq-lotfi-learnenglish-30.mp4
http://cdnmaktab.takhtesefid.org/videos/hq243388302251.mp4?name=hq-lotfi-learnenglish-31.mp4

آخرین ویرایش توسط ehsan_faal (2016-04-15 00:11:29)


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

آفلاین

#5 2016-04-10 01:17:31

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

احسان جان این تاپیک دیر یا زود رونق خودش رو خواهد گرفت. لطفا ادامه بده و اسکریپت های زیبات رو بفرست.

آفلاین

#6 2016-04-11 01:11:05

silver
عضو
از : اصفهان
ثبت شده: 2015-12-03
ارسال ها: 187
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

این اسکریپت رو برای جستجو توی گیت هاب نوشتم :

#!/bin/python2

import json
import urllib2
import sys

def usage():
    print "Usage:"
    print "  gitget.py name [language]\n"
    print "Examples:"
    print "  gitget.py TicTacToe"
    print "  gitget.py board_game cpp"
    print "  gitget.py musicplayer python"


def main():
    if len(sys.argv) < 2 or len(sys.argv) > 3:
        usage()
        sys.exit()
    elif len(sys.argv) == 2:
        request_link = "https://api.github.com/search/repositories?q=" + sys.argv[1] + "&sort=stars&order=desc"
    elif len(sys.argv) == 3:
        request_link = "https://api.github.com/search/repositories?q=" + sys.argv[1] +"+language:" + sys.argv[2] + "&sort=stars&order=desc"
    
    getData(request_link)
        
def getData(request_link):
    
    j = urllib2.urlopen(request_link)
    js = json.load(j)
    for i in js['items']:
        out_str = "Name:        " + i['name'] + '\n'
        out_str += "Language:    " + i['language'] + '\n'
        out_str += "Description: " + i['description'] + '\n'
        out_str += "Size:        " + str(i['size']) + ' kb\n'
        out_str += "URL:         " + i['html_url']
        print out_str
        print '========================================================='
if __name__ == '__main__':
    main()

این هم نمونه خروجی :

┌─[ali@aliHost] - [~/Other/eclipse-workspace/GitGet] - [2014-10-21 03:22:58]
└─[0] <git:(master f6b6b9✈) > gitget music_player python

Name:        music-player
Language:    Python
Description: Music player - endlessly plays your music
Size:        13068 kb
URL:         https://github.com/albertz/music-player
=========================================================
Name:        jukebox
Language:    Python
Description: Democratic Jukebox - your democratic music player
Size:        465 kb
URL:         https://github.com/lociii/jukebox
=========================================================
Name:        python-mpd2
Language:    Python
Description: Python library which provides a client interface for the Music Player Daemon.
Size:        593 kb
URL:         https://github.com/Mic92/python-mpd2
=========================================================
Name:        youtify
Language:    Python
Description: Online music player
Size:        5930 kb
URL:         https://github.com/youtify/youtify
=========================================================
Name:        gmusicproxy
Language:    Python
Description: Google Play Music Proxy - "Let's stream Google Play Music using any media-player"
Size:        598 kb
URL:         https://github.com/diraimondo/gmusicproxy
=========================================================
Name:        foobnix
Language:    Python
Description: Foobnix Music Player for Linux (GPL v3)
Size:        34576 kb
URL:         https://github.com/foobnix/foobnix
=========================================================
Name:        sonata
Language:    Python
Description: GTK 3 client for the Music Player Daemon
Size:        11701 kb
URL:         https://github.com/multani/sonata
=========================================================
Name:        UDJ-Server
Language:    Python
Description: The Social Music Player!
Size:        13992 kb
URL:         https://github.com/klnusbaum/UDJ-Server
=========================================================
Name:        partify
Language:    Python
Description: A collaborative music player based on Mopidy and inspired by turntable.fm
Size:        2086 kb
URL:         https://github.com/fhats/partify
=========================================================
Name:        dmusic-plugin-baidumusic
Language:    Python
Description: BaiduMusic Plugin for Deepin Music Player
Size:        294 kb
URL:         https://github.com/sumary/dmusic-plugin-baidumusic
=========================================================
Name:        mpris-remote
Language:    Python
Description: command line tool for interacting with music players that support the mpris spec
Size:        1483 kb
URL:         https://github.com/mackstann/mpris-remote
=========================================================
Name:        deepin-music
Language:    Python
Description: deepin-music-player-private
Size:        59115 kb
URL:         https://github.com/linuxdeepin/deepin-music
=========================================================
Name:        exaile
Language:    Python
Description: Cross-platform music player
Size:        71364 kb
URL:         https://github.com/exaile-dev/exaile
=========================================================
Name:        google-music-resolver
Language:    Python
Description: Google Music Resolver for the Tomahawk music player
Size:        562 kb
URL:         https://github.com/crabmanX/google-music-resolver
=========================================================
Name:        albumbler
Language:    Python
Description: A simple psychic playlist generator for a wide variety of music players.
Size:        119 kb
URL:         https://github.com/keenerd/albumbler

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ (1).اقُلْ هُوَ اللَّهُ أَحَدٌ(2). اللَّهُ الصَّمَدُ (3).لمْ يَلِدْ وَلَمْ يُولَدْ(4). وَلَمْ يَكُن لَّهُ كُفُوًا أَحَدٌ(5)
http://lidora.blog.ir
علیرضا پژوهش

آفلاین

#7 2016-04-11 01:13:35

silver
عضو
از : اصفهان
ثبت شده: 2015-12-03
ارسال ها: 187
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

این رو هم برای پخش کلیپ هام البته به صورت تصادفی :

#!/usr/bin/bash

cd ~/Videos

listcount=$(ls -l | wc -l)

# تعداد فایلهای دایرکتوری
filecount=$((listcount-1))

# تولید عدد تصادفی
i=$((($RANDOM%filecount)+1))

index=0
for file in *
do
        index=$(($index + 1))
        if [[ ("$index" ==  "$i") ]]; then
                filename="$file"
        fi
done

# دستور شما برای باز کردن فایل
mplayer "$filename"

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ (1).اقُلْ هُوَ اللَّهُ أَحَدٌ(2). اللَّهُ الصَّمَدُ (3).لمْ يَلِدْ وَلَمْ يُولَدْ(4). وَلَمْ يَكُن لَّهُ كُفُوًا أَحَدٌ(5)
http://lidora.blog.ir
علیرضا پژوهش

آفلاین

#8 2016-04-11 12:59:09

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

من نه برنامه نویسم نه چیز خاصی از دستورات شل میدونم. با آزمون و خطا یه چیزایی سر هم کردم که امیدوارم به دردتون بخوره:

ابزاری برای تایپ چیزهای از پیش تعیین شده در موارد مشخص، xdotool . مثلا تایپ قسمت code در این انجمن، میتونید از این اسکریپت استفاده کنید و یک شورتکات کیبرد براش تعیین کنید

 #!/bin/bash
sleep 1
xdotool type '[code] TEXT [/code]' 
 #!/bin/bash
sleep 1
xdotool type '[url=http://HERE] TEXT [/url]' 

اسکریپتی برای اینکه بفهمیم اینترنت وصله یا قطعه!!! این اسکریپت رو توی کرون قرار بدید تا با بوت سیستم اجرا بشه. اون وقت هر چند دقیقه که تعیین کرده باشید پینگ میکنه به سایتی که تعیین کردید، اگه وصل باشه یه صدا و اگه قطع باشه یه صدای دیگه میده. این به درد کسایی میخوره که دانلود گذاشتن و میخوان به کارشون برسن اما حواسشون هم باشه که کی اینترنت قطع شده و برن بررسی کنن. از mplayer استفاده کردم. از vlc هم میتونید استفاده کنید.

 #!/bin/bash
if [[ $(ping -q -c 3 www.mihanblog.com) == @(*3 received*) ]]; then
mplayer /usr/share/sounds/freedesktop/stereo/device-added.oga &&  echo “network is up”
else
mplayer /usr/share/sounds/freedesktop/stereo/dialog-warning.oga  && echo “network is down”
fi

 

دستور vlc:

 cvlc --play-and-exit /usr/share/sounds/freedesktop/stereo/complete-media-burn.ogg
 

این اسکریپت هم برای تنظیم صداست. مال خیلی وقت پیشه. وقتی که کلیدهای Fn هنوز با دسکتاپ ها به خوبی مچ نمیشدن و نمیشد صدا رو کم و زیاد کرد. این اسکریپت اینجور کار میکنه که با متغیر های up, down و mute میتونین صدا رو تنظیم کنین.

 #!/bin/sh

if [ $1 = 'up' ]; then
    amixer -c 0 -- sset Master playback 5dB+
elif [ $1 = 'down' ]; then
    amixer -c 0 -- sset Master playback 5dB-
elif [ $1 = 'mute' ]; then
    amixer set Master toggle
else
    echo "Unknown control command: $1" >&2
    exit 1
fi

STATUS=$(amixer sget Master | awk '$1 == "Mono:" { print $NF; }')
if [ $STATUS = '[off]' ]; then
    VOLUME=MUTED
    ICON=notification-audio-volume-muted
else
    VOLUME=$(amixer sget Master | sed '/^ *Mono: /{s/^.*\[\(.*\)%\].*/\1/;p;};d;')
    if [ $VOLUME -eq 0 ]; then
        ICON=notification-audio-volume-off
    elif [ $VOLUME -lt 33 ]; then
        ICON=notification-audio-volume-low
    elif [ $VOLUME -lt 66 ]; then
        ICON=notification-audio-volume-medium
    else
        ICON=notification-audio-volume-high
    fi
    VOLUME="${VOLUME}%"
fi
/usr/bin/notify-send "Volume Control" "$VOLUME" -i $ICON 

آخرین ویرایش توسط AmiNimA (2016-04-11 13:01:54)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#9 2016-04-11 13:04:26

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

این اسکریپت هم برای ساده تر کردن pacman ساختم. خیلی چیز باحالی شد. برای خودم که خیلی کاربردیه.

 
#! /bin/sh
#
# pm is a simple script to make pacman easier. 
# pacman is the package manager of Arch based linux distroes. 
# I'm not a developer, and I wrote this script just for my needs.
# 30 Murch 2014
# Amin Abdollahzade: medicamin@gmail.com http://linuxvaman.ir
# Feel free to make this script better :)
#

if [ $# -lt 1 ]
then
    echo
    echo "pm is a simple script to make pacman easier"
    echo "Usage: pm option package"
    echo
    echo -e "	\033[1m \x1b[31m Options:\033[0m "
    echo "	-h,  help	: Show this help"
    echo "	-i,  install	: Install a package from repo"
    echo "	-ip, install-pkg	: Install the given package"
    echo "	-r,  remove	: Remove a single package"
    echo "	-d   delete	: Delete a package with all dependencies"
    echo "	-s,  search	: Search the given name"
    echo "	-u,  update	: Updates the system"
    echo "	-uy, update-yes	: Updates the system with YES to all questions"
    echo "	-um, update-mirror	: Updates the mirrors using reflector"
    echo "	 You must install reflector before"	
    echo "	-z,  size	: Sort all packages by installed size"
    echo "	-f   info	: Display information about a package"
    echo "	-db  db	        : removes /var/lib/pacman/db.lck"
    echo
    echo -e "	\033[1m \x1b[31m Examples:\033[0m"	
    echo "	pm -uy	:updates all packages without confirmation"
    echo "	pm install vlc	:install vlc"
    echo
    echo
            
exit
fi

function show_help {

    echo
    echo "pm is a simple script to make pacman easier"
    echo "Usage: pm option package"
    echo
    echo -e "	\033[1m \x1b[31m Options:\033[0m "
    echo "	-h,  help	: Show this help"
    echo "	-i,  install	: Install a package from repo"
    echo "	-ip, install-pkg	: Install the given package"
    echo "	-r,  remove	: Remove a single package"
    echo "	-d   delete	: Delete a package with all dependencies"
    echo "	-s,  search	: Search the given name"
    echo "	-u,  update	: Updates the system"
    echo "	-uy, update-yes	: Updates the system with YES to all questions"
    echo "	-um, update-mirror	: Updates the mirrors using reflector"
    echo "	 You must install reflector before"	
    echo "	-z,  size	: Sort all packages by installed size"
    echo "	-f   info	: Display information about a package"
    echo "	-db  db	        : removes /var/lib/pacman/db.lck"
    echo
    echo -e "	\033[1m \x1b[31m Examples:\033[0m"	
    echo "	pm -uy	:updates all packages without confirmation"
    echo "	pm install vlc	:install vlc"
    echo
    echo
}

function reflector {

sudo reflector --verbose -l 10 -p http --sort rate --save /etc/pacman.d/mirrorlist

}

case $1 in
    -h|--help)
show_help
exit 0
;;
    -um|update-mirror)
reflector
exit 0
;;
    
    -s|search)
sudo pacman -Ss $2
exit 0
;;

    -db|db)
sudo rm /var/lib/pacman/db.lck
exit 0
;;

    -i|install)
sudo pacman -S $2
exit 0
;;
    -ip|install-pkg)
sudo pacman -U $2
exit 0
;;    
    -u|update)
sudo pacman -Syu
exit 0
;;    
    
    -uy|update-yes)
sudo pacman -Syu --noconfirm
exit 0
;;    
    -d|delete)
sudo pacman -Rns $2
exit 0
;;	
    -r|remove)
sudo pacman -R $2
exit 0
;;
    -f|info)
sudo pacman -Si $2
exit 0
;;
    -z|size)
echo "wait a moment..."
sudo pacman -Qi | egrep "^(Name|Installed Size)" | sed -e 'N;s/\n/ /' | awk '{ print $7, $3}' | sort -n > ~/pkgsize
echo "packages list sorted by size: $HOME/pkgsize"
exit 0
;;
esac
 

آخرین ویرایش توسط AmiNimA (2016-04-11 13:05:59)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#10 2016-04-11 13:07:33

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

وقتی یه سریالی دانلود کردید و زیرنویسهاش همه encoding  ویندوز رو دارن، با اجرای این اسکریپت توی دایرکتوری زیرنویسها همهشون تبدیل به utf-8 میشن. مثلا اسم اسکریپت رو بذارید srtconv و در قسمت usr/local/bin/ قرار بدید و ترمینال رو توی اون فولدر باز کنید و بزنید srtconv

 #!/bin/bash
# get filename
# by AmiNimA  medicamin@gmail.com 

for i in *.srt; do iconv -f windows-1256 -t utf8 "$i" > "utf8-$i"; done
 

آخرین ویرایش توسط AmiNimA (2016-04-11 13:10:35)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#11 2016-04-14 17:52:16

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

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

#!/bin/bash
# Attach the number of pages of pdf files to begining of their names.
#Arcush.ir
for i in *; do 
	if [ "$(pdfinfo "$i" | grep "PDF version" | cut -c -3 )" = "PDF" ]; then 
	        mv "$i" $(pdfinfo "$i" | awk '/Pages/ {print $2}')_"$i" 
	fi
done 2> /dev/null

این اسکریپت توی یه  دایرکتوری اجرا میشه و اگه فایل pdfای پیدا کرد، تعداد صفحاتش رو به اول اسمش اضافه می کنه:

آفلاین

#12 2016-04-15 20:34:24

P30GAMES
عضو
از : تهران
ثبت شده: 2015-10-27
ارسال ها: 111
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

برای اینکه samba رو فعال کنم اینو زدم چون همیشه برای من فعال نیست.

#!/bin/bash
while [ "1" == "1" ];do
sleep 1
case "$(systemctl status smbd.socket | grep 'active')" in
  *dead*)
  echo "Share Status: (OFF)"
read -r -p "Active Share? [y/N] " active
case $active in
    [yY][eE][sS]|[yY]) 
        systemctl start smbd.socket
        ;;
    *)
        exit 0
        ;;
esac
  ;;
  *listening*)
  echo "Share Status: (ON)"
  read -r -p "Stop Share? [y/N] " stop
case $stop in
    [yY][eE][sS]|[yY]) 
	systemctl stop smbd.socket
        ;;
    *)
        exit 0 
        ;;
esac
  ;;
esac
done

:: محسن شایان
:: توییتر

آفلاین

#13 2016-04-29 00:56:52

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

نمایش سایز لینکها:

#!/bin/bash
#In this case instead of using PIPESTATUS Array for checking previous command exit code,I try this method:
PC=$(wget --spider "$1" 2>&1)
if [ $? -ne 0 ];then
        echo -e "\033[1m The Interested File Doesn't Exist.\033[0m"
        exit 1
else 
        awk '/^Length/ {gsub(/\(|\)/,"",$3);printf("\033[1mSize: %s\033[0m\n",$3)}' <<< "$PC"
        exit 0
fi

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

آفلاین

#14 2016-04-29 00:58:27

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

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

آفلاین

#15 2016-04-29 00:59:49

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

بدست آوردن سایز یک پوشه:

#!/bin/bash

help(){
        echo "$(tput bold)-H|--ScaleFactor=set the ScaleFactor to 1024 (default: 1000)$(tput sgr0)"
        echo "$(tput bold)-v|--verbose=Getting Available Space In Current Partition(Scale Is According To -H Switch).$(tput sgr0)"
        echo "$(tput bold)-h|--help=show this help message and exit.$(tput sgr0)"
}

partitionSize ()
{
        PARSED=$(getopt -o hHv -l help,ScaleFactor,verbose -n "$0" -- "$@")
        if [ $? -ne 0 ];then
                exit 2
        fi
        eval set -- "$PARSED"

        local scaleFactor=1000
        local moreInfo=0

        while true ; do
                case "$1" in
                        -h|--help) help | column -ts "=" ; exit 1 ;;
                        -H|--ScaleFactor) scaleFactor=1024 ; shift ;;
                        -v|--verbose) moreInfo=1 ; shift ;;
                        --) shift ; break ;;
                        *) echo "Internal error!" ; exit 1 ;;
                esac
        done
        local unit=""
        size=$(du -b --max-depth=0 2>/dev/null | awk -vSFACTOR=$scaleFactor '{printf("%.6f",$1/(SFACTOR*SFACTOR))}')
        tmpSize=$(echo $size | sed 's/\..*$//')
        if [ $tmpSize -gt 1000 ];then
                size=$(echo $size | awk -vSFACTOR=$scaleFactor '{printf("%.6f\n",$1/SFACTOR)}')
                unit="GiB"
        elif [ $tmpSize -eq 0 ];then
                size=$(echo $size | awk -vSFACTOR=$scaleFactor '{printf("%.6f\n",$1*SFACTOR)}')
                unit="KiB"
        else
                unit="MiB"
        fi
        directory=$(pwd | awk -F '/' '{print $NF}')
        result="Size of ${directory} : ${size} ${unit}"
        awk '{printf("%s\n",$0);width=length();}END{for(i=0;i<width;i++)printf("=");printf("\n");}' <<< "$result"
        if [ $moreInfo -eq 1 ];then
                if [ $scaleFactor -eq 1000 ];then
                        available=( $(df -BGB . 2>/dev/null | grep -v "Filesystem" | awk '{print $1,$4,$5,$6}') )
                else
                        available=( $(df -BG . 2>/dev/null | grep -v "Filesystem" | awk '{print $1,$4,$5,$6}') )
                fi
        fi
        if [ $moreInfo -eq 1 ];then
                extraInfo "${available[0]}" "${available[1]}" "${available[2]}" "${available[3]}" | column -t
        fi
}       # ----------  end of function partitionSize  ----------

extraInfo()
{
        echo -e "File-System\tAvailable\tUsage\tMounted-On"
        echo -e "${1}\t${2}\t${3}\t${4}"
}
partitionSize "$@"

آخرین ویرایش توسط ehsan_faal (2016-04-29 01:06:08)


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

آفلاین

#16 2016-07-15 20:10:16

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

به نظر من این تاپیک، بهترین تاپیک انجمن ما هست. امروز وقت فراغتی داشتم و تصمیم گرفتم یه اسکریپت بنویسم و اون رو تقدیم کنم به احسان عزیز. یه اسکریپت که قادر هست محتویات یه فایل رو بگیره و اون ها رو تبدیل به عدد ابجد معادلشون کنه.

#!/bin/bash
#Abjad( Arabic numerology system) convertor 
#esasharahi@gmail.com
#bbs.archusers.ir
#The script read from a text file and output is the abjad number.
echo $(($(cat text | sed  's/+/ /g' | sed  's/ //g' | sed ':a;N;$!ba;s/\n/ /g' | awk '$1=$1' FS= OFS="+"   | sed 's/[^+ءآابجدهوزحطیکلمنسعفصقرشتثخذضظغپژگچئ]/0/g' | sed 's/ا/1/g' | sed 's/ب/2/g' | sed 's/ج/3/g' | sed 's/د/4/g' | sed 's/ه/5/g' | sed 's/و/6/g' | sed 's/ز/7/g' | sed 's/ح/8/g' | sed 's/ط/9/g' | sed 's/ی/10/g' | sed 's/ک/20/g' | sed 's/ل/30/g' | sed 's/م/40/g' | sed 's/ن/50/g' | sed 's/س/60/g' | sed 's/ع/70/g' | sed 's/ف/80/g' | sed 's/ص/90/g' | sed 's/ق/100/g'  | sed 's/ر/200/g' | sed 's/ش/300/g' | sed 's/ت/400/g' | sed 's/ث/500/g' | sed 's/خ/600/g' | sed 's/ذ/700/g' | sed 's/ض/800/g' | sed 's/ظ/900/g' | sed 's/غ/1000/g' | sed 's/آ/1/g' | sed 's/ي/10/g' | sed 's/ء/1/g' | sed 's/ئ/10/g' | sed 's/پ/2/g' | sed 's/ژ/7/g' | sed 's/گ/20/g' | sed 's/چ/3/g')))

آفلاین

#17 2016-08-01 14:37:34

TUX
عضو
ثبت شده: 2016-01-31
ارسال ها: 83

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

یه اسکریپت پایتونی برای تغییر کدینگ زیرنویسها به utf8

تو thunar هم میتونید به custom actions اضافه کنید تا با راست کلیک روی فایل زیرنویس راحت تبدیلش کنید به utf8

Basic
Name: Srt UTF - 8
Command: python2 ~/.convert_to_utf8.py %f


Appearance Conditions
File Pattern: *.srt
Check mark Other Files 

فایل زیر رو با اسم convert_to_utf8.py. بزاریدش تو پوشه خانه

#!/usr/bin/env python
#edited by  http://sarigalin.ir to convert Arabic enconding into UTF8 files
import os
import sys
import shutil

def convert_to_utf8(filename):
    # gather the encodings you think that the file may be
    # encoded inside a tuple
    encodings = ('windows-1256', 'iso-8859-6', 'Arabic')

    # try to open the file and exit if some IOError occurs
    try:
        f = open(filename, 'r').read()
    except Exception:
        sys.exit(1)

    # now start iterating in our encodings tuple and try to
    # decode the file
    for enc in encodings:
        try:
            # try to decode the file with the first encoding
            # from the tuple.
            # if it succeeds then it will reach break, so we
            # will be out of the loop (something we want on
            # success).
            # the data variable will hold our decoded text
            data = f.decode(enc)
            break
        except Exception:
            # if the first encoding fail, then with the continue
            # keyword will start again with the second encoding
            # from the tuple an so on.... until it succeeds.
            # if for some reason it reaches the last encoding of
            # our tuple without success, then exit the program.
            if enc == encodings[-1]:
                sys.exit(1)
            continue

    # now get the absolute path of our filename and append .bak
    # to the end of it (for our backup file)
    fpath = os.path.abspath(filename)
    newfilename = fpath + '.bak'
    # and make our backup file with shutil
    shutil.copy(filename, newfilename)

    # and at last convert it to utf-8
    f = open(filename, 'w')
    try:
        f.write(data.encode('utf-8'))
    except Exception, e:
        print e
    finally:
        f.close()
if __name__ == '__main__':
    convert_to_utf8(sys.argv[1])

نویسنده اسکریپت رو هم یادم نیست، خیلی وقت پیش از یه جایی گرفتمش.
===ویرایش===
آدرس نویسنده هم تو اسکریپت هست!

آخرین ویرایش توسط TUX (2016-08-01 17:54:44)

آفلاین

#18 2016-08-02 10:48:20

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 240

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

این مطلبی که میذارم بیشتر جنبه ی سرگرمی و در اصطلاح eye candy داره: نمایش لوگول ارچ برای xfce روی دسکتاپ (شبیه به پیام خوشآمد):
لینک ویدیو آپارات:
http://www.aparat.com/v/UAso5
این ترفند روی xfce انجام شده چون ترمینالش قابلیتشو داره. شاید روی دسکتاپ های دیگه هم بشه بستگی به ترمینالتون داره و application startup داخل تنظیمات دسکتاپتون.
ببخشید اگه خیلی توضیح دادم. میخواستم همه با هر اطلاعاتی که دارن بتونن استفاده کنن.

یه قطعه کد ++C داره که متن رو نمایش میده:

#include <iostream>
#include <unistd.h>

using namespace std;

int main() {
	unsigned int sleep_time = 100000;
	unsigned int sleep_time_2 = 1000000;
	unsigned int sleep_time_3 = 1500000;
	unsigned int sleep_time_4 = 1600000;

	cout << "                   -`" << endl;
	usleep(sleep_time);
	cout << "                  .o+`" << endl;
	usleep(sleep_time);
	cout << "                 `ooo/" << endl;
	usleep(sleep_time);
	cout << "                `+oooo:" << endl;
	usleep(sleep_time);
	cout << "               `+oooooo:" << endl;
	usleep(sleep_time);
	cout << "               -+oooooo+:" << endl;
	usleep(sleep_time);
	cout << "             `/:-:++oooo+:" << endl;
	usleep(sleep_time);
	cout << "            `/++++/+++++++:" << endl;
	usleep(sleep_time);
	cout << "           `/++++++++++++++:" << endl;
	usleep(sleep_time);
	cout << "          `/+++ooooooooooooo/`" << endl;
	usleep(sleep_time);
	cout << "         ./ooosssso++osssssso+`" << endl;
	usleep(sleep_time);
	cout << "        .oossssso-````/ossssss+`" << endl;
	usleep(sleep_time);
	cout << "       -osssssso.      :ssssssso." << endl;
	usleep(sleep_time);
	cout << "      :osssssss/        osssso+++." << endl;
	usleep(sleep_time);
	cout << "     /ossssssss/        +ssssooo/-" << endl;
	usleep(sleep_time);
	cout << "   `/ossssso+/:-        -:/+osssso+-" << endl;
	usleep(sleep_time);
	cout << "  `+sso+:-`                 `.-/+oso:" << endl;
	usleep(sleep_time);
	cout << " `++:.                           `-/+/" << endl;
	usleep(sleep_time);
	cout << " .`                                 `/" << endl;
	usleep(sleep_time_2);
	cout << "               Arch Linux" << endl;
	usleep(sleep_time_3);
	cout << "                 your name" << endl;
	usleep(sleep_time_4);
return 0;
}

یه فایل با پسوند cpp بذارید تو home و کد رو کپی کنین توش. به جای your name هم اسمی که دوس دارین بذارین.
این فایل رو با کامپایلر gcc -که احتمال خیلی زیاد الان هم نصبه روی ارچتون- کامپایل کنین به این صورت

g++ file_name.cpp -o file_name

یه برنامه به دایرکتوری home اضافه میشه که نباید بازش کنین.(مصرف cpu میبره بالا ولی خروجی نداره چون تو ترمینال باز نشده)
حالا یه اسکریپت میسازیم که این برنامه رو اجرا کنه:

#!/bin/bash
xfce4-terminal --hide-borders --hide-toolbar --hide-menubar --title=terminalstartup --geometry=80x27+900+500 --command=./terminal_startup &
sleep 6

برای بهتر شدن میتونین background ترمینالتون رو transparent کنین.
برای صفحه نمایش با کیفیت پایین تر احتمالا باید 500+900+ رو دستکاری کنین که تو صفحه نمایش داده بشه.(یا اینکه به دلخواه مکانشو تغییر بدین)
این خط آخر اضافیه برای عموم کاربرا. فقط کسایی که برنامه های دیگه ای دارن که با اسکریپت اجرا میشه میتونن اضافه ش کنن.
حالا فایل رو ذخیره کنین و بهش دسترسی لازم رو بدین.
بعد به این مسیر برین و این اسکریپت رو بذارین رو استارتآپ تون:
settings -> session and startup -> application autostart -> add

حالا هر بار که سیستم بالا میاد لوگوی ارچ خط به خط اضافه میشه و بعد یه ثانیه بسته میشه. اگه دوست داشتین زمانشو تغییر بدین این نکته رو بدونین که تو کد c++ به صورت میکرو ثانیه نوشته شده.

آخرین ویرایش توسط mazhar (2016-08-02 11:50:23)

آفلاین

#19 2016-08-03 12:17:00

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

بد نیست اسمی از R هم برده بشه که درحال بلعیدن چیزایی مثل متلب هست. فرض کنید در یک شبکه کوچیک ۲۸عضوی، ارتباط نود i رو با j عدد ۱ و عدم ارتباطشون رو عدد صفر درنظر بگیریم. در اینصورت ماتریس ۲۸×۲۸ای داریم که توی این کد R ملاحظه می کنید:

library(igraph)

A = matrix (c(
	0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ,
	1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 ,
	1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ,
	0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 ,
	0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 ,
	1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 
	),  
	nrow = 28,
	ncol = 28,
	byrow = TRUE
	)
	
g <- graph.adjacency(A, weighted = T, mode = "directed")
layout1 <- layout.fruchterman.reingold(g)
plot(g, layout=layout1)

اگه R رو روی سیستمتون دارید (با کتابخونه igraphش)، امتحان کنید.

آفلاین

#20 2016-08-08 00:32:48

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

چند اسکریپت در مورد زمان و تاریخ  منبع

اولی ساعت رو به همراه میزان زمانی که کامپیوتر روشن بوده بوسیله notify-osd اعلام میکنه. به درد مواقعی میخوره که شما در حالت فول اسکرین یک برنامه هستید و به ساعت دسترسی ندارید، با یه شورتکات میتونید این اسکریپت رو اجرا کنید. همچنین میتونید به cron بدید تا مثلا سر هر ساعت یه نوتیفیکیشن بیاد و ساعت رو به شما اعلام کنه!

 #!/bin/bash
play /usr/share/sounds/freedesktop/stereo/message-new-instant.oga && /usr/bin/notify-send -u critical -i "clock" "Clock" "Its $(date +%H:%M) now. Uptime: $(uptime | sed 's/.*up \([^,]*\), .*/\1/')" 

شما میتونید به جای دستور play از mplayer یا cvlc یا چیزای دیگه هم استفاده کنید. و فایل صدای ساعت رو هم به دلخواه خودتون تعیین کنید.

اسکریپت بعدی که توی اینترنت پیداش کردم و با notify-osd ترکیبش کردم بوسیله zenity یه تایمی از شما میگیره و بعد از اون تایم به شما یه نوتیفیکیشن میده. یعنی یه تایمر بسیار ساده.

 #!/bin/bash
    # This script asks the user for a time, waits the specified amount
    # of time, and shows an alert dialog.

    TIME=$(zenity --entry --title="Timer" --text="Enter a duration for the timer.\n\n Examples: 5s or 5m or 5h")

    sleep $TIME

    /usr/bin/notify-send -u critical -i "clock" "Ding Ding!" "It has been $TIME. " && play /usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga  

تقویم های فارسی ای وجود دارند که ممکنه به سلیقه هر کسی خوش نیان. یا اینکه ممکنه فقط نیاز داشته باشید بدونید امروز چندمه! با یه اسکریپت ساده notify-osd میتونیم اینجوری تقویم رو داشته باشیم
image

قبلش باید jdate رو نصب کنید و بعد با این دستور میتونید این نوتیفیکیشن رو داشته باشید:

 /usr/bin/notify-send -u critical -i "date" "تاریخ شمسی" "امروز، $(jdate +%G\ %W)" 

میتونید به کرون بدید تا راس ساعت دوازده اجرا بشه و تاریخ روز جدید رو بهتون اعلام کنه

ویرایش: /usr/bin/notify-send -u critical برای نمایش در حالت فول اسکرین برنامه ها لازم بود که اضافه شد.

آخرین ویرایش توسط AmiNimA (2016-08-08 10:23:00)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#21 2016-08-08 08:41:38

morealaz
عضو
از : کرمان
ثبت شده: 2016-03-19
ارسال ها: 297

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

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

چند اسکریپت در مورد زمان و تاریخ

بسیار عالی و آموزنده
ممنون

آفلاین

#22 2016-08-08 10:12:51

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

خواهش میکنم.
متوجه شدم که برای اینکه notify-send در cron کار کنه باید یه تغییری در اسکریپت بدیم. شرح این تغییر چون چند خط کد داشت، و من الان فرصتش رو ندارم در انجمن بنویسم در وبلاگم گذاشتم. این مطلب   رو بخونین.

آخرین ویرایش توسط AmiNimA (2016-08-08 10:34:33)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

#23 2016-08-08 17:22:10

TUX
عضو
ثبت شده: 2016-01-31
ارسال ها: 83

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

اینم یه آپلودر امن موقت که فایلها رو با لینک مستقیم دو هفته نگه میداره

فقط کافیه این دو خط رو تو فایل bashrc. اضافه کنید

transfer() { if [ $# -eq 0 ]; then echo "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"; return 1; fi 
tmpfile=$( mktemp -t transferXXX ); if tty -s; then basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g'); curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; else curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile ; fi; cat $tmpfile; rm -f $tmpfile; }

برای آپلود هم :

┌────[arch]──────────────────────────────────────────────────────[17:16:31]────┐
│
└────[/home/mohammad]$ transfer /home/mohammad/Pictures/Red_Lion_with_Sun.svg
######################################################################## 100.0%
https://transfer.sh/l0eHn/red-lion-with-sun.svg

https://transfer.sh

آفلاین

#24 2016-09-23 02:27:45

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

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

من امروز بخاطر ویرایش یه فایل متنی وقت خیلی زیادی ازم تلف شد. به این فکر افتادم که چنین وقت هایی رو میشه ذخیره کرد. این اسکریپت، یه فایل متنی رو میگیره و بدون تغییر اون، یک فایل متنی دیگه ایجاد می کنه که بعد از علائمی مثل نقطه و ویرگول دقیقا یک فاصله و قبلشون هیچ فاصله ای نباشه.

#!/usr/bin/python
## esasharahi@gmail.com
import re
import os.path
def main():
	input_file = input("Text file address: ")
	with open(input_file) as f:
		file_for_modify = f.read()
		modified_file = open("modified_" + os.path.basename(input_file), 'w')
		for x in "([{":
			bad_regex = r" *" + re.escape(x) + r" *"
			p = re.compile(bad_regex)
			m = p.sub(r" " + x , file_for_modify)
			file_for_modify = m
			
		for x in ")]}":
			bad_regex = r" *" + re.escape(x) + r" *"
			p = re.compile(bad_regex)
			m = p.sub(x + r" " , file_for_modify)
			file_for_modify = m
			
		for x in ",.:;?!،؛":
			bad_regex = r" *" + re.escape(x) + r" *"
			p = re.compile(bad_regex)
			m = p.sub(x + r" " , file_for_modify)
			file_for_modify = m
		modified_file.write(m)
main()

آخرین ویرایش توسط Arcush (2016-10-23 21:40:03)

آفلاین

#25 2016-10-13 12:49:17

AmiNimA
عضو
ثبت شده: 2015-11-27
ارسال ها: 224
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

سلام. من یه اسکریپت بسیار پایه ای نوشتم، میخواستم نظرتون رو بدونم و اینکه کمک کنید بهتر بشه. این اسکریپت با دستور far که مخفف find and replace هست و د سوییچ f و r کار میکنه. سوییچ f عبارت مشخص شده رو در فایلهای دارای پسوند مورد نظر ما جست و جو میکنه و سوییچ r هم کار replace رو انجام میده. توضیح انگلیسی دادم:

 #! /bin/sh
#
# A script to find and/or replace patterns among certain files.
# I'm not a developer, and I wrote this script just for my needs.
# 13 October 2016
# Amin Abdollahzade: medicamin@gmail.com http://linuxvaman.ir
# Feel free to make this script better :)
#

if [ $# -lt 1 ]
then
    echo
    echo "A simple script to find and/or replace patterns among certain files."
    echo "far, must be run in the directory which you want find and replace patterns."
    echo
    echo "Find usage: far -f [PATTERN] [EXTENSION] "
    echo "example: far -f 'hi there' txt"
    echo 
    echo "Replace usage: far -r [TEXT TO FIND] [TEXT TO REPLACE] [EXTENSION] "
    echo "example: far -r 'hi there' 'salam chetori' txt"
    echo 
exit
fi

case $1 in

 -f)
echo ""
grep --include=*.$3 -rnw -e "$2"
exit 0
;;

-r)
find -name \*.$4 -exec sed -i "s/$2/$3/g" {} \;
echo "Done!"
exit 0
;;

esac 

مشکلم اینه که اگه بخوایم این کارها رو توی فایلهای بدون پسوند انجام بدیم نمیشه. حتما باید یه پسوندی مشخص کنیم. و دوست داشتم که اینجوری باشه مثلا:

 far -f 'hi' -r 'salam chetori' -e txt 

یعنی f بگه پیدا کن hi را، و r هم بگه salam chetori رو به جای hi بذار، و e هم مشخص کننده پسوند فایل باشه. و اگه بعد از e نوشتیم all این کار رو در همه اکستنشن ها انجام بده، و اگه نوشتیم none در فایلهایی انجام بده که اکستنشن ندارن
اگه نتیجه عملیات replace رو هم اعلام میکرد خوب بود!

آخرین ویرایش توسط AmiNimA (2016-10-13 12:49:53)


لینوکس یک فرهنگ است. یک فرهنگ خوب

آفلاین

پانوشت انجمن

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