Page 1 sur 2

Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 11:31
par Nerva
Bonjour.

Étant toujours aussi nul en bash, j'aurais besoin d'un coup de main pour automatiser une tâche simple.

J'ai un dossier Images/Tri qui contient des photos dont certaines sont à supprimer. Ces photos à supprimer sont répertoriées dans un fichier texte tri.txt (que je modifie selon besoin) placé dans ce dossier. J'utilise cette commande pour faire le ménage :

Code : Tout sélectionner

tr '\n' '\0' < tri.txt | xargs -0 rm
Ça fonctionne au poil mais ça m'oblige à ouvrir le terminal, me positionner dans le dossier et copier-coller la commande. Je voudrais donc faire ça en lançant simplement un script (et éventuellement avoir un retour indiquant quels fichiers ont été supprimés).

Merci.

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 12:17
par Scrat
Bonjour.
Tu colles ça dans un fichier exécutable (droits rwx) dont la première ligne est "#!/bin/bash", par exemple ceci :

Code : Tout sélectionner

#!/bin/bash
cd ton_dossier
ta_commande

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 12:37
par Nerva
J'ai oublié de le préciser mais ça j'avais essayé avant de poster ; aucun fichier n'est supprimé.

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 14:00
par falke
Salut, sinon tu as une rubrique spécifique aux scripts

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 14:23
par Scrat
Chez moi, ça marche. Contenu du fichier script "efface" :

Code : Tout sélectionner

#!/bin/bash
cd /home/richard/TESTRM/truc
tr '\n' '\0' < tri.txt | xargs -0 rm
Exécution par double clic sur l'icône du script ou lancement en ligne de commande :

Code : Tout sélectionner

./efface
Les fichiers supprimés dans mon dossier truc sont bien ceux listés dans le fichier "tri.txt"

Mais IL FAUT QUE CE SCRIPT AIT LES DROITS D'EXÉCUTION !

Pour cela :

Code : Tout sélectionner

chmod +x efface
ou clic droit sur le fichier script, propriétés, permissions, et cocher "autoriser l'exécution du fichier comme un programme"

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 14:32
par falke
Et c'est bien aussi de mette une extension à ses scripts histoire de les distinguer clairement :

Mon_script.sh

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 14:36
par Scrat
@falke : exact ! (mais je suis un peu flemmard. :D )

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 17:34
par Nerva
Bon ça fonctionne. J'avais oublié le /home/nerva dans le chemin.

Merci.

Re: Script automatisation suppression de fichiers

Posté : lun. 19 avr. 2021 18:39
par arghlub
Salut,

Sujet déplacé dans la nouvelle rubrique (ouverte) «Scripts /Développement».
;)

Re: Script automatisation suppression de fichiers

Posté : jeu. 22 avr. 2021 18:27
par cyrille
Hello, je m'incruste même si résolu ;)

perso, j'aurais utilisée une variable shell pour pouvoir le lancer depuis n'importe où et surtout vers n'importe quel dossier

Code : Tout sélectionner

#!/bin/bash
DOSSIER=$1
# Test si variable passée en paramètre
if [[ -z "$DOSSIER" ]]
  then
    echo "Le dossier de travail doit être passer en variable"
    exit
fi

if [ -d "$DOSSIER" ]; then
  ### Dossier existe ###
  echo "Il s'agit bien d'un dossier. OK."
else
  ###  un paramètre est bien passé mais ce n'est pas un dossier ###
  echo "Erreur : Merci de spécifier un dossier."
  exit 1
fi
cd  $DOSSIER
tr '\n' '\0' < tri.txt | xargs -0 rm
Et tu le lances ainsi

Code : Tout sélectionner

bash /chemin/vers/tonscript/script.sh /home/richard/TESTRM/truc
Ainsi tu peux changer le chemin du dossier sans modifier le script

Si tu ne veux pas de prendre la tête à ton saisir à chaque fois, tu crées un alias

Code : Tout sélectionner

alias tonNomAlias='bash /chemin/vers/script.sh paramètreDossier'

Et tant qu'on y est la bonne méthode recommandée en bash pour lire les lignes unes à unes d'un fichier

Code : Tout sélectionner

#!/bin/bash
input="/chemin/vers/fichier"
while IFS= read -r line
do
  echo "$line"
done < "$input"
;)