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


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

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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.