هل هناك طريقة قياسية لتفكيك مخرجات DU لاكتشاف المكان الذي نما فيه استخدام مساحة القرص أكثر

StackOverflow https://stackoverflow.com/questions/1533593

  •  20-09-2019
  •  | 
  •  

سؤال

أعمل مع فريق صغير من المطورين حيث نشارك نظام ملفات 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") ، وطباعة معلومات الاستخدام الحالية.

إذا أعجبك ذلك ، خذها.

أتمنى أن يساعدك هذا.

نصائح أخرى

كتبت برنامجًا للقيام بذلك يسمى Diff-du. لا أصدق أن أحدا لم يفعل هذا بالفعل! على أي حال ، أجدها مفيدة وآمل أن تكون كذلك.

ما تريده حقًا هو الرائع kdirstat.

للاكتمال ، لقد وجدت أيضًا دو ديف ولا ترى ذلك مذكرا في أي إجابة أخرى. يبدو أن Andrew's Diff-Du (المذكورة في إجابة أخرى) أكثر تقدماً في هذا الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top