saj*_*i89 82
使用rsync:
rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination
Run Code Online (Sandbox Code Playgroud)
注意使用source和source/是不同的。尾部斜杠表示将文件夹的内容复制source到destination. 没有尾部斜杠,这意味着将文件夹源复制到destination.
或者,如果您要排除大量目录(或文件),则可以使用--exclude-from=FILE, 其中FILE是包含要排除的文件或目录的文件的名称。
--exclude 也可能包含通配符,例如 --exclude=*/.svn*
复制自: https : //stackoverflow.com/a/2194500/749232
如果你想使用cp它自己:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
Run Code Online (Sandbox Code Playgroud)
这假设目标目录结构与源目录结构相同。
复制自: https : //stackoverflow.com/a/4586025/749232
游戏后期,但这里有一个使用普通 bash 和 cp 的非常不同的解决方案:您可以使用全局文件规范,同时忽略一些文件。
假设目录包含以下文件:
$ ls *
listed1 listed2 listed3 listed4 unlisted1 unlisted2 unlisted3
Run Code Online (Sandbox Code Playgroud)
使用GLOBIGNORE变量:
$ export GLOBIGNORE='unlisted*'
$ ls *
listed1 listed2 listed3 listed4
Run Code Online (Sandbox Code Playgroud)
或者有更具体的排除:
$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1 listed2 listed3 listed4 unlisted3
Run Code Online (Sandbox Code Playgroud)
或使用否定匹配:
$ ls !(unlisted*)
listed1 listed2 listed3 listed4
Run Code Online (Sandbox Code Playgroud)
这也支持几种不匹配的模式:
$ ls !(unlisted1|unlisted2)
listed1 listed2 listed3 listed4 unlisted3
Run Code Online (Sandbox Code Playgroud)