Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
informatique:divers [2019/02/22 02:57] – [Utiliser youtube-dl] alexis | informatique:divers [2024/11/24 14:19] (Version actuelle) – alexis |
---|
====== Divers ====== | ====== Divers ====== |
Cette page est un fourre-tout de tout ce qui ne peut pas faire l'objet d'une page. Quand il y aura plusieurs choses qui pourront faire l'objet d'une page, elles seront déplacées. | |
| |
===== Modifier le contenu d'un fichier avec Perl ===== | <catlist informatique:divers -sortByTitle -noHead> |
<code bash> | |
perl -i -p -e 's/search/replacement/g' <fichier> | |
</code> | |
* ''%%-i%%'' permet de modifier le fichier directement. | |
* ''%%-p%%'' permet d'ajouter une boucle autour du programme à appliquer. | |
* ''%%-e%%'' permet de saisir un programme d'une ligne. | |
| |
===== Redémarrer un router D-link ===== | |
| |
Bien sur il est possible de le faire depuis l'interface web. C'est facile mais pas très rapide. Il est aussi possible de le faire depuis la console en utilisant CURL. | |
<code bash> | |
curl -u '<utilisateur>:<mot de passe>' 'http://192.168.0.1/reboot.xgi' | |
</code> | |
Et pour aller encore plus vite, pourquoi ne pas en faire un alias. | |
| |
===== Concaténer des fichiers sous Windows ===== | |
Il est possible de contaténer différents fichiers et de les afficher sur la sortie standard. | |
| |
<code dos> | |
type <fichier1> <fichier2> | |
</code> | |
| |
===== Déplacer des colonnes de données dans Excel ===== | |
Il y a la méthode fastidieuse qui consiste à sélectionner les colonnes, les copier, insérer des colonnes vides, coller le contenu des copiées, supprimer les colonnes copiées. | |
| |
Il y a aussi la méthode simple qui consiste à sélectionner les colonnes et les déplacer en appuyant sur la touche ''Shift'' et en cliquant sur l'icône de déplacement. | |
| |
===== Relancer l'explorer de Windows ===== | |
Après une mise à jour de Git pour Windows, j'ai eu ma barre de tâche qui a disparue. Il suffit de relancer le programme ''%%explorer.exe%%''. | |
| |
| |
===== Copier un répertoire avec rsync ===== | |
<code bash> | |
# Version courte | |
rsync -avz --delete --force <source> <destination> | |
| |
# Version courte étendue | |
rsync -rlptgoDvz --delete --force <source> <destination> | |
| |
# Version longue | |
rsync --archive --verbose --compress --delete --force <source> <destination> | |
| |
# Version longue étendue | |
rsync --recursive --links --perms --times --group --owner --devices --specials --verbose --compress --delete --force <source> <destination> | |
</code> | |
| |
* ''%%-a%%'' ou ''%%--archive%%'' active le mode archive. Il est équivalent à ''%%-rlptgoD%%'' ou ''%%--recursive --links --perms --times --group --owner --devices --specials%%''. | |
* ''%%-v%%'' ou ''%%--verbose%%'' augmente la verbosité. | |
* ''%%-z%%'' ou ''%%--compress%%'' compresse les fichiers durant le transfert. | |
* ''%%--delete%%'' supprime les éléments présents dans le répertoire de destination qui n'existent pas dans le répertoire source. | |
* ''%%--force%%'' force la suppression des répertoires même s'ils ne sont pas vides. | |
* ''%%-r%%'' ou ''%%--recursive%%'' traite les répertoires récursivement. | |
* ''%%-l%%'' ou ''%%--links%%'' copie les liens symboliques comme des liens symboliques. | |
* ''%%-p%%'' ou ''%%--perms%%'' conserve les droits d'accès. | |
* ''%%-t%%'' ou ''%%--times%%'' conserve les dates de modification. | |
* ''%%-g%%'' ou ''%%--group%%'' conserve les groupes. | |
* ''%%-o%%'' ou ''%%--owner%%'' conserve le propriétaire (uniquement pour le super utilisateur). | |
* ''%%-D%%'' ou ''%%--devices --specials%%'' : | |
* ''%%--devices%%'' conserve les fichiers //device//. | |
* ''%%--specials%%'' conserve les fichiers spéciaux. | |
| |
===== Afficher la liste des paquets installés avec Cygwin ===== | |
<code bash> | |
cygcheck --check-setup | |
</code> | |
| |
===== Télécharger des photos depuis un appareil photo ===== | |
<code bash> | |
# Version courte | |
gphoto2 --auto-detect -P --skip-existing | |
| |
# Version longue | |
gphoto2 --auto-detect --get-all-files --skip-existing | |
</code> | |
| |
* ''%%--auto-detect%%'' permet de lister les appareils connectés. | |
* ''%%-P%%'' ou ''%%--get-all-files%%'' permet de récupérer l'ensemble des fichiers trouvés. | |
* ''%%--skip-existing%%'' permet de ne télécharger que ceux absents. | |
| |
Pour plus de détails sur l'utilisation de gphoto2, il y a la [[http://www.gphoto.org/doc/manual/using-gphoto2.html|documentation officielle]]. | |
| |
===== Naviguer sur un site pour trouver les liens morts ===== | |
<code bash> | |
# Version courte | |
wget -r -l2 -H --spider -np -D ainw.org -nv -T 20 https://www.ainw.org | |
| |
# Version longue | |
wget --recursive --level=2 --span-hosts --spider --no-parent --domains=ainw.org --no-verbose --timeout=20 http://www.ainw.org | |
</code> | |
| |
* ''%%-r%%'' ou ''%%--recursive%%'' active la récupération récursive. | |
* ''%%-l%%'' ou ''%%--level%%'' détermine le niveau de récursion maximum. | |
* ''%%-H%%'' ou ''%%--span-hosts%%'' étend la recherche sur d'autres hôtes. | |
* ''%%--spider%%'' vérifie la présence des pages mais ne les télécharge pas. | |
* ''%%-np%%'' ou ''%%--no-parent%%'' limite la recherche aux répertoires enfants. | |
* ''%%-D%%'' ou ''%%--domains%%'' liste les domaines à suivre. | |
* ''%%-nv%%'' ou ''%%--no-verbose%%'' affiche uniquement les messages d'erreurs et les informations minimales. | |
* ''%%-T%%'' ou ''%%--timeout%%'' fixe la limite d'attente sur le réseau. | |
| |
===== Extraire les images d'un site ===== | |
<code bash> | |
# Version courte | |
wget -nd -r -P ainw.org -Ajpg,jpeg --reject-regex ".*thumb.*" -l2 https://www.ainw.org | |
| |
# Version longue | |
wget --no-directories --recursive --directory-prefix ainw.org --accept jpg,jpeg --reject-regex ".*thumb.*" --level 2 https://www.ainw.org | |
</code> | |
| |
* ''%%-nd%%'' ou ''%%--no-directories%%'' ne cré pas l'arbre des répertoires. | |
* ''%%-r%%'' ou ''%%--recursive%%'' active la récupération récursive. | |
* ''%%-P%%'' ou ''%%--directory-prefix%%'' indique le répertoire d'enregistrement des fichiers téléchargés. | |
* ''%%-A%%'' ou ''%%--accept%%'' conditionne la fin des noms des fichiers à télécharger. | |
* ''%%--reject-regex%%'' rejette les URL ne respectant pas le motif. | |
* ''%%-l%%'' ou ''%%--level%%'' détermine le niveau de récursion maximum. | |
===== Extraire des fichiers d'une archive en ligne ===== | |
<code bash> | |
# Version courte | |
curl -L https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar -x -J -f - -C /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmltopdf wkhtmltox/bin/wkhtmltoimage | |
| |
# Version longue | |
curl --location https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar --extract --xz --file - --directory /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmltopdf wkhtmltox/bin/wkhtmltoimage | |
| |
</code> | |
| |
* Option de ''curl'' | |
* ''%%-L%%'' ou ''%%--location%%'' refait la requête en cas de redirection. | |
* Option de ''tar'' | |
* ''%%-x%%'' ou ''%%--extract%%'' extrait les fichiers de l'archive. | |
* ''%%-J%%'' ou ''%%--xz%%'' filtre l'archive avec [[https://en.wikipedia.org/wiki/Xz|xz]]. | |
* ''%%-f%%'' ou ''%%--file%%'' utilise l'archive spécifiée. | |
* ''%%-C%%'' ou ''%%--directory%%'' change le répertoire de travail avant toute opération. | |
* ''%%--strip%%'' supprime les **//n//** répertoires précédant le fichier. | |
| |
<WRAP info> | |
Cette syntaxe est obligatoire lors de l'écriture de fichier Docker. Dans le cas de l'utilisation dans bash, on peut écrire la commande différemment : | |
<code bash> | |
curl -L https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar -x -J -f - -C /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmlto{pdf,image} | |
</code> | |
</WRAP> | |
| |
===== Renommer des fichiers ===== | |
Pour renommer des fichiers numérotés avec espaces de la forme ''mon fichier 01.txt'' en ''01-mon fichier 01.txt'', on peut utiliser ''sed'' et ''mv'' de la manière suivante : | |
<code bash> | |
IFS=$'\n' | |
for SOURCE in *; do | |
TARGET=$(echo $SOURCE| sed -e 's/\(.*\([0-9][0-9]\).*\)/\2-\1/') | |
mv $SOURCE $TARGET | |
done | |
IFS=$' \t\n' | |
</code> | |
<WRAP important> | |
Il faut noter que l'utilisation de ''sed'' dans cette configuration est gourmande. Si on essaye de renommer ''mon fichier 01 - 55.txt'', on aura le fichier ''55-mon fichier 01 - 55.txt'' au lieu de ''01-mon fichier 01 - 55.txt''. Dans ce cas, il faudra utiliser la commande suivante : | |
<code bash> | |
IFS=$'\n' | |
for SOURCE in *; do | |
TARGET=$(echo $SOURCE| sed -e 's/\([^0-9]*\([0-9][0-9]\).*\)/\2-\1/') | |
mv $SOURCE $TARGET | |
done | |
IFS=$' \t\n' | |
</code> | |
</WRAP> | |
| |
Il existe aussi un script Perl qui permet de faire cela à l'aide d'expressions régulières. Il est installé par défaut sur certaines distributions (ex : Ubuntu) mais pas sur d'autres (ex : Archlinux). | |
On peut l'utiliser de la manière suivante : | |
<code bash> | |
# Renommer "fichier1" et "fichier2" en "fichier1.bak" et "fichier2.bak" | |
rename 's/$/.bak/' fichier{1,2} | |
| |
# Renommer "fichier 1" et "fichier 2" en "fichier1.bak" et "fichier2.bak" | |
rename 's/ ([1,2])$/$1.bak/' fichier\ {1,2} | |
| |
# Renommer "premier gros fichier" en "premier.Gros.Fichier" | |
rename 's/ (.)/.\u$1/g' premier\ gros\ fichier | |
| |
# Renommer "exemple d'un gros fichier" en "exemple.D.Un.Gros.Fichier" | |
rename 's/[ '"'"'](.)/.\u$1/g' exemple\ d\'un\ gros\ fichier | |
| |
# Renommer "fichier1" et "fichier2" en "FICHIER1" et "FICHIER2" | |
rename 's/(.)/\u$1/g' fichier{1,2} | |
rename 'y/a-z/A-Z/' fichier{1,2} | |
| |
# Renommer "FICHIER1" et "FICHIER2" en "fichier1" et "fichier2" | |
rename 's/(.)/\l$1/g' FICHIER{1,2} | |
rename 'y/A-Z/a-z/' FICHIER{1,2} | |
</code> | |
| |
<WRAP important> | |
Sur Ubuntu, les commandes sont utilisables directement. Sur Archlinux, il faut préfixer toutes les commandes par ''perl-''. Par exemple : | |
<code bash> | |
perl-rename 's/$/.bak/' fichier{1,2} | |
# au lieu de | |
rename 's/$/.bak/' fichier{1,2} | |
</code> | |
</WRAP> | |
| |
===== Ajouter un type dans ack ===== | |
| |
Il faut modifier le fichier //[[https://metacpan.org/pod/ack#Use-the-.ackrc-file|.ackrc]]// et y ajouter : | |
<code - .ackrc> | |
# Avec une seule extension | |
--type-set=api:ext:apib | |
| |
# Avec plusieurs extensions | |
--type-set=markdown:ext:md,apib | |
</code> | |
| |
On peut visualiser le nouveau type en lançant la commande : | |
<code bash> | |
ack --help=types | |
</code> | |
| |
Pour plus d'information, voir [[https://metacpan.org/pod/ack#Defining-your-own-types|ici]] et dans la [[https://beyondgrep.com/documentation/|documentation officielle]] | |
| |
===== Extraire une liste de chaînes de caractères ===== | |
J'ai envie de récupérer l'ensemble des codes d'erreurs générés par mon API pour pouvoir les documenter. | |
<code bash> | |
# Version courte | |
grep -roh --exclude="*.apib" "api.error[^'\"]*" src/ | |
| |
# Version longue | |
grep --recursive --only-matching --no-filename --exclude="*.apib" "api.error[^'\"]*" src/ | |
</code> | |
| |
* ''%%-r%%'' ou ''%%--recursive%%'' traite les répertoires récursivement. | |
* ''%%-o%%'' ou ''%%--only-matching%%'' affiche ce qui correspond à la recherche. | |
* ''%%-h%%'' ou ''%%--no-filename%%'' supprime l'affichage des noms de fichiers. | |
* ''%%--exclude%%'' exclus les fichiers correspondants lors du traitement. | |
| |
===== Utiliser youtube-dl ===== | |
C'est un [[http://rg3.github.io/youtube-dl/|outil en ligne de commande]] qui permet de télécharger des vidéos sur différents sites (youtube, …). | |
<code bash> | |
# Télécharger une vidéo | |
youtube-dl <url> | |
| |
# Télécharger une liste de vidéos depuis un fichier | |
youtube-dl -a <file> | |
| |
# Télécharger une vidéo en spécifiant la meilleur qualité | |
youtube-dl -f best <url> | |
youtube-dl --format best <url> | |
| |
# Télécharger une vidéo en spécifiant le format | |
youtube-dl -f mp4 <url> | |
youtube-dl --format mp4 <url> | |
</code> | |