Как копировать рекурсивно, как cp -rf *
, но исключая скрытые каталоги (каталоги, начинающиеся с.) И их содержимое?
источник
Как копировать рекурсивно, как cp -rf *
, но исключая скрытые каталоги (каталоги, начинающиеся с.) И их содержимое?
Вы можете просто скопировать все с
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
Хорошие варианты для копирования дерева каталогов, за исключением некоторых файлов:
rsync : это в основном cp плюс куча возможностей исключения.
rsync -a --exclude='.*' /source/ /destination
pax : у него есть некоторые возможности исключения, и он в POSIX, поэтому должен быть доступен везде (за исключением того, что некоторые дистрибутивы Linux по какой-то причине не включают его в установку по умолчанию).
cd /source && mkdir -p /destination && \
pax -rw -pp -s '!.*/\..*!!' . /destination
В качестве альтернативы cp
вы могли бы использовать rsync
с --exclude=PATTERN
.