Camsoft Asked: 2010-01-15 08:08:32 +0800 CST2010-01-15 08:08:32 +0800 CST 2010-01-15 08:08:32 +0800 CST 如何在 Linux 中执行文件操作(即 cp、mv、rm 和 chown 等)时排除文件夹 772 在执行文件操作(即 cp 等)时如何排除文件夹? 我目前会使用通配符 * 将文件操作应用于所有文件,但我需要排除一个文件夹。 我实际上想要使用的命令是chown更改目录中所有文件的所有者,但我需要排除一个子目录。 linux filesystems bash command-line-interface 3 个回答 Voted Best Answer Kyle Brandt 2010-01-15T08:14:05+08:002010-01-15T08:14:05+08:00 Inverse Globbing: 你想要一个 glob 的逆匹配,我会这样做: 如果启用扩展通配符,则可以使用较新的 bash 进行反向匹配。例如,要匹配名称中没有 foo 或 bar 的所有内容: shopt -s extglob echo !(*foo*|*bar*) 或者只是所有没有 foo 的东西: shopt -s extglob echo !(*foo*) Find: 你也可以使用 find (这是我认为最强大的选项),然后使用 ! 否定匹配,然后使用以下命令运行命令xargs -0: find . ! -iname 'foo' -print0 | xargs -0 echo 简单: 只需将文件夹 mv 到其他地方,做你需要做的,然后把它放回去:-) Tman 2011-04-08T23:38:41+08:002011-04-08T23:38:41+08:00 rsync -arv --exclude={文件} {目标} Antonio Dolcetta 2014-12-16T19:25:10+08:002014-12-16T19:25:10+08:00 find 解决方案会为每个文件生成一个 chown 进程,有时这可能是个问题。此解决方案仅生成一个 perl 进程: find . | perl -nle "chown($(id -u user), $(id -g group), \$_) unless m/foo/"
Inverse Globbing:
你想要一个 glob 的逆匹配,我会这样做:
如果启用扩展通配符,则可以使用较新的 bash 进行反向匹配。例如,要匹配名称中没有 foo 或 bar 的所有内容:
或者只是所有没有 foo 的东西:
Find:
你也可以使用 find (这是我认为最强大的选项),然后使用 ! 否定匹配,然后使用以下命令运行命令
xargs -0
:简单:
只需将文件夹 mv 到其他地方,做你需要做的,然后把它放回去:-)
rsync -arv --exclude={文件} {目标}
find 解决方案会为每个文件生成一个 chown 进程,有时这可能是个问题。此解决方案仅生成一个 perl 进程: