Installer ImageMagick sur Mac :
$ brew install ImageMagick

Avec mon appareil photo con Nikon, les photos comportent une marge grise.
Ce qui a pour effet d’empêcher de les visionner sur la Freebox.

Marge gauche et en haut = 30px
Taille de la photo finale = 1540x978px

Pour retailler la photo et virer les marges :
convert PHOTO.JPG -crop 1540x978+30+30 CROPPED-PHOTO.JPG

Pour faire tout le répertoire en 1 passe :
for file in *.JPG; do convert $file -crop 1540x978+30+30 Cropped-$file; done

Installer le serveur graphique :
# apt-get install xorg

Installer i3 :
# apt-get install i3

Lancer le serveur X (AVEC UN UTILISATEUR NORMAL):
$ startx

Eventuel problème de droits, faire :
# chmod u+s /usr/bin/xinit

Pour avoir le clavier AZERTY au lancement de i3, ajouter dans le fichier ~/.config/i3/config :
setxkbmap fr

Read and write HFS+ journaled external HDD in Debian :

Installer hfsprogs :
# apt-get install hfsprogs

Mount the HFS+ drive :
# mount -t hfsplus -o force,rw /dev/sdXY /media/mntpoint

Détacher un processus :
Lancer Tmux, lancer le processus, et détacher avec Ctrl-A + D
(ou Ctrl-B + D pour la version Tmux par défaut)

Rattacher la session Tmux :
$ tmux attach

Modifier les droits récursivement de tous les fichiers rw-r–r– (644) en rw-rw-r– (664) :
$ find monrepertoire/ -perm 644 -type f -print -exec chmod 664 {} \;

Modifier les droits récursivement de tous les répertoires drwxr-xr-x (755) en drwxrwxr-x (775) :
$ find monrepertoire/ -perm 755 -type d -print -exec chmod 775 {} \;

Ouvrir un fichier avec vim :
$ sudo vi /etc/hosts
Saisir le mot de passe de l’ordinateur.
(Lorsqu’on saisit le mot de passe il n’y a rien qui s’affiche, même pas des *, c’est normal…)

MODES :
Taper sur la touche i pour passer en mode “Insertion”.
Taper sur la touche Esc pour passer en mode “Commande”.
Attention, quand on ouvre Vim, on est en mode “Commande”.

Modifier le fichier :
Taper i pour passer en mode “Insertion”
Modifier le fichier de manière classique.

Annuler
Passer en mode “Commande” en faisant Esc
Taper u autant de fois que nécessaire

Sauvegarder et quitter:
Passer en mode “Commande” en faisant Esc
Taper :wq

Quitter sans sauvegarder
Passer en mode “Commande” en faisant Esc
Taper :q!

Afficher le format du stream audio :
$ ffmpeg -i <nom de la video> 2>&1 \; | grep Audio | awk '{print $4}'

Convertir si besoin en mp4 :
$ ffmpeg -i video.m4v video.mp4

Réduire la résolution des vidéos :
Soit une vidéo 1920×1440 qui pèse 118Mo
$ ffmpeg -i input.MP4 -vf scale=480:360 output.MP4
—> Une vidéo 480×360 qui pèse 3Mo

Convertir une vidéo .MP4 au format .webm :
$ ffmpeg -i input.MP4 -c:v libvpx -b:v 1M -c:a libvorbis output.webm

La même chose en 1 passe :
(Convertir une grosse vidéo .MP4 en une petite .webm)
$ ffmpeg -i input.MP4 -vf scale=480:360 -c:v libvpx -b:v 1M -c:a libvorbis output.webm

Concaténer des vidéos :
Créer un fichier avec la liste des videos à concaténer :
$ find . -name "*.mp4" -exec echo file \'{}\' >> list.txt \;

Concaténer les vidéos :
$ ffmpeg -f concat -i list.txt -c copy final.mp4

Installation pour MacOs :
$ brew install ffmpeg --with-libvpx --with-libvorbis --with-fdk-aacc

Scanner la plage ip :
# nbtscan 192.168.1.0/24

Afficher les partages disponibles :
# smbclient -L [nom du poste]

Installer cifs :
# apt-get install cifs-utils

Créer un container local :
# mkdir -p /media/partage

Se connecter :
# mount -t cifs //192.168.1.x/nom_du_partage /media/partage

Besoin d’un mot de passe ? :
# mount -t cifs -o username=USER,password=PASS //192.168.1.x/nom_du_partage /media/partage

Ajouter l’option “mfsymlinks” pour la création de liens symboliques :
# mount -t cifs -o username=USER,password=PASS,mfsymlinks //192.168.1.x/nom_du_partage /media/partage

 

Déconnecter le partage :
# umount /media/partage

Method 1: PIPED while-read loop

#!/bin/bash
FILENAME=$1
count=0
cat $FILENAME | while read LINE
do
       let count++
       echo "$count $LINE"
done

echo -e "\nTotal $count Lines read"

 

Method 2: Redirected “while-read” loop

#!/bin/bash
FILENAME=$1
count=0

while read LINE
do
      let count++
      echo "$count $LINE"

done < $FILENAME

echo -e "\nTotal $count Lines read"

 

Method 3:while read LINE Using File Descriptors

#!/bin/bash
FILENAME=$1
count0=
exec 3<&0
exec 0< $FILENAME

while read LINE
do
        let count++
        echo "$count $LINE"
done

exec 0<&3
echo -e "\nTotal $count Lines read"

 

Method 4: Process file line by line using awk

#!/bin/bash
FILENAME=$1

awk '{kount++;print  kount, $0}
     END{print "\nTotal " kount " lines read"}' $FILENAME

 

Time Comparison

# du -h bigfile.txt
70M     bigfile.txt
# wc -l bigfile.txt
900000 bigfile.txt

 

# time ./method1.sh bigfile.txt >/dev/null
real    6m2.911s
user    2m58.207s
sys     2m58.811s

# time ./method2.sh bigfile.txt > /dev/null
real    2m48.394s
user    2m39.714s
sys     0m8.089s

# time ./method3.sh bigfile.txt > /dev/null
real    2m48.218s
user    2m39.322s
sys     0m8.161s

# time ./method4.sh bigfile.txt > /dev/null
real    0m2.054s
user    0m1.924s
sys     0m0.120s

 

Source de cet article : http://www.bashguru.com/2010/05/how-to-read-file-line-by-line-in-shell.html
(Article complet avec explications, mais aussi plein de pubs^^)

Brackets
if [ CONDITION ]           Test construct
if [[ CONDITION ]]         Extended test construct
Array[1]=element1        Array initialization
[a-z]                               Range of characters within a Regular Expression

Curly Brackets
${variable}                                                          Parameter substitution
${!variable}                                                         Indirect variable reference
{ command1; command2; . . . commandN; }    Block of code
{string1,string2,string3,…}                                 Brace expansion
{a..z}                                                                   Extended brace expansion
{}                                                                        Text replacement, after find and xargs

Parentheses
( command1; command2 )                       Command group executed within a subshell
Array=(element1 element2 element3)      Array initialization
result=$(COMMAND)                               Command substitution, new style
>(COMMAND)                                          Process substitution
<(COMMAND)                                          Process substitution

Double Parentheses
(( var = 78 ))                            Integer arithmetic
var=$(( 20 + 5 ))                      Integer arithmetic, with variable assignment
(( var++ ))                                C-style variable increment
(( var– ))                                  C-style variable decrement
(( var0 = var1<98?9:21 ))       C-style trinary operation