2013-03-06 96 views
33

我有兩個相同目錄樹的副本。他們幾乎在兩個文件中都有相同的文件(一個版本可能有一些額外的文件或丟失的文件)。但是,大多數文件在兩個目錄中都是相同的(具有相同的相對路徑和所有內容)。複製文件權限,但不復制文件

承擔這些都是目錄:

version1/ 
version2/ 

的問題是,在VERSION1權限/弄亂了,我想在從版本2 /權限複製,但做到這一點,無需更換文件在版本1 /更新。

是否有自動化的方式通過bash來做到這一點? (它不一定是bash,也可以是其他方法/編程語言)。

+0

我在與此主題相關的ServerFault中創建了一個新問題:[複製文件權限,但不是Unix中的文件](http://serverfault.com/questions/665237/copy-file-permissions-but- not-files-in-unix) – 2015-02-05 12:25:48

回答

66

你應該看看--reference選項chmod

chmod --reference version2/somefile version1/somefile 

以固定方式應用findxargs,你應該罰款,即像

~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{} 

這甚至作品遞歸地,並且對目標目錄中丟失的文件是健壯的(bar 沒有這樣的文件...錯誤,這可以被忽略)。當然,它不會對只存在於目標目錄中的文件執行任何操作。

歡呼聲,

+0

只是爲了conf irm,在上面的命令中,它將版本2更改爲匹配版本1,而不是相反的正確?最後,這對於缺失文件是強大的? – user788171 2013-03-06 14:44:21

+1

分別爲否。 – 2013-03-06 15:01:19

+1

爲了詳細說明,它將當前目錄的權限複製到版本1,並且如果目標目錄中沒有匹配的文件,我不確定是否會繼續執行'xargs' - 您應該在運行FS之前進行測試。 – 2013-03-06 15:41:01

0

chmod owner-group-other ./dir或./file可能嗎?

除非權限很好,並且從一個文件到另一個文件不同,您可以對目錄執行遞歸chmod並統一權限。

見人CHMOD的,可能是

7

你可以使用這個腳本(它改變的權限遞歸,但單獨爲每個文件/目錄)

#!/bin/sh 
chmod --reference $1 $2 
if [ -d $1 ] 
then 
    if [ "x`ls $1`" != "x" ] 
    then 
     for f in `ls $1` 
     do 
      $0 $1/$f $2/$f 
     done 
    fi 
fi 

運行腳本有用的選項引用參數版本2版本1