我想清理Linux上目录中的所有文件(不删除它们,只清除它们的内容)
我需要在C中完成。
答案 0 :(得分:3)
实际上,你真的不需要在C中执行它.UNIX包含可以执行任何任何任务的工具。
find . -type f -exec cp /dev/null {} ';'
上面的特定代码段会找到当前目录下的所有文件并尝试将空设备复制到它,从而有效地将文件截断为0字节。
您可以更改起始(顶级)目录,限制名称(例如-name '*.jpg'
),甚至将其限制为-maxdepth 0
的当前目录(无子目录)。
您可以通过在命令行shell中输入find
来发现许多带有man find
的其他选项。只是不要把它输入谷歌,你可能会得到比你讨价还价更多的东西: - )
如果需要使用C是绝对不可协商的,我会仍然这样做,但是:
system ("find . -type f -exec cp /dev/null {} ';'");
我并不热衷于重新编写软件,而某人已经花费了大量精力来免费提供: - )
如果按照我的建议,你仍然想要做到这一点,那么你需要调查opendir
,readdir
和closedir
进行处理目录,然后在写入模式下使用fopen
,然后在每个候选文件上使用fclose
。
如果要导航整个目录结构而不仅仅是当前目录,则必须检测readdir
中的目录并可能通过它们进行递归。
答案 1 :(得分:3)
在Bash中:
for i in directory/*; do > $i; done
这将保留文件的所有权和权限。
不要在C中执行shell工作! 使用最佳工具来节省大量时间。如果这是作业,请将其标记为。
答案 2 :(得分:3)
scandir
列出它们,然后列出每个文件:fopen(, w+)
fstat
获取尺寸fwrite
整个文件是否为零? (你明白这是什么意思?)fclose
一个不错的shell变体是:shred -z directory/*
答案 3 :(得分:2)
您可以在写入模式下打开文件,然后将其关闭。