Удалить символические ссылки, происходящие из определенного каталога

Папка ~ / .ssh не может быть доступна для записи никому, кроме владельца. Полностью удалите разрешения группы (команда ниже на сервере), и все будет в порядке:

chmod g-rwx ~ylia/.ssh
2
28.10.2017, 19:42
2 ответа

Если у вас GNU или BSD find, это должно подойти:

find -lname '/home/Steven/*' -delete
4
27.01.2020, 21:55

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

for z in /usr/local/bin/*
do
  if [ -h "${z}" ] && readlink -f "${z}" | grep -q '^/home/Steven'
      then rm "${z}"
  fi
done

Команда readlink -fвозвращает полный путь к файлу, на который указывает символическая ссылка. Команда grep -q '^/home/Steven'возвращает значение true, если путь начинается с подстроки '/home/Steven', и значение false в противном случае.

Слово предостережения :здесь есть некоторая двусмысленность, связанная с символическими ссылками, которая может повлиять на результат. Команда readlink -fбудет рекурсивно разрешать ссылку, поэтому приведенная выше команда завершится ошибкой, если файл в каталоге /home/Stevenсам по себе является точкой символической ссылки за пределами этого каталога. Если это нежелательное поведение, вы можете вместо этого использовать команду realpath.

1
27.01.2020, 21:55

Теги

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