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()