使用 chown -R 排除一个或两个文件

使用 chown -R 排除一个或两个文件

如何使用chown -R但排除一个或两个文件?

我需要定期运行

sudo chown -R www-data:www-data *

sudo chown -R ubuntu:ubuntu *

但我想从这些命令中排除一两个文件,以免更改这些排除文件的权限。

我怎样才能排除file1.php,或同时排除file2.txtfile3.php

答案1

设置bash选项extglob

shopt -s extglob

并像这样使用它来排除这些文件:

sudo chown -R www-data:www-data !(file1.php)
sudo chown -R ubuntu:ubuntu !(file2.txt|file3.php)

这对文件和目录同样有效,但仅限于当前目录。如​​果您需要排除子目录中的文件,请将上述内容与选项globstar( shopt -s globstar) 结合使用:

sudo chown -R www-data:www-data **/!(file1.php)

这会匹配除名为 之外的所有文件和目录file1.php

示例运行

$ touch {1..3}
$ shopt -s extglob
$ echo !(1)
2 3
$ echo !(1|2)
3
$ mkdir a
$ touch a/{1..3}
$ tree
.
├── 1
├── 2
├── 3
└── a
    ├── 1
    ├── 2
    └── 3
$ shopt -s globstar
$ echo **/!(1|2)
3 a a/3

进一步阅读

相关内容