我有一个文件夹,其中包含一些文本文件和其他文件夹,其中又包含更多文本文件。我需要一个命令,该命令将递归地循环遍历该文件夹,并清除该目录及其子目录中存在的所有文件中的所有内容。
我该怎么做呢?
答案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()