删除以shell脚本中的特定字符串开头的目录

时间:2015-06-16 06:59:53

标签: linux bash unix ubuntu redhat

当我尝试删除以tmp开头的所有目录时, 我用了这个命令:

 find -type d -name tmp* -exec rmdir {} \;

它可以解决这个问题,但是这个命令正在退出时出现错误代码:

find: `./tmp09098': No such file or directory

导致我的构建失败的原因。

有人能告诉我如何在不收到错误的情况下删除这些文件夹吗?

在尝试@anubhava建议并引用' temp *'之后,

find -type d -name 'tmp*' -exec rmdir {} \;

我仍然得到同样的错误:

find: `./tmp0909565g': No such file or directory

find: `./tmp09095': No such file or directory

运行时:

find -type d -name 'tmp*' -exec ls -ld '{}' \;

结果如下:

drwxr-xr-x 2 root root 4096 Jun 16 10:08 ./tmp0909565g
drwxr-xr-x 2 root root 4096 Jun 16 10:07 ./tmp09095
drwxr-xr-x 2 root root 4096 Jun 16 10:08 ./tmp09094544656

2 个答案:

答案 0 :(得分:4)

您应引用该模式,否则它将在命令行上由shell扩展:

find . -type d -name 'tmp*' -mindepth 1 -exec rm -rf '{}' \; -prune

-prune导致find不会进入当前文件/目录。

答案 1 :(得分:1)

这对我有用:

    #! /bin/bash

    tmpdirs=`find . -type d -name "tmp*"`

    echo "$tmpdirs" |

    while read dir;
    do
     echo "Removing directory $dir"
     rm -r $dir;
    done;