僅 rsync 檔案名

僅 rsync 檔案名

是否有可能僅有的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 "" >進入每個文件
  • usefind取得目錄樹列表,然後使用mkdir -p該列表的每個元素(可能預先進行反向排序以最大限度地減少系統呼叫的數量),然後使用touch類似建立的檔案列表。

但是,如果空間可用,我會選擇第一個選項,因為它保留權限和存取權限(給定適當的參數rsync)。

相關內容