Como faço recursivamente destruir uma árvore de diretórios inteira?

38

Eu tenho uma árvore de diretório que eu gostaria de destruir com o utilitário 'fragmentar' do Linux. Infelizmente, o shred não possui a opção -R para a fragmentação recursiva.

Como posso destruir uma árvore de diretórios inteira recursivamente?

    
por Steve V. 17.12.2011 / 06:43

6 respostas

37

Use o comando find para executar shred recursivamente:

find <dir> -type f -exec shred {} \;
    
por 17.12.2011 / 06:46
24

Cuidado com o fragmento!

A partir do shred-manpage:

CAUTION: Note that shred relies on a very important assumption: that the file system overwrites data in place. This is the traditional way to do things, but many modern file system designs do not satisfy this assumption. The following are examples of file systems on which shred is not effective, or is not guaranteed to be effective in all file system modes:

  • log-structured or journaled file systems, such as those supplied with AIX and Solaris (and JFS, ReiserFS, XFS, Ext3, etc.)

  • file systems that write redundant data and carry on even if some writes fail, such as RAID-based file systems

  • file systems that make snapshots, such as Network Appliance's NFS server

  • file systems that cache in temporary locations, such as NFS version 3 clients

  • compressed file systems

In the case of ext3 file systems, the above disclaimer applies (and shred is thus of limited effectiveness) only in data=journal mode, which journals file data in addition to just metadata. In both the data=ordered (default) and data=writeback modes, shred works as usual. Ext3 journaling modes can be changed by adding the data=something option to the mount options for a particular file system in the /etc/fstab file, as documented in the mount man page (man mount).

In addition, file system backups and remote mirrors may contain copies of the file that cannot be removed, and that will allow a shredded file to be recovered later.

Solução: Use um sistema de arquivos criptografado e apenas exclua seus arquivos.

    
por 17.12.2011 / 21:14
9

Combinando esta resposta com as melhores opções conhecidas para o shred usando este link de estouro de pilha ' Excluindo arquivos permanentemente e com segurança no CentOS ':

find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;

Editar: Esteja ciente de que melhor resposta para fragmentar um único arquivo força uma sincronização que grava alterações na mídia antes de excluir o arquivo porque alguns ou todos os sistemas de arquivos registrados em diário possuem um buffer.

Se possível, o comando find deve chamar um script de shell no arquivo que é executado:

shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file

em cada arquivo.

    
por 03.03.2014 / 03:12
7

Use a exclusão segura.

sudo apt-get install secure-delete
srm -r pathname

Concluído. A exclusão segura é muito mais paranóica do que shred, usando 38 passes em vez de 3. Para fazer um único passo rápido, use

srm -rfll pathname

fll lhe dá um gerador de dados aleatórios menos aleatório, e apenas uma única passagem.

    
por 23.07.2014 / 12:20
5
find /your/directory -exec shred {} \;
    
por 17.12.2011 / 06:45
3
find [dirname] -depth -type f -exec shred -n1 {} \;

Isso realiza uma busca em profundidade por arquivos no diretório [dirname], em seguida, executa o comando shred -n1 em cada arquivo. Ao remover arquivos e / ou diretórios, adicionar -depth como padrão é um bom hábito, embora não seja estritamente necessário para este caso. Ao executar esse tipo de comando com rm -rf em vez de shred , -depth é necessário para garantir que os diretórios não sejam excluídos antes que o conteúdo dos diretórios seja excluído (causando erros).

    
por 17.12.2011 / 15:46