Найдите все символьные ссылки на каталог и цель изменения к другому каталогу

У меня есть рабочее решение для Вас. Вы должны:

Откройте Menu-> Settings-> View Settings-> Network Settings-> Настройки управления IP-> ChangeSet Ваше телевизионное имя, имя пользователя, пароль, порт

После этого можно отправить команды так:

echo -e -n 'user\x0dpassword\x0dIAVD4   \x0d' | \
        socat - tcp4:192.168.100.113:10002

Примечание: для вышеупомянутого: (пользователь/передача/IP/порт вставляет с Вашими значениями),

6
21.08.2014, 00:19
2 ответа

GNUly:

find . -lname '/foo*' -printf '%p\0%l\0' |
  awk -vRS='\0' '
    {
      getline target
      sub("^/foo", "/bar", target)
      printf("%s\0%s\0", target, $0)
    }' |
  xargs -r0n2 ln -sfT

Или с недавней версией GNU sed :

find . -lname '/foo*' -printf '%l\0%p\0' |
  sed -z 's|^/foo|/bar|;n' |
  xargs -r0n2 ln -sfT

Помните, что вы потенциально можете повлиять на право собственности на символические ссылки (например, их первоначальный автор не сможет удалить их больше, если они находятся в каталоге, которым они не владеют, но имеют доступ на запись и имеют установленный бит t (например, / tmp )).

Чтобы предотвратить это, вы можете вместо этого использовать GNU tar :

find . -lname '/foo*' -print0 |
  tar --null -T - -cf - --transform='s@^/foo@/bar@' |
  tar xpf -
8
27.01.2020, 20:26

Вот небольшой набор тестов:

mkdir ./tmp1 ./tmp2    
touch ./tmp1/file1 ./tmp2/file2
ln -s ./tmp1 ./tmp3
ls -H ./tmp3

ВЫХОД

file1

Итак, теперь я ...

mount --bind ./tmp2 ./tmp1
ls -H ./tmp3

ВЫХОД

file2

тада! Теперь все ссылки, которые когда-то указывали на ./ tmp1 , будут автоматически указывать на ./ tmp2 - как, собственно, и ./ tmp1 , потому что они та же точка монтирования. Если бы ./ tmp2 содержал дочерние объекты, я мог бы сделать:

mount --rbind ./tmp2 ./tmp1

И рекурсивно - привязать mount деревья. И это даже не касается параметров монтирования ядра Linux vfs общих поддеревьев .

В системе Linux вам не нужно слишком беспокоиться о том, на какой каталог указывает файл, потому что вы можете атомарно повлиять на расположение этого файла, используя дерево монтирования виртуальной файловой системы ядра - оно в вашем распоряжении. И вы можете управлять всем этим в / etc / fstab .

>>/etc/fstab \
printf '%s %s none bind,defaults 0 0\n' \
    "/bar" "/foo"

И ваши проблемы решены.

0
27.01.2020, 20:26

Теги

Похожие вопросы