Как скопировать только символические ссылки через rsync

Как скопировать только символические ссылки (а не файл, на который он указывает) или другие файлы с помощью rsync?

пробовал

rsync -uvrl input_dir output_dir

но мне нужно исключительно копировать только символические ссылки ?

любой трюк с использованием опций Include exclude?

4 ответов


Per этот вопрос+ответ, вы можете записать это как канал. Трубы являются неотъемлемой частью программирования оболочки и сценариев оболочки.

find /path/to/files -type l -print | \
  rsync -av --files-from=- /path/to/files user@targethost:/path

что здесь происходит?

The find команда начинается с /path/to / files и рекурсивно проходит через все "под" этой точкой. Варианты find условия, которые ограничивают то, что получает на выходе . В этом случае, только вещи -type l (символическую ссылку, согласно man find) будет напечатан, чтобы найти "стандартный выход".

эти файлы становятся "стандартным входом"rsync команды .

дайте ему шанс. На самом деле я не проверен это, но мне кажется, что это должно сработать.


вы можете создать список файлов, кроме ссылки с find input_dir -not -type l, rsync имеет возможность --exclude-from=exlude_file.txt

вы можете сделать это в два шага :

find input_dir -not -type l > /tmp/rsync-exclude.txt

rsync -uvrl --exclude-from=/tmp/rsync-exclude.txt input_dir output_dir

одна строка bash:

rsync -urvl --exclude-from=<(find input_dir -not -type l | sed 's/^..//') input_dir output_dir


Вы можете сделать это более легко, таких как:

find /path/to/dir/ -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;

изменить: Если вы хотите скопировать символические ссылки текущего каталога только без его рекурсивности. Вы можете сделать:

find /path/to/dir/ -maxdepth 1 -type l -exec rsync -avP {} ssh_server:/path/to/server/ \;

Я предпочитаю этот:

find ./ -type l -print > /tmp/list_of_links.txt
rsync -av --files-from=/tmp/list_of_links.txt /path/to/files user@targethost:/path

причина проста. В предыдущей версии я должен был ввести свой пароль с каждым файлом. Таким образом я могу послать все ссылки сразу, только с одним паролем.