Как исключить файлы из архива TAR с помощью регулярных выражений?

10

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

Пример исключаемого файла: 68x640X480.jpg

Я попробовал это без удачи:

tar cvf test.tar --exclude=[0-9]+x[0-9X]+\.jpg /data/foto

Кто-нибудь может помочь?

Frodik
источник

Ответы:

11

Вы можете использовать некоторые дополнительные инструменты, такие как findи egrep:

find directory/ -type f -print | egrep -v '[0-9]+x[0-9X]+\.jpg' | tar cvfz directory.tar.gz -T -

Недостатком вышеупомянутого метода является то, что он не будет работать для всех возможных имен файлов. Другая возможность заключается в использовании встроенной функции исключения tar:

tar -czvf directory.tar.gz --exclude='*x*X*.jpg' directory

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

Владимир Бласков
источник
Спасибо, это то, что я искал. Не могли бы вы отметить, какие имена файлов не будут работать? например, содержащие какие символы?
Фродик
Вы не должны слишком беспокоиться об этом - большинство имен файлов прекрасно работают с этим решением. Проблема в том, что имена файлов UNIX / Linux могут включать почти все, даже управляющие символы - такие непонятные комбинации не будут работать с первым решением.
Владимир Бласков
Приятное
Владимир Бласков,
0

Может быть, вы должны попробовать CPIO

http://cybertiggyr.com/cpio-howto

Он читает из списка файлов и выполняет архивирование. Вы можете создать список файлов, используя sed, как указано ниже.

ls |sed   '/[0-9]*x[0-9]*X.*/d' >/tmp/files

Затем вы можете использовать его как вход для cpio.

nitins
источник