J'ai plus de 2000 fichiers dans un dossier, mais il manque quelques fichiers dans le dossier.
Les noms des fichiers sont comme
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
indique le jour, tandis que 0000
l'heure est.
Comment savoir quel fichier manque dans le dossier? J'ai obtenu peu de réponses dans Google, mais je n'ai pas pu comprendre comment les mettre en œuvre.
la source
Réponses:
Avec
zsh
oubash4
, vous pouvez utiliser l' extension d'accolade pour cela:Remarquez les crochets:
{001..006}
des moyens à développer001
,002
...006
{0000,0600,1200,1800}
à chacun des add ci - dessus0000
,0600
,1200
et1800
.>/dev/null
est d'éviter la sortie standard dels
-> nous voulons seulement une erreur standardMaintenant, si un fichier n'est pas présent,
ls
affichera une erreur pour cela:Avec
ksh93
, remplacez{001..006}
par{1..6%.3d}
.la source
{001..365}
, pour moi ça marche{0000..1800..600}
formulaire..{00,06,12,18}00.
.Une variante de la solution @chaos (bash 4.0 ou supérieur ou zsh 4.3.11 et supérieur):
ou
pour imprimer uniquement le jour + l'heure manquants
la source
Bien que la réponse du chaos soit bonne à utiliser dans des shells interactifs, celle-ci peut être utilisée comme script POSIX, par exemple si vous devez le faire périodiquement et / ou le faire sur un autre ordinateur.
(
seq
ou l'expansion d'accolade n'est pas spécifiée par POSIX.)la source
Générez les noms de fichiers dans une boucle, puis testez la non-existence d'un fichier:
Remarque: je ne garantis pas que cet exemple soit exempt d'erreurs. C'est un exemple, pas un script qui fonctionne.
La portabilité: les besoins
ksh
,bash
ouzsh
et un système avec la GNUseq
commande disponible.la source