
ディレクトリ構造をミラーリングしましたが、ファイルの内容には気にせず、すべてのファイルの名前と構造のみを維持したいと思います。
すべてのファイル(フォルダではない)の内容を「なし」(ヌル、1バイト、空の文字列など)に置き換える方法は?
答え1
一般的に言えば、
find /top -type f -exec cp /dev/null {} \;
または(によってヨルダン):
find /top -type f -exec sh -c '> $1' -- {} \;
Linuxシステム(または切り取りコマンド~からGNU coreutilsパッケージ):
find /top -type f -exec truncate -s 0 {} +
答え2
そしてzsh
:
for f (**/*(D.)) : > $f
.
D
隠しファイルや隠しディレクトリ内のファイルなど、通常のファイルに対してのみこれを実行してください。
小さなファイルの場合:>**/*(D.)
。
ファイルを同じサイズに保ちますが、データなしでスパースにするには(スパースファイルをサポートしていないAppleのHFS +ファイルシステムを除いてディスク容量を消費しません):
find . -type f -exec perl -e '
for (@ARGV) {
unless (open F, "+<", $_) {warn "open $_: $!"; next}
unless (seek F, 0, 2) {warn "seek $_: $!"; next}
$size = tell F;
unless (truncate F, 0) {warn "zap $_: $!"; next}
unless (truncate F, $size) {warn "fill $_: $!"; next}
}' {} +
これらはすべてファイルの最後の変更時間を更新します。
答え3
ファイル内のすべてのメタデータを保存するには、次のことをお勧めします。
まず、次のコマンドを使用してファイルのメタデータをアーカイブします。
star -c -dump -meta $STARTDIR > out.tar
次に、
find
ファイルの削除を呼び出します。
Starをextract
使用すると、次のように呼び出してこれらのtarアーカイブからメタデータを取得できます。
star -xp -xmeta < out.tar
これにより、元のツリーに似ていますが、すべての一般ファイルのサイズが0のディレクトリツリーが作成されます。
電話する場合:
star -xp -xmeta -force-hole < out.tar
これらのファイルは容量が少なく内容がありませんが、ファイルサイズは正確です。
star
ソフトウェア作成者に問題を報告する必要があり、問題が特定のファイルツリーでのみ発生し、ファイルの内容を公開したくない場合でも、このアプローチは興味深いかもしれません。
答え4
完全性のために、bashのバージョンは次のとおりです。
for f in **; do [ -f "$f" ] && [ ! -L "$f" ] && >"$f"; done
これにはglobstar
オプション(shopt -s globstar
)を有効にする必要があるため、少なくともbashバージョン4が必要です。 (しかし、それを使用したい場合は、デフォルトのzsh
Mac OS Xバージョンに固執したくないかもしれません。)