2012-05-09 5 views
19

Я использую tar для ежедневного резервного копирования сервера и хочу избежать резервного копирования/proc и/sys системных каталогов, но без исключения каталогов с именем "proc" или "sys «где-то еще в дереве файлов.tar исключить отдельные файлы/каталоги, а не шаблоны

Для примера, имеющие следующее дерево каталогов ("ла", являющихся обычных файлов):

# find 
. 
./sys 
./sys/bla 
./foo 
./foo/sys 
./foo/sys/bla 

Я хотел бы исключить ./sys но не./foo/sys.

Я не могу показаться, чтобы найти --exclude шаблон, который делает это ...

# tar cvf /dev/null * --exclude=sys 
foo/ 

или ...

# tar cvf /dev/null * --exclude=/sys 
foo/ 
foo/sys/ 
foo/sys/bla 
sys/ 
sys/bla 

Есть идеи? (Linux Debian 6)

+0

Вы уверены, что нет исключений? Если вы используете MAC OS, это совсем другая история! Посмотрите [здесь] (http://www.gnu.org/software/tar/manual/html_node/exclude.html#SEC108) – drinchev

+0

Не уверен, что я понимаю ваш вопрос. Существует опция «-exclude», но я не знаю, как ее сопоставить для одиночных, абсолютных имен файлов (не файлов с таким именем) - см. Мои примеры выше. –

+0

Посмотрите здесь: http://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files-folders – paulsm4

ответ

8

Вы можете указать абсолютные пути к исключению модели, таким образом, другие sys или proc каталогов будут заархивированы:

tar --exclude=/sys --exclude=/proc/
+2

Правда, но важная информация об этом заключается в том, что имя исключенного файла должно совпадать точно обозначение, указанное в листинге «tar». Для моего примера это будет './Sys' - как я только что узнал. –

5

Использование дегтя можно исключить каталоги, помещая файл тегов в любой каталог, который должен быть пропущен.

Создание файлов теги,

touch /sys/.exclude_from_backup 
touch /proc/.exclude_from_backup 

Затем

tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup * 
+2

Хорошая идея в теории, но часто/sys и/proc не могут быть записаны. – pjv

6

В этом случае вы можете использовать:

--anchored --exclude=sys/\* 

, потому что в случае, если ваш деготь не показывает водительство «/» у вас проблема с фильтром.

+0

Это сделало трюк для меня, спасибо! Я хотел исключить конкретный каталог, а не все каталоги/подкаталоги, соответствующие шаблону. Однако у bsdtar опция «-anchanch» отсутствует, и с помощью bsdtar мы можем использовать полные пути для исключения определенных папок. –

+3

ах нашел! в bsdtar якорь «^»: 'bsdtar cvjf test.tar.bz2 --exclude myfile.avi --exclude"^myexcludedfolder "*' –

Смежные вопросы