Ich habe mehr als 2000 Dateien in einem Ordner, aber es fehlen nur wenige Dateien im Ordner.
Name der Dateien sind wie
GLDAS_NOAH025SUBP_3H.A2003 001,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 001,1800 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 002,1800 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003,0000 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003003.0600 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003.1200 .001.2015210044609.pss.grb GLDAS_NOAH025SUBP_3H.A2003 003.1800 .001.2015210044609.pss.grb
001
zeigt den Tag an, während 0000
die Stunde ist.
Wie finde ich heraus, welche Datei im Ordner fehlt? Ich habe nur wenige Antworten in Google erhalten, konnte aber nicht herausfinden, wie ich diese implementieren soll.
quelle
Antworten:
Mit
zsh
oderbash4
können Sie dafür die Klammererweiterung verwenden :Beachten Sie die Klammern:
{001..006}
Mittel erweitern001
,002
...006
{0000,0600,1200,1800}
zu jedem der oben genannten Add0000
,0600
,1200
und1800
.>/dev/null
Um die Standardausgabe vonls
-> zu vermeiden, wollen wir nur StandardfehlerWenn nun eine Datei nicht vorhanden ist,
ls
wird ein Fehler angezeigt:Mit
ksh93
ersetzen{001..006}
durch{1..6%.3d}
.quelle
{001..365}
, für mich funktioniert es{0000..1800..600}
Formular..{00,06,12,18}00.
.Eine Variation der @ chaos-Lösung (bash 4.0 oder höher oder zsh 4.3.11 und höher):
oder
um nur den fehlenden Tag + Stunde zu drucken
quelle
Während die Antwort von Chaos gut ist, um in interaktiven Shells verwendet zu werden, kann diese als POSIX-Skript verwendet werden, beispielsweise wenn Sie dies regelmäßig und / oder auf einem anderen Computer tun müssen.
(
seq
oder Klammererweiterung wird von POSIX nicht angegeben.)quelle
Erstellen Sie die Dateinamen in einer Schleife und testen Sie dann, ob eine Datei nicht vorhanden ist:
Hinweis: Ich garantiere nicht, dass dieses Beispiel fehlerfrei ist. Es ist ein Beispiel, kein bekannt funktionierendes Skript.
Portabilität: Bedürfnisse
ksh
,bash
oderzsh
und ein System , mit der GNU -seq
Befehl zur Verfügung.quelle