2016-08-03 10 views
1

Ich habe ein Problem mit Dateinamensmuster bereitgestellt werden, um die Musterdatei vom FTP-Server abzurufen.Dateimuster zum Abrufen von Dateien vom FTP-Server in Unix verwenden

Derzeit verwende ich ABC_YYYYMMDD*.sha1 als das Muster zum Abrufen von Dateien. Es ruft die letzte Datei unter Verwendung des obigen Musters ab. Manchmal kommt .gz.sha1 später und manchmal auch der andere.

ABC_20160801060000.sha1 
ABC_20160801060000.txt.gz.sha1 

ich brauchen würde die Dateinamen Muster derart zu schaffen, dass die Datei immer ABC_YYYYMMDDHHMISS.sha1 nur abholen sollte.

Benötigen Sie ein narrensicheres Muster, das nur dem geforderten entspricht?

Antwort

1

können Sie find-regex Option verwenden, um diese Dateinamen für die Anpassung: -

find . -type f -regextype posix-extended -regex '.*ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1' 

Am hierfür von find unterstützte die -regex Flagge mit über die -name Flagge, die Musterabgleich einfach glob tut.

Die man Seite von find sagt unten für die -regex: -

-regex pattern 
      File name matches regular expression pattern. This is a match 
      on the whole path, not a search. 

-regextype name 
      This option controls the variety of regular expression syntax 
      understood by the ‘-regex’ and ‘-iregex’ tests. This option is 
      positional; that is, it only affects regular expressions which 
      occur later in the command line. If this option is not given, GNU 
      Emacs regular expressions are assumed. 

Mehr über posix-extended regex Typ auf diesem page. Andere unterstützte Regex-Typen finden Sie unter here.

Um es in Aktion zu sehen: -

$ ls ABC_2016* 
ABC_20161231225950.sha1 ABC_20169231225990.sha1 

$ find . -type f -regextype posix-extended -regex '.*ABC_20[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])([0-2][0-3])([0-5][0-9])([0-5][0-9])\.sha1' 
./ABC_20161231225950.sha1 

Update: -

Wenn die regextype in der find Version nicht unterstützt wird, kann ein einfaches glob Konstrukt mit dem -name Flag verwendet werden dasselbe erreichen.

$ ls ABC_2016* 
ABC_20161231225950.sha1 ABC_20169231225990.sha1 

$ find . -type f -name 'ABC_2[0-9][0-9][0-9][0-1][0-2][0-3][0-9][0-2][0-2][0-5][0-9][0-5][0-9].sha1' 
./ABC_20161231225950.sha1 
+0

Danke Inian für das illustrative Beispiel. Aber ich muss das Finden als FTP-Befehl ausgeben. Diese Musterdateien sind auf dem FTP-Server vorhanden. Obwohl der Befehl 'find' auf dem FTP-Server funktioniert, werden die Optionen nicht erkannt. :( – user1999315

+0

@ user1999315: Verweisen Sie mein Update für eine Lösung, die das Flag '-name' verwendet. – Inian