如何使用'cp'命令排除特定目录?

我想复制除特定子目录中的某些文件之外的所有文件。 我注意到'cp'命令没有--exclude选项。 那么,我怎么能做到这一点?


rsync是快速和容易的:

rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude

您可以使用 - --exclude倍数。

你也可以添加-n进行空运行,看看在执行实际操作之前要复制的内容,如果一切正常,请从命令行中删除-n


那么,如果每个unix-ish文件实用程序(如cp,mv,rm,tar,rsync,scp,...)都必须执行某些文件名模式的排除,则会发生巨大的重复工作。 相反,这样的事情可以作为globbing的一部分来完成,即通过你的shell。

庆典

链接到手动,搜索extglob

例:

$ shopt -s extglob
$ echo images/*
images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png
$ echo images/!(*.jpg)
images/004.bmp images/2252.png

所以你只需要把一个模式放在!() ,并且否定匹配。 该模式可以任意复杂,从个别路径的枚举开始(如Vanwaril在另一个答案中所示): !(filename1|path2|etc3) ,转换为带有星号和字符类的类正则表达式。 有关详细信息,请参阅联机帮助页。

zsh的

链接到手册, “文件名生成”部分

你可以做setopt KSH_GLOB并使用类似bash的模式。 要么,

% setopt EXTENDED_GLOB
% echo images/*
images/004.bmp images/033.jpg images/1276338351183.jpg images/2252.png
% echo images/*~*.jpg
images/004.bmp images/2252.png

所以x~y匹配模式x ,但不包括模式y 。 有关详细信息,请再次参阅联机帮助页。


fishnew!

鱼壳有一个更漂亮的答案:


                        链接地址: http://www.djcxy.com/p/13689.html
                        

上一篇: How to use 'cp' command to exclude a specific directory?

下一篇: >pid work for linux?