|
Size: 5866
Comment: minor fix
|
Size: 5895
Comment: so many misspellings
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 15: | Line 15: |
| df -h # affichage lisible par les humains (en mega et giga octet)}}} | df -h # affichage lisible par les humains (en mega et giga octet) }}} |
| Line 17: | Line 18: |
| == Mon système est pleins. Comment puis-je voir où se trouve les plus gros fichiers ? == | == Mon système est plein. Comment puis-je voir où se trouvent les plus gros fichiers ? == |
| Line 28: | Line 29: |
| Si vous voulez garder vos .deb, vous pouvez filter la liste ainsi : | Si vous voulez garder vos .deb, vous pouvez filtrer la liste ainsi : |
| Line 33: | Line 34: |
| Si vous voulais voir les gros répertoires au lieu des fichiers, vous pouvez le faire ainsi : | Si vous voulez voir les gros répertoires au lieu des fichiers, vous pouvez le faire ainsi : |
| Line 38: | Line 39: |
| == Je possède beaucoup de mp3... Comment puis-je tous les renomer en remplaçant les espaces par des soulignés ? == | == Je possède beaucoup de mp3... Comment puis-je tous les renommer en remplaçant les espaces par des tirets bas _ ? == |
| Line 41: | Line 42: |
| La commande {rename} n'est pas une commande Unix classique mais elle est inclus dans perl qui est installé par défaut dans Debian bien sur. | La commande {rename} n'est pas une commande Unix classique mais elle est incluse dans perl qui est installé par défaut dans Debian bien sûr. |
| Line 44: | Line 45: |
| C'est un peu compliqué. Vous pouvez récupérer la liste des fichiers à passer à {rename} grâce à {find}, mais si vous renomer les répertoire avant les fichiers qu'ils contiennent, {rename} ne réussiras pas. Vous devez utiliser {-depth} avec {find} pour être sur que les fichiers seront renomser avant les répertoires qui les contiens. | C'est un peu compliqué. Vous pouvez récupérer la liste des fichiers à passer à {rename} grâce à {find}, mais si vous renomer les répertoire avant les fichiers qu'ils contiennent, {rename} ne réussira pas. Vous devez utiliser {-depth} avec {find} pour être sûr que les fichiers seront renommés avant les répertoires qui les contiennent. |
| Line 54: | Line 55: |
| == Comment faire pour renomer (récursivement) tout les fichiers en majuscule pour qu'ils soient en minuscule ? == | == Comment faire pour renommer (récursivement) tout les fichiers en majuscule pour qu'ils soient en minuscule ? == |
| Line 60: | Line 61: |
| Trois autre façon : | Trois autres façons : |
| Line 75: | Line 76: |
| Si c'est une commande général, utilisez {watch} : | Si c'est une commande générale, utilisez {watch} : |
| Line 92: | Line 93: |
| Note : un seul argument dans les crochets (« [] ») est équivalent à {{{[ -n argument ]}}}. Il ne semble y avoir aucun moyen propre pour le faire en utilisant commandes intégrées du shell. (Nous avons fais une tentative antérieure qui était proche, mais qui a échouée, si il y avait un fichier nommé * dans le répertoire.) | Note : un seul argument dans les crochets (« [] ») est équivalent à {{{[ -n argument ]}}}. Il ne semble y avoir aucun moyen propre pour le faire en utilisant les commandes intégrées du shell. (Nous avons fais une tentative antérieure qui était proche, mais qui a échouée, si il y avait un fichier nommé * dans le répertoire.) |
| Line 101: | Line 102: |
| De facon brève : {{{[ $(ls -A somedir) ] && echo "le dossier n'est pas vide"}}} | De façon brève : {{{[ $(ls -A somedir) ] && echo "le dossier n'est pas vide"}}} |
| Line 103: | Line 104: |
| Note : Le double esperluette (&) représente un « et » booléen, alors le " if " n'est pas nécessaire. | Note : La double esperluette (&) représente un « et » booléen, alors le " if " n'est pas nécessaire. |
| Line 110: | Line 111: |
| ou appuyer sur ''Ctrl+Z'' quand la commande est lancée (cela va la stoper) et utiliser par exemple | ou appuyer sur {{{Ctrl+Z}}} quand la commande est lancée (cela va la stopper) et utiliser par exemple |
| Line 118: | Line 119: |
| pour le lancer en premier plan (''Ctrl+Z'' va le stoper de nouveau et le mettre en tâche de fond) et utilisez | pour le lancer en premier plan ({{{Ctrl+Z}}} va le stopper de nouveau et le mettre en tâche de fond) et utilisez |
| Line 124: | Line 125: |
| == Comment travailler avec des tableau en bash ? == | == Comment travailler avec des tableaux en bash ? == |
| Line 139: | Line 140: |
| (Dans l'exemple précédent, notez que les crochets servent aussi à forcée l'évalutation numérique, dans celui-ci RANDOM n'a pas besoin de $.) | (Dans l'exemple précédent, notez que les crochets servent aussi à forcer l’évaluation numérique, dans celui-ci RANDOM n'a pas besoin de $.) |
| Line 141: | Line 142: |
| Vous ne pouvez pas facilement supprimer un élément d'un tableau, mais vous pouvez contourner le problème en utilisant la commande unset sur un élement du tableau : | Vous ne pouvez pas facilement supprimer un élément d'un tableau, mais vous pouvez contourner le problème en utilisant la commande unset sur un élément du tableau : |
Contents
-
Astuces pour faire des scripts shell
- Comment voir l'espace disque utilisé ?
- Mon système est plein. Comment puis-je voir où se trouvent les plus gros fichiers ?
- Je possède beaucoup de mp3... Comment puis-je tous les renommer en remplaçant les espaces par des tirets bas _ ?
- Comment puis-je le faire de manière récursive ?
- Comment faire pour renommer (récursivement) tout les fichiers en majuscule pour qu'ils soient en minuscule ?
- Comment faire pour supprimer un fichier dont le nom commence par "-" ?
- Comment faire pour voir le contenu d'un fichier en temps réel ?
- Comment récupérer le nom du fichier dans un chemin complet ?
- Comment tester si un dossier possède des fichiers ?
- Comment lancer un processus en tâche de fond ?
- Comment travailler avec des tableaux en bash ?
- Comment utiliser une variable dans une variable en bash ?
- Comment compter le nombre de ligne dans les fichiers qui ont une certaines extension en bash ?
Astuces pour faire des scripts shell
Note : Le wiki Debian n'est peut-être pas le meilleur endroit pour trouver de l'aide dans la création de scripts shell. Si vous rencontrez des problèmes vous devriez vous reporter à la documentation du shell que vous utilisez (bash, zsh, tcsh, dash,...).
Comment voir l'espace disque utilisé ?
df df -h # affichage lisible par les humains (en mega et giga octet)
Mon système est plein. Comment puis-je voir où se trouvent les plus gros fichiers ?
cd /quelquepart du -sk * # Répéter autant que nécessaire
Une autre voie :
find /quelquepart -size +2000k -ls # Cela montre tout les fichiers plus lourd que 2000 kilo octets dans /quelquepart
Si vous voulez garder vos .deb, vous pouvez filtrer la liste ainsi :
find / -size +2000k -ls | awk ' substr($NF, length($NF) - 3, 4) != ".deb" ' # Cela montre tout les fichiers sur votre système plus lourd que 2000 kilo octets qui ne sont pas des paquets debian
Si vous voulez voir les gros répertoires au lieu des fichiers, vous pouvez le faire ainsi :
du -x /quelquepart | sort -n | tail -10 # Cela montre les 10 plus gros répertoires dans /quelquepart
Je possède beaucoup de mp3... Comment puis-je tous les renommer en remplaçant les espaces par des tirets bas _ ?
rename 's/ /_/g' *.mp3
La commande {rename} n'est pas une commande Unix classique mais elle est incluse dans perl qui est installé par défaut dans Debian bien sûr.
Comment puis-je le faire de manière récursive ?
C'est un peu compliqué. Vous pouvez récupérer la liste des fichiers à passer à {rename} grâce à {find}, mais si vous renomer les répertoire avant les fichiers qu'ils contiennent, {rename} ne réussira pas. Vous devez utiliser {-depth} avec {find} pour être sûr que les fichiers seront renommés avant les répertoires qui les contiennent.
cd /quelquepart find . -depth -name '* *' -type f -print0 | xargs -r0 rename 's/ /_/g'
Avec la version 4 de bash (et zsh) vous pouvez utiliser les "globing" (exemple pour les mp3) :
rename 's/ /_/g' **/*.mp3
Comment faire pour renommer (récursivement) tout les fichiers en majuscule pour qu'ils soient en minuscule ?
Comment faire pour supprimer un fichier dont le nom commence par "-" ?
unlink -monfichier
Trois autres façons :
rm -- -monfichier rm ./-monfichier utiliser mc, et appuyer sur F8 lorsque le fichier en question est sélectionné
La deuxième façon fonctionne avec tout les programmes en ligne de commande et pas uniquement {rm}.
Comment faire pour voir le contenu d'un fichier en temps réel ?
Si c'est un fichier de log, on regarde la fin du fichier :
tail -f /var/log/messages
ou
less +F /var/log/messages
Si c'est une commande générale, utilisez {watch} :
watch -n 1 ls -l ~/un/fichier
Comment récupérer le nom du fichier dans un chemin complet ?
Deux solutions :
basename /chemin/vers/un/fichier
var=/chemin/vers/un/fichier ; echo ${var##*/}
Comment tester si un dossier possède des fichiers ?
if [ "$(ls -A undossier)" ]; then
echo "Il a des fichiers"
fiNote : un seul argument dans les crochets (« [] ») est équivalent à [ -n argument ]. Il ne semble y avoir aucun moyen propre pour le faire en utilisant les commandes intégrées du shell. (Nous avons fais une tentative antérieure qui était proche, mais qui a échouée, si il y avait un fichier nommé * dans le répertoire.)
Une autre technique :
if [ "$(ls -A undossier | wc -l)" -gt 0 ]; then
echo "Fichiers trouvés"
fiDe façon brève : [ $(ls -A somedir) ] && echo "le dossier n'est pas vide"
Note : La double esperluette (&) représente un « et » booléen, alors le " if " n'est pas nécessaire.
Comment lancer un processus en tâche de fond ?
Il suffit d'ajouter une esperluette à la fin :
cp bigfile bigfile2 &
ou appuyer sur Ctrl+Z quand la commande est lancée (cela va la stopper) et utiliser par exemple
bg cp
pour relancer le processus en tâche de fond
fg cp
pour le lancer en premier plan (Ctrl+Z va le stopper de nouveau et le mettre en tâche de fond) et utilisez
kill cp
pour le tuer.
Comment travailler avec des tableaux en bash ?
Initialiser un tableau :
arr=(un deux trois quatre) myoggs=(*.ogg)
Pour itérer sur un tableau :
for f in "${myoggs[@]}"; do ...; doneChoisir une case au hasard :
mysigs=($HOME/sigs/*)
cat ${mysigs[RANDOM % ${#mysigs[*]}]}
}}
(Dans l'exemple précédent, notez que les crochets servent aussi à forcer l’évaluation numérique, dans celui-ci RANDOM n'a pas besoin de $.)
Vous ne pouvez pas facilement supprimer un élément d'un tableau, mais vous pouvez contourner le problème en utilisant la commande unset sur un élément du tableau :
{{{
arr=(zero un deux trois quatre)
unset arr[1]
arr=("${arr[@]}")Cela permettra aussi laisser tous les éléments vides en place.
Comment utiliser une variable dans une variable en bash ?
Comment compter le nombre de ligne dans les fichiers qui ont une certaines extension en bash ?
