1

我有很多目录,需要在最短的时间内定期删除它们。此外,每个目录的删除状态都需要知道,即是否删除成功。我需要写在 ksh 上。你能帮帮我吗?

我尝试rm-rf在后台启动的示例代码不起作用。

for var1 in 1...10
rm -rf <DIR> &
pid[var1]=$!
done

my_var=1
for my_var in 1...var1
wait $pid[my_var]
if [ $? -eq 1 ]
then
  echo falied
else
 echo passed
fi
done
4

2 回答 2

1

你运气不好。 这里的瓶颈是文件系统,您不太可能找到并行执行原子操作(如目录删除)的文件系统。再多的摆弄 shell 代码也不会让操作系统或文件系统更快地完成它的工作。只有一个磁盘,如果每次删除都需要写入磁盘,那会很慢。

您最好的选择是切换到能够快速删除的日志文件系统。XFS 快速删除大文件(10-40GB)让我很幸运,但我没有尝试删除目录。无论如何,提高性能的途径在于找到正确的文件系统,而不是正确的 shell 脚本。

于 2010-05-05T13:58:50.200 回答
0

这通常是您的脚本应采用的形式,并对语法中的严重错误进行更正。然而,正如诺曼所说,它不会做你想做的事。此外,wait不会像您似乎打算的那样循环工作。

# this script still won't work
find . -type d | while read dir
# or: for dir in ${dirs[@]}
do
    rm -rf $dir &
    pid[++var1]=$!
done

for my_var in {1...$var1}
do
    wait ${pid[my_var]}
    if [ $? -eq 1 ]
    then
        echo failed
    else
        echo passed
    fi
done
于 2010-05-05T14:08:15.693 回答