我必须将一些代码的内容从一个名为 的文件夹复制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-dir
aim-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 格式的限制,您可以使用 复制的文件路径的最大长度存在限制。