ディレクトリ内の .dat 拡張子を持つすべてのファイルの内容をフラッシュするにはどうすればよいですか?

ディレクトリ内の .dat 拡張子を持つすべてのファイルの内容をフラッシュするにはどうすればよいですか?

ディレクトリ内に .dat 拡張子のファイルがいくつかありますが、それらのファイルをディレクトリから削除せずに、すべてのファイルを空にしたいと考えています。

私はこのようにしてそれを達成しようとしましたが、うまくいきませんでした

> *.dat
-bash: *.dat: ambiguous redirect

答え1

次のようにすることができます:

:|tee -- *.dat

または、zshmultios)と同等のもの:

:>*.dat

ただし、すべてのファイルを同時に開くため、ファイルの数が多い場合は、開いているファイル記述子の最大数の制限に達する可能性があります。

答え2

試す

for x in *.dat
do
    > "$x"
done

これは基本的にすべてのファイルをループして、>それらに対して を実行します。

答え3

システムにtruncateユーティリティ(GNU coreutilsから)がある場合は、次のようにします。

truncate -s 0 -c -- *.dat

-s 0サイズをゼロに設定し、一致するものがない場合にシェルが展開されていないものを返すと、-cリテラル名を持つ新しいファイルが作成されないようにします。*.dat*.dat

関連情報