копировать рекурсивно, кроме скрытого каталога

13

Как копировать рекурсивно, как cp -rf *, но исключая скрытые каталоги (каталоги, начинающиеся с.) И их содержимое?

Урай
источник

Ответы:

6

Вы можете просто скопировать все с

cp -rf 

а затем удалите скрытые каталоги в месте назначения с

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

В качестве альтернативы, если у вас есть какой-то расширенный tar (например, GNU tar), вы можете попробовать использовать tar для исключения некоторых шаблонов. Но я боюсь, что невозможно исключить только скрытые каталоги, но включить скрытые файлы.

Например что-то вроде этого:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

Кстати, в GNU tar есть множество вариантов стилей исключения. Мой любимый

--exclude-vcs
maxschlepzig
источник
30

Хорошие варианты для копирования дерева каталогов, за исключением некоторых файлов:

  • rsync : это в основном cp плюс куча возможностей исключения.

    rsync -a --exclude='.*' /source/ /destination
    
  • pax : у него есть некоторые возможности исключения, и он в POSIX, поэтому должен быть доступен везде (за исключением того, что некоторые дистрибутивы Linux по какой-то причине не включают его в установку по умолчанию).

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
Жиль "ТАК - перестань быть злым"
источник
8

В качестве альтернативы cpвы могли бы использовать rsyncс --exclude=PATTERN.

xenoterracide
источник