tar - исключить определенные файлы

Я хотел бы tar все файлы в каталоге и его подкаталогах, которые НЕ заканчиваются на.jpg, .bmp, .gif или png.

Итак, предоставлены следующие папки и файлы:

foo/file.txt
foo/file.gif
foo/bar/file
foo/bar/image.jpg

Я хочу, чтобы tar только файлы file.txt и file. file.gif и image.jpg следует игнорировать. Я также хотел бы сохранить структуру папок.

Моей первой мыслью было передать результаты команды find вместе с grep -v ".jpg|.gif|.bmp.png" в текстовый файл, а затем использовать аргумент tar include для передачи ему этого списка файлов.

Однако результаты команды grepped find также содержат каталоги (в приведенном выше примере это были бы "foo" и "foo/bar"), и когда каталог подается в tar, он включает все файлы в этом каталоге, поэтому Я бы закончил с файлом tar, содержащим все файлы - не то, что я хочу.

Есть ли способ предотвратить вывод директорий find? Есть ли гораздо более простой способ приблизиться к этому?

2 ответа

Решение

Использование --exclude=pattern опция:

tar --exclude='*.jpg' --exclude='*.png' --exclude='*.bmp' --exclude='*.gif' -cvf tar-filename.tar folder

Я думаю, что самый элегантный способ удалить несколько типов файлов — это использовать так называемое расширение скобок.

Как происходит расширение брекетов?

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

      echo Front-{A,B,C}-Back

будет давать

      Front-A-Back Front-B-Back Front-C-Back

Вот так просто :) Вы также можете расширить диапазон целых чисел, используя следующую запись:

      echo {001..15}

Как с помощью расширения скобок решить вашу проблему?

Попробуй это:

      tar --exclude={'*.jpg','*.png','*.bmp','*.gif'} -cvf tar-filename.tar folder

Если вы хотите проверить, что происходит, просто повторите эту последнюю команду, и вы заметите, что она выдает

      tar --exclude=*.jpg --exclude=*.png --exclude=*.bmp --exclude=*.gif -cvf tar-filename.tar folder

Оба способа верны, но мой гораздо читабельнее и компактнее :)

Другие вопросы по тегам