我在当前目录中有一个目录列表,其中使用了权限代码(例如: 552,700,777)。我希望从目录名获得代码权限,并将其应用于目录和它包含的所有文件。
我尝试使用xargs命令:find . -name "[0-9][0-9][0-9]" -type d | xargs chmod -R [0-9][0-9][0-9]
该命令的问题在于它接受了第一个目录,并更改了所有目录的权限代码。
├── 555
│ └── logs
│ ├── 01.log
│ ├── 02.log
│ ├── 03.log
│ ├── 04.log
│ ├── 05.log
│ ├── 06.log
│ └── 07.log
├── 700
│ └── data
│ └── data1.data
我想要的是:我有555目录,所以我想用权限代码555更改所有子文件和目录,对于第二个目录,我想用权限代码700更改所有的子文件和目录。
我的命令:它使用第一个文件500的权限代码更改所有其他文件和子目录。
发布于 2022-02-23 19:14:05
试一试
find . -name "[0-9][0-9][0-9]" -type d | sed 's#\./\(.*\)#\1#' | xargs -I{} chmod -R {} {}find与您的find相同。添加sed以从目录名中删除./。Find返回./700、./555、带有-I的-I,使用{}将收到的内容重用到命令中。上面写着"chmod -R DIRNAME DIRNAME“。在您的尝试中,xargs.,
find中的0-9链接到0-9在find中。发布于 2022-02-23 19:29:20
无沙格
find . -type d -regextype sed -regex ".*/[0-9]\{3\}$"| awk -F"/" '{print "chmod -R " $NF,$0}'|sh发布于 2022-02-23 23:37:06
查找:
find . -type d -name '[0-7][0-7][0-7]' \
-exec sh -c 'for i do chmod -R "${i##*/}" "$i"; done' _ {} +或者是bash循环:
shopt -s globstar
for i in **/[0-7][0-7][0-7]/; do
i=${i%/}
chmod -R "${i##*/}" "$i"; done
donehttps://stackoverflow.com/questions/71242008
复制相似问题