我需要建立現有 Linux 目錄和資料夾子目錄的鏡像,如下所示。
我們有「/opt/current」目錄,其中另一層有20 個子目錄,再一層有50 個子目錄,依此類推...還有更深的子目錄層,從父目錄到子目錄總共有1000個目錄。 /opt/current 安裝在 Oracle ZFS 設備上。
如何在新位置 /opt/New 中建立精確的鏡像目錄/子目錄結構,而不是像一對一目錄那樣手動建立並套用權限。 /opt/New 安裝在另一個 ZFS 設備上。
有沒有一種方法/腳本可以在 /opt/New 路徑中建立與 /opt/current 路徑中相同的擁有者/群組/其他權限的從父到子的整個目錄結構?
謝謝,CG
答案1
rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New
這將用於精確複製inrsync的目錄結構,同時避免複製任何檔案。/opt/local/opt/New
選項-a( --archive) 將確保保留所有權限等(此選項也意味著遞歸複製),並且-v( --verbose) 將向您指示命令的進度。
我們--include='*/'在傳輸中明確包含任何目錄,但排除其他所有目錄--exclude='*'。命令列上這些選項的順序很重要。
/結尾的也/opt/current/很重要,因為沒有它,結果將是創建/opt/New/current而不是直接寫入/opt/New。
答案2
POSIXly 並假設目錄名稱不包含換行符,且$srcdir和$dstdir是絕對路徑:
(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")
某些pax實作支援取得要複製的以 NUL 分隔的檔案列表,並帶有-0允許使用 NUL 的檔案名稱的選項:
(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")
(-print0也是一個非 POSIX 擴充)。
答案3
或可選擇rsync
find /opt/current -type d -print0 | cpio -0pma backup/dir/
答案4
您可以製作以下腳本...將其放入文件中:
-- bash 腳本/ksh 腳本語法需要根據 shell 進行更改 ----
find . -name "*"|while read line
do
if [[ -d ${line} ]]
then
echo ${line}
fi
do
在伺服器上您正在製作文件
cat file |while read line
do
mkdir ${line}
done


