Script para copiar archivos remotos según el nombre del archivo y la comparación de fechas de sus nombres

Script para copiar archivos remotos según el nombre del archivo y la comparación de fechas de sus nombres

Tengo un directorio con estos archivos:

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_0 71002.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_20160 913_194047.tgz

Los archivos varían solo por fecha porque podrían existir varios archivos con la misma parte del nombre ("string_name"_AAMMDD_HHMMSS.tgz)

Necesito un script que solo copie la última versión del archivo según su tipo.

Ejemplo:

string_name1_20160913_194047.tgz.

string_name1_20160913_194043.tgz.

Debe copiar solo string_name1_20160913_194047.tgz.

Y haga esto para el resto de tipos de archivos...

Por ahora estoy copiando manualmente:

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

Agradezco cualquier aportación sobre esto.

Respuesta1

Con 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

Si userel shell de inicio de sesión hostestá activado zsh, puedes simplificarlo a:

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 -

La idea es que procesemos la lista de archivos en orden inverso ( ) y seleccionemos el archivo si no se ha visto (On)la parte del nombre del archivo anterior ._*_*

Los archivos se transfieren mediante tarel cual también tiene la ventaja de transferir todos los metadatos de los archivos.

(ver¿Cómo utilizar matrices asociativas de forma segura dentro de expresiones aritméticas?por qué estamos usando leten lugar de ((...))aquí).

información relacionada