6

Существует ли команда UNIX для разыменования символической ссылки? Я хотел бы заменить ссылку на копию файла, на который она указывает.

Пример:

$ ls
a
b -> a

$ deref b
$ ls 
a
b

Теперь a и b имеют одинаковое содержимое, но не зависят друг от друга. У меня вопрос, есть ли такая команда deref . Важно: мне не нужно знать, куда указывает b ; команда должна понять это.

4 ответа4

10

Вы можете использовать readlink чтобы узнать имя файла, но вам не нужно!

cp b c
mv c b

Это так просто. Если вы пишете скрипт для этого, вы должны использовать вывод mktemp вместо c чтобы убедиться, что вы не переопределяете уже существующий файл c .

4

Объединение обоих ответов приводит к следующему:

#!/bin/bash

if [ -h "$1" ] ; then
  target=`readlink $1`
  rm "$1"
  cp "$target" "$1"
fi
3

Это возможно путем копирования того, на что указывает символическая ссылка ...

смотрите readlink(1) и cp(1). Обновление: и пока вы на нем: readlink(2).

НО символическая ссылка на самом деле просто символическая (читай: посредством имени цели) ссылка на другой файл - она не разделяет содержимое другого файла. (жесткая ссылка, кто-нибудь?).

0

Там нет такой команды, но вы можете сделать следующее:

rm b
cp a b

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