web-dev-qa-db-ja.com

所有権/権限を変更せずに、サブディレクトリ内のすべてのファイルの内容をクリアするにはどうすればよいですか?

私は次のようなものを使用してファイルのリストを見つけることができます:

find /path/to/files -type f

そして、私は次のいずれかで単一のファイルの内容をクリアすることができます:

> filename

echo -n > filename

cat /dev/null > filename

出力リダイレクトを含まないコマンドを使用して、次のようなことを行うことができます。

find /path/to/files -type f -exec file '{}' \;

ただし、これは機能しません。

find /path/to/files -type f -exec echo -n > '{}' \;

Findの-execまたは| xargsを使用してコマンドを作成し、ファイルをクリアするこれらのコマンドの1つにファイルリストをパイプすることができないようです。これどうやってするの?

2
Dave Forgac

find /path/to/files -type f -exec /bin/sh -c "> '{}'" ';'はあなたが望むことをするべきです。 execの詳細な動作の詳細については、 find(1) を参照してください。ただし、この呼び出しはコマンドを1回実行し、ファイル名を{}の場所に配置します。

Xargsにコマンドに単一のファイル名のみを渡すように指示することも、find /path -type f | while read file; do echo -n > "$file"; doneを使用してシェルレベルでそれを行うこともできます。

3
Daniel Pittman

楽しみのために、ここに別のオプションがあります:

find /path/to/files -type f -exec dd if=/dev/null of={} \;
4
Gordon Davisson