删除文件内容但保留名称和层次结构

hen*_*sti 8 bash zsh find files

我已经镜像了一个目录结构,但我不关心文件的内容,我只想保留所有内容的名称和结构。

如何用“无”(空、1 个字节、空字符串或类似的东西)替换所有文件(不是文件夹)的内容?

Jef*_*ler 19

一般来说,

find /top -type f -exec cp /dev/null {} \;
Run Code Online (Sandbox Code Playgroud)

或(由jordanm 提供):

find /top -type f -exec sh -c '> $1' -- {} \; 
Run Code Online (Sandbox Code Playgroud)

在Linux系统(或一个与所述截断命令GNU coreutils软件包):

find /top -type f -exec truncate -s 0 {} +
Run Code Online (Sandbox Code Playgroud)

  • 多一个?`find /top -type f -exec sh -c '> $1' -- {} \;` (3认同)

Sté*_*las 6

zsh

for f (**/*(D.)) : > $f
Run Code Online (Sandbox Code Playgroud)

.仅对常规文件执行此操作,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}
  }' {} +
Run Code Online (Sandbox Code Playgroud)

请注意,所有这些都会更新文件的上次修改时间。