如何使用chown -R
但排除一个或两个文件?
我需要定期运行
sudo chown -R www-data:www-data *
和
sudo chown -R ubuntu:ubuntu *
但我想从这些命令中排除一两个文件,以免更改这些排除文件的权限。
我怎样才能排除file1.php
,或同时排除file2.txt
和file3.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