Linux
Linux:同步兩個目錄的權限,使用者和組,保持文件內容不變
在我的 Linux 機器中,我有兩個目錄:
- 具有錯誤權限的工作文件
- 具有正確權限的相同文件的舊版本(權限以及使用者和組)
我只需要在不更改文件內容的情況下同步權限。我嘗試了 rsync 但找不到合適的選項。你能給我一些建議嗎?
提前致謝。
編輯
感謝您的建議,我有這個腳本。它遞歸地更改子樹權限:
#!/bin/bash cd good find $1/* | while read DIR do chown --reference="$DIR" "/bad/$DIR" chmod --reference="$DIR" "/bad/$DIR" done
不是傑作,但對我有用。
您可以使用
--reference=file
切換到chmod和chown來執行此操作,例如#!/bin/bash for FILE in /path/to/good/directory/* do chown --reference="$FILE" /path/to/bad/directory/"$(basename "$FILE")" chmod --reference="$FILE" /path/to/bad/directory/"$(basename "$FILE")" done
你可以試試這個。您需要此腳本所需的 2 個參數的絕對路徑。像這樣執行它 copyperms.sh source_dir target_dir
這是腳本:cat copyperms.sh
#!/bin/bash srcDir="$1" targDir="$2" if [ -z "$srcDir" ] || [ -z "$targDir" ]; then echo "Required argument missing." elif [ ! -d "$srcDir" ] || [ ! -d "$targDir" ] ; then echo "Source and target not both directories." exit else cd $srcDir echo "Source directory: $srcDir; Target directory: $targDir" echo "Matching permissions and ownerships .." find . -print0 | xargs -0I {} echo {} | xargs -I {} chmod --reference "{}" "$targDir/{}" find . -print0 | xargs -0I {} echo {} | xargs -I {} chown --reference "{}" "$targDir/{}" # find . | while read name # do # chmod --reference "$name" "$targDir/$name" # chown --reference "$name" "$targDir/$name" # done echo ".. done!" fi
可以通過使用註釋掉的 while 循環來適應更多用途,但速度較慢..
$ time perms /adp/code /adp/safe/code
使用 xargs:
真實 0m0.107s 使用者 0m0.008s 系統 0m0.004s
使用 while 循環:
實際 0m0.234s 使用者 0m0.012s 系統 0m0.028s 系統 0m0.028s