Как сделать 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
, так далее.