是否有可能僅有的rsync 檔名?我有一個儲存盒,希望將檔案名稱(及其路徑)添加到另一個儲存盒中。我目前正在創建每個文件touch
(它們將以 0 字節大小創建)。花費的時間太長,想知道這是否可以透過 自動化rsync
。
如果沒有,是否有其他工具可以實現此目的?或者我需要編寫一些自訂的程式碼嗎?
答案1
如果您的目標是建立空文件,則可以像這樣建立範本:
#!/bin/bash
FILES=$1 # original structure
TMPL=$2 # where to create empty files
[[ -d $FILES ]] || exit 1
[[ -d $TMPL ]] || mkdir -p $TMPL || exit 1
cd $TMPL
find "$FILES" -type d -printf "$TMPL%p\0" | sort -z |xargs -0 -L 1000 mkdir -p
find "$FILES" -type f -printf "$TMPL%p\0" | xargs -0 -L 1000 touch
這會從原始樹中建立每個檔案的目錄,並觸及在 TMPL 下建立的資料夾中的檔案。
建立僅包含空文件的「鏡像」資料夾後,可以像任何其他資料夾一樣將其同步到任何主機:
rsync -av -e 'ssh -p 22 -l username' \
/template/structure remotehost:/backup/templates/
如果兩台主機上的使用者名稱相同且 sshd 在預設連接埠上運行,則 -e 選項是可選的。請注意當您在 from 和 to 部分的兩個或其中一個上指定尾部斜杠時會發生什麼情況。這很重要。 Remotehost 參數可以是 IP 位址而不是別名。
答案2
rsync
本身似乎沒有隻能建立文件的選項。但是,您可以嘗試各種方法,而不是手動使用觸控:
- rsync 目錄樹,然後
find
在該樹的根目錄上運行並echo "" >
進入每個文件 - use
find
取得目錄樹列表,然後使用mkdir -p
該列表的每個元素(可能預先進行反向排序以最大限度地減少系統呼叫的數量),然後使用touch
類似建立的檔案列表。
但是,如果空間可用,我會選擇第一個選項,因為它保留權限和存取權限(給定適當的參數rsync
)。