cp命令排除某些文件被复制


Answers:


57

用途rsync

rsync -avr --exclude='path1/to/exclude' --exclude='path2/to/exclude' source destination

请注意,使用sourcesource/是不同的。斜杠表示将文件夹的内容复制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/{}' ';'

假设目标目录结构与源目录相同。

复制自: https : //stackoverflow.com/a/4586025/749232


3

游戏后期,但是这里是使用纯bash和cp的非常不同的解决方案:您可以使用全局文件规范,同时忽略一些文件。

假设目录包含文件:

$ ls *
listed1  listed2  listed3  listed4  unlisted1  unlisted2  unlisted3

使用GLOBIGNORE变量:

$ export GLOBIGNORE='unlisted*'
$ ls *
listed1  listed2  listed3  listed4

或更具体的排除:

$ export GLOBIGNORE='unlisted1:unlisted2'
$ ls *
listed1  listed2  listed3  listed4  unlisted3

或使用否定匹配项

$ ls !(unlisted*)
listed1  listed2  listed3  listed4

这也支持几种无与伦比的模式:

$ ls !(unlisted1|unlisted2)
listed1  listed2  listed3  listed4  unlisted3

1
对于消极比赛,你需要有扩展的水珠启用:shopt -s extglob,你也并不需要出口GLOBIGNORE:它应该修改当前shell的行为,多数儿童节目就不会在乎它。
大师
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.