PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Serveur - Sécurité et techniques > fr.comp.os.unix > vider un répertoire
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
fr.comp.os.unix Système UNIX.

vider un répertoire

Réponse
 
LinkBack Outils de la discussion
Vieux 10/03/2007, 16h09   #1
Benoit Izac
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut vider un répertoire

Bonjour,

Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
considère que le propriétaire de son contenu (pas forcément du
répertoire lui-même) est le même que celui qui lance la commande. Je ne
souhaite utiliser que des commandes POSIX.

Je ne vois qu'une solution :
% (cd $D && find . ! -name . -prune -exec rm -fr -- {} +)

Fonctionne-t-elle dans tous les cas ?
En existe-t-il d'autres ?

Merci.
--
Benoit Izac
  Réponse avec citation
Vieux 10/03/2007, 16h25   #2
ALain Montfranc
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

Benoit Izac a écrit
> Bonjour,
>
> Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
> considère que le propriétaire de son contenu (pas forcément du
> répertoire lui-même) est le même que celui qui lance la commande. Je ne
> souhaite utiliser que des commandes POSIX.
>
> Je ne vois qu'une solution :
> % (cd $D && find . ! -name . -prune -exec rm -fr -- {} +)


le cd $D est inutile find $D ... marchera et tu peux remplacer le -exec
par un xargs (avec l'option -0 bien sur et un print0 dans le find)

De plus quel interet de descendre dans le repertoire puisque tu fais un
rm recursif ?

Rajoute donc un maxdepth dans le find...

> Fonctionne-t-elle dans tous les cas ?
> En existe-t-il d'autres ?



Pourquoi pas un rm -rf $D && mkdir $D ?


  Réponse avec citation
Vieux 10/03/2007, 16h55   #3
Benoit Izac
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

Bonjour,

le 10/03/2007 à 17:25, ALain Montfranc a écrit dans le message
<mn.54157d73a7dc0ea6.51095@x.con> :

>> Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
>> considère que le propriétaire de son contenu (pas forcément du
>> répertoire lui-même) est le même que celui qui lance la commande. Je ne
>> souhaite utiliser que des commandes POSIX.
>>
>> Je ne vois qu'une solution :
>> % (cd $D && find . ! -name . -prune -exec rm -fr -- {} +)

>
> le cd $D est inutile find $D ... marchera et tu peux remplacer


Non car mon « ! -name . » ne fonctionnera plus.

> le -exec par un xargs (avec l'option -0 bien sur et un print0 dans le
> find)


-print0 n'est pas POSIX. xargs -0 non plus.


> De plus quel interet de descendre dans le repertoire puisque tu fais
> un rm recursif ?


Je ne descends pas dedans puisque j'utilise « -prune ».

> Rajoute donc un maxdepth dans le find...


-maxdepth n'est pas POSIX.

>> Fonctionne-t-elle dans tous les cas ?
>> En existe-t-il d'autres ?

>
>
> Pourquoi pas un rm -rf $D && mkdir $D ?


Pour au moins deux raisons :
- cela risque de changer les permissions qu'avait initialement $D ;
- ça ne fonctionnera pas si tu n'es pas propriétaire de $D (cas de
$D avec le sticky bit).

--
Benoit Izac
  Réponse avec citation
Vieux 10/03/2007, 16h55   #4
Jean-Rene David
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

* ALain Montfranc [2007.03.10 16:25]:
> Benoit Izac a écrit
>> Je ne souhaite utiliser que des commandes POSIX.
>>
>> Je ne vois qu'une solution :
>> % (cd $D && find . ! -name . -prune -exec rm -fr -- {} +)

>
> le cd $D est inutile find $D ... marchera et tu peux remplacer le -exec
> par un xargs (avec l'option -0 bien sur et un print0 dans le find)


find -print0 n'est pas posix, pas plus que xargs -0

Ce sont des extensions GNU.

--
JR
  Réponse avec citation
Vieux 10/03/2007, 17h07   #5
Nicolas George
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

Benoit Izac wrote in message <87bqj1ujgf@message.id>:
> - ça ne fonctionnera pas si tu n'es pas propriétaire de $D (cas de
> $D avec le sticky bit).


Petite erreur ici: le sticky-bit joue s'il est sur le parent de $D, pas sur
$D lui-même.
  Réponse avec citation
Vieux 10/03/2007, 17h57   #6
Benoit Izac
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

Bonjour,

le 10/03/2007 à 18:07, Nicolas George a écrit dans le message
<45f2e5e8$0$3217$426a74cc@news.free.fr> :

>> - ça ne fonctionnera pas si tu n'es pas propriétaire de $D (cas de
>> $D avec le sticky bit).

>
> Petite erreur ici: le sticky-bit joue s'il est sur le parent de $D,
> pas sur $D lui-même.


Le sticky bit joue sur ses descendants. J'ai parlé du sticky bit en
pensant à « /tmp » mais en fait ça n'a rien à voir dans mon cas.

J'aurais du dire :
- ça ne fonctionne pas si tu n'as pas la permission en écriture sur
le parent de $D, rm va échoué.

--
Benoit Izac
  Réponse avec citation
Vieux 10/03/2007, 18h09   #7
Stephane Chazelas
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

2007-03-10, 17:09(+01), Benoit Izac:
> Bonjour,
>
> Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
> considère que le propriétaire de son contenu (pas forcément du
> répertoire lui-même) est le même que celui qui lance la commande. Je ne
> souhaite utiliser que des commandes POSIX.
>
> Je ne vois qu'une solution :
> % (cd $D && find . ! -name . -prune -exec rm -fr -- {} +)
>
> Fonctionne-t-elle dans tous les cas ?

[...]

(unset CDPATH
cd -P -- "$D" &&
find . ! -name . -prune -exec rm -fr {} +)

ou

find "$D/." ! -name . -prune -exec rm -rf {} +
(dans la mesure ou $D ne commence pas part "-")


Tu as aussi:

ln -s "$D" "$D.link" &&
rm -rf "$D.link/"

(dans la mesure ou "$D" est absolu).

qui est POSIX (je pense) mais ne marche pas avec GNU rm sous
Linux (entre autres).

--
Stéphane
  Réponse avec citation
Vieux 10/03/2007, 21h58   #8
Benoit Izac
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: vider un répertoire

Bonjour,

le 10/03/2007 à 19:09, Stephane Chazelas a écrit dans le message
<slrnev5t4e.coh.stephane.chazelas@spam.is.invali d> :

>> Je cherche à vider le répertoire $D de tout ce qu'il contient. Je
>> considère que le propriétaire de son contenu (pas forcément du
>> répertoire lui-même) est le même que celui qui lance la commande. Je
>> ne souhaite utiliser que des commandes POSIX.

[...]

> ln -s "$D" "$D.link" &&
> rm -rf "$D.link/"
>
> (dans la mesure ou "$D" est absolu).
>
> qui est POSIX (je pense) mais ne marche pas avec GNU rm sous
> Linux (entre autres).


Tu es sûr ? Ça me parait plutôt dangereux comme commande. Un « / » en
trop en voulant supprimer un lien symbolique et on perd le contenu du
répertoire (et le lien).

Selon SUSv3 pour rm(1) (je ne suis pas sûr de bien comprendre la
dernière phrase) :

| The rm utility removes symbolic links themselves, not the files they
| refer to, as a consequence of the dependence on the unlink()
| functionality, per the DESCRIPTION. When removing hierarchies with -r
| or -R, the prohibition on following symbolic links has to be made
| explicit.

Mais la description de unlink(2) me paraît claire :

| The unlink() function shall remove a link to a file. If path names
| a symbolic link, unlink() shall remove the symbolic link named by path
| and shall not affect any file or directory named by the contents of
| the symbolic link.

--
Benoit Izac
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 01h45.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,14665 seconds with 16 queries