3

Возможно ли только rsync имена файлов? У меня есть ящик для хранения и я хочу, чтобы имена файлов (и их пути) были добавлены в другой ящик. В настоящее время я создаю каждый файл с touch (они будут созданы с размером 0 байт). Это заняло слишком много времени и было интересно, можно ли это автоматизировать с помощью rsync .

Если нет, есть ли другой инструмент, который позволяет это? Или мне нужно написать что-нибудь нестандартное?

2 ответа2

4

Если ваша цель - создать файлы empy, то шаблон может быть создан следующим образом:

#!/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 работает на порте по умолчанию. Обратите внимание на то, что происходит, когда вы указываете косую черту на обе части или на части. Это важно. Параметр remotehost, может быть IP-адресом вместо псевдонима.

0

В самой rsync нет возможности создавать файлы. Тем не менее, вы можете попробовать различные способы, а не использовать сенсорный вручную:

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

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

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