#1 Le 06/06/2007, à 11:03
- soupaloignon
[Résolu] Copie du répertoire courant ?
Bonjour,
Je suis en train de bidouiller un script nautilus. Il me sert à transformer des images en noir et blanc.
Dans le répertoire qui contient les images à transformer j'ouvre le script.
la 1ere action va etre de créer un répertoire à l'intérieur du répertoire courant
mkdir noir-et-blanc
la 2eme action va être de copier le contenu du répertoire courant dans le dossier créé, et c'est là que ça coince.
Comment indiquer à la commande "cp" que c'est le contenu du répertoire courant qui doit être copié ?
et comment exclure le dossier "noir-et-blanc" de la copie ?
Merci d'avance pour vos réponses
Edit :
La 3éme action va être d'appliquer la commande suivante :
mogrify -modulate 100,0,0 *.jpg
au contenu du dossier
Dernière modification par soupaloignon (Le 06/06/2007, à 11:23)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#2 Le 06/06/2007, à 11:09
- cduray
Re : [Résolu] Copie du répertoire courant ?
pourquoi pas simplement
cp *.jpg noir-et-blanc
??
Hors ligne
#3 Le 06/06/2007, à 11:13
- karikula
Re : [Résolu] Copie du répertoire courant ?
même si tu fais cp * noir-et-blanc, cp va juste te dire qu'il ne peux pas copier noir-et-blanc dans noir-et-blanc et c'est tout
~/tmp/toto_
$ ls
total 0
~/tmp/toto_
$ touch titi toto tata
~/tmp/toto_
$ mkdir dossier
~/tmp/toto_
$ ls -l
total 4
drwxrwxr-x 2 st08285 atsu 4096 Jun 6 12:12 dossier/
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 tata
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 toto
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 titi
~/tmp/toto_
$ ls
dossier tata titi toto
~/tmp/toto_
$ ls -l
total 8
drwxrwxr-x 2 st08285 atsu 4096 Jun 6 12:12 dossier
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 tata
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 titi
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 toto
~/tmp/toto_
$ cp * dossier
cp: dossier: is a directory
~/tmp/toto_
$ ls -l
total 4
drwxrwxr-x 2 st08285 atsu 4096 Jun 6 12:12 dossier/
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 tata
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 toto
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:11 titi
~/tmp/toto_
$ ls -l dossier/
total 0
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:12 tata
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:12 titi
-rw-rw-r-- 1 st08285 atsu 0 Jun 6 12:12 toto
K.
Hors ligne
#4 Le 06/06/2007, à 11:21
- mirmidon
Re : [Résolu] Copie du répertoire courant ?
Salut,
Je t'aurai bien aidé, mais je suis obligé de travailler sous Windows 98 pour le moment.
Tu peux passer par un dossier tampon, comme en programmation en :
1) Créant un répertoire temporaire dans /tmp mkdir /tmp/noir_et_blanc (ou à la racine de ton /home/ton_nom si tu n'as pas accès à /tmp)
2) Recopie toutes tes données dedans cp -fr * /tmp/noir_et_blanc
3) Recopie ton dossier temporaire dans ton dossier courant cp -fr /tmp/noir_et_blanc
4) Efface le dossier temporaire rm -fr /tmp/noir_et_blanc (attention pas de faute de frappe)
$ sudo make plaisir
Quand l'informatique redevient un plaisir.
The Ubuntu Counter Project - user number #10290
Hors ligne
#5 Le 06/06/2007, à 11:22
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
pourquoi pas simplement
cp *.jpg noir-et-blanc
??
J'avais testé avec
cp *.jpg /noir-et-blanc
et ça ne fonctionnait pas. Mais ta ligne marche impeccable, merci
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#6 Le 06/06/2007, à 11:32
- karikula
Re : [Résolu] Copie du répertoire courant ?
c'est pas "/" qu'il fallait mettre mais "./"
cp *.jpg /noir-et-blanc
==> tu lui dis de copier tous tes jpg dans le dossier /noir-et-blanc (chemin absolu, donc à partir de la racine de l'arbo.)
"./" te permet de lui donner un chemin relatif "./noir-et-blanc" signifie le dossier noir-et-blanc "fils du dossier courant"
tu vois bien la différence ?
K.
Hors ligne
#7 Le 06/06/2007, à 11:45
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
c'est pas "/" qu'il fallait mettre mais "./"
cp *.jpg /noir-et-blanc
==> tu lui dis de copier tous tes jpg dans le dossier /noir-et-blanc (chemin absolu, donc à partir de la racine de l'arbo.)
"./" te permet de lui donner un chemin relatif "./noir-et-blanc" signifie le dossier noir-et-blanc "fils du dossier courant"tu vois bien la différence ?
K.
Oui je viens de voir, merci pour cette info (qui en plus est logique)
je viens de tester et effectivement :
cp *.jpg ./noir-et-blanc
fait la même chose que :
cp *.jpg noir-et-blanc
Je laisse le petit script nautilus que j'ai écris, bon en fait c'est juste une succession de ligne de commande, mais si cela est utile à quelqu'un
#!/bin/bash
mkdir noir-et-blanc
cp *.jpg ./noir-et-blanc
cd noir-et-blanc
mogrify -modulate 100,0,0 *.jpg
Dernière modification par soupaloignon (Le 06/06/2007, à 12:57)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#8 Le 06/06/2007, à 12:38
- jaywax
Re : [Résolu] Copie du répertoire courant ?
Heu, j'veux pas jouer mon relou, mais le "fi" se trouve un peu tout seul dans ton script
O bé nan chui sotte c'est du souedois...
Hors ligne
#9 Le 06/06/2007, à 12:41
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Heu, j'veux pas jouer mon relou, mais le "fi" se trouve un peu tout seul dans ton script
T'es pas relou, je n'y connais rien
Alors explique moi ce qu'est ce "fi"
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#10 Le 06/06/2007, à 12:47
- valAa
Re : [Résolu] Copie du répertoire courant ?
"fi", c'est "if" à l'envers, c'est pour fermer une boucle if, qui dans ton cas n'a pas été ouverte
Hors ligne
#11 Le 06/06/2007, à 12:57
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Merci pour l'info
edit : j'ai modifié le script
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#12 Le 06/06/2007, à 13:04
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Puisqu'il y en a qui taquinent le code ici ...
Une fois cette transformation en noir et blanc faite, je voudrai envoyer le contenu du dossier (les images couleurs + le dossier "noir-et-blanc" et ses images) dans un dossier "Final".
Ce dossier "Final" contient des sous dossiers numérotés 001 002 003
Comment faire pour que le script teste les noms des dossiers présents dans le dossier "final", trouve le dernier (dans l'exemple "003") et créé un nouveau dossier en incrémentant d'une unité la valeur du dernier dossier trouvé (donc création d'un dossier "004") ?
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#13 Le 06/06/2007, à 13:21
- cduray
Re : [Résolu] Copie du répertoire courant ?
Ben, en supposant que ton script soit lancé dans le répertoire parent au dossier Final, ça donnerait un truc du style:
# obtenir le numéro de sous-rép courant
curr=`ls -1 Final |tail -1`
# +1
n=`expr $curr + 1`
# formatter en 3 digits, leading 0's
nxt=`printf "%03d" $n`
#créer
mkdir Final/$nxt
#copier...
tar -cf - *.jpg noir-et-blanc | (cd Final/$nxt && tar -xvf - )
Enfin, grosso modo
C
Dernière modification par cduray (Le 06/06/2007, à 13:25)
Hors ligne
#14 Le 06/06/2007, à 14:41
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Ben, en supposant que ton script soit lancé dans le répertoire parent au dossier Final, ça donnerait un truc du style:
# obtenir le numéro de sous-rép courant curr=`ls -1 Final |tail -1` # +1 n=`expr $curr + 1` # formatter en 3 digits, leading 0's nxt=`printf "%03d" $n` #créer mkdir Final/$nxt #copier... tar -cf - *.jpg noir-et-blanc | (cd Final/$nxt && tar -xvf - )
Enfin, grosso modo
C
J'adore le "grosso modo" . Ton script marche nickel, c'est génial !!!!!
J'ai juste eu à modifier le chemin vers le dossier "Final", en rentrant un chemin absolu. De cette manière je peux envoyer les fichiers quel que soit l'endroit d'où j'exécute le script.
Un grand merci !!!!
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#15 Le 06/06/2007, à 16:16
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Bon, j'ai parlé trop vite.
En fait cela a fonctionné dans mes tests car le chemin d'accès au dossier "Final" ne comportait pas d'espaces dans les noms de dossiers.
Lorsque j'ai voulu le faire vers le vrai dossier "Final", dont le chemin comporte des noms avec espaces, plus rien ne fonctionne.
J'ai testé avec des simples et doubles quotes, avec le \ devant les espaces mais rien n'y fait. Tu as une idée ?
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#16 Le 07/06/2007, à 11:37
- cduray
Re : [Résolu] Copie du répertoire courant ?
Hello
Mettre ton nom de répertoire entre quotes (double quotes si tu as un nom de variable dedans).
Par exemple, pour accéder à
/home/marcel va a la plage/Final
Tu peux entrer soit
cd /home/marcel\ va\ a\ la\ plage/Final
ou
cd "/home/marcel va a la plage/Final"
ou encore
cd '/home/marcel va a la plage/Final'
La différence entre '' et "" ne se fera sentir que si tu as une variable là-dedans.
C
Hors ligne
#17 Le 07/06/2007, à 13:32
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Hello, merci de ta réponse.
J'avais déjà essayé, avant de poster le message précédent, le \ avant l'espace et les doubles et simples quote, mais cela n'avait rien donné, d'où mon message.
Il n'y a qu'un cas de figure où cela fonctionne, mais à moitié. En mettant du simple quote, il y a bien un dossier créé, avec ce qu'il faut dedans, mais par contre il s'appelle "$nxt".
Le problème doit venir, comme tu le disais d'ailleurs, de cette variable.
J'ai fait quelques tests en bougeant les quotes, un peu au pif je dois dire , mais rien n'y fait.
Ci joint les différentes essais, le chemin marqué correspond au chemin réel de mon arborescence. Si tu as une idée
# obtenir le numéro de sous-rép courant
#1 curr=`ls -1 /home/soupaloignon/01Perso/00\ perso/02\ Patrick/marie/marie\ et\ patrick/marie |tail -1`
#2 curr=`ls -1 "/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie" |tail -1`
curr=`ls -1 '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie' |tail -1`
# +1
n=`expr $curr + 1`
# formatter en 3 digits, leading 0's
nxt=`printf "%03d" $n`
#créer
#1 mkdir /home/soupaloignon/01Perso/00\ perso/02\ Patrick/marie/marie\ et\ patrick/marie/$nxt
#2 mkdir "/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/$nxt"
#3 mkdir '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/$nxt'
#4 mkdir '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie'/$nxt
mkdir '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/'$nxt
#copier...
#1 tar -cf - *.jpg noir-et-blanc | (cd /home/soupaloignon/01Perso/00\ perso/02\ Patrick/marie/marie\ et\ patrick/marie/$nxt && tar -xvf - )
#2 tar -cf - *.jpg noir-et-blanc | (cd "/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/$nxt" && tar -xvf - )
#3 tar -cf - *.jpg noir-et-blanc | (cd '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/$nxt' && tar -xvf - )
#4 tar -cf - *.jpg noir-et-blanc | (cd '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie'/$nxt && tar -xvf - )
tar -cf - *.jpg noir-et-blanc | (cd '/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie/'$nxt && tar -xvf - )
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne
#18 Le 07/06/2007, à 14:08
- cduray
Re : [Résolu] Copie du répertoire courant ?
Ta version 2 devrait marcher.
Enfin, pour éviter de perdre des cheveux dans des erreurs de copier+coller, voici une version avec variable et debugging:
FINAL_DIR="/home/soupaloignon/01Perso/00 perso/02 Patrick/marie/marie et patrick/marie"
curr=`ls -1 "$FINAL_DIR" |tail -1`
echo "Debug: dernier repertoire: $curr"
n=`expr $curr + 1`
nxt=`printf "%03d" $n`
echo "Debug: repertoire suivant: $nxt"
mkdir "$FINAL_DIR/$nxt" && echo "Debug: la creation du repertoire est ok"
tar -cf - *.jpg noir-et-blanc | (cd "$FINAL_DIR/$nxt" && tar -xvf - )
En ksh, tu peux rajouter
set -x
en début de script pour activer un tracing ligne par ligne, je subodore que bash a repris cette fonctionnalité.
C
Hors ligne
#19 Le 07/06/2007, à 14:35
- soupaloignon
Re : [Résolu] Copie du répertoire courant ?
Un grand merci pour mes cheveux ton dernier script fonctionne nickel
En ce qui concerne la version 2, non, cela ne fonctionnait pas. J'avais testé toutes les versions possibles (du moins celles que j'ai imaginé) avant de poster.
Tu aurais quelques liens pour apprendre à faire ce type de programmation ? Niveau débutant ++++
Dernière modification par soupaloignon (Le 07/06/2007, à 14:36)
==> Libérez les huitres du bassin d'Arcachon <==
Hors ligne