Actions

Cours

Manipulation de fichiers avec Bash

De GBLL, TAL, ALAO, etc.

Cette page a pour objectif de vous présenter quelques commandes bash pour manipuler des fichiers et du texte sur votre ordinateur.

Installation de Bash

  • Si vous êtes sur Windows, vous avez plusieurs 2 possibilités :
    • Installer Bash For Windows, le plus simple pour une utilisation limitée, typiquement Git en ligne de commande.
    • Activer le terminal Linux/Bash natif de Windows10, qui vous permettra d'utiliser la plupart des commandes Linux.
  • Si vous êtes sur Mac, il suffit d'ouvrir votre terminal.
  • Si vous êtes sur Linux, il suffit d'ouvrir votre terminal.


Quelques tutos pouvant aider :


Ouvrir le terminal Bash

(parmi de nombreuses façons d'ouvrir votre terminal)

  • WINDOWS avec Git Bash : Dans le dossier de votre choix, clic droit puis Git Bash Here ;
  • Linux : ctrl+alt+t, ou dans un dossier clic droit puis ouvrir dans un terminal ;
  • Mac : entrez "terminal" dans le dock.

Certaines commandes présentées sur cette page sont susceptibles de ne pas fonctionner avec Bash For Windows (qui est un peu limité).

D'autres tuto :

Bases de la base

Redirection des entrées/sorties 🔃

  • < : Lire depuis un fichier d'entrée
  • > : Écrire dans un fichier de sortie (crée ou écrase le fichier de sortie)
  • >> : Append à la suite, sans écraser le fichier de sortie
  • | : Rediriger la sortie de la commande précédente vers l'entrée de la commande suivante (pipe[1])

Commandes basiques de navigation ⛵

  • pwd : Affiche le chemin absolu depuis la racine jusqu'au rép. courant
  • cd <chemin> : Aller vers <chemin> (absolu ou relatif à partir du rép. courant)
    • cd sousDossier : Aller dans sousDossier
    • cd .. : Aller dans le répertoire parent
    • cd / : Aller à la racine de l'ordinateur (sur Windows — gitbash —, il s'agit du dossier où est installé Git)
    • cd ~ : Revenir au répertoire Home
  • ls : Liste les fichiers et dossiers présents dans le répertoire courant
    • ls -F : idem, liste que les fichiers
    • ls -F /home : Liste les fichiers dans le rép. /home
    • ls -a : Liste également les fichiers et dossiers cachés
    • ls -l : Affiche le détail de chaque élément
    • ls -sh : Affiche la taille
    • ls -shS : Affiche la taille et trie par taille
    • ls -R : Récursif : détail le contenu de chaque sous-répertoires

Manipulation de fichiers

  • cat fichier.txt : Affiche le contenu du fichier dans le terminal
    • more fichier.txt : Afficher le contenu du fichier petit à petit (appuyer sur espace ou entrée pour afficher plus, ctrl+c pour quitter)
    • head fichier.txt : Affiche les 10 premières lignes
    • tail fichier.txt : Affiche les 10 dernières lignes
    • head -n 50 fichier.txt : Affiche les 50 premières lignes
    • vim fichier.txt : Éditer le fichier.txt avec vim (éditeur en ligne de commande)
    • nano fichier.txt : Éditer le fichier.txt avec nano (éditeur en ligne de commande)
    • touch fichier.txt : Créer un fichier nommé fichier.txt
    • cp fichier.txt nouveauNom.txt : Copie fichier.txt et le renomme en "nouveauNom.txt"
    • mv fichier.txt nouveauNom.txt : Renomme fichier.txt en "nouveauNom.txt"
    • cp fichier.txt sousDossier/ : Copie fichier.txt dans le répertoire "sousDossier"
    • mv fichier.txt sousDossier/ : Déplace fichier.txt vers le répertoire "sousDossier"
    • rm fichier.txt : Supprime fichier.txt (Attention, pas de passage par la corbeille)
    • rm -y fichier.txt : Supprime en demandant confirmation

Manipulation de dossiers

  • mkdir nomDossier : Crée un nouveau dossier "nomDossier"
  • cp -R nomDossier ../ : Copie le dossier nomDossier dans le répertoire parent
  • mv -R nomDossier ../ : Déplace le dossier nomDossier dans le répertoire parent
  • rm -R nomDossier : Supprime le dossier nomDossier

Analyses et manipulations un peu plus avancées

Comptage

  • wc fichier.txt : Affiche le nombre de lignes, nombe de mots et nombre de caractères de fichiers.txt
    • wc *.txt : Affiche les infos pour chaque fichier .txt
    • wc -l fichier.txt : Affiche que le nombre de lignes
    • wc -w : Affiche que le nombre de mots
    • wc *.txt > monFichier.txt : Enregistre l'output de wc dans monFichier.txt (💩?)
    • ls -l monDossier | wc -l : Compte les fichiers dans le répertoire monDossier

Tri

  • sort monFichier.txt : Tri les lignes alphabétiquement
    • sort -n monFichier.txt : Tri numériquement
    • sort -nr monFichier.txt : Ordre numérique inversé
    • sort -d monFichier.txt : Tri dictionnarique
    • sort -f monFichier.txt : Tri en ignorant la casse (majuscules/minuscules)
    • sort -k 1 monTableau.csv : Tri sur la colonne 1 (la première est 0)
    • sort -k 1.5 monTableau.csv : Tri sur le 5ème caractère de la colonne 1
    • sort -n monFichier.txt | head -n 1 : Tri numériquement et affiche la première ligne

Manipulation de texte

  • cat texte.txt : Affiche le contenu de texte.txt
  • cat texte.txt | tr [a-z]éèàç [A-Z]ÉÈÀÇ : Passe tout le contenu en majuscules
  • cat texte.txt | tr '''\n' : Remplace toutes les espaces par des sauts de ligne (pour afficher un mot par ligne)
  • cat texte.txt | tr '''\n' | sort : Fait la même chose puis tri les mots
  • cat texte.txt | tr '''\n' | sort | uniq : ...puis supprime les doublons dans la liste de mots
  • cat texte.txt | tr '''\n' | sort | uniq -c : ...supprime les doublons et compte leur fréquence
  • cat texte.txt | tr '''\n' | sort | uniq -d : ...affiche les doublons uniquement
  • cat texte.txt | tr '''\n' | sort | uniq -u : ...affiche les hapax uniquement
  • cat texte.txt | tr '''\n' | sort | uniq -c | grep "saucisson" : ...recherche le mot "saucisson" dans la liste des mots du texte
  • cat texte.txt | tr '''\n' | sort | uniq -c | sort -n : ...tri la liste de mots par fréquence
  • cat texte.txt | tr '''\n' | sort | uniq -c | sort -nr : ...tri la liste de mots par fréquence inverse
  • cat texte.txt | tr '''\n' | rev | sort | uniq -c : remplace les espaces par des sauts de ligne, puis renverse les mots, pour chercher les rimes et en fait une liste ordonnée avec fréquence
  • cat texte.txt | tr '''\n' | rev | sort | rev | uniq -c : fait une liste des mots ordonnée par rime

Concaténation de fichiers

  • cat file1.csv file2.csv > file3.csv : Concatène verticale (file2 à la suite de file1) dans un nouveau fichier file3
  • paste file1.csv file2.csv > file3.csv : Concaténation horizontale (colonnes de file2 à la suite des colonnes de file1)
  • pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf : merger des fichiers pdf

Manipulation d'audio

  • ffmpeg -i filename.wav newfilename.mp3 : conversion d'un fichier wav en mp3.
    • ffmpeg -i filename.wav -ar 44100 newfilename.mp3 : conversion d'un fichier .wav en .mp3 avec rééchantillonnage à 44.1kHz
    • ffmpeg -i filename.wav -b:a 320k newfilename.mp3 : conversion d'un fichier .wav en .mp3 en forçant le bitrate à 320kb/s
    • ffmpeg -i input.wav -filter:a "volume=0.5" output.wav
       : baisser le volume de l'audio de 50% (plus d'options ici)

Manipulation de photos

nécessite le package imagemagick (sudo apt install imagemagick)

    • convert old_image -resize 50% new_image : Réduire une photo de 50%.
    • convert image_name.jpg image_name.png : Convertir le format d'une image.

Manipulation de vidéo

  • ffmpeg -i video_lourde.mp4 -vcodec h264 -acodec aac video_compresse.mp4 : compression vidéo (codec vidéo h264, audio AAC)
  • ffmpeg -i test.mp4 -c:v libvpx -crf 15 -b:v 1M -c:a libvorbis test.webm : conversion vers webm
  • ffmpeg -i 'zoom séance 1 24.11.20 bis.mp4' -map a zoomAudio.wav : extraction de l'audio d'une vidéo (format de sortie: wav)

Boucle sur plusieurs fichiers

  • for f in *.txt; do head -n 1 $f; done : boucle sur tous les fichiers .txt du dossier courant, et on affiche juste la première ligne de chaque.
  • for f in *.txt; do echo $f; head -n 1 $f; done : pareil mais on affiche le nom du fichier avant.
  • for f in audio/*.wav; do python wav2param.py $f; done : lance un script python (wav2param.py) sur chaque fichier .wav du dossier audio/
  • for f in *; ffmpeg -i $f $f.mp3; done : convertit tous les fichiers du dossier en mp3.

Manipulation de PDF

  • pdfunite coucou.pdf mimi.pdf boubou.pdf output.pdf : merger les fichiers pdf coucou mimi et boubou en un seul fichier output.pdf
  • pdftk input.pdf cat 1 5 10-12 output output.pdf : spliter un pdf et récupérer seulement les pages 1, 5 et 10 à 12
  • pdftotext input.pdf output.txt : extraction texte du contenu d'un pdf
  • pdftotext -enc ASCII7 input.pdf output.txt : extraction du contenu d'un pdf (2)
  • lowriter --convert-to pdf fichier.docx : convertir un docx en pdf

Autres commandes pratiques

  • rename 's/ /_/g' * : remplace les espaces par des underscores dans les noms de fichiers
  1. Alt gr + 6 (Linux, Windows) Alt + l (Mac)