Кто-нибудь знает какой-нибудь хороший способ удалить файлы на удаленном сервере старше X дней, используя только SCP / SFTP? Конечно, я могу написать сценарий на Perl и т. Д., Но я считаю, что это перебор.
Любой способ UNIX?
Один лайнер?
Отдельная утилита?
Спасибо
P.S. Задача - удалить какие-то устаревшие файлы резервных копий.
Конечно, я могу написать сценарий на Perl и т. Д., Но это перебор.
Для достижения желаемого эффекта вам не нужен сценарий - однострочный вариант подойдет, если у вас есть доступ к оболочке для отправки команды:
ssh user@host 'find /path/to/old_backups/* -mtime +7 -exec rm {} \;'
-mtime +7
соответствует файлам, созданным неделю назад с полуночи текущего дня.
Этот вопрос очень старый, но я все еще хотел добавить свое решение только для bash, поскольку я просто искал его, когда пришел сюда. Команда grep tar в команде листинга предназначена только для моей собственной цели, чтобы вывести список только файлов tar, конечно, может быть адаптирована.
RESULT=`echo "ls -t path/to/old_backups/" | sftp -i ~/.ssh/your_ssh_key user@server.de | grep tar`
i=0
max=7
while read -r line; do
(( i++ ))
if (( i > max )); then
echo "DELETE $i...$line"
echo "rm $line" | sftp -i ~/.ssh/your_ssh_key user@server.de
fi
done <<< "$RESULT"
Это удаляет все файлы tar в данном каталоге, кроме последних 7. Дата не учитывается, но если у вас есть только одна резервная копия в день, этого достаточно.
Если вы настаиваете на SCP / SFTP, вы можете перечислить файлы, проанализировать их с помощью простого скрипта и удалить старые файлы резервных копий.
Переключатель "-b" пакетного режима должен вам помочь. Он читает команды sftp из файла. http://linux.die.net/man/1/sftp