使用execv / execl删除所有文件

时间:2014-07-07 16:16:38

标签: linux shell exec

我尝试使用以下方法从c程序中删除文件夹中的所有文件:

execl("/bin/rm","/media/sda1/*",0,0,0,0,0,0,0,0,0);

但我得到以下失败: rm:无法删除' / media / sda1 / *':没有这样的文件或目录,尽管此文件夹中有文件。 我们如何使用execv系列删除所有文件或复制所有文件(从一个文件夹到另一个文件夹)?有没有人有任何想法?

谢谢, 然

1 个答案:

答案 0 :(得分:4)

问题是由您使用的glob模式/media/sda1/*引起的:请注意星号,shell会扩展到该文件夹​​中所有非隐藏文件的列表。如果您将其直接传递给rm,它会尝试删除名为*的文件夹。

如果您不想手动迭代文件夹中的所有文件,则需要在shell中启动该命令,这将为您扩展 glob 模式。 / p>

您可以使用

execl("/bin/bash","-c 'rm -rf /media/sda1/*'",0,0,0,0,0,0,0,0,0);

......为此。一个不错的选择是使用system()隐式启动shell中的命令:

system("rm -rf /media/sda1/*");

更多关于: