除隐藏目录外递归复制

ura*_*ray 13 linux command-line cp

如何递归复制cp -rf *,但不包括隐藏目录(以 . 开头的目录)及其内容?

Gil*_*il' 32

除了某些文件之外,复制目录树的好选项是:

  • rsync:这基本上是 cp 加上大量的排除可能性。

    rsync -a --exclude='.*' /source/ /destination
    
    Run Code Online (Sandbox Code Playgroud)
  • pax:它具有一些排除功能,并且它在 POSIX 中,因此应该随处可用(除了某些 Linux 发行版由于某种原因未将其包含在其默认安装中)。

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    
    Run Code Online (Sandbox Code Playgroud)


xen*_*ide 8

或者给cp你可以使用rsync同一个--exclude=PATTERN


max*_*zig 7

你可以复制一切

cp -rf 
Run Code Online (Sandbox Code Playgroud)

然后删除目标处的隐藏目录

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一些高级 tar(例如 GNU tar),您可以尝试使用 tar 来排除某些模式。但恐怕不可能只排除隐藏目录,而包括隐藏文件。

例如这样的事情:

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x
Run Code Online (Sandbox Code Playgroud)

顺便说一句,GNU tar 有一个排除样式选项的动物园。我最喜欢的是

--exclude-vcs
Run Code Online (Sandbox Code Playgroud)