Как сделать tar.gz *.php, *.txt, *.inc, *.js, *.css, *.php3?

Я хочу сделать резервную копию своего сервера, но не беспокоиться об изображениях / видео и т. Д.

Как я могу tar.gz все те типы файлов, которые я хочу (в основном текстовые файлы)?

4 ответа

Решение

Вы можете использовать команду find для создания списка ввода для большинства версий tar.

В зависимости от разновидности Unix используемый вами синтаксис команды может отличаться. Например, в IBM AIX это будет примерно так:

$ cd /directory/you/want/to/archive
$ find . \( -name '*.php' -o \
            -name '*.txt' -o \
            -name '*.inc' -o \
            -name '*.js' -o \
            -name '*.css' -o \
            -name '*.php3' \) -print > /tmp/input.list
$ tar -c -L/tmp/input.list -f - | gzip -c > /path/to/backup.tar.gz

Если у вас есть необычные утилиты GNU(/Linux), вы можете сделать:

$ cd /directory/you/want/to/archive
$ find . -regex '.*\.\(php\|txt\|inc\|js\|css\|php3\)' -print > /tmp/input.list
$ tar -c -z -T /tmp/input.list -f /path/to/backup.tar.gz

Использовать --exclude=PATTERN из смолы.

Это было бы "отрицательным перечислением". Для "положительного перечисления" вы можете сделать это:

find . -name "*.php" -o -name "*.txt" -o -name "*.inc" -o -name "*.js" -o -name "*.css" -o -name "*.php3" -print0 | xargs -0 tar zcvf backup.tar.gz

-print0 а также -0 используются для имен файлов с пробелами на них.

Если вы используете bash4 или же zsh как ваша оболочка, вы также можете выполнить эту задачу, не прибегая к find,

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

shopt -s extglob globstar

В Zsh соответствующая команда:

setopt extendedglob

Остальное - кусок пирога

tar zcvf archive.tgz /path/to/dir/**/*(*.php|*.txt|*.inc|*.js|*.css|*.php3)

** является рекурсивным подстановочным знаком, который соответствует всем уровням подкаталогов. Скобка называется модификатором glob и ограничивает совпадения предыдущего * подстановочный знак для тех, которые также соответствуют одному из *.php, *.txt, так далее.

Другие вопросы по тегам