ksh:需要快速可靠地删除多个目录

时间:2010-05-05 11:55:02

标签: fork parallel-processing ksh wait rm

我有很多目录,需要以最短的时间定期删除它们。 另外,对于每个目录,删除状态需要知道,即是否成功删除。 我需要写一下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

2 个答案:

答案 0 :(得分:1)

你运气不好。 这里的瓶颈是文件系统,你很可能找不到在 parallel 中执行 atomic 操作(如删除目录)的文件系统。没有任何摆弄shell代码会使操作系统或文件系统更快地完成其工作。只有一个磁盘,如果每次删除都需要写入磁盘,则速度会很慢。

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

答案 1 :(得分:0)

这通常是脚本应采用的形式,并修正了语法中的严重错误。然而,正如 Norman 所指出的那样,它不会做你想要的。此外,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