Como limpar dados de todos os arquivos presentes em um diretório?

1

Eu tenho uma pasta que tem alguns arquivos de texto e outras pastas, que por sua vez, têm mais arquivos de texto neles. Eu preciso de um comando que recursivamente percorra a pasta e limpe todo o conteúdo de todos os arquivos presentes nesse diretório e seus subdiretórios.

Como faço isso?

    
por Punit Naik 21.04.2016 / 09:08

1 resposta

3

Você pode fazer isso com find :

cd top_level_dir
find . -type f -exec bash -c "echo -n '' > {}" \;

Para cada nome de arquivo, ele chama Bash (não muito eficiente) e echos, sem nova linha por causa do -n , essencialmente nada para o arquivo, sobrescrevendo seu conteúdo e criando um arquivo de tamanho zero.

Se você tiver muitos arquivos e / ou precisar disso, um pequeno utilitário (C / Python / Perl / Ruby) que lê a partir de entrada uma lista de nomes de arquivos terminados em NUL e escreve zero bytes para cada um deles consideravelmente ( find -type f -print0 | your_zeroing_util )

Você pode, por exemplo use o seguinte como your_zeroing_util :

#!/usr/bin/env python

import sys

inp = sys.stdin.read()
while inp:
   if '
cd top_level_dir
find . -type f -exec bash -c "echo -n '' > {}" \;
' in inp: file_name, inp = inp.split('
#!/usr/bin/env python

import sys

inp = sys.stdin.read()
while inp:
   if '%pre%' in inp:
      file_name, inp = inp.split('%pre%', 1)
      # print("emptying [{}]".format(file_name))
      with open(file_name, 'w') as fp:
         pass
   inp += sys.stdin.read()
', 1) # print("emptying [{}]".format(file_name)) with open(file_name, 'w') as fp: pass inp += sys.stdin.read()
    
por 21.04.2016 / 09:29

Tags