什么是通配符来选择目录中的所有目录


13

我想为目录中除文件之外的所有目录设置粘性位。有没有通配符可以做到这一点?

#sudo chmod g+s /var/www/<WILD_CARD_FOR_ALL_DIRECTORIES>

Answers:


24

用于*/仅匹配目录。

chmod g+s /var/www/*/

要匹配所有目录和子目录,请使用**/*/(前提是您已globstar在bash中启用):

shopt -s globstar
chmod g+s /var/www/**/*/

2
效果很好,但是一旦扩展的命令行长度超过命令行长度限制,它就会中断。-> cyberciti.biz/faq/argument-list-too-long-error-solution
Bonsi Scott

1
是的,我很清楚。但是,OP要求提供“通配符”。
dogbane

是的 我问了通配符,thanq。
Necktwi 2013年

我知道他要求提供通配符解决方案。我只是指出在某些情况下它将失败。除此之外,这里没有评论家(我已发表评论,但仍不赞成,因为这对于大多数情况而言
都是可行的

13

您可以使用find,请参见以下示例

find /var/www/ -type d -exec chmod g+s {} \;

3
这很好,但不是通配符-但它的优点是不会因目录太多而失败
Bonsi Scott

请注意,默认情况下这是递归的。如果只希望将命令应用于顶层,则可以使用-maxdepth find参数。
克里斯·哈珀

0

这不是通配符,因此我为无法回答表示歉意,但是...
ls -al |grep ^d | awk '{print$NF}'将列出当前目录中的所有目录,由您决定是否要处理...删除它们。

echo $(ls -al |grep ^d | awk '{print$NF}') 确实使其表现得像通配符


如果文件的前导或尾随空格或换行符,则此操作将中断。
克里斯·唐纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.