for循环中的星号不按预期工作?

时间:2017-11-15 19:21:28

标签: linux bash shell ubuntu sh

我不明白为什么这不起作用。我试图循环文件和文件夹,并根据名称删除其中一些。在下面的示例中,删除除if语句中的文件夹以外的所有文件夹。

以下是代码:

#!/bin/bash

workdir=/var/www/
for dir in $workdir/custom/*; do
 if ! [ "$dir" == "$workdir/custom/somefolder" ]; then
   rm -rf $dir
   echo "remove $dir $?"
 fi
 echo "$dir"
done

问题是/custom/中有多个文件和文件夹,但echo "$dir"输出/var/www/custom/*一次 而不是遍历该目录中的每个文件和文件夹。我知道这意味着*与任何东西都不匹配,但这是不可能的。

该文件夹存在,其中包含多个文件和文件夹,路径正确,用户也拥有rm文件所需的所有权限,我检查了两次。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

find /var/www/custom/ -name "*" -type d -mindepth 1 -exec rm -rf {} \;

这将删除自定义目录中的所有目录。如果这是必需的。