Назад | Перейти на главную страницу

Скрипт для передачи файлов

Вот мой сценарий, который я создал для передачи определенных типов файлов из каталогов. Я изо всех сил пытаюсь найти способ переместить файл в каталог архива с текущей меткой времени.

#!/bin/bash
SERVER='abc.com'
USER='xyz'
PASSWD='lddkdkdkas'
find /directory/ -name ABC002*.csv | while read fname
do
   scp $fname xyz@abc.com:~/XYZ/
   mv $fname ./archive/
done

Здесь я могу переместить файл в архив, но я не могу переместить его с измененным именем на имя файла * метка времени.

пытаться

mv $fname ./archive/$(basename $fname)-$(date +%Y%m%d-%T)

Пытаться:

mv $fname /tmp/`basename $fname`-`date +%Y%m%d_%H%M`

Вы можете использовать варианты этой темы, если предпочитаете разные временные метки или имена файлов. Имейте в виду, что это решение недостаточно надежно для обработки нескольких имен файлов.

Добавьте базовое имя к ответу Warner:

 mv $fname ./archive/`basename $fname`-`date +%Y%m%d_%H%M`

Попробуй это

mv $fname ./archive/`date +%m%d%y-%T`-$fname

Перед датой и после T стоят одиночные обратные кавычки. По какой-то причине они не отображаются в сообщениях.

Возможно, вам придется использовать basename команда для удаления полного пути к файлу.

Также вы можете использовать массив для создания списка файлов, которые нужно переместить позже; или даже использовать -exec вариант find, что-то вроде:

find /dir -iname BLAH -exec sh -c 'new_name=$(basename {}); scp {} user@host:dest/ && mv {} /archive/$new_name$(date..)' \;

(не забывайте \; в конце)

Эта строка архивирует файл только после (&&) успешное копирование по ssh.

Еще один намек: возможно, вы хотите tar файлы и отправить сжатый архив по сети? Это может сэкономить вам время установления связи ssh (и используйте ssh-ключи! Не сохраняйте пароли в сценариях, которые вы оставите!)