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

あなたは運が悪いです。 ここでのボトルネックはファイルシステムであり、アトミック操作 (ディレクトリの削除など) を並行して実行するファイルシステムを見つけることはほとんどありません。シェルコードをいくらいじっても、OS やファイルシステムの仕事が速くなるわけではありません。ディスクは 1 つしかなく、すべての削除でディスクへの書き込みが必要になると、処理が遅くなります。

最善の策は、削除を迅速に行うジャーナリング ファイルシステムに切り替えることです。XFS で大容量ファイル (10 ~ 40 GB) をすばやく削除できたのは幸運でしたが、ディレクトリの削除は試していません。いずれにせよ、パフォーマンスを向上させる方法は、適切なシェル スクリプトではなく、適切なファイル システムを見つけることにあります。

于 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 に答える