Как я могу использовать chown -R
, но исключаю один или два файла?
Мне периодически нужно запускать
sudo chown -R www-data:www-data *
и
sudo chown -R ubuntu:ubuntu *
Но я ' Я хотел бы исключить один или два файла из этих команд, чтобы не изменять разрешения этих исключенных файлов.
Как можно исключить file1.php
или оба file2.txt
и file3.php
?
Набор 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
man bash
/EXPANSION/Pathname Расширение/Сопоставление с образцом