Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fouiller l'arborescence

3 réponses
Avatar
dadou
Bonjour à tou{te}s,

Je voudrais faire un traitement sur un ensemble de fichiers
de même type et même extension (JPG par exemple) contenus dans
des répertoires, sous-répertoires, sous-sous-rep., etc

la commande suivante agit sur les fichiers JPG du répertoire
courant :
«
for a in *JPG ; do convert -geometry 800x800 "$a" "${a%.JPG}.jpg" ; done
»
mais comment atteindre tous les JPG de l'arborescence ?

Arboricolement,
Didier.

3 réponses

Avatar
Francois Lafont
Bonjour,

Le 09/02/2013 15:11, dadou a écrit :

Je voudrais faire un traitement sur un ensemble de fichiers
de même type et même extension (JPG par exemple) contenus dans
des répertoires, sous-répertoires, sous-sous-rep., etc

la commande suivante agit sur les fichiers JPG du répertoire
courant :
«
for a in *JPG ; do convert -geometry 800x800 "$a" "${a%.JPG}.jpg" ; done
»
mais comment atteindre tous les JPG de l'arborescence ?



Je pense que dans ce cas là, il faut utiliser la commande find. Je te
propose ceci :

#-------------------------------------------------
#!/bin/bash

REP="/ton/repertoire/de/recherche/"

traitement ()
{
for f in "$@"; do
echo "---Traitement de $f---"
# Là tu mets ton code pour le traitement
# du fichier "$f".
done
}

# On exporte la fonction.
export -f traitement

find "$REP" -name '*.JPG' -exec bash -c 'traitement "$@"' arg0 '{}' +
#-------------------------------------------------

Je crois bien que même avec des noms de fichiers « exotiques » ça
tiendra le coup.


--
François Lafont
Avatar
Nicolas Richard
dadou writes:

Bonjour à tou{te}s,

Je voudrais faire un traitement sur un ensemble de fichiers
de même type et même extension (JPG par exemple) contenus dans
des répertoires, sous-répertoires, sous-sous-rep., etc

la commande suivante agit sur les fichiers JPG du répertoire
courant :
«
for a in *JPG ; do convert -geometry 800x800 "$a" "${a%.JPG}.jpg" ; done
»
mais comment atteindre tous les JPG de l'arborescence ?



Avec bash:
shopt -s globstar
for a in ./**/*JPG; do convert -geometry 800x800 "$a" "${a%.JPG}.jpg" ; do ne

et optionnellement pour désactiver:
shopt -u globstar

(Je ne connaissais pas l'option globstar ce matin : quand on vient
d'apprendre un truc on veut absolument le partager... je suis sûr qu'on
me corrigera s'il y a mieux)

--
Nico.
Avatar
Doug713705
Le 09-02-2013, dadou nous expliquait dans fr.comp.os.linux.configuration :

Bonjour à tou{te}s,

Je voudrais faire un traitement sur un ensemble de fichiers
de même type et même extension (JPG par exemple) contenus dans
des répertoires, sous-répertoires, sous-sous-rep., etc

la commande suivante agit sur les fichiers JPG du répertoire
courant :

for a in *JPG ; do convert -geometry 800x800 "$a" "${a%.JPG}.jpg" ; done
»
mais comment atteindre tous les JPG de l'arborescence ?



Si j'ai bien compris :

find /home/mon/rep/images/ -type f -name *.JPG -exec convert -geometry
800x800 {} {}.jpg

--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
Without freedom of choice there is no creativity.
-- Kirk, "The return of the Archons", stardate 3157.4