如何在递归 chmod 中排除隐藏文件?

如何在递归 chmod 中排除隐藏文件?

我必须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 tcshafter set globstar) 通配:

chmod 755 -- some_dir some_dir/**/*

(您也可以使用fishor执行此操作bash -O globstar,但请注意bash4.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 {}

^[^\.]: 将排除所有以点开头的文件名。

相关内容