Script para copiar arquivos remotos com base no nome do arquivo e na comparação de data de seus nomes

Script para copiar arquivos remotos com base no nome do arquivo e na comparação de data de seus nomes

Eu tenho um diretório com esses arquivos:

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_1 94047.tgz

Os arquivos variam apenas por data pois podem existir vários arquivos com a mesma parte do nome ("string_name"_YYMMDD_HHMMSS.tgz)

Preciso de um script que copie apenas a última versão do arquivo dependendo do seu tipo.

Exemplo:

string_name1_20160913_194047.tgz.

string_name1_20160913_194043.tgz.

Deve copiar apenas string_name1_20160913_194047.tgz.

E faça isso para todos os demais tipos de arquivos ...

Por enquanto estou copiando manualmente:

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

Agradeço qualquer contribuição sobre isso.

Responder1

Com 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

Se usero shell de login hostestiver ativado zsh, você pode simplificá-lo para:

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 -

A ideia é processarmos a lista de arquivos na ordem inversa ( (On)) e selecionar o arquivo caso a parte do nome do arquivo anterior _*_*não tenha sido vista.

Os arquivos são transferidos por meio tardo qual também tem a vantagem de transferir todos os metadados dos arquivos.

(verComo usar matrizes associativas com segurança dentro de expressões aritméticas?por que estamos usando letem vez de ((...))aqui).

informação relacionada