Je voudrais créer une archive de tous les fichiers contenus dans tous
les répertoires et sous-répertoires à partir du répertoire courant.
Je procède avec le code suivant:
for dir in `find ./ -type d ! -name "." -print`; do
(
cd "$dir"
find ./ -maxdepth 1 -type f ! -name "archive.tgz" -print0 |\
xargs -0 tar czf archive.tgz
)
done
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Ça fonctionne bien mais j'obtiens parfois
« tar: Refus catégorique de créer un fichier d'archive vide. »
Où est le problème dans mon code ?
Avez-vous d'autres propositions ?
Une autre question:
Étant donné une archive contenant tous les fichiers d'un répertoire,
comment savoir si un des fichiers du répertoire est plus récent que
celui de l'archive ?
--
Merci de votre attention,
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Cyrille Lefevre
Bonjour,
Je voudrais créer une archive de tous les fichiers contenus dans tous les répertoires et sous-répertoires à partir du répertoire courant. Je procède avec le code suivant:
for dir in `find ./ -type d ! -name "." -print`; do ( cd "$dir" find ./ -maxdepth 1 -type f ! -name "archive.tgz" -print0 | xargs -0 tar czf archive.tgz ) done 8<------8<------8<------8<------8<------8<------8<------8<------8<------
Ça fonctionne bien mais j'obtiens parfois « tar: Refus catégorique de créer un fichier d'archive vide. »
Où est le problème dans mon code ? Avez-vous d'autres propositions ?
xargs execute au moins une fois tar cfz archive.tgz meme s'il n'y a pas de fichiers en entree
PS : la solution tar via xargs est mauvaise, car si plus d'un tar est execute, l'archive cree ne contiendra que les fichiers de la derniere execution.
essaye plutot qqc du genre :
# on part du principe qu'il n'y a pas d'n dans les noms de fichier # mais les espaces sont acceptes find . -type d ! -name . -print | while read dir; do ( # on sort si le cd en marche pas cd "$dir" || exit find . -maxdepth 1 -type f ! -name archive.tgz -print | # pax sait lire une liste des fichiers a archiver sur # son entree standard au meme titre que cpio pax -w | gzip > archive.tgz ) done
il doit etre possible de remplacer le "cd $dir; find | pax" par find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Une autre question: Étant donné une archive contenant tous les fichiers d'un répertoire, comment savoir si un des fichiers du répertoire est plus récent que celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent que archive.tgz
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Bonjour,
Je voudrais créer une archive de tous les fichiers contenus dans tous
les répertoires et sous-répertoires à partir du répertoire courant.
Je procède avec le code suivant:
for dir in `find ./ -type d ! -name "." -print`; do
(
cd "$dir"
find ./ -maxdepth 1 -type f ! -name "archive.tgz" -print0 |
xargs -0 tar czf archive.tgz
)
done
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Ça fonctionne bien mais j'obtiens parfois
« tar: Refus catégorique de créer un fichier d'archive vide. »
Où est le problème dans mon code ?
Avez-vous d'autres propositions ?
xargs execute au moins une fois tar cfz archive.tgz meme s'il n'y a pas
de fichiers en entree
PS : la solution tar via xargs est mauvaise, car si plus d'un tar est
execute, l'archive cree ne contiendra que les fichiers de la derniere
execution.
essaye plutot qqc du genre :
# on part du principe qu'il n'y a pas d'n dans les noms de fichier
# mais les espaces sont acceptes
find . -type d ! -name . -print |
while read dir; do
(
# on sort si le cd en marche pas
cd "$dir" || exit
find . -maxdepth 1 -type f ! -name archive.tgz -print |
# pax sait lire une liste des fichiers a archiver sur
# son entree standard au meme titre que cpio
pax -w |
gzip > archive.tgz
)
done
il doit etre possible de remplacer le "cd $dir; find | pax" par
find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Une autre question:
Étant donné une archive contenant tous les fichiers d'un répertoire,
comment savoir si un des fichiers du répertoire est plus récent que
celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent
que archive.tgz
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Je voudrais créer une archive de tous les fichiers contenus dans tous les répertoires et sous-répertoires à partir du répertoire courant. Je procède avec le code suivant:
for dir in `find ./ -type d ! -name "." -print`; do ( cd "$dir" find ./ -maxdepth 1 -type f ! -name "archive.tgz" -print0 | xargs -0 tar czf archive.tgz ) done 8<------8<------8<------8<------8<------8<------8<------8<------8<------
Ça fonctionne bien mais j'obtiens parfois « tar: Refus catégorique de créer un fichier d'archive vide. »
Où est le problème dans mon code ? Avez-vous d'autres propositions ?
xargs execute au moins une fois tar cfz archive.tgz meme s'il n'y a pas de fichiers en entree
PS : la solution tar via xargs est mauvaise, car si plus d'un tar est execute, l'archive cree ne contiendra que les fichiers de la derniere execution.
essaye plutot qqc du genre :
# on part du principe qu'il n'y a pas d'n dans les noms de fichier # mais les espaces sont acceptes find . -type d ! -name . -print | while read dir; do ( # on sort si le cd en marche pas cd "$dir" || exit find . -maxdepth 1 -type f ! -name archive.tgz -print | # pax sait lire une liste des fichiers a archiver sur # son entree standard au meme titre que cpio pax -w | gzip > archive.tgz ) done
il doit etre possible de remplacer le "cd $dir; find | pax" par find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Une autre question: Étant donné une archive contenant tous les fichiers d'un répertoire, comment savoir si un des fichiers du répertoire est plus récent que celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent que archive.tgz
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Ph. Ivaldi
Le 09 juillet 2007, Cyrille Lefevre écrivit :
essaye plutot qqc du genre :
# on part du principe qu'il n'y a pas d'n dans les noms de fichier # mais les espaces sont acceptes find . -type d ! -name . -print | while read dir; do ( # on sort si le cd en marche pas cd "$dir" || exit find . -maxdepth 1 -type f ! -name archive.tgz -print | # pax sait lire une liste des fichiers a archiver sur # son entree standard au meme titre que cpio pax -w | gzip > archive.tgz ) done
C'est parfait. Je ne connaissais pas "pax".
il doit etre possible de remplacer le "cd $dir; find | pax" par find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Là c'est trop compliqué pour moi.
Une autre question: Étant donné une archive contenant tous les fichiers d'un répertoire, comment savoir si un des fichiers du répertoire est plus récent que celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent que archive.tgz
Tout simplement...
Merci. -- Philippe Ivaldi. http://piprim.tuxfamily.org/
Le 09 juillet 2007, Cyrille Lefevre écrivit :
essaye plutot qqc du genre :
# on part du principe qu'il n'y a pas d'n dans les noms de fichier
# mais les espaces sont acceptes
find . -type d ! -name . -print |
while read dir; do
(
# on sort si le cd en marche pas
cd "$dir" || exit
find . -maxdepth 1 -type f ! -name archive.tgz -print |
# pax sait lire une liste des fichiers a archiver sur
# son entree standard au meme titre que cpio
pax -w |
gzip > archive.tgz
)
done
C'est parfait. Je ne connaissais pas "pax".
il doit etre possible de remplacer le "cd $dir; find | pax" par
find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Là c'est trop compliqué pour moi.
Une autre question:
Étant donné une archive contenant tous les fichiers d'un répertoire,
comment savoir si un des fichiers du répertoire est plus récent que
celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent
que archive.tgz
Tout simplement...
Merci.
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
# on part du principe qu'il n'y a pas d'n dans les noms de fichier # mais les espaces sont acceptes find . -type d ! -name . -print | while read dir; do ( # on sort si le cd en marche pas cd "$dir" || exit find . -maxdepth 1 -type f ! -name archive.tgz -print | # pax sait lire une liste des fichiers a archiver sur # son entree standard au meme titre que cpio pax -w | gzip > archive.tgz ) done
C'est parfait. Je ne connaissais pas "pax".
il doit etre possible de remplacer le "cd $dir; find | pax" par find "$dir" | pax -w -s "|^$dir||" -s "|^/||"
Là c'est trop compliqué pour moi.
Une autre question: Étant donné une archive contenant tous les fichiers d'un répertoire, comment savoir si un des fichiers du répertoire est plus récent que celui de l'archive ?
find . -newer archive.tgz te renvera la liste des fichiers plus cecent que archive.tgz
Tout simplement...
Merci. -- Philippe Ivaldi. http://piprim.tuxfamily.org/