1

Я пытаюсь создать скрипт для резервного копирования каждого из моих хостов plesk в отдельные файлы, у меня две проблемы:

  1. Я хотел бы удалить структуру папок из архива, tar - 3 папки
  2. Я получаю эту ошибку: tar: Удаление начальных `/'из имен членов
  3. Мне нужен мой архив, чтобы игнорировать папки с именем "catch", потому что они мне не нужны в моем архиве.

Код:

FILES=/var/www/vhosts/*
FNAME=""
for f in $FILES
do
FNAME=`basename $f`
tar cfv "/root/backup/ftp/$FNAME.tar" $f
done

Образец вывода:

tar: Removing leading `/' from member names
/var/www/vhosts/mydomain.com/
/var/www/vhosts/mydomain.com/conf
/var/www/vhosts/mydomain.com/etc/
/var/www/vhosts/mydomain.com/etc/group
/var/www/vhosts/mydomain.com/etc/termcap
/var/www/vhosts/mydomain.com/etc/passwd
/var/www/vhosts/mydomain.com/usr/

2 ответа2

0

Я хотел бы удалить структуру папок из архива, tar - 3 папки

ты не можешь перейдите в целевой каталог или на уровень выше, затем запустите tar на ./$f

Я получаю эту ошибку: tar: Удаление начальных `/'из имен членов

это скорее предупреждение, и если вы последуете первому предложению, вы не получите его снова

0

Как всегда, в Linux одна команда будет делать:

for i in $(find /path/to/source/dir -type f -exec echo {} \;) ; do tar -c  -f path/to/dest/directory/${i##*/}.tar -C ${i%/*} ${i##*/} ; done

Убедитесь, что исходный каталог указан через полное имя пути, а не относительный; остальное очевидно, я активно использовал возможности замены оболочки.

РЕДАКТИРОВАТЬ: пока я писал свой ответ, другой ответ заявил, что нельзя стереть структуру каталогов. Это не правильно, опция -F в tar делает именно это. С помощью этой команды вы найдете все файлы, идущие из дерева каталогов в /path /to /source /directory, все соответствующим образом откалиброванные и аккуратно собранные в каталоге без ветвей /path /to /dest /.

Редактировать: запрошенное изменение, т.е. исключая файлы, имена которых начинаются с catch, можно выполнить с помощью следующей команды:

for i in $(find /path/to/source/dir -type f ! -name 'catch*' -exec echo {} \;) ; do tar -c  -f path/to/dest/directory/${i##*/}.tar -C ${i%/*} ${i##*/} ; done

Если вы хотите избежать файлов, заканчивающихся на catch, susbstitute catch * на * catch, я уверен, что вы получите дрейф.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .