我想复制一个目录中的所有文件,除了特定子目录中的一些文件。 我注意到cp命令没有——exclude选项。 那么,我怎么才能做到呢?
当前回答
mv tobecopied/tobeexcluded .
cp -r tobecopied dest/
mv tobeexcluded tobecopied/
其他回答
Rsync又快又简单:
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude
你可以使用-排除多次。
rsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherfoldertoexclude
注意——exclude选项后的目录thefoldertoexclude是相对于源文件夹的,即:sourcefolder/thefoldertoexclude。
此外,您还可以添加-n进行演练,以查看在执行实际操作之前将复制什么,如果一切正常,则从命令行中删除-n。
为什么要使用rsync,当你可以:
find . -type f -not -iname '*/not-from-here/*' -exec cp '{}' '/dest/{}' ';'
这假设目标目录结构与源目录结构相同。
我使用一个“do while”循环来读取find命令的输出。在这个例子中,我正在匹配(而不是排除)某些模式,因为我想要的模式匹配的数量比我不想要的要少。你可以在-iname标志前加一个-not来反转逻辑:
find . -type f -iname "*.flac" -o -print0 -iname "*.mp3" -print0 -o -iname "*.wav" -print0 -o -iname "*.aac" -print0 -o -iname "*.wma" -print0 | while read -d $'\0' file; do cp -ruv "$file" "/media/wd/network_sync/music/$file"; done
我使用上述方法复制服务器上比我在/media/wd上安装的Western Digital TV Live Hub上的文件更新的所有音乐类型文件。我使用上面的方法是因为我有很多DVD文件,mpeg等,我想排除,因为某种原因rsync看起来像是在复制,但在我看了wd设备后,文件不存在,尽管在rsync期间没有错误使用这个命令:
rsync -av --progress --exclude=*.VOB --exclude=*.avi --exclude=*.mkv --exclude=*.ts --exclude=*.mpg --exclude=*.iso --exclude=*ar --exclude=*.vob --exclude=*.BUP --exclude=*.cdi --exclude=*.ISO --exclude=*.shn --exclude=*.MPG --exclude=*.AVI --exclude=*.DAT --exclude=*.img --exclude=*.nrg --exclude=*.cdr --exclude=*.bin --exclude=*.MOV --exclude=*.goutputs* --exclude=*.flv --exclude=*.mov --exclude=*.m2ts --exclude=*.cdg --exclude=*.IFO --exclude=*.asf --exclude=*.ite /media/2TB\ Data/data/music/* /media/wd/network_sync/music/
我发现的最简单的方法是,你可以复制除文件和文件夹以外的所有文件,只需在括号中添加它们的名称:
shopt -s extglob
cp -r !(Filename1 | FoldernameX | Filename2) Dest/
我猜你用的是bash或dash。这样能行吗?
shopt -s extglob # sets extended pattern matching options in the bash shell
cp $(ls -laR !(subdir/file1|file2|subdir2/file3)) destination
执行ls,排除你不想要的文件,并使用它作为cp的第一个参数
推荐文章
- 安装tzdata非交互式
- 如何从终端/命令行调用VS代码编辑器
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 确保一次只运行一个shell脚本实例的快速方法
- 如何在Windows命令提示符下运行.sh ?
- “你有邮件”的消息在终端,os X
- 如何从命令行将每两行合并为一行?
- 如何复制在bash所有目录和文件递归?
- Linux命令将域名转换为IP
- 如何从命令行在windows中找到mysql数据目录
- 在Bash命令提示符上添加git分支
- 匹配前后的Grep字符?
- 带有多个条件的Bash if语句将抛出错误