Answers:
Rsync处理得很好。
示例全部复制: rsync -aP /folder1/* /folder/2
复制所有示例,但不包括: rsync -aP --exclude=x /folder1/* /folder2/
该-aP
开关:
a:类似于cp -a
,递归等。P:显示进度,这是rsync的一个不错的功能。
-rP
代替-aP
。-a
用于存档。不确定是否已更改或在MacOS上是否有所不同。
rsync
确实可以选择使其递归。范例:rsync --recursive -P --exclude=x /folder1/* /folder2/
。(仅在Ubuntu上测试)
这不是的功能cp
,而是Shell的功能(它将扩展*
为表示所有非点文件),因此答案取决于您使用的是哪个Shell。例如,zsh
支持以下语法:
$ cp ^x /path/to/destination
其中^x
表示“除x
” 以外的所有文件
您还可以组合选择和取消选择模式,例如,要复制所有包含xyz的wav文件,可以使用:
cp *.wav~*xyz*
bash
什么意见吗?
与使用高级shell globbing或带有内置排除选项的命令相比,也可以使用标准工具以多种方式在普通的(便携式/兼容)bourne shell中完成操作,而方式却不那么优雅。
如果文件太多(并且没有包含空格和/或换行符的名称),则可以采用以下方法:
cp `ls | egrep -v '^excludename$'` destdir/.
当然,bash
GNU工具既强大又强大,但仍不总是可用。如果您打算将其放在可移植脚本中,我将建议find
使用Rush的评论。
如果要将文件夹(包括子文件夹)中的所有内容复制到特定的子目录:
cp -R $(ls | grep -v '^subdir$') subdir/
适用于sh,bash,zsh(至少)。
cp -R * subdir/
cp
(不是来自bash
/ sh
)“ cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’
” 的警告。但是,副本确实可以正确完成。不幸的是,您的变体会破坏任何包含空格或对shell敏感的标点符号的文件名。参见unix.stackexchange.com/q/128985/135943