我必须chmod -R 755 some_dir
在“some_dir”包含“.git”文件夹的地方执行操作。在执行递归 chmod 时,有什么方法可以排除隐藏文件和文件夹吗?
注意:chmoding .git 文件夹会引发以下错误
some_dir/.git/objects/pack/pack-dd149b11c4e5d205e3022836d49a972684de8daa.idx': Operation not permitted
我真的不需要 chmod .git 文件夹,但不幸的是,在我的情况下我也无法删除它们。
答案1
不与chmod
孤身一人。您需要使用find
:
find some_dir -name '.?*' -prune -o -exec chmod 755 {} +
或者使用zsh
(or ksh93 -G
, or with tcsh
after set globstar
) 通配:
chmod 755 -- some_dir some_dir/**/*
(您也可以使用fish
or执行此操作bash -O globstar
,但请注意bash
4.3 之前的版本,并fish
在降序目录时遵循符号链接。它在 bash 4.3 中部分修复,因为您仍然可以在目录的符号链接中获取文件,但不再在这些目录的子目录中获取文件与 4.2 相同,并在 5.0 中完全修复)
您确定要使所有文件都可执行吗?
答案2
尝试使用下面的命令,效果很好
find path| sed -n '/^\.\/\./!p'|awk '{print "chmod -R" " " "755" " " $1}'|sh
答案3
find /Your/Folder -type d -regextype posix-extended -regex ^[^\.].*$ -exec chmod -R 755 {}
^[^\.]
: 将排除所有以点开头的文件名。