[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Commande find



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

Attachment: pgpizndbByDjV.pgp
Description: PGP signature


Reply to: