Есть ли способ rsync только файлы от определенного пользователя? У меня есть папка, которая содержит файлы от нескольких пользователей, но я хотел бы только резервное копирование файлов от конкретного пользователя.

Я просмотрел справочные страницы по rsync, но, похоже, такого флага нет.

Есть идеи?

2 ответа2

0

Нет, напрямую из командной строки 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 / и распечатывает длинный список, включающий владельца, затем передает эти списки в awk , который выбирает те, которые принадлежат вам ("ваше_имя"), а затем только для эти, распечатывает полный путь. Странная конструкция, начинающаяся с for , связана с тем, что некоторые имена файлов могут содержать пробел, поэтому эта конструкция выводит все токены (i.e. Е. Все символьные последовательности, разделенные пробелами) из 9-го столбца (имена файлов могут включать произвольные количество пробелов). Кроме того, эта конструкция гарантирует, что это остается на одной строке.

Вы можете перенаправить этот вывод в файл, а затем использовать rsync только для файлов, перечисленных в этом файле.

0

Ответ MariusMatutiae не сработал для меня: я получил массу только строк -rw-r--r-- .

Итак, я разработал этот ответ:

  1. Команда find имеет опцию -user-group), которая намного проще в использовании. Нам нужны относительные пути / имена файлов:
    а) find параметр: -printf '%P\n' , или
    б) через sed -e "s#/path##"
  2. rsync предлагает возможность синхронизации из файлов: --files-from=FILE . Вам нужен этот файл локально. Таким образом, вы должны нажать rsync для файлов, или сервер, который извлекает данные, должен сначала получить его с удаленной стороны, где ранее был создан список.

=> Для моего примера это работает:
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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .