Résolu le 20-07-21 Script ne traitant que le premier fichier dans un dossier

Postez ici vos scripts Bash, Python, etc.
Avatar du membre
Nerva
Messages : 376
Enregistré le : lun. 4 mars 2019 18:48

Script ne traitant que le premier fichier dans un dossier

Message par Nerva »

Bonjour.

J'utilise bpm-tools pour calculer le BPM des fichiers audio FLAC.

Usage :

Code : Tout sélectionner

bpm-tag "Artiste - Titre.flac"
Afin de pouvoir traiter un dossier, j'ai créé un bash :

Code : Tout sélectionner

# Calcul du BPM des fichiers FLAC

#!/bin/bash
bpm-tag ~/Audio/Traitement/*.flac
Mais comme indiqué dans le titre, il ne traite que le premier fichier alors que je voudrais qu'il tagge l'intégralité du dossier.

Merci d'avance.
Linux Mint 21.3 Virginia | Cinnamon 6.0.4

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: Script ne traitant que le premier fichier dans un dossier

Message par arghlub »

Salut,

Tu pourrais peut-être faire ça avec une boucle (c'est juste une piste) :

Code : Tout sélectionner

#! /bin/bash
for fichier in `ls ~/Audio/Traitement/*.flac`
do
	if [ -f $fichier ]
	then
		bpm-tag $fichier
	fi
done
;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
serged
Messages : 823
Enregistré le : jeu. 16 juil. 2015 07:59
Localisation : Montrouge (France)

Re: Script ne traitant que le premier fichier dans un dossier

Message par serged »

Code : Tout sélectionner

for fichier in *.flac ; do ; bpm-tag $fichier ; done
-> arghlub Prendre la sortie de "ls", c'est bien, mais s'il y a des espaces dans les noms de fichier ça va pas marcher.
S'il y en a un qui s'appelle "The Rolling Stones - Satisfaction.flac" ça va essayer de traiter "The" "Rolling", "Stones", "-", "Satisfaction.flac" !!
LinuxMint Virginia Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Avatar du membre
Nerva
Messages : 376
Enregistré le : lun. 4 mars 2019 18:48

Re: Script ne traitant que le premier fichier dans un dossier

Message par Nerva »

Là ça ne traite rien...

Pourtant j'ai un script qui fonctionne très bien sous ce même modèle :

Code : Tout sélectionner

# Conversion FLAC avec application du Replay Gain à partir de fichiers WAV

#!/bin/bash
flac -7 -f --replay-gain ~/Audio/Conversion/*.wav
Linux Mint 21.3 Virginia | Cinnamon 6.0.4

Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: Script ne traitant que le premier fichier dans un dossier

Message par tioker »

Bonjour,
J'avais vu passé ce post, je prends deux minutes pour y répondre.
Si ton script doit être repris sur plusieurs répertoires, ou si tu veux t'en inspirer pour d'autres actions, tu peux utiliser le répertoire "scripts" de ton explorateur fichier pour y mettre des procédures qui seront accessibles dans l'explorateur lui-même (sans passer par le terminal).
Pour nemo c'est là qu'on les met. $HOME/.local/share/nemo/scripts/. Moi j'ai mis 3 répertoires: File Images Musique.
Un exemple de script de traitement en masse

Code : Tout sélectionner

#!/bin/bash
#
sufixe="jpg"
#!
for x in "$@"
do
    target="${x%%.*}.$sufixe"
    convert "$x" "$target"
done
et donc le script sera appliqué à tous les fichiers que tu auras sélectionnés dans ton explorateur fichier.
En plus, sur le net, tu as plein d'exemples de traitement de masse (pour modifier les tailles d'images par exemple).
Voilà.

Sinon le script d' @arghlub et @serged sont bons aussi.
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
Nerva
Messages : 376
Enregistré le : lun. 4 mars 2019 18:48

Re: Script ne traitant que le premier fichier dans un dossier

Message par Nerva »

Je ne vois pas trop ce que ça change puisque mon script ne va pas plus loin que le premier fichier et les scripts proposés ne fonctionnent pas...
Linux Mint 21.3 Virginia | Cinnamon 6.0.4

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script ne traitant que le premier fichier dans un dossier

Message par cyrille »

Hello
utilise une fonction , voilà ai tapé ça en vitesse, normalement ça doit passer mais pas testé

Code : Tout sélectionner

#!/bin/bash
 
dossierDeTravail="/home/serveur";
 
recursiveSearch() {
    [ -r "$1" ] && [ -x "$1" ] || return 1 # Si on peut fouiller dans le dossier
    [ "`ls "$1" | wc -l`" == "0" ] && return 0 # Si le dossier est vide
    for file in "$1"/*; do
        if [ -d "$file" ]; then
            recursiveSearch "$file"
        fi
        bpm-tag  "$file"
    done
}
 
recursiveSearch  $dossierDeTravail

à noter que la variable dossierDeTravail peut être un paramètre passé au script
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script ne traitant que le premier fichier dans un dossier

Message par cyrille »

@serged
pas testé ta ligne, mais il n'y aurait pas un ; en trop après le do ?
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Script ne traitant que le premier fichier dans un dossier

Message par cyrille »

Pour l'histoire des espaces dans le nom de variable
var="une ligne avec des espaces"

il me semble qu'il suffit de coller des quotes autour quand on l'appelle

"$var" et non $var
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
Nerva
Messages : 376
Enregistré le : lun. 4 mars 2019 18:48

Re: Script ne traitant que le premier fichier dans un dossier

Message par Nerva »

Là c'est bon. Tous les fichiers y passent. Fonction qui doit pouvoir s'utiliser avec un autre bash...

Merci. ;)
Linux Mint 21.3 Virginia | Cinnamon 6.0.4

Répondre