いくつかのテキストファイルを含むフォルダと、より多くのテキストファイルを含む他のフォルダがあります。フォルダを繰り返し繰り返し、ディレクトリとサブディレクトリ内のすべてのファイルのすべての内容を消去するコマンドが必要です。
どうすればいいですか?
答え1
次の方法でこれを実行できますfind
。
cd top_level_dir
find . -type f -exec bash -c "echo -n '' > {}" \;
各ファイル名に対してBash(非常に効率的ではない)を呼び出します。-n
ので改行なしでエコします。デフォルトではファイルに影響を与えず、内容を上書きして長さゼロのファイルを生成します。
ファイルが多いか、入力でNULで終わるファイル名のリストを読み、各ファイル名にゼロバイトを書き込む小さな(C / Python / Perl / Ruby)ユーティリティが頻繁に必要な場合、このユーティリティを使用すると速度が大幅に向上します(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()