复制目录时排除目录

Exclude directory while copy directory

我想在复制时排除两个目录。

示例:

$ ls /root/tmp
a b c d e f    

我想排除目录 ab:

$ cp -rp /root/tmp/ /root/tmp1/

rsync 可用于排除多个目录,如下所示:

rsync -av --exclude=/root/tmp/a --exclude=/root/tmp/b /root/tmp/ /root/tmp1/

使用 cp 命令

cp -r /root/tmp/!(a | b) /root/tmp1/

cp 命令之前执行 shopt -s extglob 以在 cp

中启用 !

试试下面的 rsync 它适用于我 ubuntu 14.04

rsync -av --exclude='/root/tmp/a' --exclude='/root/tmp/b' 
/path/to/include /path/to/include /path/to/destination

您可以在复制之前排除目录作为查找结果的一部分,但是按照 Sathiya 的建议使用 rsynccp 并启用 '!' 支持是一个更简单的解决方案.

请参阅下面的 find 示例:

find /root/tmp/ -mindepth 1 -maxdepth 1 -type d ! -regex '\(.*a\|.*b\)' -exec cp -r {} /root/tmp1/ \;

您可以在 bash 中执行此操作(在 sh 中不起作用):

shopt -s extglob
cp -r !(somefile|somefile2|somefolder) destfolder/