将内容从一个目录复制到另一个目录时排除特定文件夹

将内容从一个目录复制到另一个目录时排除特定文件夹

我必须将一些代码的内容从一个名为 的文件夹复制aim-db-dir到另一个名为aim-db-dir_nosvn.aim-db-dir所有目录(和子目录)中都包含 .svn 文件夹,这些 .svn 文件夹包含一些我不关心的文件夹和文件。我想复制aim-db-dir除 .svn 文件夹及其内容之外的目录和子目录中的所有内容。

所以我的问题是我该怎么做。我读到rsync但不确定我们可以排除目录和文件模式。我也尝试使用 find 和 cp 但我缺少一些东西。

我正在尝试的命令类似于(不起作用)-

find aim-db-dir/* -not -name ".svn" | sed -n 's|^aim-db-dir/||p' -exec cp -R "{}" "aim-db-dir_nosvn/{}" \;

我也想过用,xargs但没用过,不知道能不能用。多种解决方案值得赞赏!

答案1

使用 GNUfind和 GNU cpio

find /path/to/aim-db-dir -name .svn -prune -o -print0 | cpio -padmv0 /path/to/aim-db-dir_nosvn

rsync

rsync -av -exclude=.svn /path/to/aim-db-dir/ /path/to/aim-db-dir_nosvn

中的尾部斜杠很重要,没有它,将在 中创建/path/to/aim-db-dir/名为 的目录。aim-db-diraim-db-dir_nosvn

使用 GNU tar

tar cpf - --exclude-vcs -C /path/to/aim-db-dir . | tar xvpf - -C /path/to/aim-db-dir_nosvn

tar由于底层 PAX 格式的限制,您可以使用 复制的文件路径的最大长度存在限制。

相关内容