2016-01-09 1 views
0

J'essaie de créer une fonction qui peut aller dans mon fichier .bash_profile qui remplacera chaque octet dans chaque fichier dans un répertoire donné avec 0x00. Le programme parcourra tous les fichiers dans un répertoire donné $(1) (le en boucle), et dans chaque fichier passera par tous les octets et les remplacera par 0x00 (le remplaçant).Remplacer chaque octet dans un répertoire donné avec 0x00

J'ai obtenu le bouclage, mais je ne peux pas comprendre comment faire le remplacement. Pourrais-tu m'aider s'il te plaît? Si je peux faire fonctionner cette fonction, je pourrais la distribuer comme un moyen efficace d'effacer des données. Je vous remercie beaucoup pour votre aide!

Il y avait un autre message où quelqu'un voulait remplacer un ensemble d'octets par un autre. Le mien est différent, mais peut-être aussi utiliser la commande sed.

+2

Jetez un coup d'œil: [Comment installer gshred] (http: // superutilisateur.com/q/617515/340330) – Cyrus

+1

Vous pouvez utiliser 'dd' pour des choses comme ça, mais' shred' est déjà disponible. – rici

+0

@Cyrus gshred/shred ne fonctionnait pas, mais il m'a conduit à srm. Je cherche quelque chose comme ceci, mais je veux 1) le construire moi-même, et 2) garder les dossiers et juste remplacer tout avec 0x00, qui traduit comme espaces. –

Répondre

1

Utilisation dd:

hd targetfile # optionally look at hex dump to see original file contents 

SIZE=$(stat -f%z targetfile) # get file size 
dd if=/dev/zero of=targetfile count=1 bs="$SIZE" # overwrite file contents 

hd targetfile # optionally look at hex dump to see it's all zeros 

Remarque, sur Linux, le commutateur de taille de fichier de stat serait -c%s, que je testé avec. Ci-dessus -f%z est basé sur this answer, et je ne l'ai pas testé.

Vous pouvez également ajouter vérifier la valeur de retour pour stat et vérifiez que la taille du fichier est supérieur à zéro, avant d'utiliser dd. Quelque chose comme:

SIZE=$(stat -f%z targetfile) && 
test "$SIZE" -gt 0 && 
dd if=/dev/zero of=targetfile count=1 bs="$SIZE" 
0
sed -i "s/./\x00/g;" file # sets any char to 0 except returns 

de toute façon des moyens similaires peut créer un fichier du même nom, avec la même taille rempli de zéros, mais il ne sait pas si ces fichiers occuperaient le même espace sur le disque que originaux, de sorte que les octets d'originaux peuvent être trouvés plus tard dans "l'espace libre entre les fichiers"

la bonne façon utiliserait quelque chose de plus sophistiqué, soit des outils spécialisés pour réécrire le contenu du secteur ou au moins un programme qui ouvre le fichier en mode binaire et écraser chaque octet avec zéro. Il peut toujours y avoir ces "octets secrets" cachés quelque part sur le disque, si ces fichiers ont été manipulés avant (édités, copiés, ...) afin de se débarrasser de "preuve", vous devez également réécrire tous " Et espérons qu'il y a eu un remodelage des secteurs (car les HDD peuvent cartographier automatiquement les secteurs défectueux et ceux-ci peuvent être récupérés plus tard, et les SSD font des trucs sales avec les secteurs de remodelage et de remodelage de l'usure).

Alors vous devez toujours tenir compte du prix et du risque. Bon vieux termite est la balle d'argent ici :)

0

Si vous avez besoin de changer tous les fichiers derrière un répertoire, find + dd sont la voie à suivre. Le script suivant devrait faire l'affaire.

Note: sur Darwin (Mac OS X), vous devez changer stat -c%s-stat -f%z comme déjà souligné hyde.

#!/bin/bash 
[ ! -d "$1" ] && echo "Usage: $0 <directory>" && exit 1 
find "$1" -type f ! -empty | while read f; do 
    dd if=/dev/zero of="$f" count=1 bs=`stat -c%s "$f"` > /dev/null 2>&1 || echo "$f failed" 
done