Как скопировать только символические ссылки через 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
причина проста. В предыдущей версии я должен был ввести свой пароль с каждым файлом. Таким образом я могу послать все ссылки сразу, только с одним паролем.