Вот мой сценарий, который я создал для передачи определенных типов файлов из каталогов. Я изо всех сил пытаюсь найти способ переместить файл в каталог архива с текущей меткой времени.
#!/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-ключи! Не сохраняйте пароли в сценариях, которые вы оставите!)