递归复制,隐藏目录除外


13

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

Answers:


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
    

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.