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

Cam*_*oft 6 linux filesystems bash command-line-interface

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

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

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

Kyl*_*ndt 7

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

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

shopt -s extglob
echo !(*foo*|*bar*)
Run Code Online (Sandbox Code Playgroud)

或者只是没有 foo 的所有内容:

shopt -s extglob
echo !(*foo*)
Run Code Online (Sandbox Code Playgroud)

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

find . ! -iname 'foo' -print0 | xargs -0 echo
Run Code Online (Sandbox Code Playgroud)

简单:
只需将文件夹 mv 到其他地方,做你需要做的事情,然后把它放回去:-)