Это возможнотолько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
).