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


10

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

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

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

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

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

Ответы:


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.