Як виключити файли з архіву 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.