bash脚本rm无法删除php mkdir创建的文件夹

时间:2012-03-27 20:19:18

标签: bash ssh rm

我无法删除php mkdir创建的文件夹

for I in `echo $*`
do
    find $I -type f -name "sess_*" -exec rm -f {} \;
    find $I -type f -name "*.bak" -exec rm -f {} \;
    find $I -type f -name "Thumbs.db" -exec rm -f {} \;
    find $I -type f -name "error.log" -exec sh -c 'echo -n > "{}"' -f {} \;
    find $I -type f -path "*/cache/*" -name "*.*" -exec rm -f {} \;
    find $I -path "*/uploads/*" -exec rm -rdf {} \;
done

我想在/uploads/下删除所有文件和文件夹,请帮助我谢谢......

3 个答案:

答案 0 :(得分:1)

您应该考虑更改find​​命令以使用-o pragma将条件连接在一起,因为最终的exec基本相同。这样可以避免重复递归文件系统。

其他答案解决了您对php mkdir的担忧。我只想补充一点,它与使用php mkdir而不是任何其他代码或命令创建的事实无关。这是由于所有权和权限。

答案 1 :(得分:0)

您应该在命令中添加-depth,以便在目录本身之前删除upload的子目录。

我担心-path,但我不熟悉它。

另请考虑使用+代替\;来减少执行的命令数。

答案 2 :(得分:0)

我认为这很可能是因为php在apache或其他http服务器下运行的用户不同于调用bash脚本。或者上传/上传的文件可能由http服务器的用户拥有,而不是用户调用它。

确保在与http服务器相同的用户下运行bash脚本。

要找出哪个用户拥有哪个文件:

ls -l

如果你以root身份运行bash脚本,你应该能够删除它,但不建议这样做。

更新

要以root用户身份运行nautilus脚本,请使用以下命令作为nautilus脚本:

gksudo runmydeletescript

然后将所有其他代码放入另一个文件中,其路径与您为runmydeletescript放置的路径相同,并在其上运行chmod +x这非常危险!