2014-07-07 50 views
0

我嘗試使用下面的方法從C程序中使用刪除文件夾中的所有文件:使用execv/EXECL刪除所有文件

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

,但我得到的失敗: RM:不能刪除'/ media/sda1/*':沒有這樣的文件或目錄,儘管此文件夾中有文件。 如何使用execv系列刪除所有文件或將所有文件(從一個文件夾複製到另一個文件夾)?有人有什麼主意嗎 ?

感謝, 冉

回答

4

的問題是由glob模式/media/sda1/*您使用造成的:請注意,星號,其外殼將擴大到該文件夾​​中的所有非隱藏文件的列表。如果您直接將它傳遞給rm,它會嘗試刪除名爲*的文件夾。

如果您不想手動迭代文件夾中的所有文件,則需要在shell中啓動命令,該命令將爲您擴展glob模式。

你可以使用

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

...爲了。一個不錯的選擇是使用system()在shell其中隱含啓動命令:

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

更多:

+0

+1爲'使用系統() - 它可以用來運行程序,以及一些就像'system(「nohup progname>/dev/null 2>&1&」)'一樣,也沒有阻塞。 – slashmais