在 linux 中使用 xargs 和 chmod 命令更改目录和子目录的权限

Change permission of a directory and subdirectories with xargs and chmod commands in linux

我在当前目录中有一个以权限代码命名的目录列表(例如: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 的权限代码更改所有其他文件和子目录

尝试

find . -name "[0-9][0-9][0-9]" -type d  | sed 's#\./\(.*\)##' | xargs -I{} chmod -R {} {}
  • find和你的一样。
  • 添加 sed 以从目录名称中删除 ./。查找 returns ./700./555、...
  • xargs-I 使用 {} 来重用它在命令中收到的内容。所以它说“chmod -R DIRNAME DIRNAME”。所以chmod -R 700 700等等。
  • 在您的尝试中,xargs chmod -R [0-9][0-9][0-9],link find 中的 [0-9] 到 xargs 中的 [0-9] 没有任何内容.

没有 xargs

find . -type d -regextype sed -regex ".*/[0-9]\{3\}$"| awk -F"/" '{print "chmod -R " $NF,[=10=]}'|sh

查找:

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
done