applatir un arbre

Le
Pierre Allken-Bernard
Bonjour,
J'ai un dossier qui contient des dossiers qui contiennent etc.
et finalement des photos.
Peut-on facilement supprimer tous les dossiers intermédiaires
pour que tous les photos se retrouvent dans un même dossier.
Remarque : je crois que toutes mes photos ont des noms différents
ce qui devrait être une bonne chose.

Merci d'avance.

Pierre

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20100328113235.GA27871@allken-bernard.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Klaus Becker
Le #21454001
Le Dimanche 28 Mars 2010 13:32:35, Pierre Allken-Bernard a écrit :
Bonjour,
J'ai un dossier qui contient des dossiers qui contiennent etc.
et finalement des photos.
Peut-on facilement supprimer tous les dossiers intermédiaires
pour que tous les photos se retrouvent dans un même dossier.
Remarque : je crois que toutes mes photos ont des noms différents
ce qui devrait être une bonne chose.

Merci d'avance.

Pierre




Salut,

le script suivant remonte tous les fichiers d'un niveau et supprime les
dossiers vides :

========
#!/bin/bash

for dir in `find /home/... -type d` ; do
cd $dir
find . -maxdepth 1 -type f -exec mv {} .. ;
done
for dir in `find /home/... -type d` ; do
cd $dir
if [ `ls -l | wc -l` -le 1 ]
then
rm -rf $dir
fi
done
=======

/home/... est à remplacer par le dossier concerné. J'ai utilisé ça pls fois
avec succès, mais il vaut mieux le tester d'abord.

Vivent les arbres, les vrais !

bye bye

Klaus

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jeremie COURREGES-ANGLAS
Le #21454211
--y0ulUmNC+osPPQO6
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

@Klaus : je considère ton script dangereux car il ne gère pas les noms de
répertoires comprenant des espaces / autres caractères exotiques. Tu peux
parfaitement l'utiliser chez toi si tu es sûr des noms de tes dossiers.


@Pierre : ça tient en une ligne, à modifier selon tes besoins.
Regarde l'option --backup=MODE de mv, si il se trouve que tu as
des fichiers ayant le même nom.

find . -mindepth 2 -type f ( -iname '*.jpg' -o -iname '*.png' -o -iname
'*.jpeg' ) -exec sh -c 'for i; do echo mv "$i" "${i##*/}"; done'
territorial_pissings {} +

--
"Free software, free society."
Jérémie Courrèges-Anglas
(New) GPG key : 06A11494

--y0ulUmNC+osPPQO6
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQIcBAEBCAAGBQJLr0kXAAoJEGGRj78GoRSUlpQP+gJeT2ZL0mCOaEyM3PpoNpCe
IE/OY9IlTfkgRSQfLZEHidh5nlWqDv27uF6PVlsIUR28xRnvZf5cZZuZJMNwWX/W
OOhexEMuY0Tmy67lA27tYzh3ZXj0OK32uKvn0LtEI+TrnkzLK2HNFzPgHUX3CWoQ
Kd7DtLIo9fcs6KoDJinngSd/s/tygG3Wdy7qz6CBKZHwMPAkvYT3wwXA7ed43faB
Pwt03kJnyIKNpeQqRHiVhBlfONdvngiG+SAMTbzc8cwvxquakGBdg0+JCDPH58vX
SQ4wc5Cnq+tCXKFgfnuU+oROlRzoM0ebTJpXgB3idI8wb27yazSAoTVtJqho84KH
A5DPwlt0wQIFrLGIDKH3hxM1ubhm4wi0FgOjNzfPdfTNcismyhYT8LJKN7W3clt2
muiC+VugpbUPB6mlNIgUfEOVrwPGVnQUcOQJyprN3FGFc5OdQ0K4JF9mU8UzAuYy
+5XL3uCaP4fAOxlmdeyOpxWENcTIUI5gSBHc4ci079dpOAYrzLvPzuX1+t7s0ng2
rBZKLmItViDHU1TwaOdoFJjBOJsk31w48zJ2UQeXU3xZuYwrkeWHLFr2wlQwnnHH
tweI7s9uA/tU6wth2UNFbrIJJ+7ELkBnrPkHacpKYkxSrgSX21Z1+XHajzsH3VpH
nby246RiOSXxkdzYMNDb
=pNsY
-----END PGP SIGNATURE-----

--y0ulUmNC+osPPQO6--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Pierre Allken-Bernard
Le #21455741
Le 28/03/2010 à 14:18:32, Jeremie COURREGES-ANGLAS a écrit :
@Klaus : je considère ton script dangereux car il ne gère pas les noms de
répertoires comprenant des espaces / autres caractères exotiques. Tu peux
parfaitement l'utiliser chez toi si tu es sûr des noms de tes dossiers.


@Pierre : ça tient en une ligne, à modifier selon tes besoins.
Regarde l'option --backup=MODE de mv, si il se trouve que tu as
des fichiers ayant le même nom.

find . -mindepth 2 -type f ( -iname '*.jpg' -o -iname '*.png' -o -iname
'*.jpeg' ) -exec sh -c 'for i; do echo mv "$i" "${i##*/}"; done'
territorial_pissings {} +



Je me doutais qu'en une ligne c'est possible
(même si je ne sais pas vraiment faire), je me
demandais simplement s'il existait une petite
commande standard pour le faire, apparemment non.
Merci en tout cas.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Basile Starynkevitch
Le #21455861
Pierre Allken-Bernard wrote:
Je me doutais qu'en une ligne c'est possible
(même si je ne sais pas vraiment faire), je me
demandais simplement s'il existait une petite
commande standard pour le faire, apparemment non.




Avec zsh on pourrait faire quelque chose comme

foreach f $srcdir/**/*(.); do
cp -a $f $dstdir/$(basename $f)
done

## pas testé!

Librement

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
François Cerbelle
Le #21456121
Pierre Allken-Bernard a écrit :
Le 28/03/2010 à 14:18:32, Jeremie COURREGES-ANGLAS a écrit :
@Klaus : je considère ton script dangereux car il ne gère pas les noms de
répertoires comprenant des espaces / autres caractères exotiques. Tu peux
parfaitement l'utiliser chez toi si tu es sûr des noms de tes dossiers.


@Pierre : ça tient en une ligne, à modifier selon tes besoins.
Regarde l'option --backup=MODE de mv, si il se trouve que tu as
des fichiers ayant le même nom.

find . -mindepth 2 -type f ( -iname '*.jpg' -o -iname '*.png' -o -iname
'*.jpeg' ) -exec sh -c 'for i; do echo mv "$i" "${i##*/}"; done'
territorial_pissings {} +



Je me doutais qu'en une ligne c'est possible
(même si je ne sais pas vraiment faire), je me
demandais simplement s'il existait une petite
commande standard pour le faire, apparemment non.
Merci en tout cas.




Dans ton cas précis, je pense qu'un simple :
find rep_racine -type f -exec mv "{}" "rep_racine" ;
devrait suffire. A supposer que tu n'aies pas de conflit sur les noms de
fichier, sinon, l'option -b de mv t'aidera :
find rep_racine -type f -exec mv -b "{}" "rep_racine" ;


Fanfan

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Pierre Allken-Bernard
Le #21457821
Le 28/03/2010 à 21:52:37, Jeremie COURREGES-ANGLAS a écrit :
Si vous voulez plus simple encore, y'a :
mv **/*.jpg .



C'est impressionnant ça !

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Jeremie COURREGES-ANGLAS
Le #21457811
--H1spWtNR+x+ondvy
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Le dimanche 28 mars 2010 à 07:03:38, François Cerbelle a écr it :

Si vous voulez plus simple encore, y'a :
mv **/*.jpg .

avec un bash récent ou un zsh
(shopt -s globstar nocaseglob / unsetopt CASE_GLOB)
Mais ça perd de son charme, je trouve :)

J'admets que j'ai tendance à utiliser find ... -exec sh -c 'for...' _ {} +
à toute les sauces, je devrais arrêter. ^^

find ... -exec mv {} rep ;
est bien entendu plus simple et sans aucun doute plus efficace.
Pas besoin de quoter le {} d'ailleurs.

--
"Free software, free society."
Jérémie Courrèges-Anglas
(New) GPG key : 06A11494

--H1spWtNR+x+ondvy
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQIcBAEBCAAGBQJLr7OFAAoJEGGRj78GoRSUY6wQAIZuu6N/xi+khoosDzOJyC5s
1lyZgHLcJs9pF3z43UwOKdF3SzE9bG8iEXjSjFlRj+67nt7RRK/aitIpmgqkFL4R
pXp36x2vJqI8YVUxo/W176hT0C3WY79ZZZqMv39B+QDYBw+3zmfJ4LrQbb9kJAyr
hxTrWSEzYdQqM3FZ0ukroSIjdoFzxtckvXCw/oBHdaj1ykXCL/fR8KOHACjNzEDk
ts+DBZpoS5mybmAnBk/vwwyiM0WRFmELrUemkzmkEyIvG4GUvyF2fH1Bne2ZWxcl
shbeU7s7ZRvkaTVkeMdmiLuxRQ5SiDk/2/e6UQ/hXxHYjggkVNj4Cleo5H0kwoBS
KIws7zdQ5iXhRQv4JrNnjnXRzo/O3b592UNi2vM5zpYkbRngajLSmZ1n37e+Hg46
V+GWU1Ve2SgsJVdE9eeIYxbHIqGG4Nc1khgs5FTrZl1qbKZbqLzX+L6YMSX4XA9o
kCezQPi0/8RjWGftykmBk0MUnIPvKHCGr3ZR/pF8sFVGF4jE0tp7X/znGAKKF4uH
tBdF2fJ1AaGJ4PRdg5ApkrkEUG4/hKTm+Zhsk640XmYM8RIGX0JXYUtRI5BODWLX
1hDjpOwKlD04ayzx+26hJeMWqcltT/QuP6SfDCbb+LCVW5HpseTKrUefSGVB4kLj
BEqGMhChDrAKWZMexeEY
=Vv2l
-----END PGP SIGNATURE-----

--H1spWtNR+x+ondvy--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Publicité
Poster une réponse
Anonyme