[script] partagez vos créations !

Autres projets et contributions
Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

[script] partagez vos créations !

Message par z3bra » jeu. 30 janv. 2014, 00:45

Salut la communauté !

Je crée ce thread pour que chacun puisse partager le dernier script qu'il a créé pour se simplifier la vie, faire des trucs marrant au quoi que ce soit.
Il me semble pas avoir trouvé de sujet similaire sur le forum (j'en suis d'ailleurs étonné!), mais n'hésitez pas à me corriger dans le cas contraire.

Enfin trève de bavardages, je commence avec ces quelques scripts:

instagram.sh - Utilitaire d'aide à la prise de screenshot
(La prise en compte des gif est un peu foireuse)

Code : Tout sélectionner

#!/bin/bash
#
# 2013 Willy 'z3bra' Goiffon <willy at mailoo dot org>
#
# INSTAGRAM - screenshot taker / manager
#
# Licensed under WTFPL 2.0
#
# >> http://www.wtfpl.net/txt/copying/
#

IMAGE_DIR=~/usr/img       # répertoire contenant les images
EXEC_UPLOAD=~/bin/upload  # script utilisé pour uploader un fichier
SSHOT_DIR=${IMAGE_DIR}/wm # répertoire final du screenshot
VIEWER=meh                # image viewer

function usage() {
    cat <<SHBLAH
Usage : instagram [-tmuwh] [-g number] [-s screen] [filename.png]
    -t          : create thumbnail
    -m          : create one shot per head
    -u          : upload the file using $EXEC_UPLOAD <filename>
    -w          : take only a window for the shot (choose with pointer)
    -h          : display this help
    -d path     : save the shot in <path>
    -g          : create a gif (press ctrl-C to stop)
    -s screen   : use only the screen number <screen> for the shot

Also, do not give path to shot. They're saved to $SSHOT_DIR by default.

Configuration:
    IMAGE_DIR   : Where images are stored
    SSHOT_DIR   : Where to save your shots
    EXEC_UPLOAD : Path to the script/program used to upload your shot
    VIEWER      : Program used to view the screenshot
SHBLAH
}

function upload() {
    $EXEC_UPLOAD $1
}

[[ "$1" = "--help" ]] && usage && exit 0

# default window id
WINDOW='root'

while getopts ":htmuwd:gs:" opt; do
    case $opt in
        t) THUMB=1 ;;
        m) MULTI=1 ;;
        d) SSHOT_DIR=$OPTARG ;;
        g) GIF=1 ;;
        s) SCREEN=$OPTARG ;;
        u) UPLOAD=1 ;;
        w) WINDOW=$(xprop|grep 'window id'|cut -d\  -f7);;
        h) usage; exit 0;;
        ?) echo "invalid option: -$OPTARG"; exit 1 ;;
    esac
done

shift $((OPTIND-1))

if [[ -z "$1" ]]; then
    OUTPUT="$USER-$(date +%Y-%m-%d).png"
else
    OUTPUT=$1
fi

if [[ "$MULTI" = "1" ]] || [[ -n $SCREEN ]]; then

    xdpyinfo -ext XINERAMA | sed '/^  head #/!d;s///' |
    while IFS=' :x@,' read i w h x y; do
        if [[ $SCREEN = "$i" ]] || [[ -z $SCREEN ]]; then
            import -window ${WINDOW} -crop ${w}x$h+$x+$y $SSHOT_DIR/head_$i-$OUTPUT
            [[ -n $THUMB ]] && import -window ${WINDOW} -thumbnail 25% -crop ${w}x$h+$x+$y $SSHOT_DIR/thumb-head_$i-$OUTPUT
        fi
    done

elif [ -n "$GIF" ]; then
    mkdir $SSHOT_DIR/tmp
    ffmpeg -f x11grab -s 1440x900 -r 25 -i :0.0 $SSHOT_DIR/tmp/out.mov
    ffmpeg -i $SSHOT_DIR/tmp/out.mov -r 1 -f image2 $SSHOT_DIR/tmp/%05d.jpg
    convert -delay 100 $SSHOT_DIR/tmp/*.jpg $SSHOT_DIR/${OUTPUT}
    rm -rf $SSHOT_DIR/tmp
else
    import -window ${WINDOW} $SSHOT_DIR/$OUTPUT
    [[ -n $THUMB ]] && import -window ${WINDOW} -thumbnail 25% $SSHOT_DIR/thumb-${OUTPUT}
fi

if [[ "$UPLOAD" = "1" ]]; then
    cd ${IMAGE_DIR}
    upload wm/${OUTPUT}
fi

$VIEWER $SSHOT_DIR/$OUTPUT
Et un tout neuf qui est le sujet du dernier post de mon blog.
Il permet de voir ses images dans son terminal grâve à w3m (trop cool!)

Code : Tout sélectionner

#!/bin/bash
#
# z3bra -- 2014-01-21

test -z "$1" && exit

W3MIMGDISPLAY="/usr/lib/w3m/w3mimgdisplay"
FILENAME=$1
FONTH=14 # Size of one terminal row
FONTW=8  # Size of one terminal column
COLUMNS=`tput cols`
LINES=`tput lines`

read width height <<< `echo -e "5;$FILENAME" | $W3MIMGDISPLAY`

max_width=$(($FONTW * $COLUMNS))
max_height=$(($FONTH * $(($LINES - 2)))) # substract one line for prompt

if test $width -gt $max_width; then
    height=$(($height * $max_width / $width))
    width=$max_width
fi
if test $height -gt $max_height; then
    width=$(($width * $max_height / $height))
    height=$max_height
fi

w3m_command="0;1;0;0;$width;$height;;;;;$FILENAME\n4;\n3;"

tput cup $(($height/$FONTH)) 0
echo -e $w3m_command|$W3MIMGDISPLAY
Et puis allez, en bonus, un petit soft en C qui va retourner le nombre de fichiers dans un dossier (un genre de ls -lA|wc -l). Je m'en sers pour récupérer le nombre de mails non-lus dans un dossier spécifique

Code : Tout sélectionner

/*
 * mcount.c -- z3bra 2013 <willy at mailoo dot org>
 *
 * Opens a directory and output the number of file found in this directory.
 * Usefull to watch the number of mails in a folder and output it to a status 
 * bar.
 *
 */
#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<string.h>
#include<errno.h>

int main(int argc, char **argv)
{
    int count = 0;
    DIR* rep = NULL;
    struct dirent *readFile = NULL;

    if (argc > 1) {
        rep = opendir(argv[1]);
    } else {
        fprintf(stderr, "usage: %s <directory>\n", argv[0]);
        exit(1);
    }

    if(rep != NULL) {

        while( (readFile = readdir(rep)) != NULL){
            if(strcmp(readFile->d_name, ".") && strcmp(readFile->d_name, "..")){
                count++;
            }
        }

        if(closedir(rep) == -1){
            exit (-1);
        }
    } else {
        switch (errno) {
            case EACCES:
                fprintf(stderr,"bad permissions : %s/\n", argv[1]);
                break;
            case ENOTDIR:
                fprintf(stderr, "not a directory : %s.\n", argv[1]);
                break;
            default:
                fprintf(stderr, "erreur #%d\n",errno);
        }
    }

    fprintf(stdout, "%u\n",count);
    return 0;
}
En espérant découvrir de nouveaux scripts bien sympa, à vous !
archlinux - 2bwm [ blog | git ]

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10401
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [script] partagez vos créations !

Message par FoolEcho » jeu. 30 janv. 2014, 09:54

Salut,
z3bra a écrit :Je crée ce thread pour que chacun puisse partager le dernier script qu'il a créé pour se simplifier la vie, faire des trucs marrant au quoi que ce soit.
Il me semble pas avoir trouvé de sujet similaire sur le forum (j'en suis d'ailleurs étonné!), mais n'hésitez pas à me corriger dans le cas contraire.
Ben... probablement parce que les règles du forum font que les sujets un peu fourre-tout sont très encadrés. :copain:
z3bra a écrit :Et puis allez, en bonus, un petit soft en C qui va retourner le nombre de fichiers dans un dossier (un genre de ls -lA|wc -l).
D'ailleurs, si tu intitules ton sujet «script» et que tu commences à causer C, à mon avis, ça ne va pas trop le faire. :humour: :pastaper: :merci:

:P
«The following statement is not true. The previous statement is true.» :nage:

Avatar de l’utilisateur
z3bra
archer
Messages : 127
Inscription : jeu. 28 juin 2012, 23:17

Re: [script] partagez vos créations !

Message par z3bra » jeu. 30 janv. 2014, 10:54

#!/usr/bin/tcc -run,et hop . un script en C :-)
archlinux - 2bwm [ blog | git ]

Avatar de l’utilisateur
Maximilien LIX
yeomen
Messages : 211
Inscription : mer. 23 avr. 2014, 14:27
Contact :

Re: [script] partagez vos créations !

Message par Maximilien LIX » dim. 15 juin 2014, 07:55

Et bien merci z3bra pour ton script permettant d'afficher une image dans un terminal , franchement j'adore ! :-)
En tout cas il va me servir
Linuxien et blogueur en carton
Acer AX3810 (Archlinux & Debian)
Acer Aspire V5 (ubuntu-Mate)
Lenovo Thinkpad Edge E330 (Archlinux)

yuno
Hankyu
Messages : 12
Inscription : jeu. 17 juil. 2014, 17:18

Re: [script] partagez vos créations !

Message par yuno » dim. 20 juil. 2014, 16:28

Si ton programme C fait la même chose que ls avec des paramètres particuliers, pourquoi ne pas avoir fait tout simplement un alias? :)
Sinon je vais me pencher sur ton script qui affiche des images, je vais aussi voir ce qu'est w3m (je ne connaissais pas)

Alors pour ma part, un petit script que j'ai fais pour déconner entre amis au cdi du lycée:

Code : Tout sélectionner

#!/bin/bash

i=-1
increment=0

while [ 1 ] 
do
	if [ $i -lt -10 ]; then
		increment=1
	else
		if [ $i -gt 10 ]; then
			increment=0
      		fi 
      	fi
	
	
	if [ $increment = 1 ]; then
	  let "i+=1"
	else
	  let "i-=2"
	fi

	xrandr --output LVDS1 --brightness $i
	sleep 0.3

done
Pour annuler l'effet, il suffit de taper xrandr --output LVDS1 --brightness 1 et aussi.. Adaptez "LVDS1" selon votre écran: je ne me souviens plus de quel commande il faut taper pour savoir quoi mettre :/



Ensuite, j'ai un autre script qui me simplifie la vie pour la création de projets en C ou en C++. En effet, j'en avais trop marre de toujours devoir écrire un Makefile (ou de le copier/coller d'aileurs) alors j'ai fais ce script pour automatiser la chose.
Fonctionnement: Dans $HOME j'ai créé un dossier appelé .fap (j'ai appelé ce script fap). Dans celui-ci, il y a différents dossier: chacun est un type de projet.

Par exemple, ~/.fap/c/ contient un main.c de base avec un Makefile à côté
~/.fap/cpp/ contient la même chose mais pour le C++
~/fap/sfml/ contient un patron de projet utilisant la sfml (C++)
etc, etc..

Voici le script:

Code : Tout sélectionner

#!/bin/bash

while [ ! -z $1 ] 
do
	if [ -d $HOME/.fap/$1 ] 
	then
		dossier=$1

		liste=`ls $HOME/.fap/$dossier`

		for fichier in $liste
		do
			cp -ir $HOME/.fap/$dossier/$fichier ./
		done
	
      	else
		echo "~/.fap/$1 n'est pas un dossier"
	fi

	shift #On passe au paramètre suivant
done
Ne me tapez pas trop sur les doigts si il est mal fait, je ne maitrise pas ducoup le bash :roll:

D'ailleurs, .bash_aliases si vous le désirez:

Code : Tout sélectionner

#Programmation
alias lsc='ls *.h; echo -e "\n"; ls *.c'
alias lsp='ls *.h; echo -e "\n"; ls *.cpp'


#Archives
alias untar="tar -xvf"
alias mktar="tar -xcf"

#Actions relatifs aux dossiers
alias cd..="cd .."

mkcd()
{
	mkdir $1 && cd $1
}

fapd()
{
	mkcd $1 && fap $2
}
alias fapls="ls ~/.fap"

#Demandes de droit d'admin implicites
alias pacman="sudo pacman --color always"
alias wifi="sudo wifi-menu"
alias shutdown="sudo shutdown"
alias reboot="sudo shutdown -r"

#Gestion de commandes
alias lscmd="ls $HOME/.cmd"
alias cdcmd.="cd $HOME/.cmd"
alias rmcmd="rm $HOME/.cmd/$1"
alias cdcmd="cd $HOME/Programmes/Commandes"

mkcmd()
{
	chmod +x $1 && cp $1 $HOME/.cmd
}
Il y a des alias utiles pour le script fap et aussi, vous trouverez une partie "Gestion de commandes"
J'ai en effet 2 dossiers dans mon $HOME: ~/.cmd et ~/Programmes/Commandes
~/Programmes/Commandes contient les commandes en cours de création (et le code fini si le code est fini)
alors que ~/.cmd ne contient que les commandes déjà finis prêts à être utilisé
J'ai fais ce système pour éviter de poluer /usr/bin/ comme je le faisais avant

Du coup, dans .bashrc, il est utile d'ajouter ceci:

Code : Tout sélectionner

PATH=$PATH:$HOME/.cmd
export PATH
Dans le miens, j'ai rajouter :. à $PATH pour éviter de devoir écrire ./ pour lancer un exécutable dans le répertoire courant

Répondre