OVH Cloud OVH Cloud

suppression du contenu des répertoire

9 réponses
Avatar
ecdv
Bonjour

Je souhaiterai supprimer le contenu d'une arborescence
sans supprimer l'arborescence
C'est =E0 dire ne supprimer que les fichiers
Je n'ai pas trouver comment faire avec les options de la commande rm
QUelqu'un peut-il me donner une piste ?

merci

9 réponses

Avatar
Thomas Baruchel
Je souhaiterai supprimer le contenu d'une arborescence
sans supprimer l'arborescence
C'est à dire ne supprimer que les fichiers
Je n'ai pas trouver comment faire avec les options de la commande rm
QUelqu'un peut-il me donner une piste ?


Regarde la commande 'find' en réglant sur le type 'f' (fichiers)
avec l'option -exec (pour exécuter une action)
un truc comme
find ./ -type f -exec rm {} ;

Cordialement

--
Thomas Baruchel
write to baruchel at the host called bluebottle dot com
écrire à baruchel chez l'hôte nommé bluebottle point com
http://baruchel.free.fr/~thomas/

Avatar
ecdv
ok merci ca marche nickel !
Avatar
Thomas Baruchel
ok merci ca marche nickel !
évidemment, ajoute l'option -f à rm si nécessaire.


Cordialement,

--
Thomas Baruchel
write to baruchel at the host called bluebottle dot com
écrire à baruchel chez l'hôte nommé bluebottle point com
http://baruchel.free.fr/~thomas/

Avatar
Stephane Chazelas
On 14 Oct 2005 14:49:08 GMT, Thomas Baruchel wrote:
Je souhaiterai supprimer le contenu d'une arborescence
sans supprimer l'arborescence
C'est à dire ne supprimer que les fichiers
Je n'ai pas trouver comment faire avec les options de la commande rm
QUelqu'un peut-il me donner une piste ?


Regarde la commande 'find' en réglant sur le type 'f' (fichiers)
avec l'option -exec (pour exécuter une action)
un truc comme
find ./ -type f -exec rm {} ;
[...]


Ca n'efface que les fichiers reguliers (pas les symlinks, les
fifos, les socket...)

find . ! -type d -exec rm -f {} +

Le "+", c'est pour eviter d'avoir a lancer un rm par fichier.

Avec zsh:

rm ./**/*(D^/)

--
Stephane


Avatar
Benoit Izac
Bonjour,

le 14/10/2005 à 17:34, Stephane Chazelas a écrit
dans le message :

find . ! -type d -exec rm -f {} +


Tu ne double-quote plus les {} ?

--
Benoit Izac

Avatar
David
Le Fri, 14 Oct 2005 14:49:08 +0000, Thomas Baruchel a écrit :
Regarde la commande 'find' en réglant sur le type 'f' (fichiers) avec
l'option -exec (pour exécuter une action)
un truc comme
find ./ -type f -exec rm {} ;


Pour de meilleur performances je préfère :
find ./ -type f | xargs rm

Avatar
Stephane Chazelas
2005-10-14, 22:25(+02), David:
Le Fri, 14 Oct 2005 14:49:08 +0000, Thomas Baruchel a écrit :
Regarde la commande 'find' en réglant sur le type 'f' (fichiers) avec
l'option -exec (pour exécuter une action)
un truc comme
find ./ -type f -exec rm {} ;


Pour de meilleur performances je préfère :
find ./ -type f | xargs rm



Ca ne marche pas. find n'est pas compatible avec xargs sauf pour
des noms de fichiers tres particuliers.

Pour la performance, utiliser

find . -type f -exec rm {} +

--
Stéphane


Avatar
Jean-Louis Liagre
Stephane Chazelas wrote:
2005-10-14, 22:25(+02), David:


Regarde la commande 'find' en réglant sur le type 'f' (fichiers) avec
l'option -exec (pour exécuter une action)
un truc comme
find ./ -type f -exec rm {} ;


Pour de meilleur performances je préfère :
find ./ -type f | xargs rm


Ca ne marche pas. find n'est pas compatible avec xargs sauf pour
des noms de fichiers tres particuliers.


C'est exagéré. J'aurais plutôt écrit: find est compatible avec xargs
sauf pour les noms de fichiers très particuliers créés par des
utilisateurs ou des applications ne respectant pas une convention
existant depuis les origines d'Unix.



Avatar
Stephane Chazelas
2005-10-17, 08:12(+02), Jean-Louis Liagre:
[...]
Pour de meilleur performances je préfère :
find ./ -type f | xargs rm


Ca ne marche pas. find n'est pas compatible avec xargs sauf pour
des noms de fichiers tres particuliers.


C'est exagéré. J'aurais plutôt écrit: find est compatible avec xargs
sauf pour les noms de fichiers très particuliers créés par des
utilisateurs ou des applications ne respectant pas une convention
existant depuis les origines d'Unix.
[...]


Non. Depuis les origines d'Unix, NL, SPC, TAB les singles
quotes, les double quotes et les backslashs sont autorisés dans
les noms de fichiers. xargs est tout-a-fait capable de processer
de tels fichiers:

xargs printf '<%s>n' << EOF
"fichier avec des espaces"
"fichier
avec des
sauts de lignes"
'avec des "quotes"'
avec des backslashes
EOF

C'est just que find n'a pas de mode dans lequel il ecrit dans le
format reconnu par xargs. C'est pour ca que les find et xargs de
GNU et des BSD ont ajouté les options -print0 et -0.

find . -print

ne peut pas etre postprocessé.

find .//. -print

peut etre post processé (car le "//" permet d'identifier le
debut d'un fichier) et on peut alors eventuellement l'adapter au
format qu'attend xargs:

find .//. -print | sed 's/./&/g' | awk '
{
if (NR > 1) {
printf "%s", line
if ($0 !~ ////) printf ""
print ""
}
line = $0
}
END { print line }' | xargs rm -f

--
Stéphane