在 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
我在当前目录中有一个以权限代码命名的目录列表(例如: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]
,linkfind
中的 [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