Auteur Sujet: rm sous linux : Comment supprimer tous les fichiers d'un dossier ?  (Lu 59793 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
Commande "rm" : Comment supprimer tous les fichiers d'un dossier ?

Je propose un ftp en écriture pour tester son débit : ftp://1.testdebit.info/montant/

N'ayant pas réussi a demander a ProFTPd de placer le dossier accessible en écriture dans /dev/null (cela me met une erreur), je supprime tous els 15 secondes les fichiers (ce n'est pas problématique de supprimer un fichier alors que son upload n'est pas terminé)

Comment en une seule commande supprimer tous les fichiers de ce dossier ?

Les commandes suivantes n'effacent pas les fichiers cachés :

* * * * * /bin/rm -rf /home/vgu/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 15 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 30 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 45 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*

rm -rf * => efface tous les fichiers sauf les fichiers cachés (qui commencent par un point sous unix)
rm -rf *.* => efface tous les fichiers sauf les fichiers cachés
rm -rf .* => efface uniquement les fichiers cachés

Bref auriez-vous une commande simple pour effacer tous les fichiers (cachés ou non) d'un coup ?

thenico

  • Expert.
  • Abonné OVH
  • *
  • Messages: 1 009
  • FTTH >500 Mb/s (13)
rm sous linux : Comment supprimer tous les fichiers d'un dossier ?
« Réponse #1 le: 27 août 2013 à 19:23:50 »
Bref auriez-vous une commande simple pour effacer tous les fichiers (cachés ou non) d'un coup ?
find /path -type f -delete

corrector

  • Invité
Globbing
« Réponse #2 le: 27 août 2013 à 20:43:32 »
Déjà, les globs valables dépendent du shell.

Traditionnellement les noms de fichiers commençant par "." sont traités spécialement (mais pas les chaines : [[ ".x" = * ]]).

En zsh, tu as l'option GLOB_DOTS pour contrôler ce comportement, ainsi tu peux au niveau de tout un script désactiver cette particularité.

Les options de motif permettent de contrôle le comportement d'un motif en particulier : l'option (D) active GLOB_DOTS pour le motif en question.

À noter que les noms de répertoire spéciaux . et .. ne sont jamais trouvés par un motif.

* * * * * /bin/rm -rf /home/vgu/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 15 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 30 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*
* * * * * /bin/sleep 45 ; /bin/rm -rf /home/testdebit.info/fichiers/montant/*

rm -rf * => efface tous les fichiers sauf les fichiers cachés (qui commencent par un point sous unix)
rm -rf *.* => efface tous les fichiers sauf les fichiers cachés
Non, efface les fichiers dont le nom comporte un point. "*" peut correspondre à rien.

En général, l'englobement échoue s'il n'y aucun nom de fichier valable. Pour obtenir une liste vide, zsh propose l'option NULL_GLOB ou le suffixe (N).

bash propose des options similaires.

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
rm sous linux : Comment supprimer tous les fichiers d'un dossier ?
« Réponse #3 le: 27 août 2013 à 21:10:17 »
en pratique je mets quoi pour que rm * efface les fichiers cachés ?
je suis preneur d'un exemple sous dash (the Debian Almquist Shell).
bash n'est plus utilisé pour les scripts car trop long a se charger => https://wiki.ubuntu.com/DashAsBinSh

corrector

  • Invité
rm sous linux : Comment supprimer tous les fichiers d'un dossier ?
« Réponse #4 le: 27 août 2013 à 21:32:20 »
zsh -c "rm /path/*(D)"