Я хочу scp
файл на сервер. Файл является символической ссылкой, и на самом деле я хочу скопировать исходный файл. В любом случае, я не хочу отслеживать путь к исходному файлу вручную, потому что его можно заменить. Если я могу получить абсолютный путь к исходному файлу, я могу sep
с ним. Как я могу получить путь?
99
scp
версий по умолчанию используют символические ссылки, не так ли? Вы должны проверить свои и, возможно, сохранить себе работу.scp -r
форсирует следующие символические ссылки.Ответы:
Попробуйте эту строку:
Если
command
в вашей$PATH
переменной, в противном случае вам нужно указать путь, который вы знаете.источник
-f
вернет путь к несуществующей конечной цели, пока существуют промежуточные цели ссылки ... Используйте,-e
чтобы избежать этого, т.е.-e
вернет ноль, если конечная цель не существует.-f
ошибкаreadlink: illegal option -- f
в OSX. Удаление это работало нормально.greadlink
вместо нее .В Linux
readlink
читает содержимое символической ссылки иreadlink -f
следует по символическим ссылкам на символические ссылки на символические ссылки и т. Д., Пока не найдет что-то, что не является символической ссылкой.Это не обязательно для scp: scp всегда следует за символическими ссылками (он всегда копирует содержимое файла, игнорируя метаданные, за исключением того, что
-p
сохраняет время и режимы файлов, когда это возможно).Если вы разочарованы тем, что метаданные scp могут и не могут сохранить, я предлагаю использовать rsync. Без опции rsync копирует содержимое файла, игнорируя метаданные. Обычно используемая опция
-a
сохраняет все метаданные, относящиеся к саду (время, символические ссылки, разрешения и владение), а также есть варианты для сохранения экзотических метаданных, таких как ACL и жесткие ссылки.источник
Я использую команду
ls
,stat
,readlink
.Взять файл
/etc/localtime
в качестве примераоперация
Использование статистики
Использование readlink
Кажется, эта команда
readlink -f
лучше.объяснение
источник
Стат предоставит вам эту информацию:
источник
Вы можете сделать
или вы можете получить что-то подобное в Linux с
Если вы добавляете это в скрипт, проверьте ошибку. Если вы не хотите видеть сообщение об ошибке в том случае, если нет ссылки sym, перейдите к чему-то вроде
источник
Я бы использовал
realpath <symlink>
.Вероятно, то, что вы называете «источником», является «целевым» файлом в соответствии с использованием
ln
:Usage: ln [OPTION]... [-T] TARGET LINK_NAME
источник
readlink
не резал ... тупой макинтош LOLreadlink -f 'which java'
не работает для меняНо это сделал:
источник
`
не'
.. но$()
лучше практиковать в любом случае.$()
лучше практиковаться.command
, но это не рекомендуется. лучше использовать $ (), потому что инкапсуляция $ ($ (команда)) намного проще и не требует специального экранирования. Тогда это предпочтительнее. В вашем первом примере вы использовали обычный апостроф, затем readlink пытается найти файл с именем «which java» с пробелом в его имени. Но вы намерены вызвать команду Java с аргументом java, чтобы найти двоичный исполняемый путь Java.На MAC OX параметр -f не работает, readlink работает без каких-либо параметров.
источник