我想清除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 {} ';'");
我并不热衷于重新编写软件,他们已经付出了大量的精力来免费提供:-)
如果在我的建议之后,你仍然想要这么做,那么你需要查看opendir
, readdir
和closedir
来处理目录,然后在写模式下使用fopen
,然后在每个候选文件上使用fclose
。
如果你想浏览整个目录结构,而不仅仅是当前目录,你将不得不从readdir
检测目录,并可能通过它们递归。
scandir
列出他们,然后为每个文件: fopen(, w+)
fstat
来获得大小 fclose
一个很好的shell变体是: shred -z directory/*
在Bash:
for i in directory/*; do > $i; done
这将保留文件的所有权和权限。
不要在C做壳工作! 通过使用最好的工具来节省大量的时间。 如果这是作业,请将其标记为。
您可以在写入模式下打开文件,然后关闭它。