如何在Linux中执行文件操作(如cp,mv,rm和chown等)时排除文件夹

如何在执行文件操作时排除文件夹,例如cp等

我目前使用通配符*来应用文件操作,但是我需要排除一个文件夹。

我实际上想要使用的命令是更改目录中的所有文件的所有者,但我需要排除一个子目录。

逆向Globbing:
你想要一个glob的逆匹配 ,我会这样做:

如果启用扩展匹配,则可以使用较新的bash进行逆匹配。 例如,要匹配名称中没有foo或bar的所有内容:

 shopt -s extglob echo !(*foo*|*bar*) 

或者只是没有foo的一切:

 shopt -s extglob echo !(*foo*) 

找:
你也可以使用find(这是我认为最强大的选项),并使用! 否定匹配,然后用xargs -0运行命令:

 find . ! -iname 'foo' -print0 | xargs -0 echo 

简单:
只要mv文件夹别的地方,做你需要做的,把它放回:-)

rsync -arv –exclude = {files} {目的地}

查找解决scheme会为每个文件生成一个chown进程,有时候这可能是一个问题。 此解决scheme只产生一个perl进程:

 find . | perl -nle "chown($(id -u user), $(id -g group), \$_) unless m/foo/"