[Scripting] Partage de mes utilitaires

Autres projets et contributions
Répondre
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

[Scripting] Partage de mes utilitaires

Message par Fork Bomb »

Je me créé au quotidien des utilitaires simples (le plus souvent, en shell) qui me simplifient la vie.
Je vous en partage quelques uns, qui j'espère vous aideront également. Je vous les mets en direct au lieu de mettre un lien, pour éviter de spammer.
----
Ça, c'est un petit script que j'utilise à chaque fois que je réinstalle ArchLinux (oui, ça arrive) ou quand je veux créer un compte user pour ma compagne sur ma machine.
Il permet de créer rapidement un utilisateur sur la machine.

Code : Tout sélectionner

#!/bin/bash
# ajouter_utilisateur.sh
# A lancer en tant que "root"

# On definit les groupes de l'utilisateur
GROUPS_FOR_USER="audio,floppy,optical,storage,video,lp,wheel"

# On cree l'utilisateur
echo -e "\e[1;32mNom de l'utilisateur a ajouter :\e[0m "
read USERNAME
echo -e "\t\t-- Ajout de l'utilisateur \e[1;34m${USERNAME}\e[0m --"
useradd -G users -d /home/${USERNAME} -s /bin/bash -m ${USERNAME}

# On ajoute l'utilisateur aux groupes predefinis
echo -e "Ajout de l'utilisateur \e[1;34m${USERNAME}\e[0m dans les groupes \e[1;32m${GROUPS_FOR_USER}\e[0m :"
usermod -aG ${GROUPS_FOR_USER} ${USERNAME}

# Enfin, on lui demande de creer son mot de passe
echo -e "Veuillez demander a \e[1;34m${USERNAME}\e[0m de taper (creer) maintenant son mot de passe :"
passwd ${USERNAME}

# On remplit le xinitrc de l'utilisateur
echo -e "# Lancer NumLockX
# Note : indispensable pour un TypeMatrix
numlockx on &
# Lancer XFCE
exec ck-launch-session startxfce4
# Lancer LXDE
#exec ck-launch-session startlxde
# Lancer Gnome
#exec ck-launch-session gnome-session" >> /home/"${USERNAME}"/.xinitrc

# On rend a l'utilisateur ses droits sur ce nouveau fichier
chown "${USERNAME}" /home/"${USERNAME}"/.xinitrc

# Generique de fin. On quitte.
echo -e "L'utilisateur \e[1;34m${USERNAME}\e[0m est desormais cree. Enjoy :)"
GetISOContent, écrit pour faciliter le travail d'une personne voulant créer une clef USB MultiBoot.
(J'ai jamais réussi ma foutue clef, dommage)

Code : Tout sélectionner

#!/bin/sh

# ==========================================================
# Name: getisocontent
# Description: Mounting ISO and getting stuff from it
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	==== [ Website ] ====
# http://captain.ishido.free.fr/
#
# ==========================================================

# Monter des iso et copier leur contenu dans un dossier dédié.

# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------
# ---------------------------------------------------- FR ----------------------------------------------------
case "$LANG" in
	fr*)	USER_NOT_ALLOWED="Vous n'etes pas autorises a lancer ce script.";
		WELCOME_MESSAGE="+-----------------------------------------------+
|	Bienvenue dans Get Iso Content		|
+-----------------------------------------------+";
		USER_DIRECTORY="Repertoire de travail : ";
		USER_DIRECTORY_INSIST="Repertoire inexistant. Repertoire de travail : ";
		CREATING="Creation de";
		COPYING="Copie des fichiers en cours. Veuillez patienter.";
		UMOUNTING="Demontage de";
		CHANGING_RIGHTS="Changement des droits.";
		FINAL_MESSAGE="Travail termine pour";
            ;;
# ---------------------------------------------------- OTHERS ----------------------------------------------------
	*)	USER_NOT_ALLOWED="You're not allowed to launch that script.";
		WELCOME_MESSAGE="+-----------------------------------------------+
|	Welcome in Get Iso Content		|
+-----------------------------------------------+";
		USER_DIRECTORY="Working directory : ";
		USER_DIRECTORY_INSIST="Not found. Working directory : ";
		CREATING="Creating";
		COPYING="Copying files. Please wait.";
		UMOUNTING="Unmounting";
		CHANGING_RIGHTS="Changing rights.";
		FINAL_MESSAGE="Done for";
            ;;
esac
# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------

# --------------------------- [ VERIFICATION DE L'UTILISATEUR ROOT ] ---------------------------
user=$(whoami)
if [ root != $user ]
then
echo -e "\e[1;34m${USER_NOT_ALLOWED}\e[0m"
exit 1
fi
# --------------------------- [ VERIFICATION DE L'UTILISATEUR ROOT ] ---------------------------

# ----------------------------- [ MESSAGE D'ACCUEIL ] -----------------------------
echo -e "\e[1;34m${WELCOME_MESSAGE}\e[0m"
# ----------------------------- [ MESSAGE D'ACCUEIL ] -----------------------------

# On fixe tout de suite le repertoire de montage des isos
MOUNT_ISO_HERE=/media/iso
# On fixe l'extension sur "iso" (plus facile a changer plus tard)
EXT="iso"

# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
echo -e "\e[1;34m${USER_DIRECTORY}\e[0m"
read DIRECTORY
while [ ! -d "${DIRECTORY}" ]
do
echo -e "\e[1;34m${USER_DIRECTORY_INSIST}\e[0m"
read DIRECTORY
done
cd "${DIRECTORY}"
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------

# On scanne le repertoire
for ISOFILES in *."${EXT}"
do
# Si /media/iso n'existe pas
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
if [ ! -d "${MOUNT_ISO_HERE}" ]
then
mkdir -p "${MOUNT_ISO_HERE}"
fi
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
# On mont l'iso en cours
mount -o loop -t iso9660 "${ISOFILES}" "${MOUNT_ISO_HERE}"
# On calcule le nom de du dossier
ISODIRECTORY=$(basename "${ISOFILES}" ."${EXT}")
echo "${CREATING} ${ISODIRECTORY}"
# On le cree
mkdir "${DIRECTORY}"/"${ISODIRECTORY}"
echo "${COPYING}"
# On copie les fichiers de l'iso montee dans le nouveau repertoire
cp -R "${MOUNT_ISO_HERE}"/* "${DIRECTORY}"/"${ISODIRECTORY}"/
# On demonte l'iso
echo "${UMOUNTING} ${ISOFILES}"
umount "${MOUNT_ISO_HERE}"
# On colle des droits a 777 sur le dossier
echo "${CHANGING_RIGHTS}"
chmod -Rf 777 "${DIRECTORY}"/"${ISODIRECTORY}"/
echo -e "\e[1;34m${FINAL_MESSAGE} ${ISOFILES}\e[0m";
done
AutoSaver. Celui-là, je l'ai créé pour pouvoir sauver sa configuration avant de réinstaller / formatter.
Je m'en sers assez peu, en fait. Mais il m'a été TRES utile. Seuls 3 "profils" sont présents, mais je l'ai écrit de manière à ce qu'on puisse facilement en ajouter. Ce script n'est donc pas limité à ArchLinux.

Code : Tout sélectionner

#!/bin/bash
# ==========================================================
# Name: autosaver.sh
# Description: 
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	===== [ Website ] =====
# http://captain.ishido.free.fr/
#
# ==========================================================

# --- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] ---
# -------------------- FR --------------------
case "$LANG" in
	fr*)	USER_NOT_ALLOWED="Vous n'etes pas autorises a lancer ce script."
		WELCOME_MESSAGE="+-----------------------------------------------+
|						|
|	Bienvenue dans Auto saver		|
|						|
+-----------------------------------------------+"
		FINAL_MESSAGE="Termine."
            ;;
# -------------------- OTHERS --------------------
	*)	USER_NOT_ALLOWED="You're not allowed to launch that script."
		WELCOME_MESSAGE="+---------------------------------------+
|					|
|	Welcome in Auto saver		|
|					|
+---------------------------------------+"
		FINAL_MESSAGE="Done."
            ;;
esac
# ---------- [ FIN DE L'AFFICHAGE DES MESSAGES ] ----------

# ---------- [ VERIFICATION DE L'UTILISATEUR ROOT : DEBUT ] ----------
user=$(whoami)
if [ root = $user ]
then
echo -e "\e[1;34m${USER_NOT_ALLOWED}\e[0m"
exit 1
fi
# ----------- [ VERIFICATION DE L'UTILISATEUR ROOT : FIN ] -----------

# ------------------- [ DEBUT DU PROGRAMME ] -------------------

# ------------ [ MESSAGE D'ACCUEIL : DEBUT ] ------------
echo -e "\e[1;34m${WELCOME_MESSAGE}\e[0m"
# ------------- [ MESSAGE D'ACCUEIL : FIN ] -------------

ARCHLINUX_PROFILE="$HOME/.xinitrc /etc/alsa.conf /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/inittab /etc/locale.gen /etc/mkinitcpio.conf /etc/modprobe.d/modprobe.conf /etc/pacman.conf /etc/rc.conf /etc/resolv.conf /etc/hal/fdi/policy/10-keymap.fdi /etc/pacman.d/mirrorlist /etc/ssh/ssh_config /etc/ssh/sshd_config /etc/X11/xorg.conf /etc/fstab"
GENTOO_PROFILE="/etc/hosts /etc/locale.gen /etc/make.conf /etc/rc.conf /etc/resolv.conf /etc/conf.d/clock /etc/conf.d/domainname /etc/conf.d/hostname /etc/conf.d/keymaps /etc/conf.d/net /etc/conf.d/xdm /etc/X11/xorg.conf"
FBSD_PROFILE="/boot/loader.conf /etc/rc.conf /etc/X11/xorg.conf /etc/sysctl.conf /etc/hosts /usr/local/etc/slim.conf /etc/make.conf /etc/profile /etc/login.conf /etc/devfs.rules /usr/local/etc/PolicyKit/PolicyKit.conf /boot/defaults/loader.conf /usr/local/etc/hal/fdi/policy/x11-input.fdi $HOME/.xinitrc $HOME/.profile $HOME/.login_conf $HOME/.conkyrc /etc/rc.d/slim"
for FILES in ${ARCHLINUX_PROFILE}
do
#	echo "Fichier sauve !"
#	echo "${FILES}"
	FILENAME=$(basename ${FILES})
	DIRECTORYNAME=$(dirname ${FILES})
	echo "Sauvegarde de : " ${FILENAME}
	mkdir -p $(pwd)${DIRECTORYNAME}
	cp "${FILES}" $(pwd)"${DIRECTORYNAME}"/"${FILENAME}"
done

echo -e "\e[1;34m${FINAL_MESSAGE}\e[0m"
Random_Wallpaper. Mon ptit dernier. Son écriture m'a posé bien des soucis. C'est un script dédié au bureau XFCE permettant de changer le fond d'écran. Ici, toutes les 5 minutes. Il utilise une tache cron pour agir.
Il me sert actuellement (aaaaaaaaaaaaaaah, Bayonettaaaaaaaaaaaaaaaaaaaaaaaa...)

Code : Tout sélectionner

#!/bin/bash

# ==========================================================
# Name: random_wallpapers.sh
# Description: A mere automated wallpaper changer
# designed for XFCE
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	==== [ Website ] ====
# http://captain.ishido.free.fr/
#
# ==========================================================

# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------
# ---------------------------------------------------- FR ----------------------------------------------------
case "$LANG" in
	fr*)	USER_NOT_ALLOWED="Vous n'etes pas autorises a lancer ce script."
		WELCOME_MESSAGE="+---------------------------------------+
|	Bienvenue dans			|
|	Random Wallpapers		|
+---------------------------------------+"
		USER_DIRECTORY="Dossier : "
		USER_DIRECTORY_INSIST="Dossier : "
            ;;
# ---------------------------------------------------- OTHERS ----------------------------------------------------
	*)	USER_NOT_ALLOWED="You're not allowed to launch that script."
            ;;
esac
# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------

# ------------------------------- [ VERIFICATION DE L'UTILISATEUR USER ] -------------------------------
user=$(whoami)
if [ root = $user ]
then
echo -e "\e[1;34m${USER_NOT_ALLOWED}\e[0m"
exit 1
fi
# ------------------------------- [ VERIFICATION DE L'UTILISATEUR USER ] -------------------------------

echo -e "\e[1;32m${WELCOME_MESSAGE}\e[0m"

# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
echo -e "\e[1;34m${USER_DIRECTORY}\e[0m"
read DIRECTORY
while [ ! -d "${DIRECTORY}" ]
do
echo -e "\e[1;34m${USER_DIRECTORY_INSIST}\e[0m"
read DIRECTORY
done
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------

# On cree et on ecrase le fichier contenant la liste
echo "# xfce backdrop list" > ${HOME}/.config/xfce4/desktop/backdrop.list
echo "$(find "${DIRECTORY}" -type f)" >> ${HOME}/.config/xfce4/desktop/backdrop.list
# On relance les wallpapers
xfdesktop --reload
# Et on remet ca dans 5 minutes
# http://www.commentcamarche.net/contents/tutlinux/lincron.php3
# On met la valeur de DISPLAY afin que ca marche tout le temps
echo "*/5 * * * * DISPLAY=${DISPLAY} /usr/bin/xfdesktop --reload" > ${HOME}/.wallpapers_cron.txt
crontab ${HOME}/.wallpapers_cron.txt
Voilà, c'est tout pour le moment. Aucun de ces scripts n'est en ligne pour le moment. J'espères qu'ils vous seront aussi utiles qu'à moi.
Enjoy :)
---
ED!T : Trimage est dégagé puisque depuis, je l'ai remplacé par son équivalent Python.
Dernière modification par Fork Bomb le jeu. 08 nov. 2012, 12:49, modifié 4 fois.
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [Scripting Shell] Partage de mes utilitaires

Message par tuxce »

Salut, tu devrais utiliser une police monospace pour coder, ça éviterait d'avoir des traits censés être alignés mais qui ne le sont pas :)
Sinon, tu devrais factoriser ton code ou utiliser des fonctions, surtout pour ton programme de tri d'images, ça le raccourcirait pas mal ;)
Par exemple:

Code : Tout sélectionner

min_x=800
min_y=600
RESOLUTIONS="${min_x}x${min_y} 1024x768 1152x864 1280x720 1280x800 1280x854
             1280x860 1280x960 1280x1024 1400x1050 1440800
             1440x900 1600x1000 1600x1024 1600x1200 1680x1050
             1920x1080 1920x1200 1920x1440 2048x1536 2560x1600"

for IMAGES in *.*
do
   x=$(identify -format "%w" "${IMAGES}") || continue
   y=$(identify -format "%h" "${IMAGES}")
   info=$(identify -format "%wx%h" "${IMAGES}")
   if [ $x -lt $min_x -a $y -lt $min_y ]; then
      REP=$TOO_SMALL
   elif echo $RESOLUTIONS | grep -q $info; then
      REP="$info/$PARENT_OF_CURRENT_DIRECTORY/$CURRENT_DIRECTORY"
   else
       # Sinon, on ne deplace pas l'image (taille non geree).
       echo -e "\e[1;34m"${IMAGES}"\e[0m --> \e[1;32m${NOT_MOVED}\e[0m"
	   continue
   fi
   [ -d "$REP" ] || mkdir -p "$REP" || continue
   mv -v "$IMAGES" "$REP"
done
Bon ça peut être fait sans le grep et l'appel 3* à identify mais comme j'ai vu FREEBSD dans le lot et que c'est juste un exemple ...
Avatar de l’utilisateur
ed0c
Chu Ko Nu
Messages : 329
Inscription : mer. 24 mars 2010, 10:02

Re: [Scripting Shell] Partage de mes utilitaires

Message par ed0c »

« Vouer aux gémonies » : Accabler quelqu'un, lui faire de violents reproches ou l'humilier publiquement.
Livrer quelqu'un au mépris public, le couvrir de honte.

Je me coucherais moins con ce soir. :D

Merci en tout cas pour ces scripts. Ce peut en effet etre tres utile! Quant à la critique du code, je ne me permettrait pas vu que c'est du chinois pour moi...
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting Shell] Partage de mes utilitaires

Message par Fork Bomb »

tuxce a écrit :Salut, tu devrais utiliser une police monospace pour coder, ça éviterait d'avoir des traits censés être alignés mais qui ne le sont pas :)
Sinon, tu devrais factoriser ton code ou utiliser des fonctions, surtout pour ton programme de tri d'images, ça le raccourcirait pas mal ;)
Merci. Mais je ne suis pas encore assez sûr de moi pour penser à factoriser mon bouzin. J’écris pas assez de code, j’imagines…
J’essaierais de comprendre quand j’aurais deux neurones de libre.
ed0 a écrit :« Vouer aux gémonies » : Accabler quelqu'un, lui faire de violents reproches ou l'humilier publiquement.
Livrer quelqu'un au mépris public, le couvrir de honte.

Je me coucherais moins con ce soir. :D

Merci en tout cas pour ces scripts. Ce peut en effet etre tres utile! Quant à la critique du code, je ne me permettrait pas vu que c'est du chinois pour moi...
L’idée est qu’ils vous soient utiles.

----
Vu vos retours positifs, j’ai décidé de reprendre un vieux programme dédié aux photographes permettant de classer les photos par date. Je viens de trouver le code du cœur de boucle.
Je pense le sortir bientôt.
Dernière modification par tuxce le lun. 30 mai 2011, 21:31, modifié 1 fois.
Raison : pas besoin de citer l'ensemble des messages
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting Shell] Partage de mes utilitaires

Message par Fork Bomb »

Le programme dont je vous parlais, sortbydate. Celui-ci récupères la date de création d’une photo (c’est plus un programme pour les photographes) et déplaces celle-ci dans le bon répertoire.
Testez-le sur un échantillon afin de voir si il a le comportement que vous attendez. Enjoy :)

Code : Tout sélectionner

#!/bin/bash

# ==========================================================
# Name: sortbydate.sh
# Description: Scan each image of a given directory and move it
# to the correct directory, following the picture's creation date. Dedicated to photographers.
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	==== [ Website ] ====
# http://captain.ishido.free.fr/
#
# ==========================================================

# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------
# ---------------------------------------------------- FR ----------------------------------------------------
case "$LANG" in
	fr*)	USER_NOT_ALLOWED="Vous n'etes pas autorises a lancer ce script."
		WELCOME_MESSAGE="+-------------------------------+
|				|
|	Bienvenue dans		|
|	 Sort by size		|
|				|
+-------------------------------+"
		USER_DIRECTORY="Repertoire ou se trouvent les photos :"
		USER_DIRECTORY_INSIST="Repertoire inexistant. Veuillez indiquer un repertoire valide."
		JANUARY="01 - Janvier"
		FEBRUARY="02 - Fevrier"
		MARCH="03 - Mars"
		APRIL="04 - Avril"
		MAY="05 - Mai"
		JUNE="06 - Juin"
		JULY="07 - Juillet"
		AUGUST="08 - Aout"
		SEPTEMBER="09 - Septembre"
		OCTOBER="10 - Octobre"
		NOVEMBER="11 - Novembre"
		DECEMBER="12 - Decembre"
		DEPCHECK="Verification des dependances :"
		IZGOOD="est installe."
		IZNOGOOD="n'est pas installe."
		MISSING_PROGRAM="Un ou plusieurs programme(s) manquant(s). Arret."
		NOT_A_PICTURE="n'est pas une image."
		FINAL_MESSAGE="Tri termine."
            ;;
# ---------------------------------------------------- OTHERS ----------------------------------------------------
	*)	USER_NOT_ALLOWED="You're not allowed to launch that script."
		WELCOME_MESSAGE="+-------------------------------+
|				|
|	Welcome by		|
|	 Sort by size		|
|				|
+-------------------------------+"
		USER_DIRECTORY="Pictures directory :"
		USER_DIRECTORY_INSIST="Directory not found. Please add an existing directory."
		JANUARY="01 - January"
		FEBRUARY="02 - February"
		MARCH="03 - March"
		APRIL="04 - April"
		MAY="05 - May"
		JUNE="06 - June"
		JULY="07 - July"
		AUGUST="08 - August"
		SEPTEMBER="09 - September"
		OCTOBER="10 - October"
		NOVEMBER="11 - November"
		DECEMBER="12 - December"
		DEPCHECK="Checking for dependencies :"
		IZGOOD="is installed."
		IZNOGOOD="is not installed."
		MISSING_PROGRAM="One (or more) missing program(s). Stop."
		NOT_A_PICTURE="is not a picture."
		FINAL_MESSAGE="Done."
            ;;
esac
# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------

# ------------------------------- [ VERIFICATION DE L'UTILISATEUR USER ] -------------------------------
user=$(whoami)
if [ root = $user ]
then
echo -e "\e[1;34m${USER_NOT_ALLOWED}\e[0m"
exit 1
fi
# ------------------------------- [ VERIFICATION DE L'UTILISATEUR USER ] -------------------------------

# ----------------------------- [ MESSAGE D'ACCUEIL ] -----------------------------
echo -e "\e[1;34m${WELCOME_MESSAGE}\e[0m"
# ----------------------------- [ MESSAGE D'ACCUEIL ] -----------------------------

# ----------------------------- [ VERIFICATION DES DEPENDANCES : DEBUT ] -----------------------------
# Liste des programmes dont
# on veut verifier la presence
echo -e "\t\e[0;34m${DEPCHECK}\e[0m"
DEPLIST="identify file awk"
# On initialise la variable COUNT
COUNT="0"
for BINLIST in ${DEPLIST}
do
  	which ${BINLIST} 1>/dev/null #2>/dev/null

# Si le test s'est bien deroule
# (le code de retour vaut 0 / le programme est trouve)
		if [ $? = 0 ]
# Alors, on affiche :
		then
		echo -e "\e[0;32m${BINLIST} ${IZGOOD}\e[0m"
# Sinon, on affiche :
		else
		echo -e "\e[0;38m${BINLIST} ${IZNOGOOD}\e[0m"
# Creation et incrementation de la variable COUNT
		COUNT=$(( $COUNT + 1 ))
		fi
done
# Tant que COUNT est superieur a 0, le script s'arrete
while [ "${COUNT}" -gt 0 ]
do
echo -e "\t\e[0;34m${MISSING_PROGRAM}\e[0m"
exit
done
# ------------------------------ [ VERIFICATION DES DEPENDANCES : FIN ] ------------------------------

# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
echo -e "\e[1;34m${USER_DIRECTORY}\e[0m"
read DIRECTORY
while [ ! -d "${DIRECTORY}" ]
do
echo -e "\e[1;34m${USER_DIRECTORY_INSIST}\e[0m"
read DIRECTORY
done
cd "${DIRECTORY}"
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------

# On scanne tous les fichiers (mode barbare)
for FILES in *.*
do
# On determine le MimeType de chaque fichier
MIMETYPE=$(file -i "${FILES}"|awk '{print $2}'|awk -F'/' '{print $1}')
# Si le fichier est une image
if [ "${MIMETYPE}" == "image" ]
then
# Alors, on choppe sa date de creation
# Son annee
YEAR=$(identify -format %[EXIF:DateTimeOriginal] "${FILES}"|awk '{print $1}'|awk -F':' '{print $1}')
# Son mois
MONTH=$(identify -format %[EXIF:DateTimeOriginal] "${FILES}"|awk '{print $1}'|awk -F':' '{print $2}')
# Son jour
DAY=$(identify -format %[EXIF:DateTimeOriginal] "${FILES}"|awk '{print $1}'|awk -F':' '{print $3}')

# On ajoute ici une raffinement appreciable : le nommage des mois
# Si le mois vaut 01
if [ "${MONTH}" -eq "01" ]
then
	MONTH=${JANUARY}
# Sinon si le mois vaut 02
elif [ "${MONTH}" -eq "02" ]
then
	MONTH=${FEBRUARY}
# Sinon si le mois vaut 03
elif [ "${MONTH}" -eq "03" ]
then
	MONTH=${MARCH}
# Sinon si le mois vaut 04
elif [ "${MONTH}" -eq "04" ]
then
	MONTH=${APRIL}
# Sinon si le mois vaut 05
elif [ "${MONTH}" -eq "05" ]
then
	MONTH=${MAY}
# Sinon si le mois vaut 06
elif [ "${MONTH}" -eq "06" ]
then
	MONTH=${JUNE}
# Sinon si le mois vaut 07
elif [ "${MONTH}" -eq "07" ]
then
	MONTH=${JULY}
# Sinon si le mois vaut 08
elif [ "${MONTH}" -eq "08" ]
then
	MONTH=${AUGUST}
# Sinon si le mois vaut 09
elif [ "${MONTH}" -eq "09" ]
then
	MONTH=${SEPTEMBER}
# Sinon si le mois vaut 10
elif [ "${MONTH}" -eq "10" ]
then
	MONTH=${OCTOBER}
# Sinon si le mois vaut 11
elif [ "${MONTH}" -eq "11" ]
then
	MONTH=${NOVEMBER}
# Sinon, c'est le mois 12 (donc, Decembre)
else
	MONTH=${DECEMBER}
fi

# On verifie que le dossier correspondant Annee/Mois/Jour existe
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
if [ ! -d "${YEAR}/${MONTH}/${DAY}" ]
then
mkdir -p "${YEAR}/${MONTH}/${DAY}"
fi
# --------------------------------- [ VERIFICATION DU REPERTOIRE ] ---------------------------------
# Maintenant qu'on est sur que le repertoire existe, on y deplace l'image
echo -e "\e[1;34m${FILES}\e[0m --> \e[1;32m${YEAR}/${MONTH}/${DAY}/${FILES}\e[0m"
mv "${FILES}" "${YEAR}/${MONTH}/${DAY}/${FILES}"
else
echo -e "\e[1;34m${FILES}\e[0m \e[1;31m${NOT_A_PICTURE}\e[0m"
fi
done
echo "${FINAL_MESSAGE}"
Dernière modification par Fork Bomb le jeu. 08 nov. 2012, 12:51, modifié 2 fois.
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting Shell] Partage de mes utilitaires

Message par Fork Bomb »

Vous vous souvenez de sortbydate.sh ? Ben maintenant, il s’appelle sortbydate.py (je me suis pas foulé, j’ai juste changé l’extension :lol: )
Du coup, j’ai besoin de testeurs pour voir si il tourne bien sur *BSD, Windows et Mac et les autres GNU/Linux.
En cas de problèmes avec le programme, venez poster ici. J’apprécierais un message d’erreur voire un scrinechote.
Si ça embête la modération, on fera ça en privé.
Vous le trouverez ici (lien direct).
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting Shell] Partage de mes utilitaires

Message par Fork Bomb »

"SortByDate" en Python a été mis à jour. Maintenant, il sait trier les .nef (format proprio raw de Nikon). N’hésitez pas à m’envoyer vos retours. Je les attends vraiment.
Si vous préférez aussi que je mette le code ici, dites-le.
---
ED!T
SortByDate en Python sait maintenant renommer les images à la volée. Ainsi, si une image DSC_0079.NEF doit être transférée dans le dossier 2011/01 - Janvier/12/ et qu’une image de même nom s’y trouve déjà, alors l’image en cours est renommée en voyant son numéro incrémenté. Ce qui vous évitera de perdre bêtement vos précieuses photos… C’est pas génial, ça ??
En prime, le code Python :

Code : Tout sélectionner

#!/usr/bin/env python2.7
# -*- coding:utf-8 -*-
# ====================================================================
# Name: sortbydate.py
# Description: SortByDate - Read the exif informations of pictures contained in a given
# directory and move each picture in a directory named after its creation date
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	===== [ Website ] =====
# http://captain.ishido.free.fr/
#
# ====================================================================

# ------------------------------- [ - FINDING THE LANGUAGE OF THE OPERATING SYSTEM - ] -------------------------------
# Getting system language
import locale
LOCALE = locale.getdefaultlocale()
LOCALE = LOCALE[0]
if LOCALE[:2] == "fr":
	WELCOME_MESSAGE="+-------------------------------+\n|\tBienvenue dans\t\t|\n|\tSort by date\t\t|\n+-------------------------------+"
	DIRECTORY_QUESTION="Répertoire où trouvent les photos : "
	FAILED_IMPORT_MAGIC="Python-Magic ( https://github.com/ahupp/python-magic ) est nécessaire à l’utilisation de ce programme. Veuillez l'installer puis relancez le programme."
	FAILED_IMPORT_PYEXIV2="PyExiv2 ( http://tilloy.net/dev/pyexiv2/ ) est nécessaire à l'utilisation de ce programme. Veuillez l’installer puis relancez le programme."
	JANUARY="01 - Janvier"
	FEBRUARY="02 - Fevrier"
	MARCH="03 - Mars"
	APRIL="04 - Avril"
	MAY="05 - Mai"
	JUNE="06 - Juin"
	JULY="07 - Juillet"
	AUGUST="08 - Aout"
	SEPTEMBER="09 - Septembre"
	OCTOBER="10 - Octobre"
	NOVEMBER="11 - Novembre"
	DECEMBER="12 - Decembre"
	UNKNOWN="00"
	MD_NOTFOUND="Métadonnées non trouvées."
	NOT_MOVED="non déplacée (date de création inutilisable)"
	FINAL_MESSAGE="Tri terminé."
else:
	WELCOME_MESSAGE="+-------------------------------+\n|\tWelcome in\t\t|\n|\tSort by date\t\t|\n+-------------------------------+"
	DIRECTORY_QUESTION="Picture's directory : "
	FAILED_IMPORT_MAGIC="Python-Magic ( https://github.com/ahupp/python-magic ) is needed to use this program. Please install it and relaunch."
	FAILED_IMPORT_PYEXIV2="PyExiv2 ( http://tilloy.net/dev/pyexiv2/ ) is needed to use this program. Please install it and relaunch."
	JANUARY="01 - January"
	FEBRUARY="02 - February"
	MARCH="03 - March"
	APRIL="04 - April"
	MAY="05 - May"
	JUNE="06 - June"
	JULY="07 - July"
	AUGUST="08 - August"
	SEPTEMBER="09 - September"
	OCTOBER="10 - October"
	NOVEMBER="11 - November"
	DECEMBER="12 - December"
	UNKNOWN="00"
	MD_NOTFOUND="Metadata not found."
	NOT_MOVED="not moved (date of creation is not usable)"
	FINAL_MESSAGE="Done."
# ------------------------------- [ + FINDING THE LANGUAGE OF THE OPERATING SYSTEM + ] -------------------------------

# ------------------ [ - Usefull imports - ] ------------------
# Needed for "isdir"
import os
# Needed to detect the Operating Sytem
import sys
# Reading mimetypes
try:
	import magic
except ImportError:
	print(FAILED_IMPORT_MAGIC)
	sys.exit(1)
# Needed to parse picture and to get exif informations
try:
	import pyexiv2
except ImportError:
	print(FAILED_IMPORT_PYEXIV2)
	sys.exit(1)
# Needed to move files into directories
import shutil
# Needed to extract numbers from strings
import re
# Needed for the ZeroFill
import string
# ------------------ [ + Usefull imports + ] ------------------

# --------------------- [ - Some variables - ] ---------------------
# Detect the Operating Sytem
Operating_System=sys.platform
# --------------------- [ + Some variables + ] ---------------------

# ----------------------- [ - FINDING THE OPERATING SYSTEM - ] -----------------------
# If it's a Penguin or an Apple, we show colors
if Operating_System=="linux2" or Operating_System=="darwin":
#----------------- [ - COLORS - ] -----------------
	BLUE="\033[34m"
	GREEN="\033[32m"
	RED="\033[31m"
	CLOSE="\033[0m"
#----------------- [ + COLORS + ] -----------------
# If it's Windows T_T
elif Operating_System=="win32":
# Hack for Windows : no colors since
# the MS-Dos console can't manage ANSI colors -_-
#----------------- [ - COLORS - ] -----------------
	BLUE=""
	GREEN=""
	RED=""
	CLOSE=""
#----------------- [ + COLORS + ] -----------------
else:
# Else, as we don't know the O.S., no colors
#----------------- [ - COLORS - ] -----------------
	BLUE=""
	GREEN=""
	RED=""
	CLOSE=""
#----------------- [ + COLORS + ] ----------------- 
# ----------------------- [ + FINDING THE OPERATING SYSTEM + ] -----------------------

# ------- [ - Welcome message - ] -------
print(WELCOME_MESSAGE)
# ------- [ + Welcome message + ] -------

# ---------------------- [ - Checking directory path - ] ----------------------
DIRECTORY=raw_input(BLUE+DIRECTORY_QUESTION+CLOSE)
# While directory path is not correct
while os.path.isdir(DIRECTORY) == False:
# We ask the question
	DIRECTORY=raw_input(BLUE+DIRECTORY_QUESTION+CLOSE)
# Entering the directory
os.chdir(DIRECTORY)
# ---------------------- [ + Checking directory path + ] ----------------------

# Listing all files in the directory
for FILES in os.listdir(DIRECTORY):
	# I don't know how to list files ONLY,
	# so I check if the current FILES is a file or not
	if os.path.isfile(FILES):
		# We try to find its mimetype
		MIMETYPE=magic.Magic(mime=True)
		# We break the string on the slash character and get the left part of it.
		MAIN_MIMETYPE=MIMETYPE.from_file(FILES).split('/')[0]
		# If the current file is an image
		if MAIN_MIMETYPE == "image":
			# We get its Meta Data
			META_INFORMATIONS=pyexiv2.ImageMetadata(FILES)
			META_INFORMATIONS.read()
			try:
				# We get its date and hour of creation
				DATE_INFORMATIONS=META_INFORMATIONS['Exif.Photo.DateTimeOriginal']
				# The string is now split in two. The space character is our separator.
				# We get the left part of the space.
				DATETIME=DATE_INFORMATIONS.raw_value.split(' ')[0]
				# We get the year
				YEAR=DATETIME.split(':')[0]
				# We get the month
				MONTH=DATETIME.split(':')[1]
				# We get the day
				DAY=DATETIME.split(':')[2]
				
				# Something that I hope it will be appreciate : naming the months.
				# If the month is 01
				if MONTH == "01":		
					MONTH=JANUARY
				# If the month is 02
				elif MONTH == "02":		
					MONTH=FEBRUARY
				# If the month is 03
				elif MONTH == "03":		
					MONTH=MARCH
				# If the month is 04
				elif MONTH == "04":		
					MONTH=APRIL
				# If the month is 05
				elif MONTH == "05":		
					MONTH=MAY
				# If the month is 06
				elif MONTH == "06":		
					MONTH=JUNE
				# If the month is 07
				elif MONTH == "07":		
					MONTH=JULY
				# If the month is 08
				elif MONTH == "08":		
					MONTH=AUGUST
				# If the month is 09
				elif MONTH == "09":
					MONTH=SEPTEMBER
				# If the month is 10
				elif MONTH == "10":
					MONTH=OCTOBER
				# If the month is 11
				elif MONTH == "11":
					MONTH=NOVEMBER
				# If the month is 12
				elif MONTH == "12":
					MONTH=DECEMBER
				else:
					# Else the month is tell unknown
					MONTH=UNKNOWN
				# If the creation date is 0000/00/00
				if YEAR+"/"+UNKNOWN+"/"+DAY == "0000/00/00":
					print(BLUE+FILES+CLOSE+" --> "+RED+NOT_MOVED+CLOSE)
					continue
				# If the directory is not created
				elif os.path.isdir(YEAR+"/"+MONTH+"/"+DAY) == False:
					# We create it
					os.makedirs(YEAR+"/"+MONTH+"/"+DAY, mode=0777)
				# If the file FILES already exists
				if os.path.isfile(YEAR+"/"+MONTH+"/"+DAY+"/"+FILES):
					#print(YEAR+"/"+MONTH+"/"+DAY+"/"+FILES+": le fichier existe.")
					# We explode the FILES string
					# First, we get the prefix
					PREFIX=re.findall('\D+', FILES)[0]

					# Then, we get the number
					NUMBER_STRING=re.findall('\d+', FILES)[0]
					LNG_NUMBER_STRING=len(NUMBER_STRING)

					#  And we cast it to number.
					NUMBER=int(NUMBER_STRING)
					NUMBER=NUMBER+1
					LNG_NUMBER=len(str(NUMBER))

					# If NUMBER_STRING is bigger than or equal to NUMBER
					# (so, if NUMBER is a NUMBER_STRING with no beginning zero(s))
					# (it should happen all the time)
					if len(NUMBER_STRING) >= len(str(NUMBER)):
						# We calculate the new NUMBER string
						NUMBER=string.zfill(NUMBER,LNG_NUMBER_STRING)
										
					# Finally, we get the suffix
					SUFFIX=re.findall('\D+', FILES)[1]

					# We create a new name for the file
					NEWNAME=PREFIX+NUMBER+SUFFIX
					# And the final "move" (haha !!) for this file
					print(BLUE+FILES+CLOSE+" --> "+GREEN+YEAR+"/"+MONTH+"/"+DAY+"/"+CLOSE+RED+NEWNAME+CLOSE)
					shutil.move(FILES, YEAR+"/"+MONTH+"/"+DAY+"/"+NEWNAME)
				else:
					# We move the picture in its directory
					print(BLUE+FILES+CLOSE+" --> "+GREEN+YEAR+"/"+MONTH+"/"+DAY+"/"+FILES+CLOSE)
					shutil.move(FILES, YEAR+"/"+MONTH+"/"+DAY+"/"+FILES)
			except:
				print(BLUE+FILES+CLOSE+" --> "+RED+MD_NOTFOUND+CLOSE)
print(FINAL_MESSAGE)
Dernière modification par Fork Bomb le jeu. 08 nov. 2012, 12:51, modifié 2 fois.
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting] Partage de mes utilitaires

Message par Fork Bomb »

RMLL2011.sh
Ce script récupère les fichiers OGG hébergés par RadioRMLL.
Enjoy :)

Code : Tout sélectionner

#!/usr/bin/env bash
mkdir Lundi Mardi Mercredi Jeudi
echo "Lundi"
wget http://radio2011.rmll.info/ep/lancement-radio/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Lundi/"09h45 - Lancement de la radio.ogg"

wget http://radio2011.rmll.info/ep/rediffusion-femmes-et-logiciels-libres/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Lundi/"11h00 - Rediffusion - Femmes et logiciels libres.ogg"

wget http://radio2011.rmll.info/ep/journal-des-rmll-lundi/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Lundi/"13h00 - Journal des RMLL - Lundi.ogg"

wget http://radio2011.rmll.info/ep/april-dossiers-en-cours/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Lundi/"15h00 - April - le point sur les dossier en cours.ogg"

echo "Mardi"
wget http://radio2011.rmll.info/ep/solutions-video-libres/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mardi/"10h00 - Solutions video libres.ogg"

wget http://radio2011.rmll.info/ep/journal-des-rmll-mardi/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mardi/"13h00 - Journal des RMLL - Mardi.ogg"

wget http://radio2011.rmll.info/ep/april-accessibilite/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mardi/"15h00 - April - Accessibilite.ogg"

wget http://radio2011.rmll.info/ep/plan-ordinateurs-portables/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mardi/"16h00 - Le Plan Ordinateurs Portables.ogg"


echo "Mercredi"
wget http://radio2011.rmll.info/ep/accessibilite-audio-libre/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"10h30 - Accessibilite, Audition libre.ogg"

wget http://radio2011.rmll.info/ep/jappix/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"11h30 - Jappix.ogg"

wget http://radio2011.rmll.info/ep/conf-table-ronde-politique/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"11h30 - Conference - Table Ronde Politique.ogg"

wget http://radio2011.rmll.info/ep/journal-des-rmll-mercredi/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"13h00 - Journal des RMLL - Mercredi.ogg"

wget http://radio2011.rmll.info/ep/internet-libre/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"14h00 - Internet Libre.ogg"

wget http://radio2011.rmll.info/ep/la-monnaie/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"15h30 - La monnaie.ogg"

wget http://radio2011.rmll.info/ep/spanishrevolution-et-logiciels-libres/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"16h30 - Spanishrevolution et logiciels libres.ogg"

wget http://radio2011.rmll.info/ep/culture-libre/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Mercredi/"17h30 - Culture libre.ogg"

echo "Jeudi"
wget http://radio2011.rmll.info/ep/journal-des-rmll-jeudi/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Jeudi/"13h00 - Journal des RMLL - Jeudi.ogg"

wget http://radio2011.rmll.info/ep/larsen-3g/ecouter/integrale -O TEST
URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Jeudi/"14h00 - Larsen 3G.ogg"

wget http://radio2011.rmll.info/ep/free-software-foundation-europe/ecouter/integrale -O TEST

URL=$(grep http TEST)
FILE=$(basename "${URL}")
wget "${URL}"
mv "${FILE}" Jeudi/"14h30 - Free Software Foundation Europe.ogg"
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting] Partage de mes utilitaires

Message par Fork Bomb »

AutoSaver à été amélioré. Je partage.
Nouveautés :
Cette fois, le script est en mode interactif et aisément modifiable. Il est facile d’ajouter un « profil » (et des sous-catégories si nécessaire).
N’hésitez pas a faire des retours.

Code : Tout sélectionner

#!/bin/bash
# ==========================================================
# Name: autosaver.sh
# Description: Copy automaticaly important files for you
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#   ===== [ Website ] =====
# http://captain.ishido.free.fr/
#
# ==========================================================

# ---------- [ VERIFICATION DE L'UTILISATEUR ROOT : DEBUT ] ----------
user=$(whoami)
if [ root = $user ]
then
echo -e "\e[1;34m$Vous n'etes pas autorises a lancer ce script.\e[0m"
exit 1
fi
# ----------- [ VERIFICATION DE L'UTILISATEUR ROOT : FIN ] -----------

# ------------------- [ DEBUT DU PROGRAMME ] -------------------

# ------------ [ MESSAGE D'ACCUEIL : DEBUT ] ------------
echo -e "\e[1;34m+-------------------------------+
|                               |
|   Bienvenue dans Auto saver   |
|                               |
+-------------------------------+\e[0m"
# ------------- [ MESSAGE D'ACCUEIL : FIN ] -------------

function COPIER_FICHIERS_ARCHLINUX {
echo "+-----------------------+"
echo "| Copie des fichiers de |"
echo "|       ArchLinux       |"
echo "+-----------------------+"
PROFILE="Archlinux"
HOME="$HOME/.xinitrc "
XORG="/etc/X11/xorg.conf.d/10-evdev.conf /etc/X11/xorg.conf.d/10-synaptics.conf /etc/X11/xorg.conf.d/50-fpit.conf /etc/X11/xorg.conf.d/typematrix.conf /etc/X11/xorg.conf.d/10-quirks.conf /etc/X11/xorg.conf.d/20-nvidia.conf /etc/X11/xorg.conf.d/50-vmmouse.conf"
WAYLAND=""
NETWORK="/etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/ssh/ssh_config /etc/ssh/sshd_config /etc/resolv.conf"
MIRRORS="/etc/pacman.conf /etc/pacman.d/mirrorlist"
SYSTEM="/etc/mkinitcpio.conf /etc/fstab /etc/inittab /etc/modprobe.d/modprobe.conf "
MISC=""
}

function COPIER_FICHIERS_GENTOO {
echo "+-----------------------+"
echo "| Copie des fichiers de |"
echo "|        Gentoo         |"
echo "+-----------------------+"
PROFILE="Gentoo"
HOME=""
XORG="/etc/X11/xorg.conf /etc/conf.d/xdm "
WAYLAND=""
NETWORK="/etc/hosts /etc/resolv.conf /etc/conf.d/domainname /etc/conf.d/hostname"
MIRRORS=""
SYSTEM="/etc/locale.gen /etc/make.conf /etc/rc.conf /etc/conf.d/clock /etc/conf.d/keymaps /etc/conf.d/net"
MISC=""

}

function COPIER_FICHIERS_FREEBSD {
echo "+-----------------------+"
echo "| Copie des fichiers de |"
echo "|        FreeBSD        |"
echo "+-----------------------+"
PROFILE="FreeBSD"
HOME="$HOME/.xinitrc $HOME/.profile $HOME/.login_conf $HOME/.conkyrc"
XORG="/etc/X11/xorg.conf /usr/local/etc/hal/fdi/policy/x11-input.fdi"
WAYLAND=""
NETWORK="/etc/hosts"
MIRRORS=""
SYSTEM="/boot/loader.conf /etc/rc.conf /etc/sysctl.conf /etc/make.conf /etc/profile /etc/login.conf /etc/devfs.rules /usr/local/etc/PolicyKit/PolicyKit.conf /boot/defaults/loader.conf"
MISC="/usr/local/etc/slim.conf /etc/rc.d/slim"
}

function SORTIR {
exit 0;
}

echo -e "\e[1;34mQuels fichiers voulez-vour recuperer ?\e[0m"
echo ""
echo -e "\e[1;34m1 - Fichiers de ArchLinux\e[0m"
echo -e "\e[1;34m2 - Fichiers de Gentoo\e[0m"
echo -e "\e[1;34m3 - Fichiers de FreeBSD\e[0m"
echo -e "\e[1;34mQ - Quitter\e[0m"
echo -e "\e[1;34mChoix : [1/2/3]\e[0m"
read CHOICE

case $CHOICE in
	1)COPIER_FICHIERS_ARCHLINUX;;
	2)COPIER_FICHIERS_GENTOO;;
	3)COPIER_FICHIERS_FREEBSD;;
	q|Q)SORTIR;;
	*)echo -e "\e[1;34mMerci de faire un choix valide [1/2/3].\e[0m";;
esac


for LISTE_FICHIERS in "${HOME} ${XORG} ${WAYLAND} ${NETWORK} ${MIRRORS} ${SYSTEM} ${MISC}"
do
	for FICHIER in ${LISTE_FICHIERS}
	do
		if [ -f "${FICHIER}" ]
		then
			FILENAME=$(basename ${FICHIER})
			DIRECTORYNAME=$(dirname ${FICHIER})
			echo "Sauvegarde de : " ${FILENAME}
			# Si le dossier de profile n'existe pas
			if [ ! -d "${PROFILE}" ]
			then
				# On le cree
				mkdir "${PROFILE}"
			fi
			mkdir -p $(pwd)/"${PROFILE}"${DIRECTORYNAME}
			cp "${FICHIER}" $(pwd)/"${PROFILE}"/"${DIRECTORYNAME}"/"${FILENAME}"
		fi
	done
done
echo -e "\e[1;34mFait.\e[0m"
[ Lien Direct ]
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Avatar de l’utilisateur
hopenux
Daikyu
Messages : 55
Inscription : mer. 15 mai 2013, 16:56

Re: [Scripting] Partage de mes utilitaires

Message par hopenux »

Bonjour, j'aime énormement se principe de partage merci !
Je l'utiliserai donc pour mon projet de console multimedia (cf topic:ARCHBOX).
Avatar de l’utilisateur
Fork Bomb
Daikyu
Messages : 99
Inscription : dim. 29 mai 2011, 15:29
Localisation : Error 404, not found !

Re: [Scripting] Partage de mes utilitaires

Message par Fork Bomb »

Je me suis mis au Dialog depuis quelques mois.
----
SlimThemeChooser.
Comme son nom l’indique, vous aide a choisir un theme pour SLiM parmi ceux présents sur votre système.

Code : Tout sélectionner

#!/usr/bin/env bash
# ==========================================================
# Name: SlimThemeChooser.sh
# Description: Selecteur de thèmes SLiM
# URL: http://captain.ishido.free.fr/?=scr
#
# Made by Captain Ishido
#
#	==== [ Website ] ====
# http://captain.ishido.free.fr/
#
# ==========================================================

# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------
# ---------------------------------------------------- FR ----------------------------------------------------
case "$LANG" in
	fr*)	BACK_TITLE="Sélecteur de thèmes SLiM"
		ERROR_RIGHTS="ERREUR - Problème de droits."
		USER_NOT_ALLOWED="Vous n'êtes pas autorisés à lancer ce programme."
		ERROR_INSTALL_DIALOG="Dialog n’est pas installé, veuillez l’installer."
            ;;
# ---------------------------------------------------- OTHERS ----------------------------------------------------
	*)	BACK_TITLE="SLiM themes chooser"
		ERROR_RIGHTS="ERROR - Rights problems"
		USER_NOT_ALLOWED="You are not allowed to launch this program."
		ERROR_INSTALL_DIALOG="Dialog is not installed, please install it."
            ;;
esac
# ------------------------------- [ DETECTION DE LA LANGUE : AFFICHAGE DES MESSAGES ] -------------------------------

# ------------------------------- [ VARIABLES UTILES ] -------------------------------
MAIN_COMMAND="pacman"
SECONDARY_COMMAND="yaourt"
INSTALL="-S"
YESTOALL="--noconfirm"
OPTIONS="${INSTALL} ${YESTOALL}"
# ------------------------------- [ VARIABLES UTILES ] -------------------------------

# --------------------------- [ VERIFICATION DE L'UTILISATEUR ROOT ] ---------------------------
UTILISATEUR=$(whoami)
# If user is not "root"
if [ "${UTILISATEUR}" != root ]
then
	# ---------------- [ PRESENCE DE DIALOG ] ----------------
	which dialog 1>/dev/null 2>/dev/null
	# Si le code de retour est différent de 0 ("dialog" n’a pas été trouvé)
	if [ $? != 0 ]
	then
		echo "${USER_NOT_ALLOWED}"
		exit 1
	else
		dialog --backtitle "${BACK_TITLE}"\
		--title "${ERROR_RIGHTS}"\
		--msgbox "${USER_NOT_ALLOWED}" 10 35
		exit 1
	fi
	# ---------------- [ PRESENCE DE DIALOG ] ----------------
else
	# ---------------- [ PRESENCE DE DIALOG ] ----------------
	which dialog 1>/dev/null 2>/dev/null
	# Si le code de retour est différent de 0 ("dialog" n’a pas été trouvé)
	if [ $? != 0 ]
	then
		# On l’installe
	${MAIN_COMMAND} ${INSTALL} dialog
	fi
	# ---------------- [ PRESENCE DE DIALOG ] ----------------
fi
# --------------------------- [ VERIFICATION DE L'UTILISATEUR ROOT ] ---------------------------

# --------------------------- [ Affichage de la liste des themes ] ---------------------------
ThemeChoisi=""
while [ -z "${ThemeChoisi}" ]
do
	ListeThemes=$(for LINE in $(find /usr/share/slim/themes/* -depth -type d); do echo "$(basename ${LINE})" \"$(basename ${LINE})\" off; done)
	ThemeChoisi=$(echo "${ListeThemes}"|xargs dialog --stdout --backtitle "${BACK_TITLE}" --title "Choix d’un thème SLiM" --radiolist "Choisissez votre theme :" 18 65 10)
done
# --------------------------- [ Affichage de la liste des themes ] ---------------------------

# On récupère la valeur du theme actuel
CurrentTheme=$(grep current_theme /etc/slim.conf|awk '{print $2}')
# NewTheme prend la valeur de ThemeChoisi
NewTheme="${ThemeChoisi}"
# On modifie le theme de SLiM
sed -i s/$CurrentTheme/$NewTheme/g /etc/slim.conf
# ---------------------- [ Sortie du programme ] -------------------------
dialog --stdout --backtitle "${BACK_TITLE}" --title "Choix d’un thème SLiM - Sortie" --infobox "Votre thème a été modifié de ${CurrentTheme} en ${NewTheme}\n\nRedémarrez pour voir la différence." 18 65
Bépo,TypeMatrix, what best ?
---
« Je ne considère pas les femmes comme des objets, je pense qu'elles ont chacune leur propre classe. »
---
Being an adult is quite easy. Earn your own money and forget all your child's dreams.
Okkusenman ! Okkusenman !
Répondre