Skript zum Kopieren von Remotedateien basierend auf Dateinamen- und Datumsvergleich ihrer Namen

Skript zum Kopieren von Remotedateien basierend auf Dateinamen- und Datumsvergleich ihrer Namen

Ich habe ein Verzeichnis mit diesen Dateien:

app_conf.jboss.app_hostname_20160913_191141.tgz app_conf.jboss.app_hostname_20160913_194047.tgz app_conf.provider.app_hostname_20160913_194044.tgz app_conf.provider.app_hostname_20160928_071002.tgz app_conf.deployments.ear.app_hostname_20160913_194047.tgz app_conf.deployments.ear.app_hostname_20160915_071005.tgz app_conf.bin.jboss_cluster.app_hostname_20160913_194044.tgz app_conf.bin.jboss_cluster.app_hostname_20160913_194047.tgz app_conf.bin.conf.app_hostname_20160913_194043.tgz app_conf.bin.conf.app_hostname_20160913_194047.tgz

Die Dateien unterscheiden sich nur im Datum, da mehrere Dateien mit dem gleichen Namensteil ("string_name"_YYMMDD_HHMMSS.tgz) vorhanden sein können.

Ich brauche ein Skript, das je nach Typ nur die letzte Version der Datei kopiert.

Beispiel:

string_name1_20160913_194047.tgz.

string_name1_20160913_194043.tgz.

Es sollte nur string_name1_20160913_194047.tgz kopiert werden.

Und machen Sie das für alle anderen Dateitypen ...

Im Moment kopiere ich manuell:

scp username@host:/tmp/string_name1_20160913_194047.tgz /home/config/

Ich freue mich über jeden Beitrag hierzu.

Antwort1

Mit zsh:

cd /home/config && ssh user@host << \EOF | tar xpf -
zsh -c '
  cd /tmp || exit
  typeset -A seen; files=()
  for f (app_conf*_*_*.tgz(On)) {let '\''seen[${f%_*_*}]++'\'' || files+=($f)}
  tar cf - $files'
EOF

Wenn userdie Login-Shell von eingeschaltet hostist zsh, können Sie es wie folgt vereinfachen:

cd /home/config && ssh user@host '
  cd /tmp || exit
  typeset -A seen; files=()
  for f (app_conf*_*_*.tgz(On)) {let '\''seen[${f%_*_*}]++'\'' || files+=($f)}
  tar cf - $files' | tar xpf -

Die Idee ist, dass wir die Liste der Dateien in umgekehrter Reihenfolge abarbeiten ( (On)) und die Datei auswählen, wenn der vorherige Teil des Dateinamens _*_*noch nicht vorgekommen ist.

Die Dateien werden mithilfe von übertragen tar, was auch den Vorteil hat, dass alle Metadaten der Dateien übertragen werden.

(sehenWie verwendet man assoziative Arrays sicher in arithmetischen Ausdrücken?warum wir hier letanstelle von verwenden ((...))).

verwandte Informationen