Je veux nettoyer tous les fichiers dans un répertoire sur Linux (pas les deleteing, seulement effacer leur contenu)nettoyer les fichiers dans le répertoire linux
je dois le faire en C.
Je veux nettoyer tous les fichiers dans un répertoire sur Linux (pas les deleteing, seulement effacer leur contenu)nettoyer les fichiers dans le répertoire linux
je dois le faire en C.
Vous pouvez ouvrir le fichier en mode écriture, puis fermez-le.
comment j'obtiens tous les fichiers dans le répertoire en C – nis
En fait, vous avez vraiment ne pas besoin de le faire en C. UNIX comprend des outils qui peuvent faire à peu près toutes les tâches que vous voulez.
find . -type f -exec cp /dev/null {} ';'
Cet extrait de code ci-dessus en particulier trouver tous les fichiers dans le répertoire en cours et tenter de copier le périphérique null à elle, tronquant efficacement le fichier à 0 octets.
Vous pouvez modifier le répertoire de démarrage (niveau supérieur), restreindre les noms (avec -name '*.jpg'
par exemple) et même le restreindre au répertoire actuel (sans sous-répertoires) avec -maxdepth 0
.
Il y a beaucoup d'autres options avec find
que vous pouvez découvrir en entrant man find
dans votre shell de ligne de commande. Il suffit de ne pas entrer dans Google, vous pouvez obtenir plus que vous espériez :-)
Si la nécessité d'utiliser C est une question absolument non négociable, je encore faire de cette façon mais avec:
system ("find . -type f -exec cp /dev/null {} ';'");
Je ne suis pas désireux de logiciels réécriture que quelqu'un a déjà mis un bucketload d'efforts pour fournir :-) sans
Si, après mon conseil, vous voulez toujours le faire à la dure, vous devez regarder opendir
, readdir
et closedir
pour le traitement des répertoires, puis simplement utiliser fopen
en mode écriture suivi par fclose
sur chaque dossier de candidature.
Si vous souhaitez naviguer dans des structures de répertoires entières plutôt que simplement dans le répertoire en cours, vous devez détecter les répertoires de readdir
et les parcourir probablement de nouveau.
oui mais mon code est en c – nis
Ensuite, sérieusement, utilisez 'system (" find. -type f -exec cp/dev/null {} ';' "); '. Il y a rarement une bonne raison de réinventer la roue. – paxdiablo
vous pouvez également utiliser 'truncate (filename, 0)' au lieu d'ouvrir/fermer le fichier – Hasturkun
Dans Bash:
for i in directory/*; do > $i; done
Cela permettra de préserver la propriété et les autorisations du fichier.
Ne faites pas de shell dans C! Économisez beaucoup de temps en utilisant le meilleur outil pour le travail. Si c'est un devoir, marquez-le comme tel.
scandir
leur liste, pour chaque fichier:fopen(, w+)
fstat
pour obtenir la taillefwrite
le fichier entier avec des zéros? (Ce qui est ce que vous entendez par clair?)fclose
Une belle variante de la coque serait: shred -z directory/*
Juste 'scandir()' suivi d'un 'truncate (filename, 0)' sur chaque fichier fera l'affaire. – caf
Eh bien ... cela dépend, si vous voulez le rendre dur (er) à récupérer, alors écrire des données en place est sain. Sinon oui, juste 'truncate()', ou plus conforme 'fopen (fichier," w ") + fclose()' standard fera l'affaire. – domen
Cela ne fera pas de différence avec l'avènement des systèmes de fichiers de copie sur écriture, cependant;) – caf
Que signifie "propre" signifie? – adamk