Как cp копировать и исключать внутренние файлы или каталоги (эквивалент rsync –exclude)

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

Теперь, если я скажу вам, что, кроме того, вы должны скопировать все содержимое этой папки, кроме 1 файла, многие подумают, а другие упомянут Rsync, то с параметром –Exclude вы можете исключить файл или папку X и не копировать их. Но ... знаете ли вы, что cp также позволяет это делать? ... О_О … Да друзья, cp есть своя «исключить» хе-хе.

Например, у нас есть папка ISOS Он содержит: ubuntu.iso, debian.iso y archlinux.iso : И бывает, что мы хотим скопировать в другую папку (distros-deb, который пуст) файл debian.iso y ubuntu.iso, то есть все, кроме archlinux.iso

Для этого мы можем скопировать один файл, а затем другой, вручную, но гораздо разумнее использовать параметры, которые предлагает нам система, верно? … 😀… например, чтобы сделать это просто:

cp isos/!(archlinux.iso) distros-deb/

И этого достаточно, чтобы скопировать ВСЕ, что находится в каталоге isos, в distros-deb, кроме archlinux.iso 😉

Но предположим, что у нас есть не только эти 3 файла, но также есть fedora.iso и chakra.iso ... и мы хотим сделать то же самое, он также будет исключен из копии fedora.iso и chakra.iso, давайте посмотрим, как это сделать:

cp isos/!(archlinux.iso|fedora.iso|chakra.iso) distros-deb/

Как видите, можно исключить несколько файлов или папок, мы только разделяем их вертикальной чертой (|) и вопрос решен 😀

Под этим я не имею в виду, что cp лучше для всего, чем rsync ... но оба являются отличными инструментами, например ... знаете ли вы параметр -u de cp? ... хе-хе, конечно, нет 😉

Что ж, добавить больше нечего ... это интересный совет? 😀

привет


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

20 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Джош сказал

    Я этого метода не знал, всегда узнаешь что-то новое.
    Отличный совет, спасибо.

    1.    КЗКГ ^ Гаара сказал

      Благодарю вас!

  2.   Croto сказал

    Наконечник очень хороший, я этого не знала! Осталось только объяснить пользователям Arch и Fedora, почему вы исключили их iso-файлы хе-хе.

    1.    КЗКГ ^ Гаара сказал

      JAJAJAJAJAJA Я не размещал ISO-образы Arch и Fedora, потому что в примере пытались скопировать только дистрибутивы Deb… HAHAHAHAHA.

  3.   гексборг сказал

    Здесь необходимо отметить пару моментов. Во-первых, это работает, только если в bash включена опция extglob. Если это не так, его активируют с помощью этой команды:

    shopt -s extglob

    Его можно поместить в .bashrc, чтобы он всегда был активен.

    Другой момент в том, что этот трюк не является опцией команды cp, но он работает на уровне bash. Это означает, что его можно использовать с любой командой. Не только с cp. Вы можете пройти тест, написав:

    эхо-файлы: isos /! (archlinux.iso | fedora.iso | chakra.iso)

    В противном случае это очень полезный трюк. Наряду с параметром -u для cp, который я также считаю полезным время от времени.

    1.    Даниэль Рохас сказал

      Конечно, это регулярное выражение

      1.    гексборг сказал

        На самом деле это расширенный паттерн. Регулярное выражение - это нечто другое, но похоже на него. 🙂

    2.    КЗКГ ^ Гаара сказал

      Да, ключ -u в cp действительно интересен. Я признаю, что я большой поклонник rsync ... но я не знаю, у меня есть привязанность к бедному cp, хахаха.

      Насчет активации шопта я не знал, предполагал, что это сработало автоматически, спасибо за подсказку.

      И да, я подозревал, что это больше связано с Bash, чем с cp, но я еще не пробовал создать rm, cat или что-то в этом роде :)

      Спасибо за комментарий, правда

      1.    гексборг сказал

        Мне приятно внести свой вклад. 🙂

        1.    КЗКГ ^ Гаара сказал

          На самом деле, мне всегда было интересно узнать о регулярных выражениях ... вы взволнованы и пишете об этом новичку? 😀

          1.    гексборг сказал

            СМЕШНО!! Я у тебя уже есть. 🙂 Каким счастьем я был без комментариев… 🙂

            Ну правда в том, что он мне звонит. 🙂 Но мне еще нужно немного подумать. Это сложно объяснить.

            1.    КЗКГ ^ Гаара сказал

              хахахахаха ничего, не волнуйся, ты продолжаешь комментировать, что ты все еще учишься ахахахаха, важно поделиться 😀


  4.   туфадорин сказал

    Очень хороший совет Вы никогда не лягте спать, не узнав что-то новое.

    1.    КЗКГ ^ Гаара сказал

      Точно, и лучше всего то, что я многому учусь из комментариев, которые вы оставляете к постам. Я люблю узнавать странные вещи каждый день, ХАХАХА.

  5.   Жискар сказал

    Хорошая уловка. Я его не знал 🙂

    1.    КЗКГ ^ Гаара сказал

      Удовольствие 😉

  6.   @Jlcmux сказал

    Но когда вы помещаете isos, вы имеете в виду поставить debian.iso ubuntu.iso /! (И т. Д.)? нет

  7.   Хебер сказал

    Действительно, это оказался очень интересный совет. Не только из-за самой статьи, но и из-за дополнительной ценности комментариев.
    Красивое сообщество <º Linux

  8.   MARTA DEL POZO сказал

    Ваша помощь мне не нужна, вы должны привести пример, чтобы студенты могли лучше понять вашу великолепную технику.
    Спасибо, что нашли время, я всегда буду помнить эту страницу в своем сердце

  9.   felipe016 сказал

    вы говорите, что пропускаете каталоги, однако в примерах вы пропускаете только файлы, знаете ли вы, как пропустить конкретный каталог? С уважением.