ディレクトリ構造をミラーリングしましたが、ファイルの内容は気にせず、すべての名前と構造を保持したいだけです。
すべてのファイル(フォルダーではない)の内容を「何もない」(null、1バイト、空の文字列など)に置き換えるにはどうすればよいですか?
一般的に、
find /top -type f -exec cp /dev/null {} \;
または( jordanm の礼儀):
find /top -type f -exec sh -c '> $1' -- {} \;
Linuxシステム(または GNU coreutilsパッケージ の truncateコマンド を使用するシステム):
find /top -type f -exec truncate -s 0 {} +
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}
}' {} +
_
これらすべてがファイルの最終変更時刻を更新することに注意してください。
完全を期すため、ここではbashバージョンを示します。
for f in **; do [ -f "$f" ] && [ ! -L "$f" ] && >"$f"; done
これには、globstar
オプションを有効にする必要があります(shopt -s globstar
)、したがって少なくともbashバージョン4(ただし、zsh
を使用する場合は、おそらくデフォルトのMac OS Xバージョンを使いたくないでしょう)。
ファイルのすべてのメタデータを保持する場合は、次の手順を実行することをお勧めします。
最初に、以下を使用してファイルのメタデータをアーカイブします。
star -c -dump -meta $STARTDIR > out.tar
次に、find
を呼び出してファイルを削除します。
Starでは、次のように呼び出すことで、そのようなtarアーカイブからのメタデータをextract
できます。
star -xp -xmeta < out.tar
これにより、元のツリーのように見えるディレクトリツリーが作成されますが、すべてのプレーンファイルのサイズは0になります。
あなたが呼び出す場合:
star -xp -xmeta -force-hole < out.tar
ファイルはすべて、コンテンツがなく、適切なファイルサイズのスパースファイルです。
ソフトウェアの作成者に問題を報告する必要があり、問題が特定のファイルツリーでのみ発生し、コンテンツの内容を提供したくない場合は、star
メソッドも興味深いかもしれません。ファイル。