Devant récupérer des fichiers (photos) au sein d'une arborescence
anarchique et les reclasser dans autre arborescence cette fois dotée
d'une certaine logique (année/mois/jour/) me voilà lancer dans un script
bash.
La première partie se règle assez facilement :
8<---
cd "$origine"
find . -type f -exec cp '{}' $cible \;
8<---
La deuxième phase est plus laborieuse :
8<---
cd "${cible}"
for photo in *
do
if [ ! -d "$photo" ] ; then
stat -t '%Y%m%d' "$photo" | {
read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09 \
ch10 ch11 ch12 ch13 ch14 ch15
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi
cd "$annee"
mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi
cd "$mois"
jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}"
}
fi
done
8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie
2- comment l'intégrer à la première. J'ai bien essayé de la glisser
entre "-exec" et "\;" mais sans succès :(
Merci par avance de vos lumières.
--
Jo
"Don't suffer from insanity, enjoy every minute of it."
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+, José Campos <jose.campos+ écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence anarchique et les reclasser dans autre arborescence cette fois dotée d'une certaine logique (année/mois/jour/) me voilà lancer dans un script bash.
La première partie se règle assez facilement : 8<--- cd "$origine" find . -type f -exec cp '{}' $cible ; 8<---
La deuxième phase est plus laborieuse : 8<--- cd "${cible}" for photo in * do if [ ! -d "$photo" ] ; then stat -t '%Y%m%d' "$photo" | { read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09 ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | { read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi cd "$annee" mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi cd "$mois" jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}" } fi done 8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie 2- comment l'intégrer à la première. J'ai bien essayé de la glisser entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes. Un truc du style:
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+spam@galacsys.com>,
José Campos <jose.campos+spam@galacsys.com> écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence
anarchique et les reclasser dans autre arborescence cette fois dotée
d'une certaine logique (année/mois/jour/) me voilà lancer dans un script
bash.
La première partie se règle assez facilement :
8<---
cd "$origine"
find . -type f -exec cp '{}' $cible ;
8<---
La deuxième phase est plus laborieuse :
8<---
cd "${cible}"
for photo in *
do
if [ ! -d "$photo" ] ; then
stat -t '%Y%m%d' "$photo" | {
read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09
ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | {
read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi
cd "$annee"
mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi
cd "$mois"
jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si
certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}"
}
fi
done
8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie
2- comment l'intégrer à la première. J'ai bien essayé de la glisser
entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes.
Un truc du style:
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+, José Campos <jose.campos+ écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence anarchique et les reclasser dans autre arborescence cette fois dotée d'une certaine logique (année/mois/jour/) me voilà lancer dans un script bash.
La première partie se règle assez facilement : 8<--- cd "$origine" find . -type f -exec cp '{}' $cible ; 8<---
La deuxième phase est plus laborieuse : 8<--- cd "${cible}" for photo in * do if [ ! -d "$photo" ] ; then stat -t '%Y%m%d' "$photo" | { read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09 ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | { read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi cd "$annee" mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi cd "$mois" jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}" } fi done 8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie 2- comment l'intégrer à la première. J'ai bien essayé de la glisser entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes. Un truc du style:
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+, José Campos <jose.campos+ écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence anarchique et les reclasser dans autre arborescence cette fois dotée d'une certaine logique (année/mois/jour/) me voilà lancer dans un script bash.
La première partie se règle assez facilement : 8<--- cd "$origine" find . -type f -exec cp '{}' $cible ; 8<---
La deuxième phase est plus laborieuse : 8<--- cd "${cible}" for photo in * do if [ ! -d "$photo" ] ; then stat -t '%Y%m%d' "$photo" | { read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09 ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | { read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi cd "$annee" mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi cd "$mois" jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}" } fi done 8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie 2- comment l'intégrer à la première. J'ai bien essayé de la glisser entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes. Un truc du style:
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+spam@galacsys.com>,
José Campos <jose.campos+spam@galacsys.com> écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence
anarchique et les reclasser dans autre arborescence cette fois dotée
d'une certaine logique (année/mois/jour/) me voilà lancer dans un script
bash.
La première partie se règle assez facilement :
8<---
cd "$origine"
find . -type f -exec cp '{}' $cible ;
8<---
La deuxième phase est plus laborieuse :
8<---
cd "${cible}"
for photo in *
do
if [ ! -d "$photo" ] ; then
stat -t '%Y%m%d' "$photo" | {
read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09
ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | {
read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi
cd "$annee"
mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi
cd "$mois"
jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si
certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}"
}
fi
done
8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie
2- comment l'intégrer à la première. J'ai bien essayé de la glisser
entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes.
Un truc du style:
Dans l'article <1im3i4h.1y6c7dj1upsypaN%jose.campos+, José Campos <jose.campos+ écrit:
Bonjour,
Devant récupérer des fichiers (photos) au sein d'une arborescence anarchique et les reclasser dans autre arborescence cette fois dotée d'une certaine logique (année/mois/jour/) me voilà lancer dans un script bash.
La première partie se règle assez facilement : 8<--- cd "$origine" find . -type f -exec cp '{}' $cible ; 8<---
La deuxième phase est plus laborieuse : 8<--- cd "${cible}" for photo in * do if [ ! -d "$photo" ] ; then stat -t '%Y%m%d' "$photo" | { read ch01 ch02 ch03 ch04 ch05 ch06 ch07 ch08 ch09 ch10 ch11 ch12 ch13 ch14 ch15
/usr/bin/stat -t '%Y %m %d' -f %Sm "$photo" | { read annee mois jour
annee=${ch12:1:4} ; if [ ! -d "$annee" ] ; then mkdir "$annee" ; fi cd "$annee" mois=${ch12:5:2} ; if [ ! -d "$mois" ] ; then mkdir "$mois" ; fi cd "$mois" jour=${ch12:7:2} ; if [ ! -d "$jour" ] ; then mkdir "$jour" ; fi
mkdir -p "$annee/$mois/jour"
Ça crée tous les niveaux de répertoires qu'il faut, sans erreur si certains répertoires existent déjà.
mv "${cible}/${photo}" "${cible}/${annee}/${mois}/${jour}/${photo}" } fi done 8<---
Tout a marché selon mes désirs, mais j'aimerais savoir :
1- comment optimiser et alléger la deuxième partie 2- comment l'intégrer à la première. J'ai bien essayé de la glisser entre "-exec" et ";" mais sans succès :(
Il faut probablement lancer un shell avec l'ensemble des commandes. Un truc du style:
-- Jo "Don't suffer from insanity, enjoy every minute of it."
Vincent Lefevre
Dans l'article <1im4f3n.fzfcb11o8mfjmN%jose.campos+, José Campos <jose.campos+ écrit:
OK, ça roule impec'. Existe-t-il un moyen de récupérer, non pas la date de dernière modification, mais la date de création du fichier?
Ce n'est peut-être pas aussi simple. La date de création du fichier n'existe pas en POSIX. C'est spécifique à Mac OS X. La page man du stat(1) BSD indique:
a, m, c, B The time file was last accessed or modified, of when the inode was last changed, or the birth time of the inode.
Mais le "birth time" n'est pas forcément la date de création du fichier (enfin, tout dépend de ce qu'on entend par "date de création du fichier"). À la place de stat, tu peux utiliser mdls. Mais la date de création n'est pas préservée par tous les utilitaires.
Dans l'article <1im4f3n.fzfcb11o8mfjmN%jose.campos+spam@galacsys.com>,
José Campos <jose.campos+spam@galacsys.com> écrit:
OK, ça roule impec'. Existe-t-il un moyen de récupérer, non pas la
date de dernière modification, mais la date de création du fichier?
Ce n'est peut-être pas aussi simple. La date de création du fichier
n'existe pas en POSIX. C'est spécifique à Mac OS X. La page man du
stat(1) BSD indique:
a, m, c, B
The time file was last accessed or modified, of when the
inode was last changed, or the birth time of the inode.
Mais le "birth time" n'est pas forcément la date de création du fichier
(enfin, tout dépend de ce qu'on entend par "date de création du fichier").
À la place de stat, tu peux utiliser mdls. Mais la date de création n'est
pas préservée par tous les utilitaires.
Dans l'article <1im4f3n.fzfcb11o8mfjmN%jose.campos+, José Campos <jose.campos+ écrit:
OK, ça roule impec'. Existe-t-il un moyen de récupérer, non pas la date de dernière modification, mais la date de création du fichier?
Ce n'est peut-être pas aussi simple. La date de création du fichier n'existe pas en POSIX. C'est spécifique à Mac OS X. La page man du stat(1) BSD indique:
a, m, c, B The time file was last accessed or modified, of when the inode was last changed, or the birth time of the inode.
Mais le "birth time" n'est pas forcément la date de création du fichier (enfin, tout dépend de ce qu'on entend par "date de création du fichier"). À la place de stat, tu peux utiliser mdls. Mais la date de création n'est pas préservée par tous les utilitaires.
Ce n'est peut-être pas aussi simple. La date de création du fichier n'existe pas en POSIX. C'est spécifique à Mac OS X. [...]
OK,
Mais le "birth time" n'est pas forcément la date de création du fichier (enfin, tout dépend de ce qu'on entend par "date de création du fichier"). À la place de stat, tu peux utiliser mdls.
OK, vu
Mais la date de création n'est pas préservée par tous les utilitaires.
Comme dans le cas présent il s'agissait de *.jpg, j'ai demandé à GraphicConverter de modifier par lot les dates de création et de dernière modification en fonction de la date EXIF.
Encore une fois merci de ton aide et de ta patience, bonne semaine.
-- Jo "Don't suffer from insanity, enjoy every minute of it."
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Ce n'est peut-être pas aussi simple. La date de création du fichier
n'existe pas en POSIX. C'est spécifique à Mac OS X. [...]
OK,
Mais le "birth time" n'est pas forcément la date de création du fichier
(enfin, tout dépend de ce qu'on entend par "date de création du fichier").
À la place de stat, tu peux utiliser mdls.
OK, vu
Mais la date de création n'est pas préservée par tous les utilitaires.
Comme dans le cas présent il s'agissait de *.jpg, j'ai demandé à
GraphicConverter de modifier par lot les dates de création et de
dernière modification en fonction de la date EXIF.
Encore une fois merci de ton aide et de ta patience, bonne semaine.
--
Jo
"Don't suffer from insanity, enjoy every minute of it."
Ce n'est peut-être pas aussi simple. La date de création du fichier n'existe pas en POSIX. C'est spécifique à Mac OS X. [...]
OK,
Mais le "birth time" n'est pas forcément la date de création du fichier (enfin, tout dépend de ce qu'on entend par "date de création du fichier"). À la place de stat, tu peux utiliser mdls.
OK, vu
Mais la date de création n'est pas préservée par tous les utilitaires.
Comme dans le cas présent il s'agissait de *.jpg, j'ai demandé à GraphicConverter de modifier par lot les dates de création et de dernière modification en fonction de la date EXIF.
Encore une fois merci de ton aide et de ta patience, bonne semaine.
-- Jo "Don't suffer from insanity, enjoy every minute of it."
laurent.pertois
Vincent Lefevre <vincent+ wrote:
Ce n'est peut-être pas aussi simple. La date de création du fichier n'existe pas en POSIX. C'est spécifique à Mac OS X.
-- Politically Correct Unix - UTILITIES The "touch" command has been removed from the standard distribution due to its inappropriate use by high-level managers.
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Ce n'est peut-être pas aussi simple. La date de création du fichier
n'existe pas en POSIX. C'est spécifique à Mac OS X.
--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.
-- Politically Correct Unix - UTILITIES The "touch" command has been removed from the standard distribution due to its inappropriate use by high-level managers.
-- Politically Correct Unix - UTILITIES The "touch" command has been removed from the standard distribution due to its inappropriate use by high-level managers.
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Dans l'article <1imetc5.13toyna1vcjwfsN%laurent.pertois@alussinan.org>,
Laurent Pertois <laurent.pertois@alussinan.org> écrit:
--
Politically Correct Unix - UTILITIES
The "touch" command has been removed from the standard distribution due
to its inappropriate use by high-level managers.
-- Politically Correct Unix - UTILITIES The "touch" command has been removed from the standard distribution due to its inappropriate use by high-level managers.
Anonyme
Vincent Lefevre <vincent+ wrote:
Dans l'article <1imetc5.13toyna1vcjwfsN%, Laurent Pertois écrit:
On se demande pourquoi tu utilise un ordinateur alors... Tous les Mac sont des merdes américaines, Windows est une merde américaine, et la plupart des développeurs bossant sur Linux sont également américain, on peut donc dire que Linux est une sous merde américaine.
-- Anonyme ( jayce <@> mosx.org ) ********* MosX.org <http://www.mosx.org/> ********* Ce message est sous licence Creative Commons "by-nc-sa-2.0" <http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Dans l'article <1imetc5.13toyna1vcjwfsN%laurent.pertois@alussinan.org>,
Laurent Pertois <laurent.pertois@alussinan.org> écrit:
On se demande pourquoi tu utilise un ordinateur alors... Tous les Mac
sont des merdes américaines, Windows est une merde américaine, et la
plupart des développeurs bossant sur Linux sont également américain, on
peut donc dire que Linux est une sous merde américaine.
--
Anonyme ( jayce <@> mosx.org )
********* MosX.org <http://www.mosx.org/> *********
Ce message est sous licence Creative Commons "by-nc-sa-2.0"
<http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>
On se demande pourquoi tu utilise un ordinateur alors... Tous les Mac sont des merdes américaines, Windows est une merde américaine, et la plupart des développeurs bossant sur Linux sont également américain, on peut donc dire que Linux est une sous merde américaine.
-- Anonyme ( jayce <@> mosx.org ) ********* MosX.org <http://www.mosx.org/> ********* Ce message est sous licence Creative Commons "by-nc-sa-2.0" <http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>