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


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

Пример файла для исключения: 68x640X480.jpg

Я пробовал это без везения:

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

Может ли кто-нибудь помочь?


8
2017-10-12 08:31


Источник




Ответы:


Вы можете использовать некоторые дополнительные инструменты, такие как 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

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


10
2017-10-12 08:58



Спасибо, это то, что я искал. Не могли бы вы сделать заметку о том, какие имена файлов не будут работать? например содержащие символы? - Frodik
Вы не должны слишком беспокоиться об этом - большинство имен файлов отлично работают с этим решением. Проблема в том, что имена файлов UNIX / Linux могут включать в себя почти все, даже управляющие символы - такие неясные комбинации не будут работать с первым решением. - Vladimir Blaskov
Хорошее чтение, связанное с именами файлов UNIX / Linux / POSIX: dwheeler.com/essays/fixing-unix-linux-filenames.html - Vladimir Blaskov


Возможно, вам стоит попробовать CPIO

http://cybertiggyr.com/cpio-howto

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

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

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


0
2017-10-12 08:50