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 user
el shell de inicio de sesión host
está 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 tar
el 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 let
en lugar de ((...))
aquí).