如何使用'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?