OVH Cloud OVH Cloud

script recherche + copie images

17 réponses
Avatar
Carmelo
Bonjour,

j'essaie de faire un script qui :

- recherche les images contenues dans un dossier "source" + ses sous
dossiers (plusieurs sous niveaux)
- copie ces images dans un répertoire "copie", mais en gardant
l'arborescence d'origine.

je m'explique :

source/dossier1/fichiers images + autres fichiers divers
source/dossier2/dossier2.2/fichiers images + autres fichiers divers
source/dossierX/fichiers images + autres fichiers divers

avec pour résultat :

copie/dossier1/que_les_fichiers_images
copie/dossier2/dossier2.2/que_les_fichiers_images
copie/dossierX/que_les_fichiers_images


voici ce à quoi j'ai pensé, avec l'aide d'un ami, mais ça ne cherche
pas dans les sous dossiers, et ça ne garde pas l'arborescence …


#!/bin/bash
src="/media/source"
dest="/media/copie/"


for file in $src/*.jpg $src/*.png $src/*.gif

do

mv $file $dest
done
exit 0


merci pour votre aide.

Carmelo

7 réponses

1 2
Avatar
Carmelo
On 2011-10-27 14:13:26 +0000, Hugues said:

Tu as lu ma réponse de 16h01 ?



oui, du coup j'ai remplacé les 3 occurences de $i dans ton code par
$file, mais cette fois un autre message d'erreur :

cp: ./Pictures/paesaggi: No such file or directory
cp: 9.jpg: No such file or directory
cp: ./Pictures/ti: No such file or directory
cp: amoo.jpg: No such file or directory
...



(mon code est devenu :


cd $src
for file in $(find . -name "*.jpg" -o -name "*.png" -o -name "*.gif")
do
mkdir -p $(dirname $dest/$file)
cp $file $dest/$file
done
Avatar
Luc.Habert.00__arjf
Carmelo :

cp: ./Pictures/paesaggi: No such file or directory
cp: 9.jpg: No such file or directory
cp: ./Pictures/ti: No such file or directory
cp: amoo.jpg: No such file or directory



Tu as des espaces dans tes noms de fichiers...
Avatar
Luc.Habert.00__arjf
Hugues :

cd $src
for file in $(find . -name "*.jpg" -o -name "*.png" -o -name "*.gif")
do
mkdir -p $(dirname $dest/$i)
mv $i $dest/$i
done



Ça va casser sur les noms de fichier avec des caractères à la con.

cd "$src"
find . -iname '*.jpg' -o -iname '*.png' -o -iname '*.gif' -print0 | xargs -0 sh -c 'for f in "$@"; do mkdir -p "$0"/"${f%/*}"; cp "$f" "$0"/"$f"' "$dest"
Avatar
Hugues
Ce cher (Luc Habert) a posté :

Carmelo :

cp: ./Pictures/paesaggi: No such file or directory
cp: 9.jpg: No such file or directory
cp: ./Pictures/ti: No such file or directory
cp: amoo.jpg: No such file or directory



Tu as des espaces dans tes noms de fichiers...



Erreur numéro 1 : mettre des espaces dans ses noms de fichiers ;)
Faut donc passer à l'artillerie lourde.

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Avatar
Luc.Habert.00__arjf
Hugues :

Erreur numéro 1 : mettre des espaces dans ses noms de fichiers ;)



Non, ce n'est pas une erreur. Il suffit de scripter proprement. J'ai posté
une solution dans un autre message.
Avatar
Hugues
Ce cher (Luc Habert) a posté :

Hugues :

cd $src
for file in $(find . -name "*.jpg" -o -name "*.png" -o -name "*.gif")
do
mkdir -p $(dirname $dest/$i)
mv $i $dest/$i
done



Ça va casser sur les noms de fichier avec des caractères à la con.



Tout à fait, et le problème peut se résoudre *très simplement* sur zsh
en mettant des quotes autour du $(find ...) :

for file in "$(find ....)"
do
..
done



Pas testé sur d'autres shells.

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Avatar
Hugues
Ce cher (Luc Habert) a posté :

Hugues :

Erreur numéro 1 : mettre des espaces dans ses noms de fichiers ;)



Non, ce n'est pas une erreur. Il suffit de scripter proprement.



Oui, quand on sait scripter proprement . :-)
Donc quand on ne sait pas, on évite les espaces dans les noms de fichier. ;)


J'ai posté une solution dans un autre message.



J'ai vu, je n'ai rien à y redire, à part que du coup, ça fait un petit
peu plus mal aux yeux :-)

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]
1 2