代码之家  ›  专栏  ›  技术社区  ›  Nick Vanderbilt

cp命令应该忽略一些文件

  •  34
  • Nick Vanderbilt  · 技术社区  · 15 年前

    有时我需要执行以下命令

    cp -rv demo demo_bkp
    

    但是我想忽略directory.git中的所有文件。我如何做到这一点?复制.git文件需要很长时间,我不需要这些文件。

    3 回复  |  直到 15 年前
        1
  •  104
  •   Community CDub    8 年前

    要忽略git目录,我 try git export 第一。

    rsync 而不是 cp . 语法基本相同,但是

    rsync -rv --exclude=.git demo demo_bkp
    

    the man page 更多信息。

        2
  •  9
  •   John Kugelman Michael Hodel    15 年前

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

    这是怎么回事?

    1. find demo | cpio -p demo_bkp

    2. find -depth 更改文件的打印顺序以匹配cpio想要的顺序。

    3. find -name .git -prune .git 目录。

    4. find -print0 | cpio -0 \0 )分隔文件名。这是为了最大限度地提高健壮性,以防有任何带有空格、换行符或其他不寻常字符的命名怪异的文件。

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

    6. cpio -v --quiet

        3
  •  3
  •   LatinSuD    15 年前

    cd demo
    find . -not -path \*/.\* -type d -exec mkdir -p -- ../demo_bkp/{} \;
    find . -not -path \*/.\* -type f -exec cp -- {} ../demo_bkp/{} \;
    

    首先查找并创建每个目录。然后查找并复制每个文件。

        4
  •  2
  •   Daniel Okwufulueze    5 年前

    继续 rsync 如果有那么多文件模式要忽略,可以使用 --exclude-from=FILE

    这个 --exclude from=文件 选项获取文件[ FILE ]包含排除模式(每行一个模式)并排除与模式匹配的所有文件的。

    所以,假设你想复制一个目录 demo demo_bkp .env .git , coverage , node_modules . 您可以创建一个名为 .copyignore .copyignore文件 :

    .env
    .git
    coverage
    node_modules
    

    然后运行:

    rsync -rv --exclude-from=./.copyignore demo demo_bkp
    

    演示 会被复制到 所有文件都与中指定的模式匹配