Sortieren nach "ls -l" -Daten ohne Verwendung von "ls"


1

Ich habe eine Textdatei mit ein paar ls -l Ausgabe, wie zum Beispiel:

-rw-r--r-- 1 root root 7554952082 Dec 15 22:11 /var/spool/stuff/Investigation/messages.tgz
-rw-r--r-- 1 root root 4315 Mar  3  2015 /var/spool/stuff/redoneagain.tgz
-rw-r--r-- 1 root root 429786 Apr 22  2014 /var/spool/stuff/random20.tgz

Ich kann kein neues ausführen ls Befehl, weil einige der Dateien nicht mehr existieren.

Was kann ich tun, um diese Dateien nach diesen tragischen, von Menschen lesbaren Daten zu sortieren? Sie sind nicht alphabetisch und einige von ihnen zeigen nicht einmal die Jahresinformationen an.

Bearbeiten Hier ist ein größeres Beispiel mit gefälschten Dateinamen:

-rw-r--r-- 1 root root 67746 Feb 23 2015 /fake/file/1
-rw-r--r-- 1 root root 665081504 Nov 10 22:26 /fake/file/2
-rw-r--r-- 1 root root 2268687431 Sep 11 2015 /fake/file/3
-rw-r--r-- 1 root root 2322223712 Sep 14 2015 /fake/file/4
-rw-r--r-- 1 root root 67413 Feb 25 2015 /fake/file/5
-rw-r--r-- 1 root root 193782 Oct 28 2013 /fake/file/6
-rw-r--r-- 1 root root 79802627 Nov 23 23:19 /fake/file/7
-rw-r--r-- 1 root root 53336532 Nov 23 23:20 /fake/file/8
-rw-r--r-- 1 root root 99797 Nov 10 00:27 /fake/file/9
-rw-r--r-- 1 root root 19618 Apr 17 2014 /fake/file/10
-rw-r--r-- 1 root root 1856 Oct 18 2013 /fake/file/11
-rw-r--r-- 1 root root 90213 Sep 23 2015 /fake/file/12
-rw-r--r-- 1 root root 1924 Sep 24 2015 /fake/file/13
-rw-r--r-- 1 root root 563907311 Nov 16 17:37 /fake/file/14
-rw-r--r-- 1 root root 193855 Oct 22 2013 /fake/file/15
-rw-r--r-- 1 root root 7554952082 Dec 15 22:11 /fake/file/16
-rw-r--r-- 1 root root 4315 Mar 3 2015 /fake/file/17
-rw-r--r-- 1 root root 429786 Apr 22 2014 /fake/file/18
-rw-r--r-- 1 root root 4870 Apr 18 2014 /fake/file/19
-rw-r--r-- 1 root root 87392 Feb 3 2015 /fake/file/20
-rw-r--r-- 1 root root 552396373 Dec 21 21:25 /fake/file/21
-rw-r--r-- 1 root root 3959214957 Aug 1 2015 /fake/file/22
-rw-r--r-- 1 root root 4678389972 Jul 31 2015 /fake/file/23
-rw-r--r-- 1 root root 5371125 Aug 27 2015 /fake/file/24
-rw-r--r-- 1 root root 2523669282 Jul 24 2015 /fake/file/25
-rw-r--r-- 1 root root 2138312957 Jul 27 2015 /fake/file/26
-rw-r--r-- 1 root root 87953 Feb 20 2015 /fake/file/27
-rw-r--r-- 1 root root 480600954 Nov 17 17:59 /fake/file/28
-rw-r--r-- 1 root root 1009402595 Oct 21 2014 /fake/file/29
-rw-r--r-- 1 root root 14991 Apr 15 2014 /fake/file/30
-rw-r--r-- 1 root root 5993812 Apr 16 2015 /fake/file/31
-rw-r--r-- 1 root root 4278 Feb 27 2015 /fake/file/32
-rw-r--r-- 1 root root 4141 Oct 18 2013 /fake/file/33
-rw-r--r-- 1 root root 8483609907 Aug 21 2015 /fake/file/34
-rw-r--r-- 1 root root 8509124532 Sep 15 2015 /fake/file/35
-rw-r--r-- 1 root root 4232 Dec 11 2014 /fake/file/36
-rw-r--r-- 1 root root 8462334652 Apr 9 2015 /fake/file/37
-rw-r--r-- 1 root root 441345893 Apr 9 2015 /fake/file/38
-rw-r--r-- 1 root root 144456171297 Jun 12 2015 /fake/file/39
-rw-r--r-- 1 root root 223299330621 Jun 3 2015 /fake/file/40
-rw-r--r-- 1 root root 1116344491 Nov 11 22:28 /fake/file/41
-rw-r--r-- 1 root root 15265 Apr 15 2014 /fake/file/42

Können Sie eine größere Probe zum Testen posten?
Baroudi Safwen

Sind Sie bereit, die Daten aus Ihrem Protokoll in einer anderen Schnittstelle als dem Terminal zu bearbeiten? Scheint etwas zu sein, das leicht / schnell gelöst werden könnte Excel durch Importieren von durch Leerzeichen getrennten Daten. Sie können diesen Prozess dann automatisieren, um ihn auf andere Protokolle anzuwenden. Sie werden die fehlenden Jahre immer noch nicht bewältigen können.
root

Antworten:


2

datesort aus dem Dateutils-Paket kann es tun:

$ datesort -i '%b %d %Y' -i '%b %d %H:%M' < FILE

Der Trick besteht darin, zwei Eingabeformate zu verwenden, weil lsBei den letzten Daten wird das Jahr weggelassen und stattdessen die Uhrzeit angezeigt.

Haftungsausschluss: Ich bin der Autor des Tools.


0

Sie müssen ls nicht vermeiden, nur weil die hässliche (es ist wirklich) Zeit anzeigt:

-c mit -lt: Sortieren nach und Anzeigen der Uhrzeit (Zeitpunkt der letzten Änderung der Dateistatusinformationen) mit -l: Anzeigen der Uhrzeit und Sortieren nach Namen ansonsten: Sortieren nach Uhrzeit, neueste zuerst


1
er sagte, er könne ls nicht benutzen, weil einige Dateien nicht mehr existieren!
Baroudi Safwen

Tatsächlich. Ich habe diesen Teil nicht richtig dekodiert.
Gombai Sándor

0

Sie könnten ein kleines Skript schreiben, das die Datumszeichenfolgen analysiert und dann nach Datum sortiert. Einige der Datumszeichenfolgen sagen nicht wirklich aus, welches Jahr. Ich würde daher denken, dass "das engste Vorkommen vor dem Schreiben der Eingabedatei" eine vernünftige Vermutung ist.

Proof of Concept schnell zusammengewürfelt:

#!/usr/bin/perl
use strict;
use Time::ParseDate;

sub extracttimestamp
{
        my $line = shift;
        my $referencepoint = shift;

        if ($line =~ /^(?:\S+\s+){5}(\S+\s+\S+\s+\S+)\s+/)
        {
                return parsedate($1, NOW => $referencepoint, PREFER_PAST => 1);
        }

        print "FAILED TO PARSE $line\n";
        return -1;
}

my $filename = $ARGV[0];
my $mtime = (stat($filename))[9];

open FILE, "<$filename";
my @list = <FILE>;
close FILE;

my @sorted = sort { extracttimestamp($a, $mtime) <=> extracttimestamp($b, $mtime) } @list;

foreach my $x (@sorted)
{
        print $x;
}

Ich kann die Perl-Installation auf der Zielbox nicht ändern, aber die obige Meldung gibt "Time / ParseDate.pm in @INC kann nicht gefunden werden". Ich bin nicht gegen Skripte, ich weiß nur nicht, welche über Bibliotheken verfügen, die dieses Datumsformat möglicherweise analysieren, und ich habe anscheinend nicht die Voraussetzungen, um dieses spezielle Skript auszuführen.
Hammer Bro.

@HammerBro. Und du kannst nicht Installieren Sie das Modul in einem lokalen Verzeichnis oder führen Sie das Skript auf einem Computer aus, auf dem Sie Änderungen vornehmen können?
Håkan Lindqvist

Ich müsste einige Change-Management-Systeme durchlaufen, die sich ziemlich langsam entwickeln, und ich gehe davon aus, dass ich denselben Vorgang auf zahlreichen verschiedenen Computern ausführen muss, sobald ich in meinen Nachforschungen etwas weiter fortgeschritten bin.
Hammer Bro.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.