On Saturday 22 January 2011 à 10:36:57PM, Yves Rutschle wrote: > On Sat, Jan 22, 2011 at 10:06:27PM +0100, Fabien LUCE wrote: > > je viens d'essayer un petit: > > tar cjvf test.tar.bz2 $(find . -mindepth 1 -name "*" -exec echo {} +)
Eeek. Y'a un gros souci là. Dans ton utilisation de find, tu ne résouds en rien le problème des noms de fichiers problématiques, pour une bonne raison : tu laisses le shell "splitter" la sortie de find, par la simple utilisation de $(...). Tu pourrais, en étant vraiment vicieux, utiliser find pour ta tâche : $ find . -mindepth 1 -exec tar cjvf test.tar.bz2 {} + Mais ce genre d'utilisation est déconseillée, car on crée ainsi des archives qui s'extraient dans le répertoire courant. > J'ai peut-être raté un épisode, mais pourquoi ne pas faire > un simple: > > tar cjvf test.tar.bz2 * > > ? Histoire de sauvegarder aussi les fichiers et répertoires cachés ? Ou pas... > Sinon, j'aurais tendance à ajouter des guillements autour > des noms de fichiers qui contiennent des espaces, donc: > > tar cjvf test.tar.bz2 $(find . -mindepth 1 -name "*" -exec echo \"{}\" +) Inutile, le problème intervient lorsque le shell interprète la sortie de la substitution $(...). De manière générale, utiliser $(...) sans guillemets doubles autour est une erreur. Pas besoin de mettre des guillemets autour de {} : le shell n'interprète pas les noms de fichier car {} est une sémantique interne à find(1). find(1) passe directement par un appel à execvp(2) pour lancer la commande, donc les noms de fichiers représentés par {} ne sont pas interprétés. > Pas testé, donc sans garantie. > > Y. -- "Free software, free society." Jérémie Courrèges-Anglas GPG key : 06A11494
pgpYF1OR5V3TH.pgp
Description: PGP signature