因此,在目录上下文中*
使用时,您可以将 用作所有文件的通配符。cp
有没有办法复制除x
文件之外的所有文件?
答案1
Rsync 很好地处理了这个问题。
全部复制示例:rsync -aP /folder1/* /folder/2
复制全部并排除的示例:rsync -aP --exclude=x /folder1/* /folder2/
开关-aP
:
a
:类似于cp -a
、递归等。P
:显示进度,rsync 的一个很好的功能。
答案2
在bash
你可以使用extglob
:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
其中!(b*)
排除所有b*
文件。
您可以稍后extglob
禁用
$ shopt -u extglob
答案3
这不是 的功能cp
,而是 shell 的功能(它将 扩展*
为所有非点文件),因此答案取决于您使用的 shell。例如,zsh
支持这种语法:
$ cp ^x /path/to/destination
其中表示“除”^x
之外的所有文件x
您还可以组合选择和取消选择模式,例如要复制除包含 xyz 的文件之外的所有 wav 文件,您可以使用:
cp *.wav~*xyz*
答案4
也可以使用标准工具以多种方式在普通旧(可移植/兼容)bourne shell 中完成,但与使用高级 shell 通配符或具有内置排除选项的命令相比,其方式要差得多。
如果文件不是太多(并且名称不包含空格和/或换行符),这可能是一种方法:
cp `ls | egrep -v '^excludename$'` destdir/.
当然,bash
GNU 工具很棒而且功能强大,但它们仍然并不总是可用。如果您打算将其放入可移植脚本中,我会find
像 Rush 的评论中那样推荐。