Suppression rapide de gros dossiers Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Salut,

J'ai des dossiers de quelques To, avec plusieurs millions (voire milliards ?) de fichiers. Et de temps en temps, je dois supprimer ces gros dossiers. Comment faire pour supprimer ces gros dossiers le plus rapidement possible ? J'ai différentes solutions qui ne satisfont pas :
  • rm -r dossier/ (le pire ! C'est extrêmement lent, surtout si les fichiers sont nombreux)
  • rm -rf dossier (pour le moment la solution la plus rapide. Je ne sais pas pourquoi il y a une différence avec la solution précédente. Attention à ne pas mettre de slash final !)
  • find dossier/ -type f -exec rm {} \; (Solution intéressante, mais lente)
  • echo "" > dossier/fichier (très bien pour supprimer rapidement un gros fichier, mais ne fonctionne pas avec les dossiers)
Et pourtant, il m'est arrivé récemment de jouer avec les liens symboliques et de supprimer plusieurs centaines de Go de données en à peine une seconde...

EDIT : Typo dans le titre
Avatar de l’utilisateur
Grhim
Membre très actif
Membre très actif
Messages : 1389
Inscription : 30 mai 2016, 01:00
Localisation : kekparr'par'là
Status : Hors-ligne

[quote="Dunatotatos"
Comment faire pour supprimer ces gros dossiers le plus rapidement possible ?[/quote]

1.le formater ?? :003:
2.

Code : Tout sélectionner

 find . -name ‘*.cache’ | xargs rm
Debian Stable + Testing -.- Parrot OS - Kali Exegol -.- Raspberry IPFire
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Si je pouvais éviter le formatage, ça m'arrangerait. Sinon le problème devient de copier rapidement 471To de données (que je ne veux pas supprimer)
Et le coup du find est pas mal, , mais pas plus rapide que

Code : Tout sélectionner

rm -rf dossier
Je cherche quelque-chose d'aussi efficace que

Code : Tout sélectionner

echo "" > fichier
, mais qui marche sur les dossiers.
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

Je ne sais pas bien si ça conviendrait à ce que tu veux faire, mais n'est-il pas possible de faire en sorte que cette arborescence ne soit indépendante du système de fichiers :
Soit dans une partition séparée, soit dans un fichier de type disque virtuel, qui serai(en)t alors mounté(s)/démounté(s) à la demande (ou simplement supprimé)
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

MicP a écrit :Soit dans une partition séparée, soit dans un fichier de type disque virtuel, qui serai(en)t alors mounté(s)/démounté(s) à la demande (ou simplement supprimé)
Je n'ai pas les droits root sur la machine. Le coup de la partition est donc hors de portée.
Par contre, le disque virtuel est une idée, si j'arrive à avoir l'accès à la commande mount (pour le moment réservée à root). Ça permet en plus d'utiliser mon astuce de suppression rapide de gros fichier. Je vais voir à l'usage si la technique tient le coup.
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

quand tu dis "effacer", tu veux juste supprimer l'entrée dans la table des fichiers ou bien réellement effacer les données du disques ?
Avatar de l’utilisateur
lol
Site Admin
Site Admin
Messages : 5054
Inscription : 04 avr. 2016, 12:11
Localisation : Madagascar
Status : Hors-ligne

Salut,
Jamais essayé mais ça a l'air redoutable...
Empty Directory: /home/blanktest
Directory to be emptied: /test

Code : Tout sélectionner

[root@myvm1 home]# time rsync -a --delete blanktest/ test/
real    2m52.502s
user    0m2.772s
sys     0m32.649s
The results are pretty impressive, so its much better to use rsync if you want to empty a directory containing millions of files, compared to find command.
Source
Règles d'usage du forum. Signalez si vous avez posté votre question sur un autre forum. Explications ici
Debian Unstable. Mate/LXQT. Dieu, en créant l'homme, a quelque peu surestimé ses capacités.
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1343
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

J'aurais pas pensé à supprimer des fichiers avec rsync !
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid | Devuan Ceres
----
Ne réponds pas aux PM d'assistance
MicP
Modérateur
Modérateur
Messages : 896
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Dunatotatos a écrit :…si j'arrive à avoir l'accès à la commande mount …
Le problème que j'ai eu, c'est surtout d'avoir accès en écriture dans un système de fichiers de type ext4 en utilisant le compte utilisateur,
car une fois formaté, les droits d'accès en écriture sont à root

Alors, j'ai triché : j'ai utilisé le format vfat

Code : Tout sélectionner

michel@debg53sw:~$ dd if=/dev/zero of=monFichImg bs=1M count=16K
16384+0 enregistrements lus
16384+0 enregistrements écrits
17179869184 octets (17 GB) copiés, 55,6984 s, 308 MB/s
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ /sbin/mkfs.vfat -n SYSTFICHS monFichImg
mkfs.fat 3.0.27 (2014-11-12)
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ udisksctl loop-setup --file monFichImg
Mapped file monFichImg as /dev/loop0.
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/michel/SYSTFICHS.
michel@debg53sw:~$

Code : Tout sélectionner

michel@debg53sw:~$ echo "Test écriture Fichier." > "/media/michel/SYSTFICHS/Fichier pour tests.txt"
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ ls -la /media/michel/SYSTFICHS
total 12
drwx------  2 michel michel 4096 août   2 13:03 .
drwxr-x---+ 3 root   root   4096 août   2 12:59 ..
-rw-r--r--  1 michel michel   11 août   2 13:03 Fichier pour tests.txt
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ udisksctl unmount -b /dev/loop0
Unmounted /dev/loop0.
michel@debg53sw:~$ 

Code : Tout sélectionner

michel@debg53sw:~$ udisksctl loop-delete -b /dev/loop0
michel@debg53sw:~$ 
Avatar de l’utilisateur
Dunatotatos
Membre
Membre
Messages : 426
Inscription : 11 mai 2016, 20:56
Status : Hors-ligne

Je vois que je n'ai pas donné suite à ce fil...
L'idée du système de fichiers virtuel était vraiment intéressante, mais je n'avais pas accès à la commande mount...
rsync donnait un résultat encore plus lent que rm -r.
Du coup, j'ai créé une archive tar avec tous mes fichiers dedans, et je désarchive la partie qui m'intéresse dans un tmpfs. Supprimer l'archive en totalité quand j'ai fini est assez simple via un

Code : Tout sélectionner

echo "" > archive.tar
Répondre