如何像 一样递归复制cp -rf *
,但排除隐藏目录(以 . 开头的目录)及其内容?
答案1
除了某些文件之外,复制目录树的好选项是:
同步:这基本上是 cp 加上大量排除的可能性。
rsync -a --exclude='.*' /source/ /destination
帕克斯:它有一些排除功能,并且它在 POSIX 中,因此应该在任何地方都可用(除了某些 Linux 发行版由于某种原因不将其包含在默认安装中)。
cd /source && mkdir -p /destination && \ pax -rw -pp -s '!.*/\..*!!' . /destination
答案2
或者cp
您可以rsync
使用--exclude=PATTERN
.
答案3
你可以复制所有内容
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