Скрипт для копирования удаленных файлов на основе сравнения имени файла и даты их имен

Скрипт для копирования удаленных файлов на основе сравнения имени файла и даты их имен

У меня есть каталог с этими файлами:

app_conf.jboss.имя_хоста_приложения_20160913_191141.tgz app_conf.jboss.имя_хоста_приложения_20160913_194047.tgz app_conf.провайдер.имя_хоста_приложения_20160913_194044.tgz app_conf.провайдер.имя_хоста_приложения_20160928_071002.tgz app_conf.развертывания.ear.имя_хоста_приложения_20160913_194047.tgz app_conf.развертывания.ear.имя_хоста_приложения_20160915_071005.tgz app_conf.bin.jboss_кластер.имя_хоста_приложения_20160913_194044.tgz app_conf.bin.jboss_cluster.имя_хоста_приложения_20160913_194047.tgz app_conf.bin.conf.имя_хоста_приложения_20160913_194043.tgz app_conf.bin.conf.имя_хоста_приложения_20160913_194047.tgz

Файлы различаются только по дате, поскольку может существовать несколько файлов с одинаковой частью имени ("string_name"_YYMMDD_HHMMSS.tgz)

Мне нужен скрипт, который копирует только последнюю версию файла в зависимости от вашего типа.

Пример:

string_name1_20160913_194047.tgz.

string_name1_20160913_194043.tgz.

Необходимо скопировать только string_name1_20160913_194047.tgz.

И сделайте это для всех остальных типов файлов...

Сейчас я копирую вручную:

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

Буду признателен за любые комментарии по этому вопросу.

решение1

С 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

Если userоболочка входа в систему hostzsh, вы можете упростить ее до:

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 -

Идея состоит в том, что мы обрабатываем список файлов в обратном порядке ( (On)) и выбираем файл, если часть имени файла ранее _*_*не встречалась.

Файлы передаются с помощью tar, что также имеет преимущество в передаче всех метаданных файлов.

(видетьКак безопасно использовать ассоциативные массивы внутри арифметических выражений?почему мы используем letвместо ((...))здесь).

Связанный контент