cp命令应该忽略一些文件

有时我需要执行以下命令

cp -rv demo demo_bkp

但是我想忽略目录.git中的所有文件。 我如何实现这一目标? 复制.git文件需要很长时间,我不需要这些文件。


要特别忽略一个git目录,我会先尝试git export

但一般来说,要复制一个不包含某些文件或文件夹的目录树,我建议使用rsync而不是cp 。 语法大多相同,但rsync有更多选择,其中包括一个用于排除选定文件的选项:

rsync -rv --exclude=.git demo demo_bkp

请参阅手册页以获取更多信息。


好。 振作起来。 这并不漂亮。

find demo -depth -name .git -prune -o -print0 | cpio -0pdv --quiet demo_bkp

这里发生了什么?

  • find demo | cpio -p demo_bkp find demo | cpio -p demo_bkp找到符合你想要的任何标准的文件,并使用cpio来复制它们(所谓的“传递”模式)。

  • find -depth更改打印文件的顺序以匹配cpio所需的顺序。

  • find -name .git -prune告诉find不要递减.git目录。

  • find -print0 | cpio -0 find -print0 | cpio -0可以使用NUL字符( )来分隔文件名。 这是为了最大限度地提高鲁棒性,以防存在任何带有空格,换行符或其他不寻常字符的奇怪命名文件。

  • cpio -d根据需要创建目录。

  • cpio -v --quiet打印每个文件名,同时省略cpio通常在最后打印的“X blocks copied”消息。


  • 链接地址: http://www.djcxy.com/p/26271.html

    上一篇: cp command should ignore some files

    下一篇: Remove all git files from a directory?