Der find
Befehl unter Linux bietet im Vergleich zum find
Befehl unter SunOS oder Solaris viele Optionen .
Ich möchte den find
Befehl wie folgt verwenden:
find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r
Es funktioniert einwandfrei auf einem Linux-Computer, aber der gleiche Befehl hat -printf
auf einem SunOS-Computer nicht die Option . Ich möchte meine Ausgabe im "%TY-%Tm-%Td %f\n"
Format anpassen .
Bitte schlagen Sie Alternativen für SunOS vor.
shell-script
find
solaris
Pratik Mayekar
quelle
quelle
find
Installieren Sie das findutils- Paket , um GNU unter Solaris zu verwenden .Antworten:
Beachten Sie, dass es nichts mit Linux zu tun hat. Dieses
-printf
Prädikat ist spezifisch für die GNU-Implementierung vonfind
. Linux ist kein Betriebssystem, sondern nur der Kernel einer Reihe von Betriebssystemen. Während die meisten dieser Betriebssysteme in der Vergangenheit ein GNU-Benutzerland verwendeten, ist jetzt die große Mehrheit der Betriebssysteme, die Linux verwenden, eingebettet und verfügen über grundlegende Befehle, falls vorhanden.Der GNU-
find
Befehl vor Linux kann auf den meisten Unix-ähnlichen Betriebssystemen installiert werden. Es wurde sicherlich unter Solaris (damals SunOS genannt) verwendet, bevor Linux herauskam.Heutzutage ist es sogar als Oracle-Paket für Solaris verfügbar. Unter Solaris 11 ist dies der Fall
file/gnu-findutils
, und der Befehl wird benanntgfind
(für GNUfind
, um ihn vom systemeigenenfind
Befehl zu unterscheiden).Wenn Sie keine Pakete installieren können, verwenden Sie wahrscheinlich am besten Folgendes
perl
:Hier verwenden wir immer noch
find
(Solaris-Implementierung), um die Dateien zu finden, aber wir verwenden das-exec
Prädikat, um die Liste der Dateien an zu übergebenperl
. Undperl
führtlstat()
jeweils ein a aus, um die Dateimetadaten abzurufen (einschließlich der Änderungszeit als 10. Element ($s[9]
)), interpretiert sie in der lokalen Zeitzone (localtime()
) und formatiert sie (strftime()
), die dannprint
neben dem Dateinamen steht ($_
ist die Schleifenvariable, wenn Keine ist im Fehlertext für den letzten Systemaufruffehler angegebenperl
und$!
entspricht diesemstderror(errno)
.quelle
ls
, siehe Spezifikation des Listenmodusfind
‚s-printf
früher POSIX.2, so sind die POSIX Leute hier schuld. Beachten Sie auch, dass die POSIX-Spezifikation erst in den 2000er Jahren öffentlich war. Ich würde den GNU-Leuten immer noch die Schuld geben, dass sie ihrestat
über ein Jahrzehnt später mit einer anderen und minderwertigen Syntax für ihre Formatspezifikation eingeführt haben.Eine andere Möglichkeit ist das
find2perl
Skript, das (hier eine Teilmenge) einesfind
Befehls in ein entsprechendes Perl-Skript konvertiert . Das Perl-Skript verwendet einFile::Find
Modul, um das schwere Heben durchzuführen. Da das Skript find2perl auf meinem System das-printf
Prädikat nicht unterstützte , habe ich es manuell hinzugefügt:Bei zwei von mir erstellten Beispieldateien ist die Ausgabe dieselbe:
quelle