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