我在當前目錄中有一個以權限代碼命名的目錄串列(例如: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 的權限代碼更改所有其他檔案和子目錄
uj5u.com熱心網友回復:
嘗試
find . -name "[0-9][0-9][0-9]" -type d | sed 's#\./\(.*\)#\1#' | xargs -I{} chmod -R {} {}
- 和你的
find一樣。 sed添加 以./從目錄名稱中洗掉 。查找退貨./700,./555, ...xargs用于重用-I它{}收到的命令。所以它說“chmod -RDIRNAME DIRNAME”。如此等等chmod -R 700 700。- 在您的嘗試中
xargs chmod -R [0-9][0-9][0-9],沒有任何東西可以將 中的 [0-9] 鏈接find到 中的 [0-9]xargs。
uj5u.com熱心網友回復:
沒有 xargs
find . -type d -regextype sed -regex ".*/[0-9]\{3\}$"| awk -F"/" '{print "chmod -R " $NF,$0}'|sh
uj5u.com熱心網友回復:
找:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432228.html
上一篇:查找以相同17個字符結尾的檔案組
