هل هناك طريقة قياسية لتفكيك مخرجات DU لاكتشاف المكان الذي نما فيه استخدام مساحة القرص أكثر
سؤال
أعمل مع فريق صغير من المطورين حيث نشارك نظام ملفات UNIX لتخزين مجموعات بيانات كبيرة إلى حد ما. يحتوي نظام الملفات هذا على حصة باهظة إلى حد ما على ذلك مرة واحدة في الشهر ، يتعين علينا معرفة أين ذهب مساحتنا الحرة ونرى ما يمكننا استرداده.
من الواضح أننا نستخدم DU كمية عادلة ولكن هذه لا تزال عملية شاقة. لقد فكرت في أننا قد نتمكن من الحفاظ على الإخراج DU في الأشهر الماضية ومقارنتها بهذه الأشهر لمعرفة أين حصلنا على أكبر قدر من النمو. أعتقد أن هذه الخطة ليست أصلية للغاية.
مع وضع ذلك في الاعتبار ، أسأل عما إذا كان هناك أي نصوص موجودة بالفعل.
شكرًا.
المحلول
لا أعرف حقًا ما إذا كانت هناك طريقة قياسية ولكني أحتاجها منذ وقت ما وكتبت نصًا صغيرًا بيرل للتعامل مع ذلك. هذا هو الجزء من الكود الخاص بي:
#!/usr/bin/perl
$FileName = "du-previous";
$Location = ">";
$Sizes;
# Current +++++++++++++++++++++++++++++
$Current = `du "$Location"`;
open my $CurrentFile, '<', \$Current;
while (<$CurrentFile>) {
chomp;
if (/^([0-9]+)[ \t]+(.*)$/) {
$Sizes{$2} = $1;
}
}
close($CurrentFile);
# Previous ++++++++++++++++++++++++++++
open(FILE, $FileName);
while (<FILE>) {
chomp;
if (/^([0-9]+)[ \t]+(.*)$/) {
my $Size = $Sizes{$2};
$Sizes{$2} = $Size - $1;
}
}
close(FILE);
# Show result +++++++++++++++++++++++++
SHOW: while (($key, $value) = each(%Sizes)) {
if ($value == 0) {
next SHOW;
}
printf("%-10d %s\n", $value, $key);
}
close(FILE);
#Save Current +++++++++++++++++++++++++
open my $CurrentFile, '<', \$Current;
open(FILE, ">$FileName");
while (<$CurrentFile>) {
chomp;
print FILE $_."\n";
}
close($CurrentFile);
close(FILE);
الكود ليس يتحمل الأخطاء للغاية ، لذا يمكنك ضبطه.
في الأساس الرمز ، احصل على معلومات استخدام القرص الحالية ، وقارن الحجم مع آخر مرة يتم تشغيلها (تم حفظها في "du-previous") ، وطباعة معلومات الاستخدام الحالية.
إذا أعجبك ذلك ، خذها.
أتمنى أن يساعدك هذا.
نصائح أخرى