在linux中清理目录中的文件

我想清除Linux上目录中的所有文件(不删除它们,只清除它们的内容)

我需要在C做

实际上,你真的不需要用C来做。UNIX中包含了可以完成任何你想要的任务的工具。

find . -type f -exec cp /dev/null {} ';' 

上面的特定片段将查找当前目录下的所有文件,并尝试将空设备复制到它,有效地截断文件到0字节。

您可以更改起始(顶层)目录,限制名称(例如使用-name '*.jpg' ),甚至使用-maxdepth 0将其限制到当前目录(无子目录)。

还有许多其他的选择,你可以通过在你的命令行shell中输入man find来发现它。 只要不输入到谷歌,你可能会得到比你讨价还价:-)


如果需要使用C是绝对不可协商的,那么我仍然可以这样做,但是:

 system ("find . -type f -exec cp /dev/null {} ';'"); 

我并不热衷于重新编写软件,他们已经付出了大量的精力来免费提供:-)


如果在我的建议之后,你仍然想要这么做,那么你需要查看opendirreaddirclosedir来处理目录,然后在写模式下使用fopen ,然后在每个候选文件上使用fclose

如果你想浏览整个目录结构,而不仅仅是当前目录,你将不得不从readdir检测目录,并可能通过它们递归。

  • scandir列出他们,然后为每个文件:
  • fopen(, w+)
  • fstat来获得大小
  • 用零写整个文件? (这是你明确的意思?)
  • fclose

一个很好的shell变体是: shred -z directory/*

在Bash:

 for i in directory/*; do > $i; done 

这将保留文件的所有权和权限。

不要在C做壳工作! 通过使用最好的工具来节省大量的时间。 如果这是作业,请将其标记为。

您可以在写入模式下打开文件,然后关闭它。