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/

Параметр -e необязателен, если имя пользователя одинаково на обоих хостах и ​​если sshd работает на порту по умолчанию. Обратите внимание на то, что происходит, когда вы указываете завершающий слеш в обеих или одной из частей from и to. Это важно. Параметр remotehost может быть IP-адресом вместо псевдонима.

решение2

rsyncСам по себе, похоже, не имеет возможности только создавать файлы. Однако вы можете попробовать разные способы, а не использовать touch вручную:

  • rsync дерева каталогов, затем запустите его findв корне этого дерева и echo "" >в каждом файле
  • используйте findдля получения списка деревьев каталогов, затем используйте mkdir -pдля каждого элемента этого списка (возможно, предварительно выполнив обратную сортировку, чтобы минимизировать количество системных вызовов), а затем используйте touchдля аналогично созданного списка файлов.

Однако, если место доступно, я бы выбрал первый вариант, поскольку он сохраняет разрешения и права доступа (при наличии соответствующих аргументов rsync).

Связанный контент