Удалите файлы, более старые, чем X дней на удаленном сервере с SCP/SFTP

Вы говорите думают, приблизительно два differents:

  1. определение имен (DNS, файл hosts)
  2. перезапись URL (преобразовывают URL),

Вы не можете делать записей URL со своим файлом hosts.

сделать:

 http://domainA/ points to http://127.0.0.1/domainA

Вы должны использовать API записи URL на Вас веб-сервер:

или

Демонстрационная конфигурация для апача:

RewriteEngine  on
RewriteCond %{HTTP_HOST}   ^domainA [NC]
RewriteRule ^/(.*)         http://127.0.0.1/domainA/$1 [L,R]


RewriteCond %{HTTP_HOST}   ^domainB [NC]
RewriteRule ^/(.*)         http://127.0.0.1/domainB/$1 [L,R]

7
задан 4 October 2010 в 17:14
4 ответа

ਇਹ ਪ੍ਰਸ਼ਨ ਬਹੁਤ ਪੁਰਾਣਾ ਹੈ ਪਰ ਮੈਂ ਅਜੇ ਵੀ ਆਪਣਾ ਬੈਸ਼ ਸਿਰਫ ਹੱਲ ਜੋੜਨਾ ਚਾਹੁੰਦਾ ਸੀ ਕਿਉਂਕਿ ਮੈਂ ਸਿਰਫ ਇਕ ਦੀ ਭਾਲ ਕਰ ਰਿਹਾ ਸੀ ਜਦੋਂ. ਮੈਂ ਇਥੇ ਆਇਆ ਹਾਂ. ਲਿਸਟਿੰਗ ਕਮਾਂਡ ਵਿਚ ਗਰੇਪ ਟਾਰ ਸਿਰਫ ਆਪਣੇ ਖੁਦ ਦੇ ਉਦੇਸ਼ਾਂ ਲਈ ਸਿਰਫ ਟਾਰ ਫਾਈਲਾਂ ਨੂੰ ਸੂਚੀਬੱਧ ਕਰਨਾ ਹੈ, ਬੇਸ਼ੱਕ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ.

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"

ਇਹ ਦਿੱਤੀ ਗਈ ਡਾਇਰੈਕਟਰੀ ਵਿਚਲੀਆਂ ਆਖਰੀ 7 ਫਾਇਲਾਂ ਨੂੰ ਛੱਡ ਕੇ ਸਾਰੀਆਂ ਟਾਰ ਫਾਈਲਾਂ ਨੂੰ ਮਿਟਾ ਦੇਵੇਗਾ. ਹਾਲਾਂਕਿ ਇਹ ਤਾਰੀਖ 'ਤੇ ਵਿਚਾਰ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ ਪਰ ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਪ੍ਰਤੀ ਦਿਨ ਸਿਰਫ ਇੱਕ ਬੈਕਅਪ ਹੈ ਤਾਂ ਇਹ ਕਾਫ਼ੀ ਚੰਗਾ ਹੈ.

5
ответ дан 2 December 2019 в 23:25

Уверенный я могу записать некоторый сценарий на жемчуге и т.д., но это - излишество.

Вам не нужен сценарий для достижения намеченного эффекта - острота сделает, если у Вас будет доступ оболочки для отправки команды:

ssh user@host 'find /path/to/old_backups/* -mtime +7 -exec rm {} \;'

-mtime +7 файлы соответствий создали одну неделю назад с полуночи настоящего момента.

6
ответ дан 2 December 2019 в 23:25
  • 1
    Печальный, но это использует SSH и удаленную остроту. Нет никакого доступа оболочки, просто SCP/SFTP. –  Mike 27 September 2010 в 13:09
  • 2
    @Mike - Хорошо та острота может сэкономить Вам некоторое время по записи сценария жемчуга, если это так - Вы могли использовать atime вместо mtime соответствовать прошлому времени доступа (т.е. когда Ваши файлы были в последний раз загружены) и выполняло ежедневное задание крона. –  danlefree 27 September 2010 в 19:37
  • 3
    там не является никаким доступом оболочки к удаленной машине. –  Mike 2 October 2010 в 14:03
  • 4
    @Mike у меня создалось впечатление, что Вы могли согласовать добавление задания крона с администратором сервера, размещающего Ваши файлы резервных копий - мои извинения, если это не возможно. –  danlefree 3 October 2010 в 06:43

Если Вы настаиваете на SCP/SFTP, можно перечислить файлы, проанализировать их использующий простой сценарий и удалить старые файлы резервных копий.

Пакетный режим "-b" переключатель должен выручить Вас. Это читает команды sftp из файла. http://linux.die.net/man/1/sftp

2
ответ дан 2 December 2019 в 23:25

Мне ничего не помогло из приведенных выше ответов.
Особенно, когда вы ограничены паролем и не можете использовать закрытый ключ для утилиты sftp.
Я нашел хороший скрипт, используя lftp (gist).

Чтобы указать количество вручную, необходимо раскомментировать # STORE_DAYS=6.

#!/bin/bash
# Simple script to delete files older than specific number of days from FTP. Provided AS IS without any warranty.
# This script use 'lftp'. And 'date' with '-d' option which is not POSIX compatible.

# FTP credentials and path
FTP_HOST="ftp.host.tld"
FTP_USER="usename"
FTP_PASS="password"
FTP_PATH="/ftp/path"
# Full path to lftp executable
LFTP=`which lftp`

# Enquery days to store from 1-st passed argument or strictly hardcode it, uncomment one to use
STORE_DAYS=${1:? "Usage ${0##*/} X, where X - count of daily archives to store"}
# STORE_DAYS=6

function removeOlderThanDays() {

# Make some temp files to store intermediate data
LIST=`mktemp`
DELLIST=`mktemp`

# Connect to ftp get file list and store it into temp file
${LFTP} << EOF
open ${FTP_USER}:${FTP_PASS}@${FTP_HOST}
cd ${FTP_PATH}
cache flush
cls -q -1 --date --time-style="+%Y%m%d" > ${LIST}
quit
EOF

# Print obtained list, uncomment for debug
#    echo "File list"
#    cat ${LIST}
# Delete list header, uncomment for debug
#    echo "Delete list"

    # Let's find date to compare
    STORE_DATE=$(date -d "now - ${STORE_DAYS} days" '+%Y%m%d')
    while read LINE; do
        if [[ ${STORE_DATE} -ge ${LINE:0:8} && "${LINE}" != *\/ ]]; then
            echo "rm -f \"${LINE:9}\"" >> ${DELLIST}
            # Print files wich is subject to delete, uncomment for debug
            #echo "${LINE:9}"
        fi
    done < ${LIST}
    # More debug strings
    # echo "Delete list complete"
    # Print notify if list is empty and exit.
    if [ ! -f ${DELLIST}  ] || [ -z "$(cat ${DELLIST})" ]; then
        echo "Delete list doesn't exist or empty, nothing to delete. Exiting"
        exit 0;
    fi
# Connect to ftp and delete files by previously formed list
${LFTP} << EOF
open ${FTP_USER}:${FTP_PASS}@${FTP_HOST}
cd ${FTP_PATH}
$(cat ${DELLIST})
quit
EOF

# Remove temp files
rm ${LIST} ${DELLIST}

}

removeOlderThanDays
0
ответ дан 21 January 2021 в 07:40

Теги

Похожие вопросы