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

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

如何在执行文件操作(即 cp 等)时排除文件夹。

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

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

答案1

逆向通配符:
你想要一个逆向匹配我将像下面这样进行操作:

如果启用了扩展通配符,则可以使用较新的 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

简单的:
只需将文件夹移动到其他位置,执行您需要的操作,然后将其放回原处:-)

答案2

rsync -arv --exclude={文件} {目标}

答案3

find 解决方案为每个文件生成一个 chown 进程,有时这可能会带来问题。此解决方案仅生成一个 perl 进程:

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

相关内容