僅 Rsync 來自特定使用者的文件

僅 Rsync 來自特定使用者的文件

有沒有辦法只同步某個使用者的檔案?我有一個資料夾,其中包含來自多個用戶的文件,但只想備份來自特定用戶的文件。

我查看了 rsync 的手冊頁,但似乎沒有這樣的標誌。

有任何想法嗎?

答案1

不,沒有辦法直接從 rsync 命令列中挑選出特定使用者的檔案。

然而,產生這些文件的清單非常容易,例如使用以下命令

   find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'

find尋找 /src/directory 下樹中的所有文件,並列印包含所有者的長列表,然後將這些列表傳遞給awk,後者選擇屬於您的文件(“your_name”),然後僅針對這些文件,列印出完整路徑。以 開頭的奇怪構造for是由於某些檔案名稱可能包含空格,因此該構造會列印i.e.從第 9 列開始的所有標記( ,所有空格分隔的字元序列)(檔案名稱可能包含任意數量的空格)。此外,此構造確保它保持在一行上。

您可以將此輸出重定向到一個文件,然後僅對該文件中列出的文件使用 rsync。

答案2

MariusMatutiae 的回答對我不起作用:我-rw-r--r--只得到了大量的線條。

所以我制定了這個答案:

  1. find命令有選項-user(和-group),更容易使用。我們需要相對路徑/檔案名稱:
    a)find選項:-printf '%P\n',或
    b)管道通過sed -e "s#/path##"
  2. rsync 提供了從檔案同步的可能性: .您需要本機此文件。因此,您必須推送 rsync 文件,或者拉取的伺服器必須先從先前產生清單的遠端取得它。--files-from=FILE

=> 對於我的範例,此方法有效:
1a)find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.list
1b)find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

2)rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik

-n您應該首先使用/進行測試--dry-run

相關內容