Скрипт Bash: Tar не работает должным образом - PullRequest
0 голосов
/ 21 января 2011

Я только что собрал показанный ниже скрипт bash для создания непрерывных резервных копий из заданной папки.

Однако, похоже, что вызов find включает не только /home/myfoldertobackup/ врезервное копирование, но также tar проверяет возраст файла.С какой стати это так и что я могу сделать, чтобы убедиться, что только ранее упомянутая папка была помещена в tar?

if [ -e $filename ];
then
    # Tar exist. Check if tar is older than five days and if so, update it.
    find $filename -mtime +5 -exec tar -czvf $filename /home/myfoldertobackup/ {} \;
else
    #Tar doesn't exist. Force creation of tar!
    tar -czvPf $filename /home/myfoldertobackup/
fi

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Если время последнего изменения «$ filename» старше 5 дней, команда find выполняет следующую команду:

tar -cvfz $filename /home/myfoldertobackups/ $filename

, которая помещает / home / myfoldertobackup и $ filename (возможно, обрезанопоскольку tar собирается писать об этом) в $ filename;если вы не хотите $ filename, просто напишите

find $filename -mtime +5 -exec tar -cvz /home/myfoldertobackups -f {} \;

или лучше (потому что более читабельно)

if [ -n "$(find $filename -mtime +5)" ]; then
    tar -cvzf "$filename" /home/myfoldertobackups;
fi

ОБНОВЛЕНИЕ

ВотВаш код с моим предложенным изменением:

if [ -e $filename ];
then
    # Tar exist. Check if tar is older than five days and if so, update it.
    # find $filename -mtime +5 -exec tar -czvf $filename /home/myfoldertobackup/ {} \;
    if [ -n "$(find $filename -mtime +5)" ]; then
        tar -cvzf "$filename" /home/myfoldertobackups;
    fi
else
    #Tar doesn't exist. Force creation of tar!
    tar -czvPf $filename /home/myfoldertobackup/
fi
2 голосов
/ 21 января 2011

потому что find заменяет {} на имя найденного файла. Просто бросьте {} и все готово.

...