如何清除目录中所有文件的数据?

如何清除目录中所有文件的数据?

我有一个文件夹,其中包含一些文本文件和其他文件夹,其中又包含更多文本文件。我需要一个命令,该命令将递归地循环遍历该文件夹,并清除该目录及其子目录中存在的所有文件中的所有内容。

我该怎么做呢?

答案1

您可以通过以下方式执行此操作find

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

对于每个文件名,它都会调用 Bash (不是很有效)并回显,因为 . -n,所以没有换行符,基本上对文件没有任何影响,从而覆盖其内容并创建零长度文件。

如果您有很多文件和/或经常需要一个小型(C/Python/Perl/Ruby)实用程序,该实用程序从输入中读取 NUL 终止文件名列表并向每个文件名写入零字节,这会大大加快速度(find -type f -print0 | your_zeroing_util

例如,您可以使用以下内容your_zeroing_util

#!/usr/bin/env python

import sys

inp = sys.stdin.read()
while inp:
   if '\0' in inp:
      file_name, inp = inp.split('\0', 1)
      # print("emptying [{}]".format(file_name))
      with open(file_name, 'w') as fp:
         pass
   inp += sys.stdin.read()

相关内容