File-Permissions

將文件從一台伺服器複製到另一台具有相同權限的伺服器

  • February 10, 2013

我正在遷移到新伺服器,我需要移動幾個網站,但我需要對新服務具有與舊伺服器上相同的讀/寫權限。

我不需要保持組和所有者 ID 相同,但如果我必須檢查舊伺服器上的所有文件並檢查文件夾和文件的讀/寫權限,而不是在新伺服器上設置,這將非常困難。

我的想法是將文件複製到新伺服器並解壓縮,但這會以某種方式將所有權限重置為預設值,文件為 644,文件夾為 755。我可以以某種方式傳輸與舊伺服器上具有相同權限的文件和文件夾嗎?

只需使用rsync

rsync -avz /path/to/files newserver:/path_to_files 

/path/to/files這將遞歸地將舊伺服器上的所有文件複製到/path_to_files新伺服器上,並保留權限和所有者資訊。有關詳細資訊,請參閱man rsync

在此之前rsync,這裡有一個值得了解的技巧。有時你會發現自己在一個沒有 rsync 的系統上。

訣竅是製作文件的 tar 文件,將文件複製到新伺服器,然後提取 tar 文件-p以保留文件權限。

“可是等等!” 你問。“那個臨時文件可能很大!比我的可用空間還大!” 不用擔心。您可以通過管道編寫連接兩個tars,您不需要臨時文件,也不需要磁碟空間!要指定標準輸入或標準輸出,請指定文件名-(連字元)。

把所有這些放在一起:

cd $SRCDIR
tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -"

例如:

cd /home/user12
tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -v f -"

&&就像(分號),但它的;意思是“如果這個命令成功,只執行下一個命令”。

請記住,如果您也想複製文件 owner:group,則必須以 root 身份執行此操作。您的普通使用者帳戶通常不能chown創建文件,因此 tar 也不能。即使ssh要要求輸入密碼,該命令也將起作用,因為ssh它足夠聰明,在登錄完成之前不會連接管道。

注意:tar將更新除根目錄之外的所有文件的權限,因為它沒有創建它。您使用mkdir -p. 如果您使用 tar 而不是“.”來擷取目錄,則可以解決此問題。這是以更新“user12”權限的方式重複的最後一個範例:

cd /home
tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -v f -"

看到不同?

引用自:https://serverfault.com/questions/477345